osSetIntMask.s (2835B)
1 .set noat // allow manual use of $at 2 .set noreorder // don't insert nops after branches 3 4 #include "macros.inc" 5 6 #include <PR/R4300.h> 7 #include <PR/rcp.h> 8 #include <PR/os.h> 9 10 .section .text, "ax" 11 12 glabel osSetIntMask 13 #if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) 14 mfc0 $t4, $12 15 andi $v0, $t4, OS_IM_CPU 16 lui $t0, %hi(__OSGlobalIntMask) // $t0, 0x8030 17 addiu $t0, %lo(__OSGlobalIntMask) // addiu $t0, $t0, 0x208c 18 lw $t3, ($t0) 19 li $at, 0xFFFFFFFF 20 xor $t0, $t3, $at 21 andi $t0, $t0, SR_IMASK 22 or $v0, $v0, $t0 23 #else 24 mfc0 $t1, $12 25 andi $v0, $t1, OS_IM_CPU 26 #endif 27 lui $t2, %hi(PHYS_TO_K1(MI_INTR_MASK_REG)) // $t2, 0xa430 28 lw $t2, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($t2) 29 #if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) 30 beqz $t2, .L80200074 31 srl $t1, $t3, 0x10 32 li $at, 0xFFFFFFFF 33 xor $t1, $t1, $at 34 andi $t1, $t1, 0x3f 35 or $t2, $t2, $t1 36 .L80200074: 37 #endif 38 sll $t2, $t2, 0x10 39 or $v0, $v0, $t2 40 lui $at, 0x3f 41 and $t0, $a0, $at 42 #if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) 43 and $t0, $t0, $t3 44 #endif 45 srl $t0, $t0, 0xf 46 lui $t2, %hi(__osRcpImTable) 47 addu $t2, $t2, $t0 48 lhu $t2, %lo(__osRcpImTable)($t2) 49 lui $at, %hi(PHYS_TO_K1(MI_INTR_MASK_REG)) // $at, 0xa430 50 sw $t2, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($at) 51 andi $t0, $a0, OS_IM_CPU 52 #if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) 53 andi $t1, $t3, 0xff00 54 and $t0, $t0, $t1 55 #endif 56 lui $at, (0xFFFF00FF >> 16) // lui $at, 0xffff 57 ori $at, (0xFFFF00FF & 0xFFFF) // ori $at, $at, 0xff 58 #if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN) 59 and $t4, $t4, $at 60 or $t4, $t4, $t0 61 mtc0 $t4, $12 62 #else 63 and $t1, $t1, $at 64 or $t1, $t1, $t0 65 mtc0 $t1, $12 66 #endif 67 nop 68 nop 69 jr $ra 70 nop 71 72 73 .section .rodata 74 75 glabel __osRcpImTable 76 .half 0x0555 77 .half 0x0556 78 .half 0x0559 79 .half 0x055A 80 .half 0x0565 81 .half 0x0566 82 .half 0x0569 83 .half 0x056A 84 .half 0x0595 85 .half 0x0596 86 .half 0x0599 87 .half 0x059A 88 .half 0x05A5 89 .half 0x05A6 90 .half 0x05A9 91 .half 0x05AA 92 .half 0x0655 93 .half 0x0656 94 .half 0x0659 95 .half 0x065A 96 .half 0x0665 97 .half 0x0666 98 .half 0x0669 99 .half 0x066A 100 .half 0x0695 101 .half 0x0696 102 .half 0x0699 103 .half 0x069A 104 .half 0x06A5 105 .half 0x06A6 106 .half 0x06A9 107 .half 0x06AA 108 .half 0x0955 109 .half 0x0956 110 .half 0x0959 111 .half 0x095A 112 .half 0x0965 113 .half 0x0966 114 .half 0x0969 115 .half 0x096A 116 .half 0x0995 117 .half 0x0996 118 .half 0x0999 119 .half 0x099A 120 .half 0x09A5 121 .half 0x09A6 122 .half 0x09A9 123 .half 0x09AA 124 .half 0x0A55 125 .half 0x0A56 126 .half 0x0A59 127 .half 0x0A5A 128 .half 0x0A65 129 .half 0x0A66 130 .half 0x0A69 131 .half 0x0A6A 132 .half 0x0A95 133 .half 0x0A96 134 .half 0x0A99 135 .half 0x0A9A 136 .half 0x0AA5 137 .half 0x0AA6 138 .half 0x0AA9 139 .half 0x0AAA