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