summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2015-03-05 18:03:42 +0000
committerandrew <andrew@FreeBSD.org>2015-03-05 18:03:42 +0000
commit43cb9d5cd83bb7b80511148090eb9e4d348952de (patch)
treee8efda26a65f3e6d836f4e1f9aed24e835a1f01e
parentff8a1038b7c85a17ecd238a8349b0d4f3e2b3143 (diff)
downloadFreeBSD-src-43cb9d5cd83bb7b80511148090eb9e4d348952de.zip
FreeBSD-src-43cb9d5cd83bb7b80511148090eb9e4d348952de.tar.gz
dtrace_cas32 and dtrace_casptr should retrn the data loaded from target
not the new value. Sponsored by: ABT Systems Ltd
-rw-r--r--sys/cddl/dev/dtrace/arm/dtrace_asm.S8
1 files changed, 3 insertions, 5 deletions
diff --git a/sys/cddl/dev/dtrace/arm/dtrace_asm.S b/sys/cddl/dev/dtrace/arm/dtrace_asm.S
index 9cbf117..ce27b14 100644
--- a/sys/cddl/dev/dtrace/arm/dtrace_asm.S
+++ b/sys/cddl/dev/dtrace/arm/dtrace_asm.S
@@ -208,12 +208,10 @@ EENTRY(dtrace_casptr)
1: ldrex r3, [r0] /* Load target */
cmp r3, r1 /* Check if *target == cmp */
bne 2f /* No, return */
- strex r3, r2, [r0] /* Store new to target */
- cmp r3, #0 /* Did the store succeed? */
+ strex ip, r2, [r0] /* Store new to target */
+ cmp ip, #0 /* Did the store succeed? */
bne 1b /* No, try again */
- mov r0, r2 /* Return the new value of the store */
-2: movne r0, r3 /* The first compare failed, return */
- /* the value loaded from memory */
+2: mov r0, r3 /* Return the value loaded from target */
RET
EEND(dtrace_casptr)
END(dtrace_cas32)
OpenPOWER on IntegriCloud