Implement "portable" SList code for 64 bit

svn path=/branches/ros-amd64-bringup/; revision=44296
This commit is contained in:
Timo Kreuzer
2009-11-27 17:37:07 +00:00
parent a3ec73cfaf
commit 60bf8d9cd4
+25 -5
View File
@@ -20,7 +20,10 @@ NTAPI
RtlInitializeSListHead(IN PSLIST_HEADER ListHead)
{
#ifdef _WIN64
UNIMPLEMENTED;
ListHead->Alignment = 0;
ListHead->Region = 0;
ListHead->Header8.Init = 1;
// ListHead->Header8.HeaderType = 1; // FIXME: depending on cmpxchg16b support?
#else
ListHead->Alignment = 0;
#endif
@@ -31,8 +34,25 @@ NTAPI
RtlFirstEntrySList(IN const SLIST_HEADER *ListHead)
{
#ifdef _WIN64
UNIMPLEMENTED;
return NULL;
if (ListHead->Header8.HeaderType)
{
return (PVOID)(ListHead->Region & ~0xF);
}
else
{
union {
PVOID P;
struct {
ULONG64 Reserved:4;
ULONG64 NextEntry:39;
ULONG64 Reserved2:21;
} Bits;
} Pointer;
Pointer.P = (PVOID)ListHead;
Pointer.Bits.NextEntry = ListHead->Header8.NextEntry;
return Pointer.P;
}
#else
return ListHead->Next.Next;
#endif
@@ -43,8 +63,8 @@ NTAPI
RtlQueryDepthSList(IN PSLIST_HEADER ListHead)
{
#ifdef _WIN64
UNIMPLEMENTED;
return 0;
return ListHead->Header8.HeaderType ?
ListHead->Header16.Sequence : ListHead->Header8.Sequence;
#else
return ListHead->Depth;
#endif