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)