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 baseret
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 basemov ebp,esp // move stack to basemov edx,[ebp+8] // load the higher part of ULONGLONGmov eax,[ebp+12] // load the lower part of ULONGLONGbswap 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 rolrol 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 ret
or to save a byte...
_UshortByteSwap: mov ebx,[esp+8] // load the USHORT mov al, bh mov ah, bl ret