diff --git a/reactos/lib/rtl/i386/interlck.S b/reactos/lib/rtl/i386/interlck.S
new file mode 100644
index 00000000000..27aa6ae9ad2
--- /dev/null
+++ b/reactos/lib/rtl/i386/interlck.S
@@ -0,0 +1,148 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS system libraries
+ * FILE: lib/rtl/i386/interlck.S
+ * PURPOSE: Rtl Interlocked Functions for x86
+ * PROGRAMMERS: Timo Kreuzer
+ */
+
+.intel_syntax noprefix
+
+/* FUNCTIONS ****************************************************************/
+
+
+/* PSLIST_ENTRY
+ * NTAPI
+ * RtlInterlockedPopEntrySList(
+ * IN PSLIST_HEADER ListHead);
+ */
+.global _RtlInterlockedPopEntrySList@4
+_RtlInterlockedPopEntrySList@4:
+
+ /* Save registers */
+ push ebx
+ push ebp
+
+ /* Load ListHead into ebp */
+ mov ebp, [esp + 8]
+
+ /* Load ListHead->Next into eax */
+ mov eax, [ebp]
+
+ /* Load ListHead->Depth and ListHead->Sequence into edx */
+ mov edx, [ebp+4]
+
+1:
+ /* Check if ListHead->Next is NULL */
+ or eax, eax
+ jz 2f
+
+ /* Copy Depth and Sequence number and adjust Depth */
+ lea ecx, [edx - 1]
+
+ /* Get next pointer */
+ mov ebx, [eax]
+
+ /* If [ebp] equals edx:eax, exchange it with ecx:ebx */
+ lock cmpxchg8b [ebp]
+
+ /* If not equal, retry with edx:eax, being the content of [ebp] now */
+ jnz 1b
+
+ /* Restore registers and return */
+2:
+ pop ebp
+ pop ebx
+ ret 4
+
+
+/* PSLIST_ENTRY
+ * NTAPI
+ * RtlInterlockedPushEntrySList(
+ * IN PSLIST_HEADER ListHead,
+ * IN PSLIST_ENTRY ListEntry);
+ */
+.global _RtlInterlockedPushEntrySList@8
+_RtlInterlockedPushEntrySList@8:
+
+ /* Save registers */
+ push ebx
+ push ebp
+
+ /* Load ListHead into ebp */
+ mov ebp, [esp + 4]
+
+ /* Load ListEntry into ebx */
+ mov ebx, [esp + 12]
+
+ /* Load ListHead->Next into eax */
+ mov eax, [ebp]
+
+ /* Load ListHead->Depth and ListHead->Sequence into edx */
+ mov edx, [ebp + 4]
+
+1:
+ /* Set ListEntry->Next to ListHead->Next */
+ mov [ebx], eax
+
+ /* Copy ListHead->Depth and ListHead->Sequence and adjust them */
+ lea ecx, [edx + 0x10001]
+
+ /* If [ebp] equals edx:eax, exchange it with ecx:ebx */
+ lock cmpxchg8b [ebp]
+
+ /* If not equal, retry with edx:eax, being the content of [ebp] now */
+ jnz 1b
+
+ /* Restore registers and return */
+ pop ebp
+ pop ebx
+ ret 8
+
+
+/* PSLIST_ENTRY
+ * NTAPI
+ * RtlInterlockedFlushSList(
+ * IN PSINGLE_LIST_ENTRY ListHead);
+ */
+.global _RtlInterlockedFlushSList@4
+_RtlInterlockedFlushSList@4:
+
+ /* Save registers */
+ push ebx
+ push ebp
+
+ /* Clear ebx */
+ xor ebx, ebx
+
+ /* Load ListHead into ebp */
+ mov ebp, [esp + 4]
+
+ /* Load ListHead->Next into eax */
+ mov eax, [ebp]
+
+ /* Load ListHead->Depth and ListHead->Sequence into edx */
+ mov edx, [ebp + 4]
+
+1:
+ /* Check if ListHead->Next is NULL */
+ or eax, eax
+ jz 2f
+
+ /* Copy Depth and Sequence number to ecx */
+ mov ecx, edx
+
+ /* Clear Depth in cx */
+ xor cx, cx
+
+ /* If [ebp] equals edx:eax, exchange it with ecx:ebx */
+ lock cmpxchg8b [ebp]
+
+ /* If not equal, retry with edx:eax, being the content of [ebp] now */
+ jnz 1b
+
+ /* Restore registers and return */
+2:
+ pop ebp
+ pop ebx
+ ret 4
diff --git a/reactos/lib/rtl/interlck.c b/reactos/lib/rtl/interlck.c
index 81479b4738d..291706f67ae 100644
--- a/reactos/lib/rtl/interlck.c
+++ b/reactos/lib/rtl/interlck.c
@@ -15,31 +15,6 @@
/* FUNCTIONS ***************************************************************/
-PSLIST_ENTRY
-NTAPI
-RtlInterlockedPopEntrySList(IN PSLIST_HEADER ListHead)
-{
- UNIMPLEMENTED;
- return NULL;
-}
-
-PSLIST_ENTRY
-NTAPI
-RtlInterlockedPushEntrySList(IN PSLIST_HEADER ListHead,
- IN PSLIST_ENTRY ListEntry)
-{
- UNIMPLEMENTED;
- return NULL;
-}
-
-PSLIST_ENTRY
-NTAPI
-RtlInterlockedFlushSList(IN PSLIST_HEADER ListHead)
-{
- UNIMPLEMENTED;
- return NULL;
-}
-
PSLIST_ENTRY
NTAPI
RtlInterlockedPushListSList(IN PSLIST_HEADER ListHead,
diff --git a/reactos/lib/rtl/rtl.rbuild b/reactos/lib/rtl/rtl.rbuild
index bce20a98520..4636e1a375f 100644
--- a/reactos/lib/rtl/rtl.rbuild
+++ b/reactos/lib/rtl/rtl.rbuild
@@ -12,6 +12,7 @@
debug_asm.S
except_asm.s
except.c
+ interlck.S
random_asm.S
rtlswap.S
rtlmem.s