Module Name: src Committed By: ryo Date: Wed Feb 6 05:33:14 UTC 2019
Modified Files: src/common/lib/libc/arch/aarch64/atomic: atomic_op_asm.h Log Message: fix atomic_sub_*(). it was (delta - *ptr), should be (*ptr - delta). changing shared macro doesn't effect other atomic_ops because (*ptr [+|^] delta) and (delta [+|^] *ptr) have same result. atomic_sub_*() haven't used because non standard API? To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 \ src/common/lib/libc/arch/aarch64/atomic/atomic_op_asm.h 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/aarch64/atomic/atomic_op_asm.h diff -u src/common/lib/libc/arch/aarch64/atomic/atomic_op_asm.h:1.1 src/common/lib/libc/arch/aarch64/atomic/atomic_op_asm.h:1.2 --- src/common/lib/libc/arch/aarch64/atomic/atomic_op_asm.h:1.1 Sun Aug 10 05:47:35 2014 +++ src/common/lib/libc/arch/aarch64/atomic/atomic_op_asm.h Wed Feb 6 05:33:14 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: atomic_op_asm.h,v 1.1 2014/08/10 05:47:35 matt Exp $ */ +/* $NetBSD: atomic_op_asm.h,v 1.2 2019/02/06 05:33:14 ryo Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ ENTRY_NP(_atomic_##OP##_8) ;\ mov x4, x0 ;\ 1: ldxrb w0, [x4] /* load old value */ ;\ - INSN w2, w1, w0 /* calculate new value */ ;\ + INSN w2, w0, w1 /* calculate new value */ ;\ stxrb w3, w2, [x4] /* try to store */ ;\ cbnz w3, 1b /* succeed? no, try again */ ;\ dmb st ;\ @@ -49,7 +49,7 @@ END(_atomic_##OP##_8) ENTRY_NP(_atomic_##OP##_8_nv) ;\ mov x4, x0 /* need r0 for return value */ ;\ 1: ldxrb w0, [x4] /* load old value */ ;\ - INSN w2, w1, w0 /* calc new (return) value */ ;\ + INSN w2, w0, w1 /* calc new (return) value */ ;\ stxrb w3, w2, [x4] /* try to store */ ;\ cbnz w3, 1b /* succeed? no, try again */ ;\ dmb st ;\ @@ -60,7 +60,7 @@ END(_atomic_##OP##_8_nv) ENTRY_NP(_atomic_##OP##_16) ;\ mov x4, x0 ;\ 1: ldxrh w0, [x4] /* load old value */ ;\ - INSN w2, w1, w0 /* calculate new value */ ;\ + INSN w2, w0, w1 /* calculate new value */ ;\ stxrh w3, w2, [x4] /* try to store */ ;\ cbnz w3, 1b /* succeed? no, try again */ ;\ dmb st ;\ @@ -71,7 +71,7 @@ END(_atomic_##OP##_16) ENTRY_NP(_atomic_##OP##_16_nv) ;\ mov x4, x0 /* need r0 for return value */ ;\ 1: ldxrh w0, [x4] /* load old value */ ;\ - INSN w2, w1, w0 /* calc new (return) value */ ;\ + INSN w2, w0, w1 /* calc new (return) value */ ;\ stxrh w3, w2, [x4] /* try to store */ ;\ cbnz w3, 1b /* succeed? no, try again */ ;\ dmb st ;\ @@ -82,7 +82,7 @@ END(_atomic_##OP##_16_nv) ENTRY_NP(_atomic_##OP##_32) ;\ mov x4, x0 ;\ 1: ldxr w0, [x4] /* load old value */ ;\ - INSN w2, w1, w0 /* calculate new value */ ;\ + INSN w2, w0, w1 /* calculate new value */ ;\ stxr w3, w2, [x4] /* try to store */ ;\ cbnz w3, 1b /* succeed? no, try again */ ;\ dmb st ;\ @@ -104,7 +104,7 @@ END(_atomic_##OP##_32_nv) ENTRY_NP(_atomic_##OP##_64) ;\ mov x4, x0 ;\ 1: ldxr x0, [x4] /* load old value */ ;\ - INSN x2, x1, x0 /* calculate new value */ ;\ + INSN x2, x0, x1 /* calculate new value */ ;\ stxr w3, x2, [x4] /* try to store */ ;\ cbnz w3, 1b /* succeed? no, try again */ ;\ dmb st ;\