Author: tkreuzer Date: Fri Feb 5 03:51:38 2010 New Revision: 45428
URL: http://svn.reactos.org/svn/reactos?rev=45428&view=rev Log: [RTL] Make slist.S ML64 compatible
Modified: branches/ros-amd64-bringup/reactos/lib/rtl/amd64/slist.S
Modified: branches/ros-amd64-bringup/reactos/lib/rtl/amd64/slist.S URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/rt... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/rtl/amd64/slist.S [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/rtl/amd64/slist.S [iso-8859-1] Fri Feb 5 03:51:38 2010 @@ -9,44 +9,46 @@ #include <reactos/asm.h> #include <ndk/amd64/asm.h>
-#define SLIST8A_DEPTH_MASK 0x000000000000FFFF -#define SLIST8A_DEPTH_INC 0x0000000000000001 -#define SLIST8A_SEQUENCE_MASK 0x0000000001FF0000 -#define SLIST8A_SEQUENCE_INC 0x0000000000010000 -#define SLIST8A_NEXTENTRY_MASK 0xFFFFFFFFFE000000 +#define SLIST8A_DEPTH_MASK HEX(000000000000FFFF) +#define SLIST8A_DEPTH_INC HEX(0000000000000001) +#define SLIST8A_SEQUENCE_MASK HEX(0000000001FF0000) +#define SLIST8A_SEQUENCE_INC HEX(0000000000010000) +#define SLIST8A_NEXTENTRY_MASK HEX(FFFFFFFFFE000000) #define SLIST8A_NEXTENTRY_SHIFT 21 -#define SLIST8B_HEADERTYPE_MASK 0x0000000000000001 -#define SLIST8B_INIT_MASK 0x0000000000000002 -#define SLIST8B_REGION_MASK 0xE000000000000000 -#define SLIST8_POINTER_MASK 0x000007FFFFFFFFF0 - -#define SLIST16A_DEPTH_MASK 0x000000000000FFFF -#define SLIST16A_DEPTH_INC 0x0000000000000001 -#define SLIST16A_SEQUENCE_MASK 0xFFFFFFFFFFFF0000 -#define SLIST16A_SEQUENCE_INC 0x0000000000010000 -#define SLIST16B_HEADERTYPE_MASK 0x0000000000000001 -#define SLIST16B_INIT_MASK 0x0000000000000002 -#define SLIST16B_NEXTENTY_MASK 0xFFFFFFFFFFFFFFF0 +#define SLIST8B_HEADERTYPE_MASK HEX(0000000000000001) +#define SLIST8B_INIT_MASK HEX(0000000000000002) +#define SLIST8B_REGION_MASK HEX(E000000000000000) +#define SLIST8_POINTER_MASK HEX(000007FFFFFFFFF0) + +#define SLIST16A_DEPTH_MASK HEX(000000000000FFFF) +#define SLIST16A_DEPTH_INC HEX(0000000000000001) +#define SLIST16A_SEQUENCE_MASK HEX(FFFFFFFFFFFF0000) +#define SLIST16A_SEQUENCE_INC HEX(0000000000010000) +#define SLIST16B_HEADERTYPE_MASK HEX(0000000000000001) +#define SLIST16B_INIT_MASK HEX(0000000000000002) +#define SLIST16B_NEXTENTY_MASK HEX(FFFFFFFFFFFFFFF0)
/* FUNCTIONS ****************************************************************/
-.global ExpInterlockedPopEntrySList -.global ExpInterlockedPopEntrySListResume -.global ExpInterlockedPopEntrySListFault -.global ExpInterlockedPopEntrySListEnd -.global ExpInterlockedPopEntrySListResume16 -.global ExpInterlockedPopEntrySListFault16 -.global ExpInterlockedPopEntrySListEnd16 -.global ExpInterlockedPushEntrySList -.global ExpInterlockedFlushSList +.code64 + +PUBLIC ExpInterlockedPopEntrySList +PUBLIC ExpInterlockedPopEntrySListResume +PUBLIC ExpInterlockedPopEntrySListFault +PUBLIC ExpInterlockedPopEntrySListEnd +PUBLIC ExpInterlockedPopEntrySListResume16 +PUBLIC ExpInterlockedPopEntrySListFault16 +PUBLIC ExpInterlockedPopEntrySListEnd16 +PUBLIC ExpInterlockedPushEntrySList +PUBLIC ExpInterlockedFlushSList
/* PSLIST_ENTRY * NTAPI * RtlInterlockedPopEntrySList( * IN PSLIST_HEADER ListHead); */ -.proc RtlInterlockedPopEntrySList +RtlInterlockedPopEntrySList: ExpInterlockedPopEntrySList:
/* Load ListHead->Region into rdx */ @@ -70,10 +72,10 @@
/* Copy Depth and Sequence number and adjust Depth */ lea r8, [rax - SLIST8A_DEPTH_INC] - and r8, SLIST8A_SEQUENCE_MASK | SLIST8A_DEPTH_MASK + and r8, (SLIST8A_SEQUENCE_MASK OR SLIST8A_DEPTH_MASK)
/* Create a pointer template from rcx in rdx */ - mov rdx, ~SLIST8_POINTER_MASK + mov rdx, (NOT SLIST8_POINTER_MASK) and rdx, rcx
/* Shift the NextEntry pointer */ @@ -106,7 +108,7 @@ shr rax, SLIST8A_NEXTENTRY_SHIFT
/* Use rcx as pointer template */ - mov rdx, ~SLIST8_POINTER_MASK + mov rdx, (NOT SLIST8_POINTER_MASK) and rdx, rcx
/* Combine result and return */ @@ -139,7 +141,7 @@ mov rcx, [r9]
/* Set ListHead->HeaderType = 1 and ListHead->Init = 1 */ - or rcx, 0x3 + or rcx, 3
/* Copy Depth and Sequence number and adjust Depth */ lea rbx, [rax - SLIST16A_DEPTH_INC] @@ -164,8 +166,6 @@ xor rax, rax pop rbx ret - -.endp RtlInterlockedPopEntrySList
/* PSLIST_ENTRY @@ -174,7 +174,7 @@ * IN PSLIST_HEADER ListHead, * IN PSLIST_ENTRY ListEntry); */ -.proc RtlInterlockedPushEntrySList +RtlInterlockedPushEntrySList: ExpInterlockedPushEntrySList:
/* Load ListHead->Alignment into rax */ @@ -200,7 +200,7 @@ shr r8, SLIST8A_NEXTENTRY_SHIFT
/* Create a pointer template from rcx in rdx */ - mov r9, ~SLIST8_POINTER_MASK + mov r9, (NOT SLIST8_POINTER_MASK) and r9, rcx
/* Combine to new pointer and save as ListEntry->NextEntry */ @@ -217,7 +217,7 @@
/* Copy and adjust depth and sequence number */ lea r9, [rax + SLIST8A_DEPTH_INC + SLIST8A_SEQUENCE_INC] - and r9, SLIST8A_SEQUENCE_MASK | SLIST8A_DEPTH_MASK + and r9, SLIST8A_SEQUENCE_MASK OR SLIST8A_DEPTH_MASK
/* Combine to exchange value in r8 */ or r8, r9 @@ -247,7 +247,7 @@
/* Set ListHead->HeaderType = 1 and ListHead->Init = 1 */ mov rcx, rdx - or rcx, 0x3 + or rcx, 3
mov rdx, [r8 + 8]
@@ -277,14 +277,13 @@ pop rbx ret
-.endp RtlInterlockedPushEntrySList
/* PSLIST_ENTRY * NTAPI * RtlInterlockedFlushSList( * IN PSINGLE_LIST_ENTRY ListHead); */ -.proc RtlInterlockedFlushSList +RtlInterlockedFlushSList: ExpInterlockedFlushSList:
/* Load ListHead->Region into rdx */ @@ -308,7 +307,7 @@ jnz RtlInterlockedFlushSListLoop
/* Use rcx as pointer template */ - mov rdx, ~SLIST8_POINTER_MASK + mov rdx, (not SLIST8_POINTER_MASK) or rdx, rcx
/* Combine result and return */ @@ -321,7 +320,7 @@
mov rdx, [rcx + 8] xor rbx, rbx - mov rcx, 0x3 + mov rcx, 3
RtlInterlockedFlushSListLoop16:
@@ -339,4 +338,4 @@ pop rbx ret
-.endp RtlInterlockedFlushSList +END