forked from Ports/perfect_dark
Annotate exceptasm.s
This commit is contained in:
1 parent
21cda43806
commit
b4355ab55f
2 files changed
+285
-255
No files matched your search
+1
-1
@@ -492,7 +492,7 @@ glabel tlbHandleMiss
|
|||||||
j .L00001268
|
j .L00001268
|
||||||
nop
|
nop
|
||||||
.L0000162c:
|
.L0000162c:
|
||||||
j L00003a88
|
j handle_fault
|
||||||
nop
|
nop
|
||||||
|
|
||||||
glabel tlbUnmapRange
|
glabel tlbUnmapRange
|
||||||
|
|||||||
+284
-254
@@ -1,9 +1,14 @@
|
|||||||
#include "asm_helper.h"
|
#include "asm_helper.h"
|
||||||
#include "macros.inc"
|
#include "macros.inc"
|
||||||
|
#include "PR/os_exception.h"
|
||||||
|
#include "PR/os_message.h"
|
||||||
|
#include "PR/os_thread.h"
|
||||||
.set noat
|
.set noat
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.set gp=64
|
.set gp=64
|
||||||
|
|
||||||
|
#define SIZEOF_OSEVENTSTATE 0x8
|
||||||
|
|
||||||
.data
|
.data
|
||||||
|
|
||||||
glabel __osHwIntTable
|
glabel __osHwIntTable
|
||||||
@@ -55,31 +60,29 @@ __osIntOffTable:
|
|||||||
.byte CART
|
.byte CART
|
||||||
|
|
||||||
__osIntTable:
|
__osIntTable:
|
||||||
.word .L00003a3c
|
.word .handle_intr_redispatch
|
||||||
.word .L000039c8
|
.word .handle_intr_sw1
|
||||||
.word .L000039a8
|
.word .handle_intr_sw2
|
||||||
.word .L0000380c
|
.word .handle_intr_rcp
|
||||||
.word .L000037c8
|
.word .handle_intr_cart
|
||||||
.word .L0000394c
|
.word .handle_intr_prenmi
|
||||||
.word .L00003790
|
.word .handle_intr_ip6
|
||||||
.word .L0000379c
|
.word .handle_intr_ip7
|
||||||
.word .L000037a8
|
.word .handle_intr_counter
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
glabel __osExceptionPreamble
|
glabel __osExceptionPreamble
|
||||||
lui $k0, %hi(__osException)
|
la $k0, __osException
|
||||||
addiu $k0, $k0, %lo(__osException)
|
|
||||||
jr $k0
|
jr $k0
|
||||||
nop
|
nop
|
||||||
|
|
||||||
glabel __osException
|
glabel __osException
|
||||||
lui $k0, %hi(__osThreadSave)
|
la $k0, __osThreadSave
|
||||||
addiu $k0, $k0, %lo(__osThreadSave)
|
|
||||||
sd $at, 0x20($k0)
|
sd $at, 0x20($k0)
|
||||||
mfc0 $k1, C0_SR
|
mfc0 $k1, C0_SR
|
||||||
sw $k1, 0x118($k0)
|
sw $k1, 0x118($k0)
|
||||||
li $at, -4
|
li $at, ~(SR_IE | SR_EXL)
|
||||||
and $k1, $k1, $at
|
and $k1, $k1, $at
|
||||||
mtc0 $k1, C0_SR
|
mtc0 $k1, C0_SR
|
||||||
sd $t0, 0x58($k0)
|
sd $t0, 0x58($k0)
|
||||||
@@ -87,9 +90,11 @@ glabel __osException
|
|||||||
sd $t2, 0x68($k0)
|
sd $t2, 0x68($k0)
|
||||||
sw $zero, 0x18($k0)
|
sw $zero, 0x18($k0)
|
||||||
mfc0 $t0, C0_CAUSE
|
mfc0 $t0, C0_CAUSE
|
||||||
|
|
||||||
|
# Set t0 = &__osThreadSave
|
||||||
|
# Set k0 = __osRunningThread
|
||||||
move $t0, $k0
|
move $t0, $k0
|
||||||
lui $k0, %hi(__osRunningThread)
|
lw $k0, __osRunningThread
|
||||||
lw $k0, %lo(__osRunningThread)($k0)
|
|
||||||
ld $t1, 0x20($t0)
|
ld $t1, 0x20($t0)
|
||||||
sd $t1, 0x20($k0)
|
sd $t1, 0x20($k0)
|
||||||
ld $t1, 0x118($t0)
|
ld $t1, 0x118($t0)
|
||||||
@@ -104,7 +109,7 @@ glabel __osException
|
|||||||
mflo $t0
|
mflo $t0
|
||||||
sd $t0, 0x108($k0)
|
sd $t0, 0x108($k0)
|
||||||
mfhi $t0
|
mfhi $t0
|
||||||
andi $t1, $k1, 0xff00
|
andi $t1, $k1, SR_IMASK
|
||||||
sd $v0, 0x28($k0)
|
sd $v0, 0x28($k0)
|
||||||
sd $v1, 0x30($k0)
|
sd $v1, 0x30($k0)
|
||||||
sd $a0, 0x38($k0)
|
sd $a0, 0x38($k0)
|
||||||
@@ -130,46 +135,49 @@ glabel __osException
|
|||||||
sd $sp, 0xf0($k0)
|
sd $sp, 0xf0($k0)
|
||||||
sd $s8, 0xf8($k0)
|
sd $s8, 0xf8($k0)
|
||||||
sd $ra, 0x100($k0)
|
sd $ra, 0x100($k0)
|
||||||
beqz $t1, .L00003628
|
beqz $t1, .after_interrupt_mask
|
||||||
sd $t0, 0x110($k0)
|
sd $t0, 0x110($k0)
|
||||||
lui $t0, %hi(__osGlobalIntMask)
|
|
||||||
addiu $t0, $t0, %lo(__osGlobalIntMask)
|
la $t0, __osGlobalIntMask
|
||||||
lw $t0, 0x0($t0)
|
lw $t0, 0x0($t0)
|
||||||
li $at, -1
|
li $at, 0xffffffff
|
||||||
xor $t2, $t0, $at
|
xor $t2, $t0, $at
|
||||||
lui $at, 0xffff
|
lui $at, 0xffff
|
||||||
andi $t2, $t2, 0xff00
|
andi $t2, $t2, SR_IMASK
|
||||||
ori $at, $at, 0xff
|
ori $at, $at, 0xff
|
||||||
or $t4, $t1, $t2
|
or $t4, $t1, $t2
|
||||||
and $t3, $k1, $at
|
and $t3, $k1, $at
|
||||||
andi $t0, $t0, 0xff00
|
andi $t0, $t0, SR_IMASK
|
||||||
or $t3, $t3, $t4
|
or $t3, $t3, $t4
|
||||||
and $t1, $t1, $t0
|
and $t1, $t1, $t0
|
||||||
and $k1, $k1, $at
|
and $k1, $k1, $at
|
||||||
sw $t3, 0x118($k0)
|
sw $t3, 0x118($k0)
|
||||||
or $k1, $k1, $t1
|
or $k1, $k1, $t1
|
||||||
.L00003628:
|
|
||||||
lui $t1, 0xa430
|
.after_interrupt_mask:
|
||||||
lw $t1, 0xc($t1)
|
lw $t1, PHYS_TO_K1(MI_INTR_MASK_REG)
|
||||||
beqzl $t1, .L00003664
|
beqzl $t1, .after_mi_interrupt_reg
|
||||||
sw $t1, 0x128($k0)
|
sw $t1, 0x128($k0)
|
||||||
lui $t0, %hi(__osGlobalIntMask)
|
|
||||||
addiu $t0, $t0, %lo(__osGlobalIntMask)
|
la $t0, __osGlobalIntMask
|
||||||
lw $t0, 0x0($t0)
|
lw $t0, 0x0($t0)
|
||||||
lw $t4, 0x128($k0)
|
lw $t4, 0x128($k0)
|
||||||
li $at, -1
|
li $at, 0xffffffff
|
||||||
srl $t0, $t0, 0x10
|
srl $t0, $t0, 0x10
|
||||||
xor $t0, $t0, $at
|
xor $t0, $t0, $at
|
||||||
andi $t0, $t0, 0x3f
|
andi $t0, $t0, 0x3f
|
||||||
and $t0, $t0, $t4
|
and $t0, $t0, $t4
|
||||||
or $t1, $t1, $t0
|
or $t1, $t1, $t0
|
||||||
sw $t1, 0x128($k0)
|
sw $t1, 0x128($k0)
|
||||||
.L00003664:
|
|
||||||
|
.after_mi_interrupt_reg:
|
||||||
mfc0 $t0, C0_EPC
|
mfc0 $t0, C0_EPC
|
||||||
sw $t0, 0x11c($k0)
|
sw $t0, 0x11c($k0)
|
||||||
|
|
||||||
lw $t0, 0x18($k0)
|
lw $t0, 0x18($k0)
|
||||||
beqz $t0, .L00003704
|
beqz $t0, .after_fp
|
||||||
nop
|
nop
|
||||||
|
|
||||||
cfc1 $t0, $31
|
cfc1 $t0, $31
|
||||||
nop
|
nop
|
||||||
sw $t0, 0x12c($k0)
|
sw $t0, 0x12c($k0)
|
||||||
@@ -205,37 +213,48 @@ glabel __osException
|
|||||||
sdc1 $f29, 0x218($k0)
|
sdc1 $f29, 0x218($k0)
|
||||||
sdc1 $f30, 0x220($k0)
|
sdc1 $f30, 0x220($k0)
|
||||||
sdc1 $f31, 0x228($k0)
|
sdc1 $f31, 0x228($k0)
|
||||||
.L00003704:
|
|
||||||
|
.after_fp:
|
||||||
mfc0 $t0, C0_CAUSE
|
mfc0 $t0, C0_CAUSE
|
||||||
sw $t0, 0x120($k0)
|
sw $t0, 0x120($k0)
|
||||||
li $t1, 0x2
|
|
||||||
|
li $t1, OS_STATE_RUNNABLE
|
||||||
sh $t1, 0x10($k0)
|
sh $t1, 0x10($k0)
|
||||||
andi $t1, $t0, 0x7c
|
|
||||||
li $t2, 0x8
|
andi $t1, $t0, CAUSE_EXCMASK
|
||||||
beq $t1, $t2, .L000039e8
|
|
||||||
|
li $t2, EXC_RMISS
|
||||||
|
beq $t1, $t2, .handle_rmiss
|
||||||
nop
|
nop
|
||||||
li $t2, 0xc
|
|
||||||
beq $t1, $t2, .L000039f8
|
li $t2, EXC_WMISS
|
||||||
|
beq $t1, $t2, .handle_wmiss
|
||||||
nop
|
nop
|
||||||
li $t2, 0x24
|
|
||||||
beql $t1, $t2, .L00003a04
|
li $t2, EXC_BREAK
|
||||||
li $t1, 0x1
|
beql $t1, $t2, .handle_break
|
||||||
li $t2, 0x2c
|
li $t1, OS_FLAG_CPU_BREAK
|
||||||
beq $t1, $t2, .L00003b6c
|
|
||||||
|
li $t2, EXC_CPU
|
||||||
|
beq $t1, $t2, .handle_cpu
|
||||||
nop
|
nop
|
||||||
li $t2, 0x0
|
|
||||||
bne $t1, $t2, L00003a88
|
li $t2, EXC_INT
|
||||||
|
bne $t1, $t2, handle_fault
|
||||||
nop
|
nop
|
||||||
|
|
||||||
|
.handle_interrupt:
|
||||||
and $s0, $k1, $t0
|
and $s0, $k1, $t0
|
||||||
.L00003758:
|
|
||||||
andi $t1, $s0, 0xff00
|
.interrupt_loop_outer:
|
||||||
.L0000375c:
|
andi $t1, $s0, CAUSE_IPMASK
|
||||||
|
.interrupt_loop_inner:
|
||||||
srl $t2, $t1, 0xc
|
srl $t2, $t1, 0xc
|
||||||
bnez $t2, .L00003770
|
bnez $t2, .after_get_upper
|
||||||
nop
|
nop
|
||||||
srl $t2, $t1, 0x8
|
srl $t2, $t1, 0x8
|
||||||
addi $t2, $t2, 0x10
|
addi $t2, $t2, 0x10
|
||||||
.L00003770:
|
.after_get_upper:
|
||||||
lui $at, %hi(__osIntOffTable)
|
lui $at, %hi(__osIntOffTable)
|
||||||
addu $at, $at, $t2
|
addu $at, $at, $t2
|
||||||
lbu $t2, %lo(__osIntOffTable)($at)
|
lbu $t2, %lo(__osIntOffTable)($at)
|
||||||
@@ -244,247 +263,254 @@ glabel __osException
|
|||||||
lw $t2, %lo(__osIntTable)($at)
|
lw $t2, %lo(__osIntTable)($at)
|
||||||
jr $t2
|
jr $t2
|
||||||
nop
|
nop
|
||||||
.L00003790:
|
|
||||||
li $at, -8193
|
.handle_intr_ip6:
|
||||||
b .L00003758
|
li $at, ~CAUSE_IP6
|
||||||
|
b .interrupt_loop_outer
|
||||||
and $s0, $s0, $at
|
and $s0, $s0, $at
|
||||||
.L0000379c:
|
|
||||||
li $at, -16385
|
.handle_intr_ip7:
|
||||||
b .L00003758
|
li $at, ~CAUSE_IP7
|
||||||
|
b .interrupt_loop_outer
|
||||||
and $s0, $s0, $at
|
and $s0, $s0, $at
|
||||||
.L000037a8:
|
|
||||||
|
.handle_intr_counter:
|
||||||
mfc0 $t1, C0_COMPARE
|
mfc0 $t1, C0_COMPARE
|
||||||
mtc0 $t1, C0_COMPARE
|
mtc0 $t1, C0_COMPARE
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x18
|
li $a0, OS_EVENT_COUNTER * SIZEOF_OSEVENTSTATE
|
||||||
lui $at, 0xffff
|
li $at, ~CAUSE_IP8
|
||||||
ori $at, $at, 0x7fff
|
b .interrupt_loop_outer
|
||||||
b .L00003758
|
|
||||||
and $s0, $s0, $at
|
and $s0, $s0, $at
|
||||||
.L000037c8:
|
|
||||||
lui $t1, %hi(__osHwIntTable)
|
.handle_intr_cart:
|
||||||
addiu $t1, $t1, %lo(__osHwIntTable)
|
la $t1, __osHwIntTable
|
||||||
lw $t2, 0x8($t1)
|
lw $t2, 0x8($t1)
|
||||||
li $at, -2049
|
li $at, ~CAUSE_IP4
|
||||||
and $s0, $s0, $at
|
and $s0, $s0, $at
|
||||||
beqz $t2, .L000037fc
|
beqz $t2, .no_cart_override
|
||||||
addi $t1, $t1, 0x8
|
addi $t1, $t1, 0x8
|
||||||
jalr $t2
|
jalr $t2
|
||||||
lw $sp, 0x4($t1)
|
lw $sp, 0x4($t1)
|
||||||
beqz $v0, .L000037fc
|
beqz $v0, .no_cart_override
|
||||||
nop
|
nop
|
||||||
b .L00003a3c
|
b .dispatch_thread
|
||||||
nop
|
nop
|
||||||
.L000037fc:
|
.no_cart_override:
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x10
|
li $a0, OS_EVENT_CART * SIZEOF_OSEVENTSTATE
|
||||||
b .L0000375c
|
b .interrupt_loop_inner
|
||||||
andi $t1, $s0, 0xff00
|
andi $t1, $s0, CAUSE_IPMASK
|
||||||
.L0000380c:
|
|
||||||
lui $t0, %hi(__osGlobalIntMask)
|
.handle_intr_rcp:
|
||||||
addiu $t0, $t0, %lo(__osGlobalIntMask)
|
la $t0, __osGlobalIntMask
|
||||||
lw $t0, 0x0($t0)
|
lw $t0, 0x0($t0)
|
||||||
lui $s1, 0xa430
|
lw $s1, PHYS_TO_K1(MI_INTR_REG)
|
||||||
lw $s1, 0x8($s1)
|
|
||||||
srl $t0, $t0, 0x10
|
srl $t0, $t0, 0x10
|
||||||
and $s1, $s1, $t0
|
and $s1, $s1, $t0
|
||||||
andi $t1, $s1, 0x1
|
andi $t1, $s1, 0x1
|
||||||
beqzl $t1, .L00003880
|
beqzl $t1, .after_sp_break
|
||||||
andi $t1, $s1, 0x8
|
andi $t1, $s1, 0x8
|
||||||
lui $t4, 0xa404
|
lw $t4, PHYS_TO_K1(SP_STATUS_REG)
|
||||||
lw $t4, 0x10($t4)
|
li $t1, SP_CLR_INTR | SP_CLR_SIG3
|
||||||
dli $t1, 0x8008
|
lui $at, %hi(PHYS_TO_K1(SP_STATUS_REG))
|
||||||
lui $at, 0xa404
|
andi $t4, $t4, SP_STATUS_SIG1 | SP_STATUS_SIG2
|
||||||
andi $t4, $t4, 0x300
|
|
||||||
andi $s1, $s1, 0x3e
|
andi $s1, $s1, 0x3e
|
||||||
beqz $t4, .L0000386c
|
beqz $t4, .sp_break
|
||||||
sw $t1, 0x10($at)
|
sw $t1, %lo(PHYS_TO_K1(SP_STATUS_REG))($at)
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x20
|
li $a0, OS_EVENT_SP * SIZEOF_OSEVENTSTATE
|
||||||
beqzl $s1, .L00003944
|
beqzl $s1, .after_clear_all_interrupts
|
||||||
li $at, -1025
|
li $at, ~CAUSE_IP3
|
||||||
b .L00003880
|
b .after_sp_break
|
||||||
andi $t1, $s1, 0x8
|
andi $t1, $s1, 0x8
|
||||||
.L0000386c:
|
.sp_break:
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x58
|
li $a0, OS_EVENT_SP_BREAK * SIZEOF_OSEVENTSTATE
|
||||||
beqzl $s1, .L00003944
|
beqzl $s1, .after_clear_all_interrupts
|
||||||
li $at, -1025
|
li $at, ~CAUSE_IP3
|
||||||
andi $t1, $s1, 0x8
|
andi $t1, $s1, 0x8
|
||||||
.L00003880:
|
.after_sp_break:
|
||||||
beqz $t1, .L000038a0
|
beqz $t1, .after_clear_vi_current
|
||||||
lui $at, 0xa440
|
lui $at, %hi(PHYS_TO_K1(VI_CURRENT_REG))
|
||||||
andi $s1, $s1, 0x37
|
andi $s1, $s1, 0x37
|
||||||
sw $zero, 0x10($at)
|
sw $zero, %lo(PHYS_TO_K1(VI_CURRENT_REG))($at)
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x38
|
li $a0, OS_EVENT_VI * SIZEOF_OSEVENTSTATE
|
||||||
beqzl $s1, .L00003944
|
beqzl $s1, .after_clear_all_interrupts
|
||||||
li $at, -1025
|
li $at, ~CAUSE_IP3
|
||||||
.L000038a0:
|
.after_clear_vi_current:
|
||||||
andi $t1, $s1, 0x4
|
andi $t1, $s1, 0x4
|
||||||
beqzl $t1, .L000038d0
|
beqzl $t1, .after_clear_ai_interrupt
|
||||||
andi $t1, $s1, 0x2
|
andi $t1, $s1, 0x2
|
||||||
li $t1, 0x1
|
li $t1, 1
|
||||||
lui $at, 0xa450
|
lui $at, %hi(PHYS_TO_K1(AI_STATUS_REG))
|
||||||
andi $s1, $s1, 0x3b
|
andi $s1, $s1, 0x3b
|
||||||
sw $t1, 0xc($at)
|
sw $t1, %lo(PHYS_TO_K1(AI_STATUS_REG))($at)
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x30
|
li $a0, OS_EVENT_AI * SIZEOF_OSEVENTSTATE
|
||||||
beqzl $s1, .L00003944
|
beqzl $s1, .after_clear_all_interrupts
|
||||||
li $at, -1025
|
li $at, ~CAUSE_IP3
|
||||||
andi $t1, $s1, 0x2
|
andi $t1, $s1, 0x2
|
||||||
.L000038d0:
|
.after_clear_ai_interrupt:
|
||||||
beqz $t1, .L000038f0
|
beqz $t1, .after_clear_si_interrupt
|
||||||
lui $at, 0xa480
|
lui $at, %hi(PHYS_TO_K1(SI_STATUS_REG))
|
||||||
andi $s1, $s1, 0x3d
|
andi $s1, $s1, 0x3d
|
||||||
sw $zero, 0x18($at)
|
sw $zero, %lo(PHYS_TO_K1(SI_STATUS_REG))($at)
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x28
|
li $a0, OS_EVENT_SI * SIZEOF_OSEVENTSTATE
|
||||||
beqzl $s1, .L00003944
|
beqzl $s1, .after_clear_all_interrupts
|
||||||
li $at, -1025
|
li $at, ~CAUSE_IP3
|
||||||
.L000038f0:
|
.after_clear_si_interrupt:
|
||||||
andi $t1, $s1, 0x10
|
andi $t1, $s1, 0x10
|
||||||
beqzl $t1, .L00003920
|
beqzl $t1, .after_clear_pi_interrupt
|
||||||
andi $t1, $s1, 0x20
|
andi $t1, $s1, 0x20
|
||||||
li $t1, 0x2
|
li $t1, PI_STATUS_CLR_INTR
|
||||||
lui $at, 0xa460
|
lui $at, %hi(PHYS_TO_K1(PI_STATUS_REG))
|
||||||
andi $s1, $s1, 0x2f
|
andi $s1, $s1, 0x2f
|
||||||
sw $t1, 0x10($at)
|
sw $t1, %lo(PHYS_TO_K1(PI_STATUS_REG))($at)
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x40
|
li $a0, OS_EVENT_PI * SIZEOF_OSEVENTSTATE
|
||||||
beqzl $s1, .L00003944
|
beqzl $s1, .after_clear_all_interrupts
|
||||||
li $at, -1025
|
li $at, ~CAUSE_IP3
|
||||||
andi $t1, $s1, 0x20
|
andi $t1, $s1, 0x20
|
||||||
.L00003920:
|
.after_clear_pi_interrupt:
|
||||||
beqzl $t1, .L00003944
|
beqzl $t1, .after_clear_dp_interrupt
|
||||||
li $at, -1025
|
li $at, ~CAUSE_IP3
|
||||||
li $t1, 0x800
|
li $t1, MI_CLR_DP_INTR
|
||||||
lui $at, 0xa430
|
lui $at, %hi(PHYS_TO_K1(MI_MODE_REG))
|
||||||
andi $s1, $s1, 0x1f
|
andi $s1, $s1, 0x1f
|
||||||
sw $t1, 0x0($at)
|
sw $t1, %lo(PHYS_TO_K1(MI_MODE_REG))($at)
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x48
|
li $a0, OS_EVENT_DP * SIZEOF_OSEVENTSTATE
|
||||||
li $at, -1025
|
li $at, ~CAUSE_IP3
|
||||||
.L00003944:
|
.after_clear_dp_interrupt:
|
||||||
b .L00003758
|
.after_clear_all_interrupts:
|
||||||
|
b .interrupt_loop_outer
|
||||||
and $s0, $s0, $at
|
and $s0, $s0, $at
|
||||||
.L0000394c:
|
|
||||||
|
.handle_intr_prenmi:
|
||||||
lw $k1, 0x118($k0)
|
lw $k1, 0x118($k0)
|
||||||
li $at, -4097
|
li $at, ~CAUSE_IP5
|
||||||
lui $t1, %hi(_osShutdown)
|
lui $t1, %hi(_osShutdown)
|
||||||
and $k1, $k1, $at
|
and $k1, $k1, $at
|
||||||
sw $k1, 0x118($k0)
|
sw $k1, 0x118($k0)
|
||||||
addiu $t1, $t1, %lo(_osShutdown)
|
addiu $t1, $t1, %lo(_osShutdown)
|
||||||
lw $t2, 0x0($t1)
|
lw $t2, 0x0($t1)
|
||||||
beqz $t2, .L00003978
|
beqz $t2, .not_shutting_down
|
||||||
li $at, -4097
|
li $at, ~CAUSE_IP5
|
||||||
b .L00003a3c
|
b .dispatch_thread
|
||||||
and $s0, $s0, $at
|
and $s0, $s0, $at
|
||||||
.L00003978:
|
.not_shutting_down:
|
||||||
li $t2, 0x1
|
li $t2, 0x1
|
||||||
sw $t2, 0x0($t1)
|
sw $t2, 0x0($t1)
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x70
|
li $a0, OS_EVENT_PRENMI * SIZEOF_OSEVENTSTATE
|
||||||
lui $t2, %hi(__osRunQueue)
|
lui $t2, %hi(__osRunQueue)
|
||||||
lw $t2, %lo(__osRunQueue)($t2)
|
lw $t2, %lo(__osRunQueue)($t2)
|
||||||
li $at, -4097
|
li $at, ~CAUSE_IP5
|
||||||
and $s0, $s0, $at
|
and $s0, $s0, $at
|
||||||
lw $k1, 0x118($t2)
|
lw $k1, 0x118($t2)
|
||||||
and $k1, $k1, $at
|
and $k1, $k1, $at
|
||||||
b .L00003a3c
|
b .dispatch_thread
|
||||||
sw $k1, 0x118($t2)
|
sw $k1, 0x118($t2)
|
||||||
.L000039a8:
|
|
||||||
li $at, -513
|
.handle_intr_sw2:
|
||||||
|
li $at, ~CAUSE_SW2
|
||||||
and $t0, $t0, $at
|
and $t0, $t0, $at
|
||||||
mtc0 $t0, C0_CAUSE
|
mtc0 $t0, C0_CAUSE
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x8
|
li $a0, OS_EVENT_SW2 * SIZEOF_OSEVENTSTATE
|
||||||
li $at, -513
|
li $at, ~CAUSE_SW2
|
||||||
b .L00003758
|
b .interrupt_loop_outer
|
||||||
and $s0, $s0, $at
|
and $s0, $s0, $at
|
||||||
.L000039c8:
|
|
||||||
li $at, -257
|
.handle_intr_sw1:
|
||||||
|
li $at, ~CAUSE_SW1
|
||||||
and $t0, $t0, $at
|
and $t0, $t0, $at
|
||||||
mtc0 $t0, C0_CAUSE
|
mtc0 $t0, C0_CAUSE
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x0
|
li $a0, OS_EVENT_SW1 * SIZEOF_OSEVENTSTATE
|
||||||
li $at, -257
|
li $at, ~CAUSE_SW1
|
||||||
b .L00003758
|
b .interrupt_loop_outer
|
||||||
and $s0, $s0, $at
|
and $s0, $s0, $at
|
||||||
.L000039e8:
|
|
||||||
|
.handle_rmiss:
|
||||||
jal tlbHandleMiss
|
jal tlbHandleMiss
|
||||||
nop
|
nop
|
||||||
b .L00003a3c
|
b .dispatch_thread
|
||||||
nop
|
nop
|
||||||
.L000039f8:
|
|
||||||
j L00003a88
|
.handle_wmiss:
|
||||||
|
j handle_fault
|
||||||
nop
|
nop
|
||||||
li $t1, 0x1
|
|
||||||
.L00003a04:
|
li $t1, OS_FLAG_CPU_BREAK
|
||||||
|
.handle_break:
|
||||||
sh $t1, 0x12($k0)
|
sh $t1, 0x12($k0)
|
||||||
lw $t1, 0x11c($k0)
|
lw $t1, 0x11c($k0)
|
||||||
li $at, 0x6
|
li $at, 0x6
|
||||||
lw $t1, 0x0($t1)
|
lw $t1, 0x0($t1)
|
||||||
srl $t1, $t1, 0x10
|
srl $t1, $t1, 0x10
|
||||||
andi $t1, $t1, 0xff
|
andi $t1, $t1, 0xff
|
||||||
beq $t1, $at, L00003a88
|
beq $t1, $at, handle_fault
|
||||||
li $at, 0x7
|
li $at, 0x7
|
||||||
beq $t1, $at, L00003a88
|
beq $t1, $at, handle_fault
|
||||||
nop
|
nop
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x50
|
li $a0, OS_EVENT_CPU_BREAK * SIZEOF_OSEVENTSTATE
|
||||||
b .L00003a3c
|
b .dispatch_thread
|
||||||
nop
|
nop
|
||||||
.L00003a3c:
|
|
||||||
lui $t2, %hi(__osRunQueue)
|
.handle_intr_redispatch:
|
||||||
lw $t2, %lo(__osRunQueue)($t2)
|
.dispatch_thread:
|
||||||
lw $t1, 0x4($k0)
|
lw $t2, __osRunQueue
|
||||||
lw $t3, 0x4($t2)
|
lw $t1, 0x4($k0) # t1 = __osRunningThread->priority
|
||||||
|
lw $t3, 0x4($t2) # t3 = __osRunQueue->priority
|
||||||
slt $at, $t1, $t3
|
slt $at, $t1, $t3
|
||||||
beqz $at, .L00003a70
|
beqz $at, .prepend_to_runqueue
|
||||||
nop
|
nop
|
||||||
|
# The run queue has the higher priority thread -> queue the running thread
|
||||||
lui $a0, %hi(__osRunQueue)
|
lui $a0, %hi(__osRunQueue)
|
||||||
move $a1, $k0
|
move $a1, $k0
|
||||||
jal __osEnqueueThread
|
jal __osEnqueueThread
|
||||||
addiu $a0, $a0, %lo(__osRunQueue)
|
addiu $a0, $a0, %lo(__osRunQueue)
|
||||||
j .L00003d10
|
j __osDispatchThread
|
||||||
nop
|
nop
|
||||||
.L00003a70:
|
.prepend_to_runqueue:
|
||||||
lui $t1, %hi(__osRunQueue)
|
la $t1, __osRunQueue
|
||||||
addiu $t1, $t1, %lo(__osRunQueue)
|
|
||||||
lw $t2, 0x0($t1)
|
lw $t2, 0x0($t1)
|
||||||
sw $t2, 0x0($k0)
|
sw $t2, 0x0($k0)
|
||||||
j .L00003d10
|
j __osDispatchThread
|
||||||
sw $k0, 0x0($t1)
|
sw $k0, 0x0($t1)
|
||||||
|
|
||||||
glabel L00003a88
|
glabel handle_fault
|
||||||
lui $at, %hi(__osFaultedThread)
|
lui $at, %hi(__osFaultedThread)
|
||||||
sw $k0, %lo(__osFaultedThread)($at)
|
sw $k0, %lo(__osFaultedThread)($at)
|
||||||
li $t1, 0x1
|
li $t1, OS_STATE_STOPPED
|
||||||
sh $t1, 0x10($k0)
|
sh $t1, 0x10($k0)
|
||||||
li $t1, 0x2
|
li $t1, OS_FLAG_FAULT
|
||||||
sh $t1, 0x12($k0)
|
sh $t1, 0x12($k0)
|
||||||
mfc0 $t2, C0_BADVADDR
|
mfc0 $t2, C0_BADVADDR
|
||||||
sw $t2, 0x124($k0)
|
sw $t2, 0x124($k0)
|
||||||
jal send_mesg
|
jal send_mesg
|
||||||
li $a0, 0x60
|
li $a0, OS_EVENT_FAULT * SIZEOF_OSEVENTSTATE
|
||||||
j .L00003d10
|
j __osDispatchThread
|
||||||
nop
|
nop
|
||||||
|
|
||||||
glabel send_mesg
|
glabel send_mesg
|
||||||
lui $t2, %hi(__osEventStateTab)
|
la $t2, __osEventStateTab
|
||||||
addiu $t2, $t2, %lo(__osEventStateTab)
|
addu $t2, $t2, $a0 # t2 = __OSEventState
|
||||||
addu $t2, $t2, $a0
|
lw $t1, 0x0($t2) # t1 = message queue
|
||||||
lw $t1, 0x0($t2)
|
|
||||||
move $s2, $ra
|
move $s2, $ra
|
||||||
beqz $t1, .L00003b64
|
beqz $t1, .send_mesg_return # No message queue
|
||||||
nop
|
nop
|
||||||
lw $t3, 0x8($t1)
|
lw $t3, 0x8($t1) # t3 = queue->validCount
|
||||||
lw $t4, 0x10($t1)
|
lw $t4, 0x10($t1) # t4 = queue->msgCount
|
||||||
slt $at, $t3, $t4
|
slt $at, $t3, $t4
|
||||||
beqz $at, .L00003b64
|
beqz $at, .send_mesg_return # Queue is full
|
||||||
nop
|
nop
|
||||||
lw $t5, 0xc($t1)
|
lw $t5, 0xc($t1) # t5 = queue->first
|
||||||
addu $t5, $t5, $t3
|
addu $t5, $t5, $t3
|
||||||
div $zero, $t5, $t4
|
div $zero, $t5, $t4
|
||||||
bnez $t4, .L00003b00
|
bnez $t4, .L00003b00
|
||||||
@@ -493,22 +519,22 @@ glabel send_mesg
|
|||||||
.L00003b00:
|
.L00003b00:
|
||||||
li $at, -1
|
li $at, -1
|
||||||
bne $t4, $at, .L00003b18
|
bne $t4, $at, .L00003b18
|
||||||
lui $at, 0x8000
|
li $at, 0x80000000
|
||||||
bne $t5, $at, .L00003b18
|
bne $t5, $at, .L00003b18
|
||||||
nop
|
nop
|
||||||
break 0x6
|
break 0x6
|
||||||
.L00003b18:
|
.L00003b18:
|
||||||
lw $t4, 0x14($t1)
|
lw $t4, 0x14($t1) # t4 = queue->msg
|
||||||
mfhi $t5
|
mfhi $t5
|
||||||
sll $t5, $t5, 0x2
|
sll $t5, $t5, 0x2
|
||||||
addu $t4, $t4, $t5
|
addu $t4, $t4, $t5
|
||||||
lw $t5, 0x4($t2)
|
lw $t5, 0x4($t2) # t5 = eventstate->message
|
||||||
addiu $t2, $t3, 0x1
|
addiu $t2, $t3, 0x1
|
||||||
sw $t5, 0x0($t4)
|
sw $t5, 0x0($t4)
|
||||||
sw $t2, 0x8($t1)
|
sw $t2, 0x8($t1)
|
||||||
lw $t2, 0x0($t1)
|
lw $t2, 0x0($t1)
|
||||||
lw $t3, 0x0($t2)
|
lw $t3, 0x0($t2)
|
||||||
beqz $t3, .L00003b64
|
beqz $t3, .send_mesg_return
|
||||||
nop
|
nop
|
||||||
jal __osPopThread
|
jal __osPopThread
|
||||||
move $a0, $t1
|
move $a0, $t1
|
||||||
@@ -517,30 +543,30 @@ glabel send_mesg
|
|||||||
move $a1, $t2
|
move $a1, $t2
|
||||||
jal __osEnqueueThread
|
jal __osEnqueueThread
|
||||||
addiu $a0, $a0, %lo(__osRunQueue)
|
addiu $a0, $a0, %lo(__osRunQueue)
|
||||||
.L00003b64:
|
.send_mesg_return:
|
||||||
jr $s2
|
jr $s2
|
||||||
nop
|
nop
|
||||||
.L00003b6c:
|
|
||||||
lui $at, 0x3000
|
.handle_cpu:
|
||||||
|
li $at, CAUSE_CEMASK
|
||||||
and $t1, $t0, $at
|
and $t1, $t0, $at
|
||||||
srl $t1, $t1, 0x1c
|
srl $t1, $t1, CAUSE_CESHIFT
|
||||||
li $t2, 0x1
|
li $t2, 1
|
||||||
bne $t1, $t2, L00003a88
|
bne $t1, $t2, handle_fault
|
||||||
nop
|
nop
|
||||||
lw $k1, 0x118($k0)
|
lw $k1, 0x118($k0)
|
||||||
lui $at, 0x2000
|
li $at, SR_CU1
|
||||||
li $t1, 0x1
|
li $t1, 1
|
||||||
or $k1, $k1, $at
|
or $k1, $k1, $at
|
||||||
sw $t1, 0x18($k0)
|
sw $t1, 0x18($k0) # Set __osRunningThread->fp = 1
|
||||||
b .L00003a70
|
b .prepend_to_runqueue
|
||||||
sw $k1, 0x118($k0)
|
sw $k1, 0x118($k0) # Set __osRunningThread->sr
|
||||||
|
|
||||||
glabel __osEnqueueAndYield
|
glabel __osEnqueueAndYield
|
||||||
lui $a1, %hi(__osRunningThread)
|
lw $a1, __osRunningThread
|
||||||
lw $a1, %lo(__osRunningThread)($a1)
|
|
||||||
mfc0 $t0, C0_SR
|
mfc0 $t0, C0_SR
|
||||||
lw $k1, 0x18($a1)
|
lw $k1, 0x18($a1)
|
||||||
ori $t0, $t0, 0x2
|
ori $t0, $t0, SR_EXL
|
||||||
sw $t0, 0x118($a1)
|
sw $t0, 0x118($a1)
|
||||||
sd $s0, 0x98($a1)
|
sd $s0, 0x98($a1)
|
||||||
sd $s1, 0xa0($a1)
|
sd $s1, 0xa0($a1)
|
||||||
@@ -554,7 +580,7 @@ glabel __osEnqueueAndYield
|
|||||||
sd $sp, 0xf0($a1)
|
sd $sp, 0xf0($a1)
|
||||||
sd $s8, 0xf8($a1)
|
sd $s8, 0xf8($a1)
|
||||||
sd $ra, 0x100($a1)
|
sd $ra, 0x100($a1)
|
||||||
beqz $k1, .L00003c28
|
beqz $k1, .after_store_fp
|
||||||
sw $ra, 0x11c($a1)
|
sw $ra, 0x11c($a1)
|
||||||
cfc1 $k1, $31
|
cfc1 $k1, $31
|
||||||
sdc1 $f20, 0x1d0($a1)
|
sdc1 $f20, 0x1d0($a1)
|
||||||
@@ -570,15 +596,14 @@ glabel __osEnqueueAndYield
|
|||||||
sdc1 $f30, 0x220($a1)
|
sdc1 $f30, 0x220($a1)
|
||||||
sdc1 $f31, 0x228($a1)
|
sdc1 $f31, 0x228($a1)
|
||||||
sw $k1, 0x12c($a1)
|
sw $k1, 0x12c($a1)
|
||||||
.L00003c28:
|
.after_store_fp:
|
||||||
lw $k1, 0x118($a1)
|
lw $k1, 0x118($a1)
|
||||||
andi $t1, $k1, 0xff00
|
andi $t1, $k1, SR_IMASK
|
||||||
beqzl $t1, .L00003c6c
|
beqzl $t1, .after_store_imask
|
||||||
lui $k1, 0xa430
|
la $k1, PHYS_TO_K1(MI_MODE_REG)
|
||||||
lui $t0, %hi(__osGlobalIntMask)
|
la $t0, __osGlobalIntMask
|
||||||
addiu $t0, $t0, %lo(__osGlobalIntMask)
|
|
||||||
lw $t0, 0x0($t0)
|
lw $t0, 0x0($t0)
|
||||||
li $at, -1
|
li $at, 0xffffffff
|
||||||
xor $t0, $t0, $at
|
xor $t0, $t0, $at
|
||||||
lui $at, 0xffff
|
lui $at, 0xffff
|
||||||
andi $t0, $t0, 0xff00
|
andi $t0, $t0, 0xff00
|
||||||
@@ -587,66 +612,73 @@ glabel __osEnqueueAndYield
|
|||||||
and $k1, $k1, $at
|
and $k1, $k1, $at
|
||||||
or $k1, $k1, $t1
|
or $k1, $k1, $t1
|
||||||
sw $k1, 0x118($a1)
|
sw $k1, 0x118($a1)
|
||||||
lui $k1, 0xa430
|
lui $k1, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
|
||||||
.L00003c6c:
|
.after_store_imask:
|
||||||
lw $k1, 0xc($k1)
|
lw $k1, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))($k1)
|
||||||
beqz $k1, .L00003ca0
|
beqz $k1, .after_load_imask
|
||||||
nop
|
nop
|
||||||
lui $k0, %hi(__osGlobalIntMask)
|
la $k0, __osGlobalIntMask
|
||||||
addiu $k0, $k0, %lo(__osGlobalIntMask)
|
|
||||||
lw $k0, 0x0($k0)
|
lw $k0, 0x0($k0)
|
||||||
lw $t0, 0x128($a1)
|
lw $t0, 0x128($a1)
|
||||||
li $at, -1
|
li $at, 0xffffffff
|
||||||
srl $k0, $k0, 0x10
|
srl $k0, $k0, 0x10
|
||||||
xor $k0, $k0, $at
|
xor $k0, $k0, $at
|
||||||
andi $k0, $k0, 0x3f
|
andi $k0, $k0, 0x3f
|
||||||
and $k0, $k0, $t0
|
and $k0, $k0, $t0
|
||||||
or $k1, $k1, $k0
|
or $k1, $k1, $k0
|
||||||
.L00003ca0:
|
.after_load_imask:
|
||||||
beqz $a0, .L00003cb0
|
beqz $a0, .after_enqueue
|
||||||
sw $k1, 0x128($a1)
|
sw $k1, 0x128($a1)
|
||||||
jal __osEnqueueThread
|
jal __osEnqueueThread
|
||||||
nop
|
nop
|
||||||
.L00003cb0:
|
.after_enqueue:
|
||||||
j .L00003d10
|
j __osDispatchThread
|
||||||
nop
|
nop
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a0 = OSThread **queue
|
||||||
|
* a1 = OSThread *thread
|
||||||
|
*/
|
||||||
glabel __osEnqueueThread
|
glabel __osEnqueueThread
|
||||||
lw $t8, 0x0($a0)
|
lw $t8, 0x0($a0) # t8 = queue->next
|
||||||
lw $t7, 0x4($a1)
|
lw $t7, 0x4($a1) # t7 = thread->priority
|
||||||
move $t9, $a0
|
move $t9, $a0 # iter = queue
|
||||||
lw $t6, 0x4($t8)
|
lw $t6, 0x4($t8) # t6 = queue->next->priority
|
||||||
slt $at, $t6, $t7
|
slt $at, $t6, $t7
|
||||||
bnezl $at, .L00003cf0
|
bnezl $at, .enqueue_here
|
||||||
lw $t8, 0x0($t9)
|
lw $t8, 0x0($t9)
|
||||||
|
|
||||||
move $t9, $t8
|
move $t9, $t8
|
||||||
.L00003cd8:
|
.enqueue_loop:
|
||||||
lw $t8, 0x0($t8)
|
lw $t8, 0x0($t8)
|
||||||
lw $t6, 0x4($t8)
|
lw $t6, 0x4($t8)
|
||||||
slt $at, $t6, $t7
|
slt $at, $t6, $t7
|
||||||
beqzl $at, .L00003cd8
|
beqzl $at, .enqueue_loop
|
||||||
move $t9, $t8
|
move $t9, $t8
|
||||||
lw $t8, 0x0($t9)
|
|
||||||
.L00003cf0:
|
|
||||||
sw $t8, 0x0($a1)
|
|
||||||
sw $a1, 0x0($t9)
|
|
||||||
jr $ra
|
|
||||||
sw $a0, 0x8($a1)
|
|
||||||
|
|
||||||
glabel __osPopThread
|
lw $t8, 0x0($t9)
|
||||||
lw $v0, 0x0($a0)
|
.enqueue_here:
|
||||||
lw $t9, 0x0($v0)
|
sw $t8, 0x0($a1) # thread->next = t8
|
||||||
|
sw $a1, 0x0($t9) # iter->next = thread
|
||||||
jr $ra
|
jr $ra
|
||||||
sw $t9, 0x0($a0)
|
sw $a0, 0x8($a1) # thread->queue = queue
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a0 = OSThread **queue
|
||||||
|
*/
|
||||||
|
glabel __osPopThread
|
||||||
|
lw $v0, 0x0($a0) # v0 = *queue
|
||||||
|
lw $t9, 0x0($v0) # t9 = v0->next
|
||||||
|
jr $ra
|
||||||
|
sw $t9, 0x0($a0) # *queue = t9
|
||||||
|
|
||||||
glabel __osDispatchThread
|
glabel __osDispatchThread
|
||||||
.L00003d10:
|
|
||||||
lui $a0, %hi(__osRunQueue)
|
lui $a0, %hi(__osRunQueue)
|
||||||
jal __osPopThread
|
jal __osPopThread
|
||||||
addiu $a0, $a0, %lo(__osRunQueue)
|
addiu $a0, $a0, %lo(__osRunQueue)
|
||||||
lui $at, %hi(__osRunningThread)
|
lui $at, %hi(__osRunningThread)
|
||||||
sw $v0, %lo(__osRunningThread)($at)
|
sw $v0, %lo(__osRunningThread)($at)
|
||||||
li $t0, 0x4
|
li $t0, OS_STATE_RUNNING
|
||||||
sh $t0, 0x10($v0)
|
sh $t0, 0x10($v0)
|
||||||
move $k0, $v0
|
move $k0, $v0
|
||||||
lui $t0, %hi(__osGlobalIntMask)
|
lui $t0, %hi(__osGlobalIntMask)
|
||||||
@@ -654,9 +686,9 @@ glabel __osDispatchThread
|
|||||||
addiu $t0, $t0, %lo(__osGlobalIntMask)
|
addiu $t0, $t0, %lo(__osGlobalIntMask)
|
||||||
lw $t0, 0x0($t0)
|
lw $t0, 0x0($t0)
|
||||||
lui $at, 0xffff
|
lui $at, 0xffff
|
||||||
andi $t1, $k1, 0xff00
|
andi $t1, $k1, SR_IMASK
|
||||||
ori $at, $at, 0xff
|
ori $at, $at, 0xff
|
||||||
andi $t0, $t0, 0xff00
|
andi $t0, $t0, SR_IMASK
|
||||||
and $t1, $t1, $t0
|
and $t1, $t1, $t0
|
||||||
and $k1, $k1, $at
|
and $k1, $k1, $at
|
||||||
or $k1, $k1, $t1
|
or $k1, $k1, $t1
|
||||||
@@ -697,7 +729,7 @@ glabel __osDispatchThread
|
|||||||
lw $k1, 0x11c($k0)
|
lw $k1, 0x11c($k0)
|
||||||
mtc0 $k1, C0_EPC
|
mtc0 $k1, C0_EPC
|
||||||
lw $k1, 0x18($k0)
|
lw $k1, 0x18($k0)
|
||||||
beqz $k1, .L00003e80
|
beqz $k1, .after_restore_fp
|
||||||
nop
|
nop
|
||||||
lw $k1, 0x12c($k0)
|
lw $k1, 0x12c($k0)
|
||||||
ctc1 $k1, $31
|
ctc1 $k1, $31
|
||||||
@@ -733,20 +765,18 @@ glabel __osDispatchThread
|
|||||||
ldc1 $f29, 0x218($k0)
|
ldc1 $f29, 0x218($k0)
|
||||||
ldc1 $f30, 0x220($k0)
|
ldc1 $f30, 0x220($k0)
|
||||||
ldc1 $f31, 0x228($k0)
|
ldc1 $f31, 0x228($k0)
|
||||||
.L00003e80:
|
.after_restore_fp:
|
||||||
lw $k1, 0x128($k0)
|
lw $k1, 0x128($k0)
|
||||||
lui $k0, %hi(__osGlobalIntMask)
|
la $k0, __osGlobalIntMask
|
||||||
addiu $k0, $k0, %lo(__osGlobalIntMask)
|
|
||||||
lw $k0, 0x0($k0)
|
lw $k0, 0x0($k0)
|
||||||
srl $k0, $k0, 0x10
|
srl $k0, $k0, 0x10
|
||||||
and $k1, $k1, $k0
|
and $k1, $k1, $k0
|
||||||
sll $k1, $k1, 0x1
|
sll $k1, $k1, 0x1
|
||||||
lui $k0, %hi(var70059e30)
|
la $k0, var70059e30
|
||||||
addiu $k0, $k0, %lo(var70059e30)
|
|
||||||
addu $k1, $k1, $k0
|
addu $k1, $k1, $k0
|
||||||
lhu $k1, 0x0($k1)
|
lhu $k1, 0x0($k1)
|
||||||
lui $k0, 0xa430
|
lui $k0, %hi(PHYS_TO_K1(MI_INTR_MASK_REG))
|
||||||
addiu $k0, $k0, 0xc
|
addiu $k0, $k0, %lo(PHYS_TO_K1(MI_INTR_MASK_REG))
|
||||||
sw $k1, 0x0($k0)
|
sw $k1, 0x0($k0)
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|||||||
Reference in new issue
Block a user