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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#include "PR/R4300.h"
#include "sys/asm.h"
#include "sys/regdef.h"
#include "PR/os_version.h"
.text
.set noreorder
LEAF(__osDisableInt)
#if BUILD_VERSION >= VERSION_J
la t2, __OSGlobalIntMask
lw t3, (t2)
andi t3, 0xFF00
mfc0 t0, C0_SR
and t1, t0, ~SR_IE
mtc0 t1, C0_SR
andi v0, t0, SR_IE
lw t0, (t2)
andi t0, 0xFF00
beq t0, t3, No_Change_Global_Int
la t2, __osRunningThread # this is intentionally a macro in the branch delay slot
lw t1, 280(t2)
andi t2, t1, 0xFF00
and t2, t0
and t1, 0xFFFF00FF
or t1, t2
and t1, -2
mtc0 t1, $12
nop
nop
No_Change_Global_Int:
jr ra
nop
#else
mfc0 t0, C0_SR
and t1, t0, ~SR_IE
mtc0 t1, C0_SR
andi v0, t0, SR_IE
nop
jr ra
nop
#endif
END(__osDisableInt)
LEAF(__osRestoreInt)
mfc0 t0, C0_SR
or t0, t0, a0
mtc0 t0, C0_SR
nop
nop
jr ra
nop
END(__osRestoreInt)
|