-/*\r
- * PROJECT: ReactOS Kernel\r
- * COPYRIGHT: GPL - See COPYING in the top level directory\r
- * FILE: ntoskrnl/ex/powerpc/fastinterlck.c\r
- * PURPOSE: Executive Atom Functions\r
- * PROGRAMMERS: Art Yerkes\r
- */\r
-\r
-/* INCLUDES *****************************************************************/\r
-\r
-#include <ntoskrnl.h>\r
-#include <internal/debug.h>\r
-\r
-NTKERNELAPI\r
-PSINGLE_LIST_ENTRY\r
-FASTCALL\r
-ExInterlockedFlushSList(IN PSLIST_HEADER ListHead)\r
-{\r
- PSLIST_ENTRY NewHead = NULL;\r
- _InterlockedExchangePointer((PVOID *)&ListHead->Next.Next, &NewHead);\r
- return NewHead;\r
-}\r
-\r
-#undef ExInterlockedPushEntrySList\r
-NTKERNELAPI\r
-PSLIST_ENTRY\r
-FASTCALL\r
-ExInterlockedPushEntrySList\r
-(IN PSLIST_HEADER ListHead,\r
- IN PSLIST_ENTRY ListEntry)\r
-{\r
- return InterlockedPushEntrySList(ListHead, ListEntry);\r
-}\r
-\r
-#undef ExInterlockedPopEntrySList\r
-NTKERNELAPI\r
-PSINGLE_LIST_ENTRY\r
-NTAPI\r
-ExInterlockedPopEntrySList(\r
- IN PSLIST_HEADER ListHead,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- return InterlockedPopEntrySList(ListHead);\r
-}\r
-\r
-#undef ExInterlockedAddULong\r
-NTKERNELAPI\r
-ULONG\r
-NTAPI\r
-ExfInterlockedAddUlong(\r
- IN PULONG Addend,\r
- IN ULONG Increment,\r
- PKSPIN_LOCK Lock)\r
-{\r
- KIRQL OldIrql;\r
- KeAcquireSpinLock(Lock, &OldIrql);\r
- *Addend += Increment;\r
- KeReleaseSpinLock(Lock, OldIrql);\r
- return *Addend;\r
-}\r
-\r
-NTKERNELAPI\r
-LONGLONG\r
-FASTCALL\r
-ExfInterlockedCompareExchange64(\r
- IN OUT LONGLONG volatile *Destination,\r
- IN PLONGLONG Exchange,\r
- IN PLONGLONG Comperand)\r
-{\r
- return _InterlockedCompareExchange64(Destination, *Exchange, *Comperand);\r
-}\r
-\r
-NTKERNELAPI\r
-PLIST_ENTRY\r
-FASTCALL\r
-ExfInterlockedInsertHeadList(\r
- IN PLIST_ENTRY ListHead,\r
- IN PLIST_ENTRY ListEntry,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- KIRQL OldIrql;\r
- PLIST_ENTRY OldHead = NULL;\r
- KeAcquireSpinLock(Lock, &OldIrql);\r
- if (!IsListEmpty(ListHead)) OldHead = ListEntry->Flink;\r
- InsertHeadList(ListHead, ListEntry);\r
- KeReleaseSpinLock(Lock, OldIrql);\r
- return OldHead;\r
-}\r
-\r
-NTKERNELAPI\r
-PLIST_ENTRY\r
-FASTCALL\r
-ExfInterlockedInsertTailList(\r
- IN PLIST_ENTRY ListHead,\r
- IN PLIST_ENTRY ListEntry,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- KIRQL OldIrql;\r
- PLIST_ENTRY OldHead = NULL;\r
- KeAcquireSpinLock(Lock,&OldIrql);\r
- if (!IsListEmpty(ListHead)) OldHead = ListEntry->Blink;\r
- InsertTailList(ListHead, ListEntry);\r
- KeReleaseSpinLock(Lock, OldIrql);\r
- return OldHead;\r
-}\r
-\r
-NTKERNELAPI\r
-PSINGLE_LIST_ENTRY\r
-FASTCALL\r
-ExfInterlockedPopEntryList(\r
- IN PSINGLE_LIST_ENTRY ListHead,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- return NULL;\r
-}\r
-\r
-NTKERNELAPI\r
-PSINGLE_LIST_ENTRY\r
-FASTCALL\r
-ExfInterlockedPushEntryList(\r
- IN PSINGLE_LIST_ENTRY ListHead,\r
- IN PSINGLE_LIST_ENTRY ListEntry,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- return NULL;\r
-}\r
-\r
-NTKERNELAPI\r
-PLIST_ENTRY\r
-FASTCALL\r
-ExfInterlockedRemoveHeadList(\r
- IN PLIST_ENTRY ListHead,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- return ExInterlockedRemoveHeadList(ListHead, Lock);\r
-}\r
-\r
-NTKERNELAPI\r
-INTERLOCKED_RESULT\r
-FASTCALL\r
-Exfi386InterlockedIncrementLong(\r
- IN PLONG Addend)\r
-{\r
- return InterlockedIncrement(Addend);\r
-}\r
-\r
-NTKERNELAPI\r
-INTERLOCKED_RESULT\r
-FASTCALL\r
-Exfi386InterlockedDecrementLong(\r
- IN PLONG Addend)\r
-{\r
- return InterlockedDecrement(Addend);\r
-}\r
-\r
-NTKERNELAPI\r
-ULONG\r
-FASTCALL\r
-Exfi386InterlockedExchangeUlong(\r
- IN PULONG Target,\r
- IN ULONG Value)\r
-{\r
- return (ULONG)_InterlockedExchange((PLONG)Target, Value);\r
-}\r
-\r
-NTKERNELAPI\r
-LARGE_INTEGER\r
-NTAPI\r
-ExInterlockedAddLargeInteger(\r
- IN PLARGE_INTEGER Addend,\r
- IN LARGE_INTEGER Increment,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- LARGE_INTEGER tmp, comp, outnum;\r
-\r
- do {\r
- tmp.QuadPart = Addend->QuadPart + Increment.QuadPart;\r
- comp = *Addend;\r
- outnum.QuadPart = _InterlockedCompareExchange64\r
- (&Addend->QuadPart, tmp.QuadPart, comp.QuadPart);\r
- } while(outnum.QuadPart != comp.QuadPart);\r
-\r
- return outnum;\r
-}\r
-\r
-NTKERNELAPI\r
-ULONG\r
-NTAPI\r
-ExInterlockedAddUlong(\r
- IN PULONG Addend,\r
- IN ULONG Increment,\r
- PKSPIN_LOCK Lock)\r
-{\r
- return (ULONG)_InterlockedExchangeAdd((PLONG)Addend, Increment);\r
-}\r
-\r
-#undef ExInterlockedIncrementLong\r
-NTKERNELAPI\r
-INTERLOCKED_RESULT\r
-NTAPI\r
-ExInterlockedIncrementLong(\r
- IN PLONG Addend,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- return _InterlockedIncrement(Addend);\r
-}\r
-\r
-#undef ExInterlockedDecrementLong\r
-NTKERNELAPI\r
-INTERLOCKED_RESULT\r
-NTAPI\r
-ExInterlockedDecrementLong(\r
- IN PLONG Addend,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- return _InterlockedDecrement(Addend);\r
-}\r
-\r
-NTKERNELAPI\r
-ULONG\r
-NTAPI\r
-ExInterlockedExchangeUlong(\r
- IN PULONG Target,\r
- IN ULONG Value,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- return (ULONG)_InterlockedExchange((PLONG)Target, Value);\r
-}\r
-\r
-NTKERNELAPI\r
-PLIST_ENTRY\r
-NTAPI\r
-ExInterlockedInsertHeadList(\r
- IN PLIST_ENTRY ListHead,\r
- IN PLIST_ENTRY ListEntry,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- KIRQL OldIrql;\r
- PLIST_ENTRY OldHead = NULL;\r
- KeAcquireSpinLock(Lock,&OldIrql);\r
- if (!IsListEmpty(ListHead)) OldHead = ListEntry->Flink;\r
- InsertHeadList(ListHead, ListEntry);\r
- KeReleaseSpinLock(Lock, OldIrql);\r
- return OldHead;\r
-}\r
-\r
-NTKERNELAPI\r
-PLIST_ENTRY\r
-NTAPI\r
-ExInterlockedInsertTailList(\r
- IN PLIST_ENTRY ListHead,\r
- IN PLIST_ENTRY ListEntry,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- KIRQL OldIrql;\r
- PLIST_ENTRY OldHead = NULL;\r
- KeAcquireSpinLock(Lock,&OldIrql);\r
- if (!IsListEmpty(ListHead)) OldHead = ListEntry->Blink;\r
- InsertTailList(ListHead, ListEntry);\r
- KeReleaseSpinLock(Lock, OldIrql);\r
- return OldHead;\r
-}\r
-\r
-NTKERNELAPI\r
-PSINGLE_LIST_ENTRY\r
-NTAPI\r
-ExInterlockedPopEntryList(\r
- IN PSINGLE_LIST_ENTRY ListHead,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- return NULL;\r
-}\r
-\r
-NTKERNELAPI\r
-PSINGLE_LIST_ENTRY\r
-NTAPI\r
-ExInterlockedPushEntryList(\r
- IN PSINGLE_LIST_ENTRY ListHead,\r
- IN PSINGLE_LIST_ENTRY ListEntry,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- return NULL;\r
-}\r
-\r
-NTKERNELAPI\r
-PLIST_ENTRY\r
-NTAPI\r
-ExInterlockedRemoveHeadList(\r
- IN PLIST_ENTRY ListHead,\r
- IN PKSPIN_LOCK Lock)\r
-{\r
- return NULL;\r
-}\r
+/*
+ * PROJECT: ReactOS Kernel
+ * COPYRIGHT: GPL - See COPYING in the top level directory
+ * FILE: ntoskrnl/ex/powerpc/fastinterlck.c
+ * PURPOSE: Executive Atom Functions
+ * PROGRAMMERS: Art Yerkes
+ */
+
+/* INCLUDES *****************************************************************/
+
+#include <ntoskrnl.h>
+#include <internal/debug.h>
+
+NTKERNELAPI
+PSLIST_ENTRY
+NTAPI
+InterlockedPushEntrySList(IN PSLIST_HEADER ListHead,
+ IN PSLIST_ENTRY ListEntry)
+{
+
+ PSINGLE_LIST_ENTRY FirstEntry, NextEntry, Entry = (PVOID)ListEntry, Head = (PVOID)ListHead;
+
+ FirstEntry = Head->Next;
+ do
+ {
+ Entry->Next = FirstEntry;
+ NextEntry = FirstEntry;
+ FirstEntry = (PVOID)_InterlockedCompareExchange((PLONG)Head, (LONG)Entry, (LONG)FirstEntry);
+ } while (FirstEntry != NextEntry);
+
+ return FirstEntry;
+}
+
+NTKERNELAPI
+PSLIST_ENTRY
+NTAPI
+InterlockedPopEntrySList(IN PSLIST_HEADER ListHead)
+{
+ PSINGLE_LIST_ENTRY FirstEntry, NextEntry, Head = (PVOID)ListHead;
+
+ FirstEntry = Head->Next;
+ do
+ {
+ if (!FirstEntry) return NULL;
+
+ NextEntry = FirstEntry;
+ FirstEntry = (PVOID)_InterlockedCompareExchange((PLONG)Head, (LONG)FirstEntry->Next, (LONG)FirstEntry);
+ } while (FirstEntry != NextEntry);
+
+ return FirstEntry;
+}
+
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+FASTCALL
+ExInterlockedFlushSList(IN PSLIST_HEADER ListHead)
+{
+ return (PVOID)_InterlockedExchange((PLONG)&ListHead->Next.Next, (LONG)NULL);
+}
+
+#undef ExInterlockedPushEntrySList
+NTKERNELAPI
+PSLIST_ENTRY
+FASTCALL
+ExInterlockedPushEntrySList
+(IN PSLIST_HEADER ListHead,
+ IN PSLIST_ENTRY ListEntry)
+{
+ return InterlockedPushEntrySList(ListHead, ListEntry);
+}
+
+#undef ExInterlockedPopEntrySList
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+NTAPI
+ExInterlockedPopEntrySList(
+ IN PSLIST_HEADER ListHead,
+ IN PKSPIN_LOCK Lock)
+{
+ return InterlockedPopEntrySList(ListHead);
+}
+
+#undef ExInterlockedAddULong
+NTKERNELAPI
+ULONG
+NTAPI
+ExfInterlockedAddUlong(
+ IN PULONG Addend,
+ IN ULONG Increment,
+ PKSPIN_LOCK Lock)
+{
+ KIRQL OldIrql;
+ KeAcquireSpinLock(Lock, &OldIrql);
+ *Addend += Increment;
+ KeReleaseSpinLock(Lock, OldIrql);
+ return *Addend;
+}
+
+NTKERNELAPI
+LONGLONG
+FASTCALL
+ExfInterlockedCompareExchange64(
+ IN OUT LONGLONG volatile *Destination,
+ IN PLONGLONG Exchange,
+ IN PLONGLONG Comperand)
+{
+ LONGLONG Result;
+
+ Result = *Destination;
+ if (*Destination == Result) *Destination = *Exchange;
+ return Result;
+}
+
+NTKERNELAPI
+PLIST_ENTRY
+FASTCALL
+ExfInterlockedInsertHeadList(
+ IN PLIST_ENTRY ListHead,
+ IN PLIST_ENTRY ListEntry,
+ IN PKSPIN_LOCK Lock)
+{
+ KIRQL OldIrql;
+ PLIST_ENTRY OldHead = NULL;
+ KeAcquireSpinLock(Lock, &OldIrql);
+ if (!IsListEmpty(ListHead)) OldHead = ListEntry->Flink;
+ InsertHeadList(ListHead, ListEntry);
+ KeReleaseSpinLock(Lock, OldIrql);
+ return OldHead;
+}
+
+NTKERNELAPI
+PLIST_ENTRY
+FASTCALL
+ExfInterlockedInsertTailList(
+ IN PLIST_ENTRY ListHead,
+ IN PLIST_ENTRY ListEntry,
+ IN PKSPIN_LOCK Lock)
+{
+ KIRQL OldIrql;
+ PLIST_ENTRY OldHead = NULL;
+ KeAcquireSpinLock(Lock,&OldIrql);
+ if (!IsListEmpty(ListHead)) OldHead = ListEntry->Blink;
+ InsertTailList(ListHead, ListEntry);
+ KeReleaseSpinLock(Lock, OldIrql);
+ return OldHead;
+}
+
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+FASTCALL
+ExfInterlockedPopEntryList(
+ IN PSINGLE_LIST_ENTRY ListHead,
+ IN PKSPIN_LOCK Lock)
+{
+ return NULL;
+}
+
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+FASTCALL
+ExfInterlockedPushEntryList(
+ IN PSINGLE_LIST_ENTRY ListHead,
+ IN PSINGLE_LIST_ENTRY ListEntry,
+ IN PKSPIN_LOCK Lock)
+{
+ return NULL;
+}
+
+NTKERNELAPI
+PLIST_ENTRY
+FASTCALL
+ExfInterlockedRemoveHeadList(
+ IN PLIST_ENTRY ListHead,
+ IN PKSPIN_LOCK Lock)
+{
+ return ExInterlockedRemoveHeadList(ListHead, Lock);
+}
+
+NTKERNELAPI
+INTERLOCKED_RESULT
+FASTCALL
+Exfi386InterlockedIncrementLong(
+ IN PLONG Addend)
+{
+ return InterlockedIncrement(Addend);
+}
+
+NTKERNELAPI
+INTERLOCKED_RESULT
+FASTCALL
+Exfi386InterlockedDecrementLong(
+ IN PLONG Addend)
+{
+ return InterlockedDecrement(Addend);
+}
+
+NTKERNELAPI
+ULONG
+FASTCALL
+Exfi386InterlockedExchangeUlong(
+ IN PULONG Target,
+ IN ULONG Value)
+{
+ return (ULONG)_InterlockedExchange((PLONG)Target, Value);
+}
+
+NTKERNELAPI
+LARGE_INTEGER
+NTAPI
+ExInterlockedAddLargeInteger(
+ IN PLARGE_INTEGER Addend,
+ IN LARGE_INTEGER Increment,
+ IN PKSPIN_LOCK Lock)
+{
+ LARGE_INTEGER Integer = {{0}};
+ UNIMPLEMENTED;
+ return Integer;
+}
+
+NTKERNELAPI
+ULONG
+NTAPI
+ExInterlockedAddUlong(
+ IN PULONG Addend,
+ IN ULONG Increment,
+ PKSPIN_LOCK Lock)
+{
+ return (ULONG)_InterlockedExchangeAdd((PLONG)Addend, Increment);
+}
+
+#undef ExInterlockedIncrementLong
+NTKERNELAPI
+INTERLOCKED_RESULT
+NTAPI
+ExInterlockedIncrementLong(
+ IN PLONG Addend,
+ IN PKSPIN_LOCK Lock)
+{
+ return _InterlockedIncrement(Addend);
+}
+
+#undef ExInterlockedDecrementLong
+NTKERNELAPI
+INTERLOCKED_RESULT
+NTAPI
+ExInterlockedDecrementLong(
+ IN PLONG Addend,
+ IN PKSPIN_LOCK Lock)
+{
+ return _InterlockedDecrement(Addend);
+}
+
+NTKERNELAPI
+ULONG
+NTAPI
+ExInterlockedExchangeUlong(
+ IN PULONG Target,
+ IN ULONG Value,
+ IN PKSPIN_LOCK Lock)
+{
+ return (ULONG)_InterlockedExchange((PLONG)Target, Value);
+}
+
+NTKERNELAPI
+PLIST_ENTRY
+NTAPI
+ExInterlockedInsertHeadList(
+ IN PLIST_ENTRY ListHead,
+ IN PLIST_ENTRY ListEntry,
+ IN PKSPIN_LOCK Lock)
+{
+ KIRQL OldIrql;
+ PLIST_ENTRY OldHead = NULL;
+ KeAcquireSpinLock(Lock,&OldIrql);
+ if (!IsListEmpty(ListHead)) OldHead = ListEntry->Flink;
+ InsertHeadList(ListHead, ListEntry);
+ KeReleaseSpinLock(Lock, OldIrql);
+ return OldHead;
+}
+
+NTKERNELAPI
+PLIST_ENTRY
+NTAPI
+ExInterlockedInsertTailList(
+ IN PLIST_ENTRY ListHead,
+ IN PLIST_ENTRY ListEntry,
+ IN PKSPIN_LOCK Lock)
+{
+ KIRQL OldIrql;
+ PLIST_ENTRY OldHead = NULL;
+ KeAcquireSpinLock(Lock,&OldIrql);
+ if (!IsListEmpty(ListHead)) OldHead = ListEntry->Blink;
+ InsertTailList(ListHead, ListEntry);
+ KeReleaseSpinLock(Lock, OldIrql);
+ return OldHead;
+}
+
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+NTAPI
+ExInterlockedPopEntryList(
+ IN PSINGLE_LIST_ENTRY ListHead,
+ IN PKSPIN_LOCK Lock)
+{
+ KIRQL OldIrql;
+ PSINGLE_LIST_ENTRY OldHead = NULL;
+ KeAcquireSpinLock(Lock,&OldIrql);
+ OldHead = PopEntryList(ListHead);
+ KeReleaseSpinLock(Lock, OldIrql);
+ return OldHead;
+}
+
+NTKERNELAPI
+PSINGLE_LIST_ENTRY
+NTAPI
+ExInterlockedPushEntryList(
+ IN PSINGLE_LIST_ENTRY ListHead,
+ IN PSINGLE_LIST_ENTRY ListEntry,
+ IN PKSPIN_LOCK Lock)
+{
+ KIRQL OldIrql;
+ PSINGLE_LIST_ENTRY OldHead = NULL;
+ KeAcquireSpinLock(Lock,&OldIrql);
+ OldHead = PushEntryList(ListHead, ListEntry);
+ KeReleaseSpinLock(Lock, OldIrql);
+ return OldHead;
+}
+
+NTKERNELAPI
+PLIST_ENTRY
+NTAPI
+ExInterlockedRemoveHeadList(
+ IN PLIST_ENTRY ListHead,
+ IN PKSPIN_LOCK Lock)
+{
+ KIRQL OldIrql;
+ PLIST_ENTRY OldHead = NULL;
+ KeAcquireSpinLock(Lock,&OldIrql);
+ OldHead = RemoveHeadList(ListHead);
+ KeReleaseSpinLock(Lock, OldIrql);
+ return OldHead;
+}
+
+NTKERNELAPI
+VOID
+FASTCALL
+ExInterlockedAddLargeStatistic
+(IN PLARGE_INTEGER Addend,
+ IN ULONG Increment)
+{
+ UNIMPLEMENTED;
+}
+
+NTKERNELAPI
+LONGLONG
+FASTCALL
+ExInterlockedCompareExchange64(IN OUT PLONGLONG Destination,
+ IN PLONGLONG Exchange,
+ IN PLONGLONG Comparand,
+ IN PKSPIN_LOCK Lock)
+{
+ KIRQL OldIrql;
+ LONGLONG Result;
+
+ KeAcquireSpinLock(Lock, &OldIrql);
+ Result = *Destination;
+ if (*Destination == Result) *Destination = *Exchange;
+ KeReleaseSpinLock(Lock, OldIrql);
+ return Result;
+}
#include <internal/arm/asmmacro.S>
-//
-// Interlocked APIs
-//
-GENERATE_ARM_STUB ExInterlockedAddLargeInteger
-GENERATE_ARM_STUB ExInterlockedAddLargeStatistic
-GENERATE_ARM_STUB ExInterlockedAddUlong
-GENERATE_ARM_STUB ExInterlockedCompareExchange64
-GENERATE_ARM_STUB ExInterlockedDecrementLong
-GENERATE_ARM_STUB ExInterlockedExchangeUlong
-GENERATE_ARM_STUB ExInterlockedFlushSList
-GENERATE_ARM_STUB ExInterlockedIncrementLong
-GENERATE_ARM_STUB ExInterlockedInsertHeadList
-GENERATE_ARM_STUB ExInterlockedInsertTailList
-GENERATE_ARM_STUB ExInterlockedPopEntryList
-GENERATE_ARM_STUB ExInterlockedPopEntrySList
-GENERATE_ARM_STUB ExInterlockedPushEntryList
-GENERATE_ARM_STUB ExInterlockedPushEntrySList
-GENERATE_ARM_STUB ExInterlockedRemoveHeadList
-GENERATE_ARM_STUB ExfInterlockedAddUlong
-GENERATE_ARM_STUB ExfInterlockedCompareExchange64
-GENERATE_ARM_STUB ExfInterlockedInsertHeadList
-GENERATE_ARM_STUB ExfInterlockedInsertTailList
-GENERATE_ARM_STUB ExfInterlockedPopEntryList
-GENERATE_ARM_STUB ExfInterlockedPushEntryList
-GENERATE_ARM_STUB ExfInterlockedRemoveHeadList
-GENERATE_ARM_STUB Exfi386InterlockedDecrementLong
-GENERATE_ARM_STUB Exfi386InterlockedExchangeUlong
-GENERATE_ARM_STUB Exfi386InterlockedIncrementLong
-GENERATE_ARM_STUB Exi386InterlockedDecrementLong
-GENERATE_ARM_STUB Exi386InterlockedExchangeUlong
-GENERATE_ARM_STUB Exi386InterlockedIncrementLong
-GENERATE_ARM_STUB InterlockedPopEntrySList
-GENERATE_ARM_STUB InterlockedPushEntrySList
-
//
// Port I/O and Register Access
//
GENERATE_ARM_STUB WRITE_REGISTER_ULONG
GENERATE_ARM_STUB WRITE_REGISTER_USHORT
-//
-// CRT APIs implemented in ASM
-//
-GENERATE_ARM_STUB _alldiv
-GENERATE_ARM_STUB _alldvrm
-GENERATE_ARM_STUB _allmul
-GENERATE_ARM_STUB _alloca_probe
-GENERATE_ARM_STUB _allrem
-GENERATE_ARM_STUB _allshl
-GENERATE_ARM_STUB _allshr
-GENERATE_ARM_STUB _aulldiv
-GENERATE_ARM_STUB _aulldvrm
-GENERATE_ARM_STUB _aullrem
-GENERATE_ARM_STUB _aullshr
-
-//
-// RTL CRT-like APIs implemented in ASM
-//
-GENERATE_ARM_STUB RtlCompareMemory
-GENERATE_ARM_STUB RtlCompareMemoryUlong
-GENERATE_ARM_STUB RtlFillMemory
-GENERATE_ARM_STUB RtlFillMemoryUlong
-GENERATE_ARM_STUB RtlMoveMemory
-GENERATE_ARM_STUB RtlPrefetchMemoryNonTemporal
-GENERATE_ARM_STUB RtlUlongByteSwap
-GENERATE_ARM_STUB RtlUlonglongByteSwap
-GENERATE_ARM_STUB RtlUshortByteSwap
-GENERATE_ARM_STUB RtlZeroMemory
-
//
// Exceptions
//