powermac-rom/NanoKernel/NKCacheCalls.s

301 lines
5.3 KiB
ArmAsm

kcCacheDispatch ; OUTSIDE REFERER
stw r21, 0x01ac(r6)
stw r22, 0x01b4(r6)
stw r23, 0x01bc(r6)
clrlwi r8, r3, 0x10
cmplwi r8, 0x02
bgt- kcCacheDispatch_0x4c
lwz r8, 0x0f68(r1)
andi. r8, r8, 0x01
beq- kcCacheDispatch_0x178
rlwinm. r9, r3, 0, 2, 2
bnel- kcCacheDispatch_0x1e4
srwi r8, r3, 30
cmpwi r8, 0x03
beq- kcCacheDispatch_0xd8
clrlwi r8, r3, 0x10
cmplwi r8, 0x01
beq- kcCacheDispatch_0x58
cmplwi r8, 0x02
beq- kcCacheDispatch_0xb8
kcCacheDispatch_0x4c
lis r3, -0x01
ori r3, r3, 0xfffe
b kcCacheDispatch_0x1c4
kcCacheDispatch_0x58
rlwinm. r9, r3, 0, 1, 1
bne- kcCacheDispatch_0x74
rlwinm. r9, r3, 0, 0, 0
bne- kcCacheDispatch_0x98
rlwinm. r9, r3, 0, 3, 3
bl kcCacheDispatch_0x258
b kcCacheDispatch_0x1c4
kcCacheDispatch_0x74
bl kcCacheDispatch_0x258
rlwinm r22, r3, 0, 4, 5
srwi r22, r22, 12
mfspr r21, hid0
andc r21, r21, r22
sync
mtspr hid0, r21
li r3, 0x00
b kcCacheDispatch_0x1c4
kcCacheDispatch_0x98
rlwinm r22, r3, 0, 4, 5
srwi r22, r22, 12
mfspr r21, hid0
or r21, r21, r22
sync
mtspr hid0, r21
li r3, 0x00
b kcCacheDispatch_0x1c4
kcCacheDispatch_0xb8
rlwinm. r9, r3, 0, 1, 1
bne- kcCacheDispatch_0x180
rlwinm. r9, r3, 0, 0, 0
bne- kcCacheDispatch_0xe8
rlwinm. r9, r3, 0, 3, 3
bne- kcCacheDispatch_0xe4
rlwinm. r9, r3, 0, 2, 2
bne- kcCacheDispatch_0x1c4
kcCacheDispatch_0xd8
lis r3, -0x01
ori r3, r3, 0xfffc
b kcCacheDispatch_0x1c4
kcCacheDispatch_0xe4
bl kcCacheDispatch_0x180
kcCacheDispatch_0xe8
mfspr r21, l2cr
sync
andis. r21, r21, 0x8000
bne- kcCacheDispatch_0x1c4
lwz r8, 0x0f54(r1)
and. r8, r8, r8
beq- kcCacheDispatch_0x178
mfspr r21, hid0
rlwinm r8, r21, 0, 12, 10
mtspr hid0, r8
sync
addi r8, r1, -0x4d0
lwz r8, 0x0050(r8)
and. r8, r8, r8
beq- kcCacheDispatch_0x1c4
sync
lis r9, 0x20
or r8, r8, r9
mtspr l2cr, r8
sync
kcCacheDispatch_0x138
mfspr r8, l2cr
sync
andi. r9, r8, 0x01
bne+ kcCacheDispatch_0x138
lis r9, 0x20
andc r8, r8, r9
mtspr l2cr, r8
sync
lis r9, -0x8000
or r8, r8, r9
mtspr l2cr, r8
sync
mtspr hid0, r21
sync
li r3, 0x00
b kcCacheDispatch_0x1c4
kcCacheDispatch_0x178
li r3, -0x02
b kcCacheDispatch_0x1c4
kcCacheDispatch_0x180
mfspr r22, l2cr
sync
andis. r22, r22, 0x8000
beq- kcCacheDispatch_0x1c4
bl kcCacheDispatch_0x258
mfspr r22, l2cr
sync
clrlwi r22, r22, 0x01
mtspr l2cr, r22
sync
addi r8, r1, -0x4d0
stw r22, 0x0050(r8)
sync
rlwinm r22, r22, 0, 7, 3
oris r22, r22, 0x10
mtspr l2cr, r22
sync
kcCacheDispatch_0x1c4
ori r23, r23, 0xffff
oris r3, r3, 0xffff
and r3, r3, r23
kcCacheDispatch_0x1d0
lwz r21, 0x01ac(r6)
lwz r22, 0x01b4(r6)
lwz r23, 0x01bc(r6)
sync
b skeleton_key
kcCacheDispatch_0x1e4
clrlwi r8, r3, 0x10
cmplwi r8, 0x01
beq- kcCacheDispatch_0x204
cmplwi r8, 0x02
beq- kcCacheDispatch_0x218
lis r3, -0x01
ori r3, r3, 0xfffb
b kcCacheDispatch_0x1d0
kcCacheDispatch_0x204
mfspr r21, hid0
rlwinm. r21, r21, 12, 4, 5
beq- kcCacheDispatch_0x24c
oris r23, r21, 0x8000
blr
kcCacheDispatch_0x218
lwz r8, 0x0f54(r1)
and. r8, r8, r8
beq+ kcCacheDispatch_0x178
mfspr r21, hid0
rlwinm r21, r21, 12, 4, 5
mfspr r22, l2cr
rlwinm r22, r22, 5, 4, 4
andc r21, r21, r22
mfspr r22, l2cr
andis. r22, r22, 0x8000
beq- kcCacheDispatch_0x24c
or r23, r21, r22
blr
kcCacheDispatch_0x24c
lis r23, 0x4000
ori r23, r23, 0x00
blr
kcCacheDispatch_0x258 ; OUTSIDE REFERER
mfctr r8
stw r25, 0x01cc(r6)
stw r24, 0x01c4(r6)
stw r8, 0x00f4(r6)
lhz r25, 0x0f44(r1)
and. r25, r25, r25
cntlzw r8, r25
beq- kcCacheDispatch_0x338
subfic r9, r8, 0x1f
lwz r8, 0x0f34(r1)
and. r8, r8, r8
beq- kcCacheDispatch_0x338
lwz r24, 0x0f68(r1)
mtcr r24
bso- cr6, kcCacheDispatch_0x350
bne- cr7, kcCacheDispatch_0x2a4
slwi r24, r8, 1
add r8, r8, r24
srwi r8, r8, 1
kcCacheDispatch_0x2a4
srw r8, r8, r9
mtctr r8
lwz r8, 0x0630(r1)
lwz r9, 0x0028(r8)
add r8, r8, r9
kcCacheDispatch_0x2b8
lwzux r9, r8, r25
bdnz+ kcCacheDispatch_0x2b8
lwz r24, 0x0f68(r1)
andi. r24, r24, 0x01
beq- kcCacheDispatch_0x338
mfspr r24, l2cr
andis. r24, r24, 0x8000
beq- kcCacheDispatch_0x338
lhz r25, 0x0f60(r1)
and. r25, r25, r25
cntlzw r8, r25
beq- kcCacheDispatch_0x338
subfic r9, r8, 0x1f
lwz r8, 0x0f54(r1)
and. r8, r8, r8
beq- kcCacheDispatch_0x338
srw r8, r8, r9
mtctr r8
mfspr r24, l2cr
oris r24, r24, 0x40
mtspr l2cr, r24
isync
lwz r8, 0x0630(r1)
lwz r9, 0x0028(r8)
add r8, r8, r9
addis r8, r8, 0x19
neg r25, r25
kcCacheDispatch_0x324
lwzux r9, r8, r25
bdnz+ kcCacheDispatch_0x324
rlwinm r24, r24, 0, 10, 8
mtspr l2cr, r24
isync
kcCacheDispatch_0x338
lwz r8, 0x00f4(r6)
lwz r25, 0x01cc(r6)
lwz r24, 0x01c4(r6)
sync
mtctr r8
blr
kcCacheDispatch_0x350
dssall
sync
mfspr r8, 1014
oris r8, r8, 0x80
mtspr 1014, r8
sync
kcCacheDispatch_0x368
mfspr r8, 1014
sync
andis. r8, r8, 0x80
bne+ kcCacheDispatch_0x368
mfspr r8, l2cr
ori r8, r8, 0x800
mtspr l2cr, r8
sync
kcCacheDispatch_0x388
mfspr r8, l2cr
sync
andi. r8, r8, 0x800
bne+ kcCacheDispatch_0x388
b kcCacheDispatch_0x338
kcCacheDispatch_0x39c ; OUTSIDE REFERER
lwz r8, 0x0f68(r1)
mtcr r8
bnslr- cr6
dssall
sync
mfspr r8, 1014
oris r8, r8, 0x80
mtspr 1014, r8
sync
kcCacheDispatch_0x3c0
mfspr r8, 1014
sync
andis. r8, r8, 0x80
bne+ kcCacheDispatch_0x3c0
blr