Loading...
pthreads/lock.s Libc-391.1.21 Libc-262.2.12
--- Libc/Libc-391.1.21/pthreads/lock.s
+++ Libc/Libc-262.2.12/pthreads/lock.s
@@ -1,25 +1,3 @@
-/*
- * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
 /*
  * Copyright 1996 1995 by Open Software Foundation, Inc. 1997 1996 1995 1994 1993 1992 1991  
  *              All Rights Reserved 
@@ -41,12 +19,16 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
  * 
  */
+/*
+ * MkLinux
+ */
+
+#if defined(__ppc__)
+
 
 #define	__APPLE_API_PRIVATE
 #include <machine/cpu_capabilities.h>
 #undef	__APPLE_API_PRIVATE
-
-#if defined(__ppc__) || defined(__ppc64__)
 
 #import	<architecture/ppc/asm_help.h>
 #import	<architecture/ppc/pseudo_inst.h>
@@ -55,11 +37,9 @@
  *
  * Lock the lock pointed to by `p'.  Spin (possibly forever) until
  * the lock is available.  Test and test and set logic used.
- * These routines have moved to the comm page.
  */
 
 .text
-.align 2
 LEAF(__spin_lock_try)
     ba		_COMM_PAGE_SPINLOCK_TRY
 END(__spin_lock_try)
@@ -93,19 +73,33 @@
  * lock is available.
  */
         TEXT
-	ALIGN
 
+.globl _spin_lock_try
 LEAF(__spin_lock_try, 0)
-	movl    $(_COMM_PAGE_SPINLOCK_TRY), %eax
-	jmpl	%eax
-
-	ALIGN
+_spin_lock_try:
+        movl    4(%esp),%ecx
+        movl    $1,%eax
+        xchgl   (%ecx),%eax
+        xorl    $1,%eax
+END(__spin_lock_try)
 
 .globl _spin_lock
 LEAF(__spin_lock, 0)
 _spin_lock:
-	movl    $(_COMM_PAGE_SPINLOCK_LOCK), %eax
-	jmpl	%eax
+        movl    4(%esp), %ecx
+        movl    (%ecx), %eax
+        orl     %eax, %eax
+        jnz     1f
+        movl    $0xFFFFFFFF, %eax
+        xchgl   %eax, (%ecx)
+        orl     %eax, %eax
+        jz      2f
+1:	pushl	%ecx
+	CALL_EXTERN(__spin_lock_retry)
+	addl	$4, %esp
+2:		
+END(__spin_lock)
+
 
 /*
  * void
@@ -114,13 +108,13 @@
  *
  * Unlock the lock pointed to by p.
  */
-	ALIGN
-
 .globl _spin_unlock
 LEAF(__spin_unlock, 0)
 _spin_unlock:
-	movl    $(_COMM_PAGE_SPINLOCK_UNLOCK), %eax
-	jmpl	%eax
+        movl    $0, %eax
+        movl    4(%esp), %ecx
+        xchgl   %eax, (%ecx)
+END(__spin_unlock)
 
 #else
 #error spin_locks not defined for this architecture