Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- lw $t0, __OSGlobalIntMask __OSGlobalIntMask
- xor $t2, $t0, ~0 ~__OSGlobalIntMask
- and $t2, SR_IMASK (~__OSGlobalIntMask) & SR_IMASK
- or $t4, $t1, $t2 (thread->sr & SR_IMASK) | ((~__OSGlobalIntMask) & SR_IMASK)
- = (thread->sr | (~__OSGlobalIntMask)) & SR_IMASK
- and $t3, $k1, ~SR_IMASK thread->sr & ~SR_IMASK
- and $t0, SR_IMASK __OSGlobalIntMask & SR_IMASK
- or $t3, $t4 (thread->sr & ~SR_IMASK) | (thread->sr & SR_IMASK) | ((~__OSGlobalIntMask) & SR_IMASK)
- = (thread->sr & ~SR_IMASK) | (thread->sr | (~__OSGlobalIntMask)) & SR_IMASK)
- and $t1, $t0 (thread->sr & SR_IMASK) & (__OSGlobalIntMask & SR_IMASK)
- = thread->sr & __OSGlobalIntMask & SR_IMASK
- and $k1, ~SR_IMASK thread->sr & ~SR_IMASK
- sw $t3, THREAD_SR($k0)
- or $k1, $t1 (thread->sr & ~SR_IMASK) | (thread->sr & __OSGlobalIntMask & SR_IMASK)
- (thread->sr & ~SR_IMASK) | (thread->sr | (~__OSGlobalIntMask)) & SR_IMASK)
- Leave bits outside of SR_IMASK alone, ???
- (thread->sr & ~SR_IMASK) | (thread->sr & __OSGlobalIntMask & SR_IMASK)
- Leave bits outside of SR_IMASK alone, while masking bits inside of SR_IMASK with __OSGlobalIntMask
- lw $t1, PHYS_TO_K1(MI_INTR_MASK_REG) MI_INTR_MASK_REG
- beqz $t1, endrcp
- nop
- lw $t0, __OSGlobalIntMask __OSGlobalIntMask
- lw $t4, THREAD_RCP($k0) thread->rcp
- srl $t0, RCP_IMASKSHIFT __OSGlobalIntMask >> RCP_IMASKSHIFT
- xor $t0, ~0 ~(__OSGlobalIntMask >> RCP_IMASKSHIFT)
- = (~__OSGlobalIntMask) >> RCP_IMASKSHIFT
- and $t0, (RCP_IMASK >> RCP_IMASKSHIFT) ~(__OSGlobalIntMask >> RCP_IMASKSHIFT) & (RCP_IMASK >> RCP_IMASKSHIFT)
- = ((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT
- and $t0, $t4 (((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT) & thread->rcp
- or $t1, $t0 MI_INTR_MASK_REG | ((((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT) & thread->rcp)
- endrcp:
- MI_INTR_MASK_REG | ((((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT) & thread->rcp)
- Value in MI_INTR_MASK_REG, and values in thread->rcp that are not set in the RCP bits of __OSGlobalIntMask
- lw $k1, THREAD_SR($a1) thread->sr
- and $t1, $k1, SR_IMASK thread->sr & SR_IMASK
- beqz $t1, 2f
- nop
- lw $t0, __OSGlobalIntMask __OSGlobalIntMask
- xor $t0, ~0 ~__OSGlobalIntMask
- and $t0, SR_IMASK (~__OSGlobalIntMask) & SR_IMASK
- or $t1, $t0 (thread->sr & SR_IMASK) | ((~__OSGlobalIntMask) & SR_IMASK)
- = (thread->sr | (~__OSGlobalIntMask)) & SR_IMASK
- and $k1, ~SR_IMASK thread->sr & ~SR_IMASK
- or $k1, $t1 (thread->sr & ~SR_IMASK) | ((thread->sr | (~__OSGlobalIntMask)) & SR_IMASK)
- sw $k1, THREAD_SR($a1)
- 2:
- (thread->sr & ~SR_IMASK) | ((thread->sr | (~__OSGlobalIntMask)) & SR_IMASK)
- Leave bits outside of SR_IMASK alone, ???
- lw $k1, PHYS_TO_K1(MI_INTR_MASK_REG) MI_INTR_MASK_REG
- beqz $k1, 3f
- nop
- lw $k0, __OSGlobalIntMask __OSGlobalIntMask
- lw $t0, THREAD_RCP($a1) thread->rcp
- srl $k0, RCP_IMASKSHIFT __OSGlobalIntMask >> RCP_IMASKSHIFT
- xor $k0, ~0 ~(__OSGlobalIntMask >> RCP_IMASKSHIFT)
- = (~__OSGlobalIntMask) >> RCP_IMASKSHIFT
- and $k0, (RCP_IMASK >> RCP_IMASKSHIFT) ((~__OSGlobalIntMask) >> RCP_IMASKSHIFT) & (RCP_IMASK >> RCP_IMASKSHIFT)
- = ((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT
- and $k0, $t0 (((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT) & thread->rcp
- or $k1, $k0 MI_INTR_MASK_REG | ((((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT) & thread->rcp)
- MI_INTR_MASK_REG | ((((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT) & thread->rcp)
- Value in MI_INTR_MASK_REG, and values in thread->rcp that are not set in the RCP bits of __OSGlobalIntMask
- move $k0, $v0
- lw $k1, THREAD_SR($k0) thread->sr
- lw $t0, __OSGlobalIntMask __OSGlobalIntMask
- and $t1, $k1, SR_IMASK thread->sr & SR_IMASK
- and $t0, SR_IMASK __OSGlobalIntMask & SR_IMASK
- and $t1, $t0 (thread->sr & SR_IMASK) & (__OSGlobalIntMask & SR_IMASK)
- and $k1, ~SR_IMASK thread->sr & ~SR_IMASK
- or $k1, $t1 (thread->sr & ~SR_IMASK) & (thread->sr & SR_IMASK) & (__OSGlobalIntMask & SR_IMASK)
- = (thread->sr & ~SR_IMASK) & (thread->sr & __OSGlobalIntMask & SR_IMASK)
- mtc0 $k1, C0_SR
- (thread->sr & ~SR_IMASK) & (thread->sr & __OSGlobalIntMask & SR_IMASK)
- Leave bits outside of SR_IMASK alone, mask values inside SR_IMASK with the global int mask
- lw $k1, THREAD_RCP($k0) thread->rcp
- lw $k0, __OSGlobalIntMask __OSGlobalIntMask
- srl $k0, RCP_IMASKSHIFT __OSGlobalIntMask >> RCP_IMASKSHIFT
- and $k1, $k0 thread->rcp & (__OSGlobalIntMask >> RCP_IMASKSHIFT)
- sll $k1, 1
- la $k0, __osRcpImTable
- addu $k1, $k1, $k0
- lhu $k1, ($k1) __osRcpImTable[thread->rcp & (__OSGlobalIntMask >> RCP_IMASKSHIFT)]
- la $k0, PHYS_TO_K1(MI_INTR_MASK_REG) MI_INTR_MASK_REG
- sw $k1, ($k0)
- thread->rcp & (__OSGlobalIntMask >> RCP_IMASKSHIFT)
- Mask values with the RCP bits of the global int mask
Advertisement
Add Comment
Please, Sign In to add comment