 |
libdragon
|
Loading...
Searching...
No Matches
Go to the documentation of this file.
13#ifndef __LIBDRAGON_COP0_H
14#define __LIBDRAGON_COP0_H
19#define C0_COUNT() ({ \
21 asm volatile("mfc0 %0,$9":"=r"(x)); \
26#define C0_WRITE_COUNT(x) ({ \
27 asm volatile("mtc0 %0,$9"::"r"(x)); \
32#define C0_COMPARE() ({ \
34 asm volatile("mfc0 %0,$11":"=r"(x)); \
39#define C0_WRITE_COMPARE(x) ({ \
40 asm volatile("mtc0 %0,$11"::"r"(x)); \
45#define C0_STATUS() ({ \
47 asm volatile("mfc0 %0,$12":"=r"(x)); \
52#define C0_WRITE_STATUS(x) ({ \
53 asm volatile("mtc0 %0,$12"::"r"(x)); \
65#define C0_CAUSE() ({ \
67 asm volatile("mfc0 %0,$13" : "=r" (x) : ); \
76#define C0_WRITE_CAUSE(x) ({ \
77 asm volatile("mtc0 %0,$13"::"r"(x)); \
82#define C0_CR() C0_CAUSE()
83#define C0_WRITE_CR(x) C0_WRITE_CAUSE(x)
93#define C0_BADVADDR() ({ \
95 asm volatile("dmfc0 %0,$8" : "=r" (x) : ); \
111 asm volatile("mfc0 %0,$14" : "=r" (x) : ); \
121#define C0_INDEX() ({ \
123 asm volatile("mfc0 %0,$0":"=r"(x)); \
133#define C0_WRITE_INDEX(x) asm volatile("mtc0 %0,$0; nop; nop"::"r"(x))
142#define C0_ENTRYHI() ({ \
144 asm volatile("mfc0 %0,$10":"=r"(x)); \
153#define C0_WRITE_ENTRYHI(x) asm volatile("mtc0 %0,$10; nop; nop"::"r"(x))
161#define C0_ENTRYLO0() ({ \
163 asm volatile("mfc0 %0,$2":"=r"(x)); \
173#define C0_WRITE_ENTRYLO0(x) asm volatile("mtc0 %0,$2; nop; nop"::"r"(x))
181#define C0_ENTRYLO1() ({ \
183 asm volatile("mfc0 %0,$3":"=r"(x)); \
193#define C0_WRITE_ENTRYLO1(x) asm volatile("mtc0 %0,$3; nop; nop"::"r"(x))
202#define C0_PAGEMASK() ({ \
204 asm volatile("mfc0 %0,$5":"=r"(x)); \
214#define C0_WRITE_PAGEMASK(x) asm volatile("mtc0 %0,$5; nop; nop"::"r"(x))
224#define C0_WIRED() ({ \
226 asm volatile("mfc0 %0,$6":"=r"(x)); \
236#define C0_WATCHLO() ({ \
238 asm volatile("mfc0 %0,$18":"=r"(x)); \
248#define C0_WRITE_WATCHLO(x) asm volatile("mtc0 %0,$18"::"r"(x))
257#define C0_WRITE_WIRED(x) asm volatile("mtc0 %0,$6; nop; nop"::"r"(x))
261#define C0_READ_CR() C0_CAUSE()
262#define C0_READ_EPC() C0_EPC()
263#define C0_READ_BADVADDR() C0_BADVADDR()
267#define C0_STATUS_IE 0x00000001
268#define C0_STATUS_EXL 0x00000002
269#define C0_STATUS_ERL 0x00000004
272#define C0_CAUSE_BD 0x80000000
273#define C0_CAUSE_CE 0x30000000
274#define C0_CAUSE_EXC_CODE 0x0000007C
277#define C0_INTERRUPT_0 0x00000100
278#define C0_INTERRUPT_1 0x00000200
279#define C0_INTERRUPT_2 0x00000400
280#define C0_INTERRUPT_3 0x00000800
281#define C0_INTERRUPT_4 0x00001000
282#define C0_INTERRUPT_5 0x00002000
283#define C0_INTERRUPT_6 0x00004000
284#define C0_INTERRUPT_7 0x00008000
286#define C0_INTERRUPT_RCP C0_INTERRUPT_2
287#define C0_INTERRUPT_CART C0_INTERRUPT_3
288#define C0_INTERRUPT_PRENMI C0_INTERRUPT_4
289#define C0_INTERRUPT_TIMER C0_INTERRUPT_7
297#define C0_GET_CAUSE_CE(cr) (((cr) & C0_CAUSE_CE) >> 28)
302#define C0_GET_CAUSE_EXC_CODE(sr) (((sr) & C0_CAUSE_EXC_CODE) >> 2)
305#define C0_ENTRYLO_GLOBAL (1<<0)
306#define C0_ENTRYLO_VALID (1<<1)
307#define C0_ENTRYLO_DIRTY (1<<2)
310#define C0_INDEX_PROBE_FAILED (1<<31)
319#define C0_TLBWI() asm volatile("tlbwi; nop; nop; nop; nop")
328#define C0_TLBWR() asm volatile("tlbwr; nop; nop; nop; nop")
337#define C0_TLBR() asm volatile("tlbr; nop; nop; nop; nop")
347#define C0_TLBP() asm volatile("tlbp; nop; nop; nop; nop")