R=rsc
APPROVED=rsc
DELTA=31 (1 added, 8 deleted, 22 changed)
OCL=35752
CL=35757
// }else
// return 0;
-TEXT cas+0(SB),0,$12
- TODO
+TEXT cas(SB),7,$0
+ MOVW 0(FP), R1 // *val
+ MOVW 4(FP), R2 // old
+ MOVW 8(FP), R3 // new
+l:
+ LDREX (R1), R0
+ CMP R0, R2
+ BNE fail
+ STREX R3, (R1), R0
+ CMP $0, R0
+ BNE l
+ MOVW $1, R0
+ RET
+fail:
+ MOVW $0, R0
+ RET
+
// }else
// return false;
-TEXT sync·cas+0(SB),0,$12
- TODO
+TEXT sync·cas(SB),7,$0
+ MOVW 0(FP), R1 // *val
+ MOVW 4(FP), R2 // old
+ MOVW 8(FP), R3 // new
+l:
+ LDREX (R1), R0
+ CMP R0, R2
+ BNE fail
+ STREX R3, (R1), R0
+ CMP $0, R0
+ BNE l
+ MOVW $1, R0
+ MOVW R0, 16(SP)
+ RET
+fail:
+ MOVW $0, R0
+ MOVW R0, 16(SP)
+ RET