Loading...
pthreads/lock.s Libc-320 Libc-391.5.22
--- 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