Loading...
--- Libc/Libc-320/pthreads/lock.s
+++ Libc/Libc-391.5.22/pthreads/lock.s
@@ -2,8 +2,6 @@
* Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
- *
- * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
@@ -48,7 +46,7 @@
#include <machine/cpu_capabilities.h>
#undef __APPLE_API_PRIVATE
-#if defined(__ppc__)
+#if defined(__ppc__) || defined(__ppc64__)
#import <architecture/ppc/asm_help.h>
#import <architecture/ppc/pseudo_inst.h>
@@ -97,11 +95,9 @@
TEXT
ALIGN
-.globl _spin_lock_try
LEAF(__spin_lock_try, 0)
-_spin_lock_try:
movl $(_COMM_PAGE_SPINLOCK_TRY), %eax
- jmpl %eax
+ jmpl *%eax
ALIGN
@@ -109,7 +105,7 @@
LEAF(__spin_lock, 0)
_spin_lock:
movl $(_COMM_PAGE_SPINLOCK_LOCK), %eax
- jmpl %eax
+ jmpl *%eax
/*
* void
@@ -124,7 +120,49 @@
LEAF(__spin_unlock, 0)
_spin_unlock:
movl $(_COMM_PAGE_SPINLOCK_UNLOCK), %eax
- jmpl %eax
+ jmpl *%eax
+
+#elif defined(__x86_64__)
+
+#include <architecture/i386/asm_help.h>
+
+/*
+ * void
+ * _spin_lock(p)
+ * int *p;
+ *
+ * Lock the lock pointed to by p. Spin (possibly forever) until the next
+ * lock is available.
+ */
+ TEXT
+ ALIGN
+
+LEAF(__spin_lock_try, 0)
+ movq $(_COMM_PAGE_SPINLOCK_TRY), %rax
+ jmp *%rax
+
+ ALIGN
+
+.globl _spin_lock
+LEAF(__spin_lock, 0)
+_spin_lock:
+ movq $(_COMM_PAGE_SPINLOCK_LOCK), %rax
+ jmp *%rax
+
+/*
+ * void
+ * _spin_unlock(p)
+ * int *p;
+ *
+ * Unlock the lock pointed to by p.
+ */
+ ALIGN
+
+.globl _spin_unlock
+LEAF(__spin_unlock, 0)
+_spin_unlock:
+ movl $0, (%rdi)
+ ret
#else
#error spin_locks not defined for this architecture