Module Name: src
Committed By: matt
Date: Mon Mar 24 18:53:34 UTC 2014
Modified Files:
src/common/lib/libc/arch/arm/atomic [matt-nb5-mips64]: atomic_swap.S
Log Message:
Use ldrex/strex instead of swp when possible.
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.2.12.1 \
src/common/lib/libc/arch/arm/atomic/atomic_swap.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/common/lib/libc/arch/arm/atomic/atomic_swap.S
diff -u src/common/lib/libc/arch/arm/atomic/atomic_swap.S:1.2 src/common/lib/libc/arch/arm/atomic/atomic_swap.S:1.2.12.1
--- src/common/lib/libc/arch/arm/atomic/atomic_swap.S:1.2 Sat Aug 16 07:12:40 2008
+++ src/common/lib/libc/arch/arm/atomic/atomic_swap.S Mon Mar 24 18:53:34 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_swap.S,v 1.2 2008/08/16 07:12:40 matt Exp $ */
+/* $NetBSD: atomic_swap.S,v 1.2.12.1 2014/03/24 18:53:34 matt Exp $ */
/*-
* Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -39,7 +39,15 @@
#include "atomic_op_asm.h"
ENTRY_NP(_atomic_swap_32)
+#ifdef _ARM_ARCH_6
+ mov ip, r0
+1: ldrex r0, [ip]
+ strex r2, r1, ip
+ cmp r2, #0
+ bne 1b
+#else
swp r0, r1, [r0]
+#endif
RET
END(_atomic_swap_32)
ATOMIC_OP_ALIAS(atomic_swap_32,_atomic_swap_32)
@@ -51,7 +59,15 @@ STRONG_ALIAS(_atomic_swap_ulong,_atomic_
STRONG_ALIAS(_atomic_swap_ptr,_atomic_swap_32)
ENTRY_NP(_atomic_swap_8)
+#ifdef _ARM_ARCH_6
+ mov ip, r0
+1: ldrexb r0, [ip]
+ strexb r2, r1, ip
+ cmp r2, #0
+ bne 1b
+#else
swpb r0, r1, [r0]
+#endif
RET
END(_atomic_swap_8)
ATOMIC_OP_ALIAS(atomic_swap_8,_atomic_swap_8)