1/* 2 * mips 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#define COP3 WORD $(023<<26) 9 10 TEXT C_3ktas(SB),$0 11 MOVW R1, R21 12btas: 13 MOVW R21, R1 14 MOVB R0, 1(R1) 15 NOOP 16 COP3 17 BLTZ R1, btas 18 RET 19 20 TEXT _tas(SB), $0 21 TEXT C_4ktas(SB), $0 22 MOVW R1, R2 /* address of key */ 23tas1: 24 MOVW $1, R3 25 LL(2, 1) 26 NOOP 27 SC(2, 3) 28 NOOP 29 BEQ R3, tas1 30 RET 31