From: Kai Backman Date: Thu, 15 Oct 2009 04:47:28 +0000 (-0700) Subject: cas X-Git-Tag: weekly.2009-11-06~307 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=b83549a7e652ed048525b939130c67d993b06890;p=gostls13.git cas R=rsc APPROVED=rsc DELTA=31 (1 added, 8 deleted, 22 changed) OCL=35752 CL=35757 --- diff --git a/src/pkg/runtime/arm/cas.s b/src/pkg/runtime/arm/cas.s index 648fa40c8d..63df1396d7 100644 --- a/src/pkg/runtime/arm/cas.s +++ b/src/pkg/runtime/arm/cas.s @@ -10,5 +10,20 @@ // }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 + diff --git a/src/pkg/sync/asm_arm.s b/src/pkg/sync/asm_arm.s index a6ad9d949c..077e81410c 100644 --- a/src/pkg/sync/asm_arm.s +++ b/src/pkg/sync/asm_arm.s @@ -10,5 +10,21 @@ // }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