]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libc/arm/atom.s
audiohda: fix syntax error
[plan9front.git] / sys / src / libc / arm / atom.s
1 /*
2  * int cas32(u32int *p, u32int ov, u32int nv);
3  * int cas(uint *p, int ov, int nv);
4  * int casp(void **p, void *ov, void *nv);
5  * int casl(ulong *p, ulong ov, ulong nv);
6  */
7 TEXT cas32(SB), 1, $-4
8 TEXT cas(SB), 1, $-4
9 TEXT casp(SB), 1, $-4
10 TEXT casl(SB), 1, $-4
11         MOVW    ov+4(FP), R1
12         MOVW    nv+8(FP), R2
13 spincas:
14         LDREX   (R0), R3
15         CMP.S   R3, R1
16         BNE     fail
17         STREX   R2, (R0), R4
18         CMP.S   $0, R4
19         BNE     spincas
20         MOVW    $1, R0
21         MOVW    _barrier(SB), R5
22         B       (R5)
23 fail:
24         CLREX
25         MOVW    $0, R0
26         RET
27
28 TEXT _xinc(SB), 1, $-4  /* void _xinc(long *); */
29 TEXT ainc(SB), 1, $-4   /* long ainc(long *); */
30 spinainc:
31         LDREX   (R0), R3
32         ADD     $1,R3
33         STREX   R3, (R0), R4
34         CMP.S   $0, R4
35         BNE     spinainc
36         MOVW    R3, R0
37         MOVW    _barrier(SB), R5
38         B       (R5)
39
40 TEXT _xdec(SB), 1, $-4  /* long _xdec(long *); */
41 TEXT adec(SB), 1, $-4   /* long adec(long *); */
42 spinadec:
43         LDREX   (R0), R3
44         SUB     $1,R3
45         STREX   R3, (R0), R4
46         CMP.S   $0, R4
47         BNE     spinadec
48         MOVW    R3, R0
49         MOVW    _barrier(SB), R5
50         B       (R5)