Hi
Royce3
alex solv it
and he also wrote some other rtl* to asm
with some commit.
----- Original Message -----
From: "Reuel ben Yisrael" <reuel(a)ev1.net>
To: <ros-dev(a)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(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
_______________________________________________
Ros-dev mailing list
Ros-dev(a)reactos.org
http://www.reactos.org/mailman/listinfo/ros-dev