1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
;
; /*
; * To get lock routine, compile this into a .s, then SUBSTITUTE
; * a LOAD AND CLEAR WORD instruction for the load and store of
; * l->key.
; *
; */
; typedef struct Lock {
; int key;
; } Lock;
;
; int
; mutexlock(Lock *l)
; {
; int key;
;
; key = l->key;
; l->key = 0;
; return key != 0;
; }
.LEVEL 1.1
.SPACE $TEXT$,SORT=8
.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=0x2c,CODE_ONLY,SORT=24
mutexlock
.PROC
.CALLINFO FRAME=0,ARGS_SAVED
.ENTRY
; SUBSTITUTED LDW 0(%r26),%r31
; SUBSTITUTED STWS %r0,0(%r26)
LDCWS 0(%r26),%r31 ; SUBSTITUTED
COMICLR,= 0,%r31,%r28
LDI 1,%r28
.EXIT
BV,N %r0(%r2)
.PROCEND
.end
|