Thar0

__OSGlobalIntMask

Apr 12th, 2022
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.25 KB | None | 0 0
  1. lw $t0, __OSGlobalIntMask __OSGlobalIntMask
  2. xor $t2, $t0, ~0 ~__OSGlobalIntMask
  3. and $t2, SR_IMASK (~__OSGlobalIntMask) & SR_IMASK
  4. or $t4, $t1, $t2 (thread->sr & SR_IMASK) | ((~__OSGlobalIntMask) & SR_IMASK)
  5. = (thread->sr | (~__OSGlobalIntMask)) & SR_IMASK
  6. and $t3, $k1, ~SR_IMASK thread->sr & ~SR_IMASK
  7. and $t0, SR_IMASK __OSGlobalIntMask & SR_IMASK
  8. or $t3, $t4 (thread->sr & ~SR_IMASK) | (thread->sr & SR_IMASK) | ((~__OSGlobalIntMask) & SR_IMASK)
  9. = (thread->sr & ~SR_IMASK) | (thread->sr | (~__OSGlobalIntMask)) & SR_IMASK)
  10. and $t1, $t0 (thread->sr & SR_IMASK) & (__OSGlobalIntMask & SR_IMASK)
  11. = thread->sr & __OSGlobalIntMask & SR_IMASK
  12. and $k1, ~SR_IMASK thread->sr & ~SR_IMASK
  13. sw $t3, THREAD_SR($k0)
  14. or $k1, $t1 (thread->sr & ~SR_IMASK) | (thread->sr & __OSGlobalIntMask & SR_IMASK)
  15.  
  16. (thread->sr & ~SR_IMASK) | (thread->sr | (~__OSGlobalIntMask)) & SR_IMASK)
  17. Leave bits outside of SR_IMASK alone, ???
  18.  
  19. (thread->sr & ~SR_IMASK) | (thread->sr & __OSGlobalIntMask & SR_IMASK)
  20. Leave bits outside of SR_IMASK alone, while masking bits inside of SR_IMASK with __OSGlobalIntMask
  21.  
  22.  
  23.  
  24. lw $t1, PHYS_TO_K1(MI_INTR_MASK_REG) MI_INTR_MASK_REG
  25. beqz $t1, endrcp
  26. nop
  27. lw $t0, __OSGlobalIntMask __OSGlobalIntMask
  28. lw $t4, THREAD_RCP($k0) thread->rcp
  29. srl $t0, RCP_IMASKSHIFT __OSGlobalIntMask >> RCP_IMASKSHIFT
  30. xor $t0, ~0 ~(__OSGlobalIntMask >> RCP_IMASKSHIFT)
  31. = (~__OSGlobalIntMask) >> RCP_IMASKSHIFT
  32. and $t0, (RCP_IMASK >> RCP_IMASKSHIFT) ~(__OSGlobalIntMask >> RCP_IMASKSHIFT) & (RCP_IMASK >> RCP_IMASKSHIFT)
  33. = ((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT
  34. and $t0, $t4 (((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT) & thread->rcp
  35. or $t1, $t0 MI_INTR_MASK_REG | ((((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT) & thread->rcp)
  36. endrcp:
  37.  
  38. MI_INTR_MASK_REG | ((((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT) & thread->rcp)
  39. Value in MI_INTR_MASK_REG, and values in thread->rcp that are not set in the RCP bits of __OSGlobalIntMask
  40.  
  41.  
  42.  
  43. lw $k1, THREAD_SR($a1) thread->sr
  44. and $t1, $k1, SR_IMASK thread->sr & SR_IMASK
  45. beqz $t1, 2f
  46. nop
  47. lw $t0, __OSGlobalIntMask __OSGlobalIntMask
  48. xor $t0, ~0 ~__OSGlobalIntMask
  49. and $t0, SR_IMASK (~__OSGlobalIntMask) & SR_IMASK
  50. or $t1, $t0 (thread->sr & SR_IMASK) | ((~__OSGlobalIntMask) & SR_IMASK)
  51. = (thread->sr | (~__OSGlobalIntMask)) & SR_IMASK
  52. and $k1, ~SR_IMASK thread->sr & ~SR_IMASK
  53. or $k1, $t1 (thread->sr & ~SR_IMASK) | ((thread->sr | (~__OSGlobalIntMask)) & SR_IMASK)
  54. sw $k1, THREAD_SR($a1)
  55. 2:
  56.  
  57. (thread->sr & ~SR_IMASK) | ((thread->sr | (~__OSGlobalIntMask)) & SR_IMASK)
  58. Leave bits outside of SR_IMASK alone, ???
  59.  
  60.  
  61.  
  62. lw $k1, PHYS_TO_K1(MI_INTR_MASK_REG) MI_INTR_MASK_REG
  63. beqz $k1, 3f
  64. nop
  65. lw $k0, __OSGlobalIntMask __OSGlobalIntMask
  66. lw $t0, THREAD_RCP($a1) thread->rcp
  67. srl $k0, RCP_IMASKSHIFT __OSGlobalIntMask >> RCP_IMASKSHIFT
  68. xor $k0, ~0 ~(__OSGlobalIntMask >> RCP_IMASKSHIFT)
  69. = (~__OSGlobalIntMask) >> RCP_IMASKSHIFT
  70. and $k0, (RCP_IMASK >> RCP_IMASKSHIFT) ((~__OSGlobalIntMask) >> RCP_IMASKSHIFT) & (RCP_IMASK >> RCP_IMASKSHIFT)
  71. = ((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT
  72. and $k0, $t0 (((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT) & thread->rcp
  73. or $k1, $k0 MI_INTR_MASK_REG | ((((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT) & thread->rcp)
  74.  
  75. MI_INTR_MASK_REG | ((((~__OSGlobalIntMask) & RCP_IMASK) >> RCP_IMASKSHIFT) & thread->rcp)
  76. Value in MI_INTR_MASK_REG, and values in thread->rcp that are not set in the RCP bits of __OSGlobalIntMask
  77.  
  78.  
  79.  
  80. move $k0, $v0
  81. lw $k1, THREAD_SR($k0) thread->sr
  82. lw $t0, __OSGlobalIntMask __OSGlobalIntMask
  83. and $t1, $k1, SR_IMASK thread->sr & SR_IMASK
  84. and $t0, SR_IMASK __OSGlobalIntMask & SR_IMASK
  85. and $t1, $t0 (thread->sr & SR_IMASK) & (__OSGlobalIntMask & SR_IMASK)
  86. and $k1, ~SR_IMASK thread->sr & ~SR_IMASK
  87. or $k1, $t1 (thread->sr & ~SR_IMASK) & (thread->sr & SR_IMASK) & (__OSGlobalIntMask & SR_IMASK)
  88. = (thread->sr & ~SR_IMASK) & (thread->sr & __OSGlobalIntMask & SR_IMASK)
  89. mtc0 $k1, C0_SR
  90.  
  91. (thread->sr & ~SR_IMASK) & (thread->sr & __OSGlobalIntMask & SR_IMASK)
  92. Leave bits outside of SR_IMASK alone, mask values inside SR_IMASK with the global int mask
  93.  
  94.  
  95.  
  96. lw $k1, THREAD_RCP($k0) thread->rcp
  97. lw $k0, __OSGlobalIntMask __OSGlobalIntMask
  98. srl $k0, RCP_IMASKSHIFT __OSGlobalIntMask >> RCP_IMASKSHIFT
  99. and $k1, $k0 thread->rcp & (__OSGlobalIntMask >> RCP_IMASKSHIFT)
  100. sll $k1, 1
  101. la $k0, __osRcpImTable
  102. addu $k1, $k1, $k0
  103. lhu $k1, ($k1) __osRcpImTable[thread->rcp & (__OSGlobalIntMask >> RCP_IMASKSHIFT)]
  104. la $k0, PHYS_TO_K1(MI_INTR_MASK_REG) MI_INTR_MASK_REG
  105. sw $k1, ($k0)
  106.  
  107. thread->rcp & (__OSGlobalIntMask >> RCP_IMASKSHIFT)
  108. Mask values with the RCP bits of the global int mask
  109.  
Advertisement
Add Comment
Please, Sign In to add comment