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)
{