Module Name:    src
Committed By:   matt
Date:           Sun Jul 15 08:26:21 UTC 2012

Modified Files:
        src/sys/arch/arm/include: lock.h

Log Message:
Use ldrexb/strexb for ARMv6 and above platforms since
"swp{b} use is deprecated" for them.


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/arm/include/lock.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/include/lock.h
diff -u src/sys/arch/arm/include/lock.h:1.17 src/sys/arch/arm/include/lock.h:1.18
--- src/sys/arch/arm/include/lock.h:1.17	Mon Apr 28 20:23:14 2008
+++ src/sys/arch/arm/include/lock.h	Sun Jul 15 08:26:21 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: lock.h,v 1.17 2008/04/28 20:23:14 martin Exp $	*/
+/*	$NetBSD: lock.h,v 1.18 2012/07/15 08:26:21 matt Exp $	*/
 
 /*-
  * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
@@ -77,10 +77,22 @@ __cpu_simple_lock_set(__cpu_simple_lock_
 static __inline int
 __swp(int __val, volatile unsigned char *__ptr)
 {
-
+#ifdef _ARM_ARCH_6
+	int __rv, __tmp;
+	__asm volatile(
+		"1:\t"
+		"ldrexb\t%[__rv], [%[__ptr]]"			"\n\t"
+		"strexb\t%[__tmp], %[__val], [%[__ptr]]"	"\n\t"
+		"cmpeq\t%[__tmp], #0"				"\n\t"
+		"bne 1b"
+	    : [__rv] "=&r" (__rv), [__tmp] "=&r"(__tmp)
+	    : [__val] "r" (__val), [__ptr] "r" (__ptr) : "memory");
+	return __rv;
+#else
 	__asm volatile("swpb %0, %1, [%2]"
 	    : "=&r" (__val) : "r" (__val), "r" (__ptr) : "memory");
 	return __val;
+#endif
 }
 #else
 static __inline int

Reply via email to