diff options
author | andrew <andrew@FreeBSD.org> | 2015-03-05 18:03:42 +0000 |
---|---|---|
committer | andrew <andrew@FreeBSD.org> | 2015-03-05 18:03:42 +0000 |
commit | 43cb9d5cd83bb7b80511148090eb9e4d348952de (patch) | |
tree | e8efda26a65f3e6d836f4e1f9aed24e835a1f01e | |
parent | ff8a1038b7c85a17ecd238a8349b0d4f3e2b3143 (diff) | |
download | FreeBSD-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.S | 8 |
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) |