Author: ion
Date: Thu Aug 31 05:20:55 2006
New Revision: 23830
URL:
http://svn.reactos.org/svn/reactos?rev=23830&view=rev
Log:
- Write new, optimized, small, working and clean functions (fixes booting, last few
commits broke it for me):
- RtlCompareMemory
- RtlCompareMemoryUlong
- RtlFillMemory
- RtlFillMemoryUlong
- RtlFillMemoryUlongUlong
- RtlMoveMemory
- RtlZeroMemory
- RtlPrefetchMemoryNonTemporal
- RtlUshortByteSwap
- RtlUlongByteSwap
- RtlUlonglongByteSwap
Added:
trunk/reactos/lib/rtl/i386/rtlmem.s
trunk/reactos/lib/rtl/i386/rtlswap.S
Removed:
trunk/reactos/lib/rtl/i386/comparememory_asm.s
trunk/reactos/lib/rtl/i386/comparememory_ulong_asm.s
trunk/reactos/lib/rtl/i386/fillmemory_asm.s
trunk/reactos/lib/rtl/i386/fillmemory_ulong_asm.s
trunk/reactos/lib/rtl/i386/memgeni386.c
trunk/reactos/lib/rtl/i386/prefetchmemory_asm.s
trunk/reactos/lib/rtl/i386/rtlulongbyteswap.s
trunk/reactos/lib/rtl/i386/rtlulonglongbyteswap.s
trunk/reactos/lib/rtl/i386/rtlushortbyteswap.s
trunk/reactos/lib/rtl/mem.c
trunk/reactos/lib/rtl/memgen.c
Modified:
trunk/reactos/lib/rtl/rtl.rbuild
Removed: trunk/reactos/lib/rtl/i386/comparememory_asm.s
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/comparememory…
==============================================================================
--- trunk/reactos/lib/rtl/i386/comparememory_asm.s (original)
+++ trunk/reactos/lib/rtl/i386/comparememory_asm.s (removed)
@@ -1,44 +1,0 @@
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * FILE: comparememory_asm.S
- * PURPOSE: Memory functions
- * PROGRAMMERS: Patrick Baggett (baggett.patrick(a)gmail.com)
- * Alex Ionescu (alex(a)relsoft.net)
- * Magnus Olsen (magnusolsen(a)greatlord.com)
- */
-
-.intel_syntax noprefix
-
-/* GLOBALS ****************************************************************/
-
-.globl _RtlCompareMemory@12 // [4] (no bug)
-
-/* FUNCTIONS ***************************************************************/
-
-_RtlCompareMemory@12:
- xor eax,eax // count = 0
- mov ecx, dword [esp + 12 ] // ecx = Length
- cmp ecx,0 // if (Length==0) goto .zero
- je 3f
-
- push edi// register that does not to be save eax,ecx,edx to
- push ebx// the stack for protetion
-
- mov edi, dword [esp + (4 + 8)] // edi = Destination
- mov edx, dword [esp + (8 + 8)] // edx = Source
-
-1:
- mov bl,byte [edi + eax ] // if (src[count]!=des[count]) goto .pop_zero
- cmp byte [edx + eax ],bl
- jne 2f
-
- inc eax // count = count + 1
- dec ecx // Length = Length - 1
- jnz 1b // if (Length!=0) goto .loop_1byte
-
-2:
- pop ebx // restore regiester
- pop edi
-3:
- ret 12 // return count
Removed: trunk/reactos/lib/rtl/i386/comparememory_ulong_asm.s
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/comparememory…
==============================================================================
--- trunk/reactos/lib/rtl/i386/comparememory_ulong_asm.s (original)
+++ trunk/reactos/lib/rtl/i386/comparememory_ulong_asm.s (removed)
@@ -1,44 +1,0 @@
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * FILE: comparememory_ulong_asm.S
- * PURPOSE: Memory functions
- * PROGRAMMERS: Patrick Baggett (baggett.patrick(a)gmail.com)
- * Alex Ionescu (alex(a)relsoft.net)
- * Magnus Olsen (magnusolsen(a)greatlord.com)
- */
-
-.intel_syntax noprefix
-
-/* GLOBALS ****************************************************************/
-
-.globl _RtlCompareMemoryUlong@12 // [5] (no bug)
-
-/* FUNCTIONS ***************************************************************/
-
-_RtlCompareMemoryUlong@12:
- xor eax,eax
- mov ecx, dword [esp + 8 ] // ecx = Length
- shr ecx,2 // Length / sizeof(ULONG)
- jz 1f // if (Length==0) goto .zero
-
- push edi// register that does not to be save eax,ecx,edx to
- push ebx// the stack for protetion
-
- mov edi, dword [esp + (4 + 8)] // edx = Destination
- mov eax, dword [esp + (12 + 8)] // ebx = value
- mov ebx,ecx
- cld
- repe scasd
-
- inc ecx
- mov eax,ebx
-
- sub eax,ecx
- shl eax,2
-
- pop ebx
- pop edi
-
-1:
- ret 12
Removed: trunk/reactos/lib/rtl/i386/fillmemory_asm.s
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/fillmemory_as…
==============================================================================
--- trunk/reactos/lib/rtl/i386/fillmemory_asm.s (original)
+++ trunk/reactos/lib/rtl/i386/fillmemory_asm.s (removed)
@@ -1,31 +1,0 @@
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * FILE: fillmemory_asm.S
- * PURPOSE: Memory functions
- * PROGRAMMERS: Patrick Baggett (baggett.patrick(a)gmail.com)
- * Alex Ionescu (alex(a)relsoft.net)
- * Magnus Olsen (magnusolsen(a)greatlord.com)
- */
-
-.intel_syntax noprefix
-
-/* GLOBALS ****************************************************************/
-
-.globl _RtlFillMemory@12 //[4] (no bug)
-
-/* FUNCTIONS ***************************************************************/
-
-_RtlFillMemory@12:
- mov ecx,dword [esp + 8 ] // ecx = Length
- cmp ecx,0// if (Length==0) goto .zero
- je 2f
-
- mov edx, dword [esp + 4] // edx = Destination
- mov eax, dword [esp + 12] // eax = fill
-1:
- mov byte [edx + ecx -1],al // src[Length - 1] = fill
- dec ecx // Length = Length - 1
- jnz 1b // if (Length!=0) goto .loop
-2:
- ret 12 // return
Removed: trunk/reactos/lib/rtl/i386/fillmemory_ulong_asm.s
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/fillmemory_ul…
==============================================================================
--- trunk/reactos/lib/rtl/i386/fillmemory_ulong_asm.s (original)
+++ trunk/reactos/lib/rtl/i386/fillmemory_ulong_asm.s (removed)
@@ -1,31 +1,0 @@
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * FILE: fillmemory_ulong_asm.S
- * PURPOSE: Memory functions
- * PROGRAMMERS: Patrick Baggett (baggett.patrick(a)gmail.com)
- * Alex Ionescu (alex(a)relsoft.net)
- * Magnus Olsen (magnusolsen(a)greatlord.com)
- */
-
-.intel_syntax noprefix
-
-/* GLOBALS ****************************************************************/
-
-.globl _RtlFillMemoryUlong@12 // (no bug) (max optimze code)
-
-/* FUNCTIONS ***************************************************************/
-
-_RtlFillMemoryUlong@12:
- mov ecx, dword [esp + 8 ] // Length
- shr ecx,2// Length = Length / sizeof(ULONG)
- jz 1f // if (Length==0) goto .zero
-
- push edi
- mov edi, dword [esp + (4 + 4)] // Destination
- mov eax, dword [esp + (12 + 4)] // Fill
- cld
- rep stosd// while (Length>0) {Destination[Length-1]=Fill// Length = Length - 1}
- pop edi
-1:
- ret 12
Removed: trunk/reactos/lib/rtl/i386/memgeni386.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/memgeni386.c?…
==============================================================================
--- trunk/reactos/lib/rtl/i386/memgeni386.c (original)
+++ trunk/reactos/lib/rtl/i386/memgeni386.c (removed)
@@ -1,75 +1,0 @@
-/* COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS system libraries
- * FILE: lib/rtl/mem.c
- * PURPOSE: Memory functions
- * PROGRAMMER: David Welch (welch(a)mcmail.com)
- */
-
-/* INCLUDES *****************************************************************/
-
-#include <rtl.h>
-
-#define NDEBUG
-#include <debug.h>
-
-#undef RtlUlonglongByteSwap
-#undef RtlUlongByteSwap
-#undef RtlUshortByteSwap
-
-USHORT UshortByteSwap (IN USHORT Source);
-ULONG UlongByteSwap (IN ULONG Source);
-ULONGLONG UlonglongByteSwap (IN ULONGLONG Source);
-
-/*************************************************************************
- * RtlUshortByteSwap
- *
- * Swap the bytes of an unsigned short value.
- *
- *
- * @implemented
- */
-USHORT FASTCALL
-RtlUshortByteSwap (IN USHORT Source)
-{
- return UshortByteSwap (Source);
-}
-
-
-
-/*************************************************************************
- * RtlUlongByteSwap [NTDLL.@]
- *
- * Swap the bytes of an unsigned int value.
- *
- *
- * @implemented
- */
-ULONG
-FASTCALL
-RtlUlongByteSwap(
- IN ULONG Source
-)
-{
- return UlongByteSwap(Source);
-}
-
-
-/*************************************************************************
- * RtlUlonglongByteSwap
- *
- * Swap the bytes of an unsigned long long value.
- *
- * PARAMS
- * i [I] Value to swap bytes of
- *
- *
- * @implemented
- */
-ULONGLONG FASTCALL
-RtlUlonglongByteSwap (IN ULONGLONG Source)
-{
- return UlonglongByteSwap(Source);
-}
-
-
-/* EOF */
Removed: trunk/reactos/lib/rtl/i386/prefetchmemory_asm.s
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/prefetchmemor…
==============================================================================
--- trunk/reactos/lib/rtl/i386/prefetchmemory_asm.s (original)
+++ trunk/reactos/lib/rtl/i386/prefetchmemory_asm.s (removed)
@@ -1,30 +1,0 @@
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * FILE: prefetchmemory_asm.S
- * PURPOSE: Memory functions
- * PROGRAMMERS: Patrick Baggett (baggett.patrick(a)gmail.com)
- * Alex Ionescu (alex(a)relsoft.net)
- * Magnus Olsen (magnusolsen(a)greatlord.com)
- */
-
-.intel_syntax noprefix
-
-/* GLOBALS ****************************************************************/
-
-.globl @RtlPrefetchMemoryNonTemporal@8
-
-/* FUNCTIONS ***************************************************************/
-
-@RtlPrefetchMemoryNonTemporal@8:
- ret /* Overwritten by ntoskrnl/ke/i386/kernel.c if SSE is supported (see
Ki386SetProcessorFeatures() ) */
-
- mov eax, [_Ke386CacheAlignment] // Get cache line size
-
- // This is fastcall, so ecx = address, edx = size
-fetch_next_line:
- prefetchnta byte ptr [ecx] // prefechnta(address)
- add ecx, eax // address = address + cache_line_size
- sub edx, eax // count = count - cache_line_size
- ja fetch_next_line // goto fetch_next_line
- ret
Added: trunk/reactos/lib/rtl/i386/rtlmem.s
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/rtlmem.s?rev=…
==============================================================================
--- trunk/reactos/lib/rtl/i386/rtlmem.s (added)
+++ trunk/reactos/lib/rtl/i386/rtlmem.s Thu Aug 31 05:20:55 2006
@@ -1,0 +1,312 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Run-Time Library
+ * PURPOSE: Memory functions
+ * FILE: lib/rtl/i386/rtlswap.S
+ * PROGRAMER: Alex Ionescu (alex.ionescu(a)reactos.org)
+ */
+
+.intel_syntax noprefix
+
+/* GLOBALS *******************************************************************/
+
+.globl _RtlCompareMemory@12
+.globl _RtlCompareMemoryUlong@12
+.globl _RtlFillMemory@12
+.globl _RtlFillMemoryUlong@12
+.globl _RtlMoveMemory@12
+.globl _RtlZeroMemory@8
+.globl @RtlPrefetchMemoryNonTemporal@8
+
+/* FUNCTIONS *****************************************************************/
+
+.func RtlCompareMemory@12
+_RtlCompareMemory@12:
+
+ /* Save volatiles */
+ push esi
+ push edi
+
+ /* Clear direction flag and load pointers and size in ULONGs */
+ cld
+ mov esi, [esp+12]
+ mov edi, [esp+16]
+ mov ecx, [esp+20]
+ shr ecx, 2
+ jz NoUlongs
+
+ /* Compare the ULONGs */
+ repe cmpsd
+ jnz NotEqual
+
+NoUlongs:
+
+ /* Compare what's left */
+ mov ecx, [esp+20]
+ and ecx, 3
+ jz NoneLeft
+ repe cmpsb
+ jnz NotEqual2
+
+NoneLeft:
+
+ /* We're done, return full count */
+ mov eax, [esp+20]
+ pop edi
+ pop esi
+ ret 12
+
+NotEqual:
+ /* Compare the last ULONG */
+ sub esi, 4
+ sub edi, 4
+ mov ecx, 5
+ repe cmpsb
+
+NotEqual2:
+
+ /* Remember how many mathced */
+ dec esi
+ sub esi, [esp+20]
+
+ /* Return count */
+ mov eax, esi
+ pop edi
+ pop esi
+ ret 12
+.endfunc
+
+.func RtlCompareMemoryUlong@12
+_RtlCompareMemoryUlong@12:
+
+ /* Get pointers and size in ULONGs */
+ push edi
+ mov edi, [esp+8]
+ mov ecx, [esp+12]
+ mov eax, [esp+16]
+ shr ecx, 2
+
+ /* Do the compare and check result */
+ repe scasd
+ jz Done
+ sub esi, 4
+
+ /* Return count */
+Done:
+ sub edi, [esp+8]
+ mov eax, edi
+ pop edi
+ ret 12
+.endfunc
+
+.func RtlFillMemory@12
+_RtlFillMemory@12:
+
+ /* Get pointers and size */
+ push edi
+ mov edi, [esp+8]
+ mov ecx, [esp+12]
+
+ /* Get pattern */
+ mov al, [esp+16]
+ mov ah, al
+ shr eax, 16
+ mov al, [esp+16]
+ mov ah, al
+
+ /* Clear direction flag and set ULONG size and UCHAR remainder */
+ cld
+ mov edx, ecx
+ and edx, 3
+ shr ecx, 2
+
+ /* Do the fill */
+ rep stosd
+ or ecx, ecx
+ jnz ByteFill
+
+ /* Return */
+ pop edi
+ ret 12
+
+ByteFill:
+ /* Fill what's left */
+ rep stosb
+ pop edi
+ ret 12
+.endfunc
+
+.func RtlFillMemoryUlong@12
+_RtlFillMemoryUlong@12:
+
+ /* Get pointer, size and pattern */
+ push edi
+ mov edi, [esp+8]
+ mov ecx, [esp+12]
+ mov eax, [esp+16]
+ shr ecx, 2
+
+ /* Do the fill and return */
+ rep stosd
+ pop edi
+ ret 12
+.endfunc
+
+.func RtlFillMemoryUlonglong@16
+_RtlFillMemoryUlonglong@16:
+
+ /* Save volatiles */
+ push edi
+ push esi
+
+ /* Get pointer, size and pattern */
+ mov ecx, [esp+16]
+ mov esi, [esp+12]
+ mov eax, [esp+20]
+ shr ecx, 2
+ sub ecx, 2
+
+ /* Save the first part */
+ mov [esi], eax
+
+ /* Read second part */
+ mov eax, [esp+24]
+ lea edi, [esi+8]
+ mov [esi+4], eax
+
+ /* Do the fill and return */
+ rep movsd
+ pop esi
+ pop edi
+ ret 16
+.endfunc
+
+.func RtlZeroMemory@8
+_RtlZeroMemory@8:
+
+ /* Get pointers and size */
+ push edi
+ mov edi, [esp+8]
+ mov ecx, [esp+12]
+
+ /* Get pattern */
+ xor eax, eax
+
+ /* Clear direction flag and set ULONG size and UCHAR remainder */
+ cld
+ mov edx, ecx
+ and edx, 3
+ shr ecx, 2
+
+ /* Do the fill */
+ rep stosd
+ or ecx, ecx
+ jnz ByteZero
+
+ /* Return */
+ pop edi
+ ret 8
+
+ByteZero:
+ /* Fill what's left */
+ rep stosb
+ pop edi
+ ret 8
+.endfunc
+
+.func RtlMoveMemory@12
+_RtlMoveMemory@12:
+
+ /* Save volatiles */
+ push esi
+ push edi
+
+ /* Get pointers and size */
+ mov esi, [esp+16]
+ mov edi, [esp+12]
+ mov ecx, [esp+20]
+ cld
+
+ /* Check for overlap */
+ cmp esi, edi
+ jbe Overlap
+
+ /* Set ULONG size and UCHAR remainder */
+DoMove:
+ mov edx, ecx
+ and edx, 3
+ shr ecx, 2
+
+ /* Do the move */
+ rep movsd
+ or ecx, ecx
+ jnz ByteMove
+
+ /* Return */
+ pop edi
+ pop esi
+ ret 12
+
+ByteMove:
+ /* Move what's left */
+ rep stosb
+
+DoneMove:
+ pop edi
+ pop esi
+ ret 12
+
+Overlap:
+ /* Avoid full overlap */
+ jz DoneMove
+
+ /* Remove overlap */
+ mov eax, edi
+ sub eax, esi
+ cmp ecx, eax
+ jbe DoMove
+
+ /* Set direction flag for backward move */
+ std
+
+ /* Can only move some bytes, calculate how many */
+ add esi, ecx
+ add edi, ecx
+ dec esi
+ dec edi
+
+ /* Do the move, reset flag and return */
+ rep movsb
+ cld
+ jmp DoneMove
+.endfunc
+
+.func @RtlPrefetchMemoryNonTemporal@8, @RtlPrefetchMemoryNonTemporal@8
+@RtlPrefetchMemoryNonTemporal@8:
+
+ /*
+ * Overwritten by ntoskrnl/ke/i386/kernel.c if SSE is supported
+ * (see Ki386SetProcessorFeatures())
+ */
+ ret
+
+ /* Get granularity */
+ mov eax, [_Ke386CacheAlignment]
+
+FetchLine:
+
+ /* Prefetch this line */
+ prefetchnta byte ptr [ecx]
+
+ /* Update address and count */
+ add ecx, eax
+ sub edx, eax
+
+ /* Keep looping for the next line, or return if done */
+ ja FetchLine
+ ret
+.endfunc
+
+/* FIXME: HACK */
+_Ke386CacheAlignment:
+ .long 0x40
Added: trunk/reactos/lib/rtl/i386/rtlswap.S
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/rtlswap.S?rev…
==============================================================================
--- trunk/reactos/lib/rtl/i386/rtlswap.S (added)
+++ trunk/reactos/lib/rtl/i386/rtlswap.S Thu Aug 31 05:20:55 2006
@@ -1,0 +1,53 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Run-Time Library
+ * PURPOSE: Byte swap functions
+ * FILE: lib/rtl/i386/rtlswap.S
+ * PROGRAMER: Alex Ionescu (alex.ionescu(a)reactos.org)
+ */
+
+.intel_syntax noprefix
+
+.globl @RtlUshortByteSwap@4
+.globl @RtlUlongByteSwap@4
+.globl @RtlUlonglongByteSwap@8
+
+/* FUNCTIONS ***************************************************************/
+
+.func @RtlUshortByteSwap@4, @RtlUshortByteSwap@4
+@RtlUshortByteSwap@4:
+
+ /* Swap high and low bits */
+ mov ah, cl
+ mov al, ch
+ ret
+.endfunc
+
+.func @RtlUlongByteSwap@4, @RtlUlongByteSwap@4
+@RtlUlongByteSwap@4:
+
+ /* Swap high and low bits */
+ mov eax, ecx
+ bswap eax
+ ret
+.endfunc
+
+.func @RtlUlonglongByteSwap@8, @RtlUlonglongByteSwap@8
+@RtlUlonglongByteSwap@8:
+
+ /* Get 64-bit integer */
+ mov edx, [esp+8]
+ mov eax, [esp+4]
+
+ /* Swap it */
+ bswap edx
+ bswap eax
+
+ /* Return it */
+ mov ecx, eax
+ mov eax, edx
+ mov edx, ecx
+ ret
+.endfunc
+
+
Removed: trunk/reactos/lib/rtl/i386/rtlulongbyteswap.s
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/rtlulongbytes…
==============================================================================
--- trunk/reactos/lib/rtl/i386/rtlulongbyteswap.s (original)
+++ trunk/reactos/lib/rtl/i386/rtlulongbyteswap.s (removed)
@@ -1,21 +1,0 @@
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * PURPOSE: Run-Time Library
- * FILE: lib/rtl/i386/RtlUlongByteSwap.S
- * PROGRAMER: Magnus Olsen (magnus(a)greatlord.com)
- */
-
-.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
Removed: trunk/reactos/lib/rtl/i386/rtlulonglongbyteswap.s
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/rtlulonglongb…
==============================================================================
--- trunk/reactos/lib/rtl/i386/rtlulonglongbyteswap.s (original)
+++ trunk/reactos/lib/rtl/i386/rtlulonglongbyteswap.s (removed)
@@ -1,23 +1,0 @@
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * PURPOSE: Run-Time Library
- * FILE: lib/rtl/i386/RtlUlonglongByteSwap.S
- * PROGRAMER: Magnus Olsen (magnus(a)greatlord.com)
- */
-
-.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
Removed: trunk/reactos/lib/rtl/i386/rtlushortbyteswap.s
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/rtlushortbyte…
==============================================================================
--- trunk/reactos/lib/rtl/i386/rtlushortbyteswap.s (original)
+++ trunk/reactos/lib/rtl/i386/rtlushortbyteswap.s (removed)
@@ -1,22 +1,0 @@
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * PURPOSE: Run-Time Library
- * FILE: lib/rtl/i386/RtlUlongByteSwap.S
- * PROGRAMER: Magnus Olsen (magnus(a)greatlord.com)
- */
-
-.globl _UshortByteSwap
-
-.intel_syntax noprefix
-
-/* FUNCTIONS ***************************************************************/
-
-_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
Removed: trunk/reactos/lib/rtl/mem.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/mem.c?rev=23829&am…
==============================================================================
--- trunk/reactos/lib/rtl/mem.c (original)
+++ trunk/reactos/lib/rtl/mem.c (removed)
@@ -1,173 +1,0 @@
-/* COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS system libraries
- * FILE: lib/rtl/mem.c
- * PURPOSE: Memory functions
- * PROGRAMMER: David Welch (welch(a)mcmail.com)
- */
-
-/* INCLUDES *****************************************************************/
-
-#include <rtl.h>
-
-#define NDEBUG
-#include <debug.h>
-
-
-/* FUNCTIONS *****************************************************************/
-
-/******************************************************************************
- * RtlCompareMemory [NTDLL.@]
- *
- * Compare one block of memory with another
- *
- * PARAMS
- * Source1 [I] Source block
- * Source2 [I] Block to compare to Source1
- * Length [I] Number of bytes to fill
- *
- * RETURNS
- * The length of the first byte at which Source1 and Source2 differ, or Length
- * if they are the same.
- *
- * @implemented
- */
-SIZE_T NTAPI
-RtlCompareMemory(IN const VOID *Source1,
- IN const VOID *Source2,
- IN SIZE_T Length)
-{
- SIZE_T i;
- for(i=0; (i<Length) && (((PUCHAR)Source1)[i]==((PUCHAR)Source2)[i]); i++)
- ;
- return i;
-}
-
-
-/*
- * @implemented
- */
-ULONG
-NTAPI
-RtlCompareMemoryUlong (
- PVOID Source,
- ULONG Length,
- ULONG Value
-)
-/*
- * FUNCTION: Compares a block of ULONGs with an ULONG and returns the number of equal
bytes
- * ARGUMENTS:
- * Source = Block to compare
- * Length = Number of bytes to compare
- * Value = Value to compare
- * RETURNS: Number of equal bytes
- */
-{
- PULONG ptr = (PULONG)Source;
- ULONG len = Length / sizeof(ULONG);
- ULONG i;
-
- for (i = 0; i < len; i++)
- {
- if (*ptr != Value)
- break;
- ptr++;
- }
-
- return (ULONG)((PCHAR)ptr - (PCHAR)Source);
-}
-
-
-#undef RtlFillMemory
-/*
- * @implemented
- */
-VOID
-NTAPI
-RtlFillMemory (
- PVOID Destination,
- ULONG Length,
- UCHAR Fill
-)
-{
- memset(Destination, Fill, Length);
-}
-
-
-
-/*
- * @implemented
- */
-VOID
-NTAPI
-RtlFillMemoryUlong (
- PVOID Destination,
- ULONG Length,
- ULONG Fill
-)
-{
- PULONG Dest = Destination;
- ULONG Count = Length / sizeof(ULONG);
-
- while (Count > 0)
- {
- *Dest = Fill;
- Dest++;
- Count--;
- }
-}
-
-
-#undef RtlMoveMemory
-/*
- * @implemented
- */
-VOID
-NTAPI
-RtlMoveMemory (
- PVOID Destination,
- CONST VOID * Source,
- ULONG Length
-)
-{
- memmove (
- Destination,
- Source,
- Length
- );
-}
-
-/*
-* @implemented
-*/
-VOID
-FASTCALL
-RtlPrefetchMemoryNonTemporal(
- IN PVOID Source,
- IN SIZE_T Length
- )
-{
- /* By nature of prefetch, this is non-portable. */
- (void)Source;
- (void)Length;
-}
-
-
-#undef RtlZeroMemory
-/*
- * @implemented
- */
-VOID
-NTAPI
-RtlZeroMemory (
- PVOID Destination,
- ULONG Length
-)
-{
- RtlFillMemory (
- Destination,
- Length,
- 0
- );
-}
-
-/* EOF */
Removed: trunk/reactos/lib/rtl/memgen.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/memgen.c?rev=23829…
==============================================================================
--- trunk/reactos/lib/rtl/memgen.c (original)
+++ trunk/reactos/lib/rtl/memgen.c (removed)
@@ -1,77 +1,0 @@
-/* COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS system libraries
- * FILE: lib/rtl/mem.c
- * PURPOSE: Memory functions
- * PROGRAMMER: David Welch (welch(a)mcmail.com)
- */
-
-/* INCLUDES *****************************************************************/
-
-#include <rtl.h>
-
-#define NDEBUG
-#include <debug.h>
-
-#undef RtlUlonglongByteSwap
-#undef RtlUlongByteSwap
-#undef RtlUshortByteSwap
-
-/*************************************************************************
- * RtlUshortByteSwap
- *
- * Swap the bytes of an unsigned short value.
- *
- * NOTES
- * Based on the inline versions in Wine winternl.h
- *
- * @implemented
- */
-USHORT FASTCALL
-RtlUshortByteSwap (IN USHORT Source)
-{
- return (Source >> 8) | (Source << 8);
-}
-
-
-
-/*************************************************************************
- * RtlUlongByteSwap [NTDLL.@]
- *
- * Swap the bytes of an unsigned int value.
- *
- * NOTES
- * Based on the inline versions in Wine winternl.h
- *
- * @implemented
- */
-ULONG
-FASTCALL
-RtlUlongByteSwap(
- IN ULONG Source
-)
-{
- return ((ULONG)RtlUshortByteSwap((USHORT)Source) << 16) |
RtlUshortByteSwap((USHORT)(Source >> 16));
-}
-
-
-/*************************************************************************
- * RtlUlonglongByteSwap
- *
- * Swap the bytes of an unsigned long long value.
- *
- * PARAMS
- * i [I] Value to swap bytes of
- *
- * RETURNS
- * The value with its bytes swapped.
- *
- * @implemented
- */
-ULONGLONG FASTCALL
-RtlUlonglongByteSwap (IN ULONGLONG Source)
-{
- return ((ULONGLONG) RtlUlongByteSwap (Source) << 32) | RtlUlongByteSwap
(Source>>32);
-}
-
-
-/* EOF */
Modified: trunk/reactos/lib/rtl/rtl.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/rtl.rbuild?rev=238…
==============================================================================
--- trunk/reactos/lib/rtl/rtl.rbuild (original)
+++ trunk/reactos/lib/rtl/rtl.rbuild Thu Aug 31 05:20:55 2006
@@ -22,37 +22,24 @@
<file>aullshr_asm.s</file>
<file>ceil_asm.s</file>
<file>chkstk_asm.s</file>
- <file>comparememory_asm.s</file>
- <file>comparememory_ulong_asm.s</file>
<file>cos_asm.s</file>
<file>debug_asm.S</file>
<file>except_asm.s</file>
<file>exception.c</file>
<file>fabs_asm.s</file>
- <file>fillmemory_asm.s</file>
- <file>fillmemory_ulong_asm.s</file>
<file>floor_asm.s</file>
<file>ftol_asm.s</file>
<file>log_asm.s</file>
<file>random_asm.S</file>
- <file>memgeni386.c</file>
- <file>rtlushortbyteswap.s</file>
- <file>rtlulongbyteswap.s</file>
- <file>rtlulonglongbyteswap.s</file>
+ <file>rtlswap.S</file>
+ <file>rtlmem.S</file>
<file>pow_asm.s</file>
- <file>prefetchmemory_asm.s</file>
<file>res_asm.s</file>
<file>sin_asm.s</file>
<file>sqrt_asm.s</file>
<file>tan_asm.s</file>
- <file>zeromemory_asm.s</file>
</directory>
</if>
-
- <ifnot property="ARCH" value="i386">
- <file>memgen.c</file>
- </ifnot>
-
<file>access.c</file>
<file>acl.c</file>
<file>atom.c</file>
@@ -73,7 +60,6 @@
<file>handle.c</file>
<file>heap.c</file>
<file>image.c</file>
- <file>mem.c</file>
<file>message.c</file>
<file>largeint.c</file>
<file>luid.c</file>