123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #ifndef __SUPP_REG_H__
- #define __SUPP_REG_H__
- /* Macros for reading and writing support/special registers. */
- #ifndef STRINGIFYFY
- #define STRINGIFYFY(i) #i
- #endif
- #ifndef STRINGIFY
- #define STRINGIFY(i) STRINGIFYFY(i)
- #endif
- #define SPEC_REG_BZ "BZ"
- #define SPEC_REG_VR "VR"
- #define SPEC_REG_PID "PID"
- #define SPEC_REG_SRS "SRS"
- #define SPEC_REG_WZ "WZ"
- #define SPEC_REG_EXS "EXS"
- #define SPEC_REG_EDA "EDA"
- #define SPEC_REG_MOF "MOF"
- #define SPEC_REG_DZ "DZ"
- #define SPEC_REG_EBP "EBP"
- #define SPEC_REG_ERP "ERP"
- #define SPEC_REG_SRP "SRP"
- #define SPEC_REG_NRP "NRP"
- #define SPEC_REG_CCS "CCS"
- #define SPEC_REG_USP "USP"
- #define SPEC_REG_SPC "SPC"
- #define RW_MM_CFG 0
- #define RW_MM_KBASE_LO 1
- #define RW_MM_KBASE_HI 2
- #define RW_MM_CAUSE 3
- #define RW_MM_TLB_SEL 4
- #define RW_MM_TLB_LO 5
- #define RW_MM_TLB_HI 6
- #define RW_MM_TLB_PGD 7
- #define BANK_GC 0
- #define BANK_IM 1
- #define BANK_DM 2
- #define BANK_BP 3
- #define RW_GC_CFG 0
- #define RW_GC_CCS 1
- #define RW_GC_SRS 2
- #define RW_GC_NRP 3
- #define RW_GC_EXS 4
- #define RW_GC_R0 8
- #define RW_GC_R1 9
- #define SPEC_REG_WR(r,v) \
- __asm__ __volatile__ ("move %0, $" r : : "r" (v));
- #define SPEC_REG_RD(r,v) \
- __asm__ __volatile__ ("move $" r ",%0" : "=r" (v));
- #define NOP() \
- __asm__ __volatile__ ("nop");
- #define SUPP_BANK_SEL(b) \
- SPEC_REG_WR(SPEC_REG_SRS,b); \
- NOP(); \
- NOP(); \
- NOP();
- #define SUPP_REG_WR(r,v) \
- __asm__ __volatile__ ("move %0, $S" STRINGIFYFY(r) "\n\t" \
- "nop\n\t" \
- "nop\n\t" \
- "nop\n\t" \
- : : "r" (v));
- #define SUPP_REG_RD(r,v) \
- __asm__ __volatile__ ("move $S" STRINGIFYFY(r) ",%0" : "=r" (v));
- #endif /* __SUPP_REG_H__ */
|