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)