greatlrd(a)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 base
+                       mov   ebp,esp      // move stack to base
+                       mov   eax,[ebp+8]  // load the ULONG
+                       bswap eax          // swap the ULONG
+                       pop   ebp          // restore the base
+                       ret
 
this 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 base
+                       mov   ebp,esp      // move stack to base
+                       mov   edx,[ebp+8]  // load the higher part of ULONGLONG
+                       mov   eax,[ebp+12] // load the lower part of ULONGLONG
+                       bswap edx          // swap the higher part
+                       bswap eax          // swap the lower part
+                       pop   ebp          // restore the base
+                       ret
 
_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 base
+                       mov   ebp,esp      // move stack to base
+                       mov   eax,[ebp+8]  // load the USHORT
+                       bswap eax          // swap the USHORT, xchg is slow so we use
bswap with rol
+                       rol   eax,16       // make it USHORT
+                       pop   ebp          // restore the base
+                       ret
 
_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
                       ret
or to save a byte...
_UshortByteSwap:
                       mov   ebx,[esp+8]  // load the USHORT
                       mov   al, bh
                       mov   ah, bl
                       ret