L_0xbfc019b0:
lui $t1, 0xbfc0
lui $t0, 0xa000
addiu $t1, $t1, 0x19c8
or $t0, $t0, $t1
jr $t0
nop
L_0xbfc019c8:
mtc0 $zero, 5
mtc0 $zero, 29
addiu $t1, $zero, 0x23
nop
mfc0 $t0, $t7
andi $t0, $t0, 0xff00
srl $t0, $t0, 8
beq $t0, $t1, 0xbfc01ae4
nop
addiu $t1, $zero, 0x28
beq $t0, $t1, 0xbfc01ae4
nop
addiu $t1, $zero, 0x27
bne $t0, $t1, 0xbfc01bbc
nop
addiu $t0, $zero, 0x2f
lui $t1, 0x1000
L_0xbfc01a0c:
addiu $at, $zero, 0x1fff
not $t2, $at
and $t2, $t2, $t1
lui $at, 0x8000
mtc0 $t0, 0
or $t2, $t2, $at
mtc0 $t2, 10
srl $at, $t1, 0xc
sll $at, $at, 6
ori $at, $at, 0x11
mtc0 $at, 2
addiu $t2, $at, 0x40
mtc0 $at, 3
addi $t0, $t0, -1
addiu $t1, $t1, -0x2000
bgtz $t0, 0xbfc01a0c
tlbwi
mfc0 $t0, $s0
addiu $at, $zero, -0x1001
and $t0, $t0, $at
addiu $at, $zero, -9
and $t0, $t0, $at
mtc0 $t0, 16
mfc0 $t0, $s0
srl $t0, $t0, 9
addiu $t1, $zero, 0x1000
andi $t0, $t0, 7
sllv $t0, $t1, $t0
addi $t0, $t0, -0x20
lui $t1, 0x8000
addu $t2, $t0, $t1
L_0xbfc01a88:
cache 0, ($t2)
addi $t0, $t0, -0x20
bgez $t0, 0xbfc01a88
addu $t2, $t0, $t1
mfc0 $t0, $s0
srl $t0, $t0, 6
addiu $t1, $zero, 0x1000
andi $t0, $t0, 7
sllv $t0, $t1, $t0
addi $t0, $t0, -0x20
lui $t1, 0x8000
lui $at, 0x1000
L_0xbfc01ab8:
addu $at, $at, $t0
srl $at, $at, 0xc
sll $at, $at, 8
mtc0 $at, 29
addu $t2, $t0, $t1
addi $t0, $t0, -0x20
cache 9, ($t2)
bgez $t0, 0xbfc01ab8
lui $at, 0x1000
jr $ra
nop
[...]
|
/* Function tlb_init_uncached_trampoline [0xbfc019b0 - 0xbfc019c8)
*
* Jump to tlb_init through uncached KSEG1
*/
tlb_init_uncached_trampoline: /* 0xbfc019b0 */
lui $t1, %hi(tlb_init)
lui $t0, HI(KSEG1)
addiu $t1, $t1, %lo(tlb_init)
or $t0, $t0, $t1
jr $t0 # Jump to (KSEG1 | tlb_init)
nop
/* Function tlb_init [0xbfc019c8 - 0xbfc01d98)
*/
tlb_init: /* 0xbfc019c8 */
mtc0 $zero, $CP0_PAGEMASK
mtc0 $zero, $CP0_TAGHI
li $t1, PRID_IMP_R5000
nop
mfc0 $t0, $CP0_PRID
andi $t0, $t0, PRID_IMP_MASK
srl $t0, $t0, PRID_IMP_SHIFT
beq $t0, $t1, tlb_r5k_init
nop
li $t1, PRID_IMP_NEVADA
beq $t0, $t1, tlb_r5k_init
nop
li $t1, PRID_IMP_RM7000
bne $t0, $t1, tlb_r10k_init
nop
li $t0, RM7000_NUM_TLB_ENTRIES-1
lui $t1, HI(0x0fffe000)
tlb_rm7k_write_tlb_loop: /* 0xbfc01a0c */
li $at, PAGE_OFFSET_MASK
not $t2, $at
and $t2, $t2, $t1
lui $at, HI(KSEG0)
mtc0 $t0, $CP0_INDEX
or $t2, $t2, $at
mtc0 $t2, $CP0_ENTRYHI
srl $at, $t1, PAGE_SHIFT
sll $at, $at, ENTRYLO_PFN_SHIFT
ori $at, $at, (ENTRYLO_G|ENTRYLO_C_UNCACHED)
mtc0 $at, $CP0_ENTRYLO0
addiu $t2, $at, 1 << ENTRYLO_PFN_SHIFT
mtc0 $at, $CP0_ENTRYLO1
addi $t0, $t0, -1
addiu $t1, $t1, LO(0x0fffe000)
bgtz $t0, tlb_rm7k_write_tlb_loop
tlbwi
mfc0 $t0, $CP0_CONFIG
li $at, ~RM7K_CONF_TE
and $t0, $t0, $at
li $at, ~CONF_CU
and $t0, $t0, $at
mtc0 $t0, $CP0_CONFIG
mfc0 $t0, $CP0_CONFIG
srl $t0, $t0, CONF_IC_SHIFT
li $t1, 0x1000
andi $t0, $t0, CONF_CACHE_SIZE_MASK
sllv $t0, $t1, $t0
addi $t0, $t0, -CACHE_LINE_SIZE
lui $t1, HI(KSEG0)
addu $t2, $t0, $t1
tlb_rm7k_inv_l1i_loop: /* 0xbfc01a88 */
cache (CACHE_TYPE_L1I|INDEX_WRITEBACK_INV), 0($t2)
addi $t0, $t0, -CACHE_LINE_SIZE
bgez $t0, tlb_rm7k_inv_l1i_loop
addu $t2, $t0, $t1
mfc0 $t0, $CP0_CONFIG
srl $t0, $t0, CONF_DC_SHIFT
li $t1, 0x1000
andi $t0, $t0, CONF_CACHE_SIZE_MASK
sllv $t0, $t1, $t0
addi $t0, $t0, -CACHE_LINE_SIZE
lui $t1, HI(KSEG0)
lui $at, 0x1000
tlb_rm7k_inv_l1d_loop: /* 0xbfc01ab8 */
addu $at, $at, $t0
srl $at, $at, PAGE_SHIFT
sll $at, $at, RM7K_TAGHI_PTAG_SHIFT
mtc0 $at, $CP0_TAGHI
addu $t2, $t0, $t1
addi $t0, $t0, -CACHE_LINE_SIZE
cache (CACHE_TYPE_L1D|INDEX_STORE_TAG), 0($t2)
bgez $t0, tlb_rm7k_inv_l1d_loop
lui $at, 0x1000
jr $ra
nop
[...]
|
评论