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)

Reply via email to