summaryrefslogtreecommitdiff
path: root/lib/ultralib/src/os/unmaptlb.s
blob: 362fd1ef086b22d9fa8e229ea0c32e1799d1b247 (plain)
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
#include "PR/ultraerror.h"
#include "PR/R4300.h"
#include "sys/asm.h"
#include "sys/regdef.h"

.text
.set noreorder
LEAF(osUnmapTLB)
#if defined (_DEBUG) && defined (__sgi)
    bgez a0, 1f
    nop
    b 2f
    nop
1:
    li t0, 0x1F
.set noat
    slt AT, a0, t0
    bnez AT, 3f
    nop
.set at
2:
    move a2, a0
    li a0, ERR_OSUNMAPTLB
    li a1, 1
    j __osError
    nop
3:
#endif
    mfc0 t0, C0_ENTRYHI
    mtc0 a0, C0_INX
    li t1, K0BASE
    mtc0 t1, C0_ENTRYHI
    mtc0 zero, C0_ENTRYLO0
    mtc0 zero, C0_ENTRYLO1
    nop
    tlbwi
    nop
    nop
    nop
    nop
    mtc0 t0, C0_ENTRYHI
    jr ra
    nop	
END(osUnmapTLB)