Module Name: src
Committed By: ryo
Date: Fri Feb 8 06:56:56 UTC 2019
Modified Files:
src/common/lib/libc/arch/aarch64/atomic: atomic_op_asm.h
Log Message:
- atomic_*_{8,16}_nv() must return a new value, not an old value.
- use "dmb sy" for atomic_*{8,16}_nv() in the same way as atomic_*{32,64}_nv().
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
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.2 src/common/lib/libc/arch/aarch64/atomic/atomic_op_asm.h:1.3
--- src/common/lib/libc/arch/aarch64/atomic/atomic_op_asm.h:1.2 Wed Feb 6 05:33:14 2019
+++ src/common/lib/libc/arch/aarch64/atomic/atomic_op_asm.h Fri Feb 8 06:56:56 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: atomic_op_asm.h,v 1.2 2019/02/06 05:33:14 ryo Exp $ */
+/* $NetBSD: atomic_op_asm.h,v 1.3 2019/02/08 06:56:56 ryo Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -49,10 +49,10 @@ 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, w0, w1 /* calc new (return) value */ ;\
- stxrb w3, w2, [x4] /* try to store */ ;\
+ INSN w0, w0, w1 /* calc new (return) value */ ;\
+ stxrb w3, w0, [x4] /* try to store */ ;\
cbnz w3, 1b /* succeed? no, try again */ ;\
- dmb st ;\
+ dmb sy ;\
ret /* return new value */ ;\
END(_atomic_##OP##_8_nv)
@@ -71,10 +71,10 @@ 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, w0, w1 /* calc new (return) value */ ;\
- stxrh w3, w2, [x4] /* try to store */ ;\
+ INSN w0, w0, w1 /* calc new (return) value */ ;\
+ stxrh w3, w0, [x4] /* try to store */ ;\
cbnz w3, 1b /* succeed? no, try again */ ;\
- dmb st ;\
+ dmb sy ;\
ret /* return new value */ ;\
END(_atomic_##OP##_16_nv)