Hi Royce3 alex solv it and he also wrote some other rtl* to asm with some commit.
----- Original Message ----- From: "Reuel ben Yisrael" reuel@ev1.net To: ros-dev@reactos.org Sent: Wednesday, August 30, 2006 11:29 PM Subject: Re: [ros-dev] [ros-diffs] [greatlrd] 23826: Wrote RtlUshotByteSwap RtlUlongByteSwap and RtlUlonglongByteSwap to asm code. but we need a C api for header to linking it right. Put the asm version to i386
greatlrd@svn.reactos.org wrote:
Author: greatlrd Date: Thu Aug 31 01:17:53 2006 New Revision: 23826
URL: http://svn.reactos.org/svn/reactos?rev=23826&view=rev Log: Wrote RtlUshotByteSwap RtlUlongByteSwap and RtlUlonglongByteSwap to asm
code.
but we need a C api for header to linking it right. Put the asm
version to i386
sure there must be away to avoid this double-function-call overhead?
+.globl _UlongByteSwap
+.intel_syntax noprefix
+/* FUNCTIONS
***************************************************************/
+_UlongByteSwap:
push ebp // save basemov ebp,esp // move stack to basemov eax,[ebp+8] // load the ULONGbswap eax // swap the ULONGpop ebp // restore the baseretthis should work:
_UlongByteSwap: mov eax,[esp+8] // load the ULONG bswap eax // swap the ULONG ret
+.globl _UlonglongByteSwap
+.intel_syntax noprefix
+/* FUNCTIONS
***************************************************************/
+_UlonglongByteSwap:
push ebp // save basemov ebp,esp // move stack to basemov edx,[ebp+8] // load the higher part of
ULONGLONG
mov eax,[ebp+12] // load the lower part of
ULONGLONG
bswap edx // swap the higher partbswap eax // swap the lower partpop ebp // restore the baseret_UlonglongByteSwap: mov edx,[esp+8] // load the higher part of
ULONGLONG
mov eax,[esp+12] // load the lower part of
ULONGLONG
bswap edx // swap the higher part bswap eax // swap the lower part ret+_UshortByteSwap:
push ebp // save basemov ebp,esp // move stack to basemov eax,[ebp+8] // load the USHORTbswap eax // swap the USHORT, xchg is
slow so we use bswap with rol
rol eax,16 // make it USHORTpop ebp // restore the baseret_UshortByteSwap: mov eax,[esp+8] // load the USHORT bswap eax // swap the USHORT, xchg is slow
so we use bswap with rol
rol eax,16 // make it USHORT retor to save a byte...
_UshortByteSwap: mov ebx,[esp+8] // load the USHORT mov al, bh mov ah, bl ret
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev