]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libthread/xincmips.s
Import sources from 2011-03-30 iso image
[plan9front.git] / sys / src / libthread / xincmips.s
1 /*
2  *      R4000 user level lock code
3  */
4
5 #define LL(base, rt)    WORD    $((060<<26)|((base)<<21)|((rt)<<16))
6 #define SC(base, rt)    WORD    $((070<<26)|((base)<<21)|((rt)<<16))
7 #define NOOP            WORD    $0x27
8
9 #ifdef oldstyle
10 TEXT    xadd(SB), $0
11
12         MOVW    R1, R2          /* address of counter */
13 loop:   MOVW    n+4(FP), R3     /* increment */
14         LL(2, 1)
15         NOOP
16         ADD     R1,R3,R3
17         SC(2, 3)
18         NOOP
19         BEQ     R3,loop
20         RET
21 #endif
22
23 TEXT    _xinc(SB), $0
24
25         MOVW    R1, R2          /* address of counter */
26 loop:   MOVW    $1, R3
27         LL(2, 1)
28         NOOP
29         ADD     R1,R3,R3
30         SC(2, 3)
31         NOOP
32         BEQ     R3,loop
33         RET
34
35 TEXT    _xdec(SB), $0
36
37         MOVW    R1, R2          /* address of counter */
38 loop1:  MOVW    $-1, R3
39         LL(2, 1)
40         NOOP
41         ADD     R1,R3,R3
42         MOVW    R3, R1
43         SC(2, 3)
44         NOOP
45         BEQ     R3,loop1
46         RET