...
Text file src/runtime/internal/atomic/sys_nonlinux_arm.s
1 // Copyright 2015 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // +build !linux,arm
6
7 #include "textflag.h"
8
9 // TODO(minux): this is only valid for ARMv6+
10 // bool armcas(int32 *val, int32 old, int32 new)
11 // Atomically:
12 // if(*val == old){
13 // *val = new;
14 // return 1;
15 // }else
16 // return 0;
17 TEXT ·Cas(SB),NOSPLIT,$0
18 JMP ·armcas(SB)
19
20 // Non-linux OSes support only single processor machines before ARMv7.
21 // So we don't need memory barriers if goarm < 7. And we fail loud at
22 // startup (runtime.checkgoarm) if it is a multi-processor but goarm < 7.
23
24 TEXT ·Load(SB),NOSPLIT|NOFRAME,$0-8
25 MOVW addr+0(FP), R0
26 MOVW (R0), R1
27
28 MOVB runtime·goarm(SB), R11
29 CMP $7, R11
30 BLT 2(PC)
31 DMB MB_ISH
32
33 MOVW R1, ret+4(FP)
34 RET
35
36 TEXT ·Store(SB),NOSPLIT,$0-8
37 MOVW addr+0(FP), R1
38 MOVW v+4(FP), R2
39
40 MOVB runtime·goarm(SB), R8
41 CMP $7, R8
42 BLT 2(PC)
43 DMB MB_ISH
44
45 MOVW R2, (R1)
46
47 CMP $7, R8
48 BLT 2(PC)
49 DMB MB_ISH
50 RET
51
52 TEXT ·Load8(SB),NOSPLIT|NOFRAME,$0-5
53 MOVW addr+0(FP), R0
54 MOVB (R0), R1
55
56 MOVB runtime·goarm(SB), R11
57 CMP $7, R11
58 BLT 2(PC)
59 DMB MB_ISH
60
61 MOVB R1, ret+4(FP)
62 RET
View as plain text