Module Name:    src
Committed By:   matt
Date:           Sun Aug 18 04:31:09 UTC 2013

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

Log Message:
Support thumb1 indirectly and thumb2 directly


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 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.24 src/sys/arch/arm/include/lock.h:1.25
--- src/sys/arch/arm/include/lock.h:1.24	Mon Jan 28 06:17:05 2013
+++ src/sys/arch/arm/include/lock.h	Sun Aug 18 04:31:08 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: lock.h,v 1.24 2013/01/28 06:17:05 matt Exp $	*/
+/*	$NetBSD: lock.h,v 1.25 2013/08/18 04:31:08 matt Exp $	*/
 
 /*-
  * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
@@ -84,6 +84,9 @@ __swp(__cpu_simple_lock_t __val, volatil
 			"1:\t"
 			"ldrexb\t%[__rv], [%[__ptr]]"			"\n\t"
 			"cmp\t%[__rv],%[__val]"				"\n\t"
+#ifdef __thumb__
+			"itt\tne"					"\n\t"
+#endif
 			"strexbne\t%[__tmp], %[__val], [%[__ptr]]"	"\n\t"
 			"cmpne\t%[__tmp], #0"				"\n\t"
 			"bne\t1b"					"\n\t"
@@ -99,6 +102,9 @@ __swp(__cpu_simple_lock_t __val, volatil
 			"1:\t"
 			"ldrex\t%[__rv], [%[__ptr]]"			"\n\t"
 			"cmp\t%[__rv],%[__val]"				"\n\t"
+#ifdef __thumb__
+			"itt\tne"					"\n\t"
+#endif
 			"strexne\t%[__tmp], %[__val], [%[__ptr]]"	"\n\t"
 			"cmpne\t%[__tmp], #0"				"\n\t"
 			"bne\t1b"					"\n\t"
@@ -136,11 +142,14 @@ __swp(int __val, volatile int *__ptr)
 #ifdef _ARM_ARCH_6
 		"ldrex\t%[__rv], [%[__ptr]]"			"\n\t"
 		"cmp\t%[__rv],%[__val]"				"\n\t"
+#ifdef __thumb__
+		"it\tne"					"\n\t"
+#endif
 		"strexne\t%[__tmp], %[__val], [%[__ptr]]"	"\n\t"
 #else
 		"swp\t%[__rv], %[__val], [%[__ptr]]"		"\n\t"
+		"mov\t%[__tmp], #0"				"\n\t"
 		"cmp\t%[__rv],%[__val]"				"\n\t"
-		"movs\t%[__tmp], #0"				"\n\t"
 #endif
 		"cmpne\t%[__tmp], #0"				"\n\t"
 		"bne\t1b"					"\n\t"
@@ -157,7 +166,7 @@ __swp(int __val, volatile int *__ptr)
 }
 #endif /* _KERNEL */
 
-static __inline void __attribute__((__unused__))
+static __inline void __unused
 __cpu_simple_lock_init(__cpu_simple_lock_t *alp)
 {
 
@@ -167,22 +176,30 @@ __cpu_simple_lock_init(__cpu_simple_lock
 #endif
 }
 
-static __inline void __attribute__((__unused__))
+#if !defined(__thumb__) || defined(_ARM_ARCH_T2)
+static __inline void __unused
 __cpu_simple_lock(__cpu_simple_lock_t *alp)
 {
 
 	while (__swp(__SIMPLELOCK_LOCKED, alp) != __SIMPLELOCK_UNLOCKED)
 		continue;
 }
+#else
+void __cpu_simple_lock(__cpu_simple_lock_t *);
+#endif
 
-static __inline int __attribute__((__unused__))
+#if !defined(__thumb__) || defined(_ARM_ARCH_T2)
+static __inline int __unused
 __cpu_simple_lock_try(__cpu_simple_lock_t *alp)
 {
 
 	return (__swp(__SIMPLELOCK_LOCKED, alp) == __SIMPLELOCK_UNLOCKED);
 }
+#else
+int __cpu_simple_lock_try(__cpu_simple_lock_t *);
+#endif
 
-static __inline void __attribute__((__unused__))
+static __inline void __unused
 __cpu_simple_unlock(__cpu_simple_lock_t *alp)
 {
 

Reply via email to