Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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