From b83549a7e652ed048525b939130c67d993b06890 Mon Sep 17 00:00:00 2001 From: Kai Backman Date: Wed, 14 Oct 2009 21:47:28 -0700 Subject: [PATCH] cas R=rsc APPROVED=rsc DELTA=31 (1 added, 8 deleted, 22 changed) OCL=35752 CL=35757 --- src/pkg/runtime/arm/cas.s | 19 +++++++++++++++++-- src/pkg/sync/asm_arm.s | 20 ++++++++++++++++++-- 2 files changed, 35 insertions(+), 4 deletions(-) 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 -- 2.50.0