Remove unnecessary static branch hints

These + and - characters in a branch mnemonic can cause the assembler to
produce conditional branch instructions with that hint the branch
predictor. The default for forward branches is -, and for backward
branches is +. If a mnemonic is issued with the opposite sign, then bit
10 of the instruction (the LSB of the BO field) is set.

My long-retired "ppcdisasm" script inserted these hints unconditionally,
despite 98% of them not being required. The code is much cleaner now.

I read in some old MPW release notes that PPCAsm and PPCLink together
exhibit a quirk when linking conditional branches to imported symbols.
PPCAsm always assembles these conditional branches as if they were
forward branches (that is, a + hint will always set the hint bit, and a
- hint will never). I hoped to use this property to divine whether the
NanoKernel was linked from one or many assembly files, but I was
frustrated by the lack of conditional branches between files.
This commit is contained in:
Elliot Nunn 2018-04-15 15:05:02 +08:00
parent e2e519b863
commit 4c0e5221f1
25 changed files with 2063 additions and 2063 deletions

View File

@ -14,10 +14,10 @@ NKDebug
rlwinm. r9, r11, 0, MSR_DRbit, MSR_DRbit ; IntSyscall sets this rlwinm. r9, r11, 0, MSR_DRbit, MSR_DRbit ; IntSyscall sets this
mr r8, r3 mr r8, r3
beq- @already_physical beq @already_physical
li r9, 0 li r9, 0
bl V2P ; takes page EA in r8, r9=0, returns page PA in r17 bl V2P ; takes page EA in r8, r9=0, returns page PA in r17
beq- @fail beq @fail
rlwimi r8, r17, 0, 0, 19 rlwimi r8, r17, 0, 0, 19
@already_physical @already_physical

File diff suppressed because it is too large Load Diff

View File

@ -49,7 +49,7 @@ InitBuiltin
mfspr r12, pvr mfspr r12, pvr
rlwinm. r12, r12, 0, 0, 14 rlwinm. r12, r12, 0, 0, 14
bne- @not601 bne @not601
mtspr rtcl, r0 mtspr rtcl, r0
mtspr rtcu, r0 mtspr rtcu, r0
@ -92,7 +92,7 @@ InitBuiltin
@rambank_loop @rambank_loop
lwzu r11, 8(r10) ; Bank0Size, Bank1Size... lwzu r11, 8(r10) ; Bank0Size, Bank1Size...
cmpwi r11, 0 cmpwi r11, 0
beq+ @rambank_loop beq @rambank_loop
; r10 points to BankXSize, r11 contains BankXSize ; r10 points to BankXSize, r11 contains BankXSize
@ -127,7 +127,7 @@ InitBuiltin
lwz r11, NKSystemInfo.PhysicalMemorySize(r5) lwz r11, NKSystemInfo.PhysicalMemorySize(r5)
addis r15, r11, 1 addis r15, r11, 1
cmpwi r15, 0 cmpwi r15, 0
bgt- @skip_reducing_ram bgt @skip_reducing_ram
addi r11, r11, -4096 addi r11, r11, -4096
@skip_reducing_ram @skip_reducing_ram
subf r11, r12, r11 subf r11, r12, r11
@ -212,9 +212,9 @@ InitBuiltin
andc r13, r11, r14 ; end % HTABSIZE andc r13, r11, r14 ; end % HTABSIZE
subf r13, r15, r13 ; end % HTABSIZE - r15 subf r13, r15, r13 ; end % HTABSIZE - r15
cmplw r13, r12 cmplw r13, r12
blt+ @try_another_bank blt @try_another_bank
cmplw r13, r11 cmplw r13, r11
bgt+ @try_another_bank bgt @try_another_bank
add r12, r13, r15 add r12, r13, r15
@ -265,7 +265,7 @@ InitBuiltin
cmpw r12, r11 cmpw r12, r11
lis r11, 0x7fff lis r11, 0x7fff
bne- @did_not_panic bne @did_not_panic
subf r11, r13, r1 subf r11, r13, r1
addi r11, r11, KDP.StartOfPanicArea addi r11, r11, KDP.StartOfPanicArea
@did_not_panic @did_not_panic
@ -279,11 +279,11 @@ InitBuiltin
subf r10, r11, r12 subf r10, r11, r12
cmplwi cr7, r10, KDP.EndOfPanicArea - KDP.StartOfPanicArea - 4 cmplwi cr7, r10, KDP.EndOfPanicArea - KDP.StartOfPanicArea - 4
ble- cr7, @skipwrite ble cr7, @skipwrite
stwx r0, r13, r12 stwx r0, r13, r12
@skipwrite @skipwrite
bne+ @eraseloop bne @eraseloop
@ -317,7 +317,7 @@ InitBuiltin
lisori r12, 'RTAS' lisori r12, 'RTAS'
cmpw r7, r12 cmpw r7, r12
bne- @RTAS_absent bne @RTAS_absent
stw r8, KDP.RTAS_Proc(r1) stw r8, KDP.RTAS_Proc(r1)
@ -332,7 +332,7 @@ InitBuiltin
addic. r10, r10, -4 addic. r10, r10, -4
lwzx r12, r9, r10 lwzx r12, r9, r10
stwx r12, r11, r10 stwx r12, r11, r10
bgt+ @RTAS_copyloop bgt @RTAS_copyloop
stw r23, PSA.NoIdeaR23(r1) stw r23, PSA.NoIdeaR23(r1)
b @RTAS_done b @RTAS_done
@ -354,7 +354,7 @@ InitBuiltin
addic. r10, r10, -4 addic. r10, r10, -4
lwzx r12, r4, r10 lwzx r12, r4, r10
stwx r12, r11, r10 stwx r12, r11, r10
bgt+ @ProcessorInfo_copyloop bgt @ProcessorInfo_copyloop
@ -367,14 +367,14 @@ InitBuiltin
addic. r10, r10, -4 addic. r10, r10, -4
lwzx r12, r5, r10 lwzx r12, r5, r10
stwx r12, r11, r10 stwx r12, r11, r10
bgt+ @SystemInfo_copyloop bgt @SystemInfo_copyloop
; If DiagnosticInfo != 0, copy it to PSA ; If DiagnosticInfo != 0, copy it to PSA
cmpwi r6, 0 cmpwi r6, 0
beq- @DiagInfo_skipcopy beq @DiagInfo_skipcopy
addi r11, r1, PSA.DiagInfo addi r11, r1, PSA.DiagInfo
li r10, 256; NKDiagInfo.Size li r10, 256; NKDiagInfo.Size
@ -383,7 +383,7 @@ InitBuiltin
addic. r10, r10, -4 addic. r10, r10, -4
lwzx r12, r6, r10 lwzx r12, r6, r10
stwx r12, r11, r10 stwx r12, r11, r10
bgt+ @DiagInfo_copyloop bgt @DiagInfo_copyloop
@DiagInfo_skipcopy @DiagInfo_skipcopy
@ -405,11 +405,11 @@ InitBuiltin
lwz r8, KDP.NanoKernelInfo + NKNanoKernelInfo.ConfigFlags(r1) lwz r8, KDP.NanoKernelInfo + NKNanoKernelInfo.ConfigFlags(r1)
if &TYPE('NKShowLog') = 'UNDEFINED' if &TYPE('NKShowLog') = 'UNDEFINED'
blt- @no_screen_log blt @no_screen_log
lwz r8, NKConfigurationInfo.DebugFlags(r9) lwz r8, NKConfigurationInfo.DebugFlags(r9)
rlwinm. r8, r8, 0, NKConfigurationInfo.LogFlagBit, NKConfigurationInfo.LogFlagBit rlwinm. r8, r8, 0, NKConfigurationInfo.LogFlagBit, NKConfigurationInfo.LogFlagBit
lwz r8, KDP.NanoKernelInfo + NKNanoKernelInfo.ConfigFlags(r1) lwz r8, KDP.NanoKernelInfo + NKNanoKernelInfo.ConfigFlags(r1)
beq- @no_screen_log beq @no_screen_log
endif endif
; Enable the screen log ; Enable the screen log
@ -741,7 +741,7 @@ InitBuiltin
@LowMem_zeroloop @LowMem_zeroloop
addic. r9, r9, -4 addic. r9, r9, -4
stwx r0, r10, r9 stwx r0, r10, r9
bne+ @LowMem_zeroloop bne @LowMem_zeroloop
; Populate from LowMemInit "key-value" table. ; Populate from LowMemInit "key-value" table.
@ -751,7 +751,7 @@ InitBuiltin
lwzux r9, r11, r3 ; get first word and point r11 at it lwzux r9, r11, r3 ; get first word and point r11 at it
@LowMem_setloop @LowMem_setloop
mr. r9, r9 mr. r9, r9
beq- @LowMem_done beq @LowMem_done
lwzu r12, 4(r11) lwzu r12, 4(r11)
stwx r12, r10, r9 stwx r12, r10, r9
lwzu r9, 4(r11) lwzu r9, 4(r11)
@ -772,7 +772,7 @@ InitBuiltin
lwz r11, IRP.HWInfo + NKHWInfo.Signature(r11) lwz r11, IRP.HWInfo + NKHWInfo.Signature(r11)
lisori r12, 'Hnfo' lisori r12, 'Hnfo'
cmplw r12, r11 cmplw r12, r11
beq- FinishInitBuiltin beq FinishInitBuiltin
@ -789,41 +789,41 @@ InitBuiltin
; check for several (some unknown) pre-7410 CPUs, and load their info ; check for several (some unknown) pre-7410 CPUs, and load their info
cmpwi r12, 0x0001 ; 601 cmpwi r12, 0x0001 ; 601
addi r11, r11, ProcessorInfoTable - NKTop addi r11, r11, ProcessorInfoTable - NKTop
beq- OverrideProcessorInfo beq OverrideProcessorInfo
cmpwi r12, 0x0003 ; 603 cmpwi r12, 0x0003 ; 603
addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr
beq- OverrideProcessorInfo beq OverrideProcessorInfo
cmpwi r12, 0x0004 ; 604 cmpwi r12, 0x0004 ; 604
addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr
beq- OverrideProcessorInfo beq OverrideProcessorInfo
cmpwi r12, 0x0006 ; 603e cmpwi r12, 0x0006 ; 603e
addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr
beq- OverrideProcessorInfo beq OverrideProcessorInfo
cmpwi r12, 0x0007 ; 750FX cmpwi r12, 0x0007 ; 750FX
addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr
beq- OverrideProcessorInfo beq OverrideProcessorInfo
cmpwi r12, 0x0008 ; 750 cmpwi r12, 0x0008 ; 750
addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr
beq- OverrideProcessorInfo beq OverrideProcessorInfo
cmpwi r12, 0x0009 ; ??? cmpwi r12, 0x0009 ; ???
addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr
beq- OverrideProcessorInfo beq OverrideProcessorInfo
cmpwi r12, 0x000a ; ??? cmpwi r12, 0x000a ; ???
beq- OverrideProcessorInfo beq OverrideProcessorInfo
cmpwi r12, 0x000c ; 7400 cmpwi r12, 0x000c ; 7400
addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr
beq- OverrideProcessorInfo beq OverrideProcessorInfo
cmpwi r12, 0x000d ; ??? cmpwi r12, 0x000d ; ???
addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr
beq- OverrideProcessorInfo beq OverrideProcessorInfo
@ -849,17 +849,17 @@ new_world_0x60c
lwzu r12, -0x0008(r10) lwzu r12, -0x0008(r10)
subf r9, r12, r21 subf r9, r12, r21
cmplw r9, r11 cmplw r9, r11
bge- new_world_0x624 bge new_world_0x624
mr r11, r9 mr r11, r9
new_world_0x624 new_world_0x624
cmplw r11, r15 cmplw r11, r15
ble- new_world_0x634 ble new_world_0x634
mr r13, r12 mr r13, r12
mr r15, r11 mr r15, r11
new_world_0x634 new_world_0x634
bdnz+ new_world_0x60c bdnz new_world_0x60c
addi r12, r22, -0x01 addi r12, r22, -0x01
neg r11, r13 neg r11, r13
and r12, r11, r12 and r12, r11, r12
@ -874,14 +874,14 @@ new_world_0x634
new_world_0x660 new_world_0x660
subic. r10, r10, 4 subic. r10, r10, 4
stwx r11, r21, r10 stwx r11, r21, r10
bne+ new_world_0x660 bne new_world_0x660
dcbz 0, r21 dcbz 0, r21
new_world_0x670 new_world_0x670
addi r10, r10, 0x01 addi r10, r10, 0x01
lbzx r11, r21, r10 lbzx r11, r21, r10
cmpwi r11, 0x00 cmpwi r11, 0x00
beq+ new_world_0x670 beq new_world_0x670
sth r10, 0x0f3c(r1) sth r10, 0x0f3c(r1)
sth r10, 0x0f3e(r1) sth r10, 0x0f3e(r1)
sth r10, 0x0f46(r1) sth r10, 0x0f46(r1)
@ -899,7 +899,7 @@ new_world_0x6a4
cmpw r10, r21 cmpw r10, r21
rlwinm r9, r10, 9, 7, 19 rlwinm r9, r10, 9, 7, 19
tlbie r9 tlbie r9
bne+ new_world_0x6a4 bne new_world_0x6a4
sync sync
isync isync
lwz r11, 0x064c(r1) lwz r11, 0x064c(r1)
@ -914,7 +914,7 @@ new_world_0x6dc
dcbst 0, r20 dcbst 0, r20
sync sync
icbi 0, r20 icbi 0, r20
bdnz+ new_world_0x6dc bdnz new_world_0x6dc
sync sync
isync isync
stw r0, 0x0f34(r1) stw r0, 0x0f34(r1)
@ -927,12 +927,12 @@ new_world_0x6dc
new_world_0x714 new_world_0x714
addi r17, r17, 0x200 addi r17, r17, 0x200
cmplw r17, r15 cmplw r17, r15
bge- new_world_0x734 bge new_world_0x734
new_world_0x720 new_world_0x720
mtlr r20 mtlr r20
blrl blrl
ble+ new_world_0x714 ble new_world_0x714
addi r12, r17, -0x200 addi r12, r17, -0x200
stw r12, 0x0f34(r1) stw r12, 0x0f34(r1)
@ -948,12 +948,12 @@ new_world_0x734
new_world_0x750 new_world_0x750
add r17, r17, r18 add r17, r17, r18
cmplw r17, r15 cmplw r17, r15
bge- new_world_0x774 bge new_world_0x774
new_world_0x75c new_world_0x75c
mtlr r20 mtlr r20
blrl blrl
ble+ new_world_0x750 ble new_world_0x750
subf r17, r18, r17 subf r17, r18, r17
divwu r12, r17, r18 divwu r12, r17, r18
sth r12, 0x0f4e(r1) sth r12, 0x0f4e(r1)
@ -972,14 +972,14 @@ new_world_0x774
new_world_0x798 new_world_0x798
lhz r12, 0x0f4a(r1) lhz r12, 0x0f4a(r1)
cmplw r14, r12 cmplw r14, r12
ble- new_world_0x7bc ble new_world_0x7bc
srwi r14, r14, 1 srwi r14, r14, 1
subf r19, r14, r19 subf r19, r14, r19
new_world_0x7ac new_world_0x7ac
mtlr r20 mtlr r20
blrl blrl
ble+ new_world_0x798 ble new_world_0x798
slwi r12, r14, 1 slwi r12, r14, 1
new_world_0x7bc new_world_0x7bc
@ -998,7 +998,7 @@ new_world_0x7e4
add r17, r17, r18 add r17, r17, r18
lis r12, 0x3f lis r12, 0x3f
cmplw r17, r12 cmplw r17, r12
bge- new_world_0x82c bge new_world_0x82c
new_world_0x7f4 new_world_0x7f4
mtlr r20 mtlr r20
@ -1011,7 +1011,7 @@ new_world_0x7f4
rlwinm r12, r12, 0, 28, 26 rlwinm r12, r12, 0, 28, 26
mtmsr r12 mtmsr r12
isync isync
ble+ new_world_0x7e4 ble new_world_0x7e4
subf r17, r18, r17 subf r17, r18, r17
divwu r12, r17, r18 divwu r12, r17, r18
sth r12, 0x0f50(r1) sth r12, 0x0f50(r1)
@ -1029,7 +1029,7 @@ new_world_0x848
add r17, r17, r18 add r17, r17, r18
lis r12, 0x200 lis r12, 0x200
cmplw r17, r12 cmplw r17, r12
bge- new_world_0x890 bge new_world_0x890
new_world_0x858 new_world_0x858
mtlr r20 mtlr r20
@ -1042,7 +1042,7 @@ new_world_0x858
rlwinm r12, r12, 0, 28, 26 rlwinm r12, r12, 0, 28, 26
mtmsr r12 mtmsr r12
isync isync
ble+ new_world_0x848 ble new_world_0x848
subf r17, r18, r17 subf r17, r18, r17
divwu r12, r17, r18 divwu r12, r17, r18
sth r12, 0x0f52(r1) sth r12, 0x0f52(r1)
@ -1079,7 +1079,7 @@ new_world_0x890
blrl blrl
sth r11, 0x0f40(r1) sth r11, 0x0f40(r1)
cmpwi r11, 0x01 cmpwi r11, 0x01
beq- skip_cache_hackery_never beq skip_cache_hackery_never
lwz r11, 0x064c(r1) lwz r11, 0x064c(r1)
li r12, (copied_code_2_end - copied_code_2) / 4 li r12, (copied_code_2_end - copied_code_2) / 4
mtctr r12 mtctr r12
@ -1092,13 +1092,13 @@ new_world_0x924
dcbst 0, r20 dcbst 0, r20
sync sync
icbi 0, r20 icbi 0, r20
bdnz+ new_world_0x924 bdnz new_world_0x924
sync sync
isync isync
subf r12, r21, r20 subf r12, r21, r20
mulli r12, r12, 0x80 mulli r12, r12, 0x80
cmplw r12, r15 cmplw r12, r15
bge- new_world_0x958 bge new_world_0x958
mr r15, r12 mr r15, r12
new_world_0x958 new_world_0x958
@ -1115,7 +1115,7 @@ new_world_0x968
dcbst 0, r12 dcbst 0, r12
sync sync
icbi 0, r12 icbi 0, r12
bne+ new_world_0x968 bne new_world_0x968
sync sync
isync isync
stw r0, 0x0f38(r1) stw r0, 0x0f38(r1)
@ -1128,12 +1128,12 @@ new_world_0x968
new_world_0x9a8 new_world_0x9a8
addi r17, r17, 0x200 addi r17, r17, 0x200
cmplw r17, r15 cmplw r17, r15
bge- new_world_0x9c8 bge new_world_0x9c8
new_world_0x9b4 new_world_0x9b4
mtlr r20 mtlr r20
blrl blrl
ble+ new_world_0x9a8 ble new_world_0x9a8
addi r12, r17, -0x200 addi r12, r17, -0x200
stw r12, 0x0f38(r1) stw r12, 0x0f38(r1)
@ -1149,12 +1149,12 @@ new_world_0x9c8
new_world_0x9e4 new_world_0x9e4
add r17, r17, r18 add r17, r17, r18
cmplw r17, r15 cmplw r17, r15
bge- new_world_0xa08 bge new_world_0xa08
new_world_0x9f0 new_world_0x9f0
mtlr r20 mtlr r20
blrl blrl
ble+ new_world_0x9e4 ble new_world_0x9e4
subf r17, r18, r17 subf r17, r18, r17
divwu r12, r17, r18 divwu r12, r17, r18
sth r12, 0x0f4c(r1) sth r12, 0x0f4c(r1)
@ -1170,7 +1170,7 @@ new_world_0xa10
dcbst 0, r12 dcbst 0, r12
sync sync
icbi 0, r12 icbi 0, r12
bne+ new_world_0xa10 bne new_world_0xa10
sync sync
isync isync
lwz r17, 0x0f38(r1) lwz r17, 0x0f38(r1)
@ -1203,9 +1203,9 @@ new_world_0xa54
dcbst r12, r14 dcbst r12, r14
sync sync
icbi r12, r14 icbi r12, r14
bne+ new_world_0xa54 bne new_world_0xa54
cmpw r12, r13 cmpw r12, r13
bne+ new_world_0xa4c bne new_world_0xa4c
sync sync
isync isync
mr r19, r18 mr r19, r18
@ -1218,14 +1218,14 @@ new_world_0xa54
new_world_0xac8 new_world_0xac8
li r12, 0x08 li r12, 0x08
cmplw r14, r12 cmplw r14, r12
ble- new_world_0xaec ble new_world_0xaec
srwi r14, r14, 1 srwi r14, r14, 1
subf r19, r14, r19 subf r19, r14, r19
new_world_0xadc new_world_0xadc
mtlr r20 mtlr r20
blrl blrl
ble+ new_world_0xac8 ble new_world_0xac8
slwi r12, r14, 1 slwi r12, r14, 1
new_world_0xaec new_world_0xaec
@ -1245,9 +1245,9 @@ new_world_0xb04
addi r14, r14, 0x04 addi r14, r14, 0x04
lwzu r9, 0x0004(r11) lwzu r9, 0x0004(r11)
stwx r9, r12, r14 stwx r9, r12, r14
bne+ new_world_0xb04 bne new_world_0xb04
cmpw r12, r13 cmpw r12, r13
bne+ new_world_0xafc bne new_world_0xafc
skip_cache_hackery_never skip_cache_hackery_never
; Clearly can't just fall through ; Clearly can't just fall through
@ -1275,21 +1275,21 @@ copied_code_1_0x18
lbzx r12, r19, r11 lbzx r12, r19, r11
add r12, r12, r12 add r12, r12, r12
add r11, r11, r18 add r11, r11, r18
bdnz+ copied_code_1_0x18 bdnz copied_code_1_0x18
subf r19, r13, r19 subf r19, r13, r19
mfdec r12 mfdec r12
neg r12, r12 neg r12, r12
cmplw r12, r16 cmplw r12, r16
bgt- copied_code_1_0x54 bgt copied_code_1_0x54
mr r16, r12 mr r16, r12
copied_code_1_0x54 copied_code_1_0x54
srwi r11, r12, 7 srwi r11, r12, 7
subf r12, r11, r12 subf r12, r11, r12
cmpw r12, r16 cmpw r12, r16
blelr- blelr
addic. r10, r10, -0x01 addic. r10, r10, -0x01
bgt+ copied_code_1_0x4 bgt copied_code_1_0x4
cmpw r12, r16 cmpw r12, r16
blr blr
isync isync
@ -1336,12 +1336,12 @@ copied_code_2_0x1c
mtlr r12 mtlr r12
blrl blrl
add r11, r11, r18 add r11, r11, r18
bdnz+ copied_code_2_0x1c bdnz copied_code_2_0x1c
subf r19, r13, r19 subf r19, r13, r19
mfdec r12 mfdec r12
neg r12, r12 neg r12, r12
cmplw r12, r16 cmplw r12, r16
bgt- copied_code_2_0x60 bgt copied_code_2_0x60
mr r16, r12 mr r16, r12
copied_code_2_0x60 copied_code_2_0x60
@ -1349,9 +1349,9 @@ copied_code_2_0x60
subf r12, r11, r12 subf r12, r11, r12
cmpw r12, r16 cmpw r12, r16
mtlr r9 mtlr r9
blelr- blelr
addic. r10, r10, -0x01 addic. r10, r10, -0x01
bgt+ copied_code_2_0x8 bgt copied_code_2_0x8
cmpw r12, r16 cmpw r12, r16
blr blr
isync isync

View File

@ -52,24 +52,24 @@ kcCacheDispatch
clrlwi r8, r3, 16 ; bad selector clrlwi r8, r3, 16 ; bad selector
cmplwi r8, 2 cmplwi r8, 2
bgt- @fail_bad_selector bgt @fail_bad_selector
lwz r8, KDP.ProcessorInfo + NKProcessorInfo.ProcessorFlags(r1) lwz r8, KDP.ProcessorInfo + NKProcessorInfo.ProcessorFlags(r1)
andi. r8, r8, 1 << NKProcessorInfo.hasL2CR andi. r8, r8, 1 << NKProcessorInfo.hasL2CR
beq- CacheCallFailNoL2 ; no L2CR => fail (what about 601?) beq CacheCallFailNoL2 ; no L2CR => fail (what about 601?)
rlwinm. r9, r3, 0, 2, 2 ; if flagged, get cache state in r23 rlwinm. r9, r3, 0, 2, 2 ; if flagged, get cache state in r23
bnel- CacheCallGetInfoForReturnValue ; (otherwise, r23 is undefined) bnel CacheCallGetInfoForReturnValue ; (otherwise, r23 is undefined)
srwi r8, r3, 30 ; cannot enable *and* disable srwi r8, r3, 30 ; cannot enable *and* disable
cmpwi r8, 3 cmpwi r8, 3
beq- CacheCallFailBadFlags beq CacheCallFailBadFlags
clrlwi r8, r3, 16 ; go to main code for level 1/2 cache clrlwi r8, r3, 16 ; go to main code for level 1/2 cache
cmplwi r8, 1 cmplwi r8, 1
beq- CacheCallDispatchL1 beq CacheCallDispatchL1
cmplwi r8, 2 cmplwi r8, 2
beq- CacheCallDispatchL2 beq CacheCallDispatchL2
@fail_bad_selector ; fall through => bad selector @fail_bad_selector ; fall through => bad selector
lisori r3, -2 lisori r3, -2
@ -88,10 +88,10 @@ kcCacheDispatch
CacheCallDispatchL1 CacheCallDispatchL1
rlwinm. r9, r3, 0, 1, 1 rlwinm. r9, r3, 0, 1, 1
bne- CacheCallL1DisableSelected bne CacheCallL1DisableSelected
rlwinm. r9, r3, 0, 0, 0 rlwinm. r9, r3, 0, 0, 0
bne- CacheCallL1EnableSelected bne CacheCallL1EnableSelected
rlwinm. r9, r3, 0, 3, 3 ; ??? rlwinm. r9, r3, 0, 3, 3 ; ???
@ -142,18 +142,18 @@ CacheCallL1EnableSelected
CacheCallDispatchL2 CacheCallDispatchL2
rlwinm. r9, r3, 0, 1, 1 rlwinm. r9, r3, 0, 1, 1
bne- CacheCallL2DisableSelected bne CacheCallL2DisableSelected
rlwinm. r9, r3, 0, 0, 0 rlwinm. r9, r3, 0, 0, 0
bne- CacheCallL2EnableSelected bne CacheCallL2EnableSelected
rlwinm. r9, r3, 0, 3, 3 rlwinm. r9, r3, 0, 3, 3
bne- CacheCallL2Flag3 ; goes to DisableSelected bne CacheCallL2Flag3 ; goes to DisableSelected
rlwinm. r9, r3, 0, 2, 2 rlwinm. r9, r3, 0, 2, 2
;bne removed? ;bne removed?
bne- CacheCallReturn bne CacheCallReturn
@ -175,11 +175,11 @@ CacheCallL2EnableSelected
mfspr r21, l2cr ; fail if L2CR[L2E] already set mfspr r21, l2cr ; fail if L2CR[L2E] already set
sync sync
andis. r21, r21, 0x8000 andis. r21, r21, 0x8000
bne- CacheCallReturn bne CacheCallReturn
lwz r8, KDP.ProcessorInfo + NKProcessorInfo.ProcessorL2DSize(r1) lwz r8, KDP.ProcessorInfo + NKProcessorInfo.ProcessorL2DSize(r1)
and. r8, r8, r8 and. r8, r8, r8
beq- CacheCallFailNoL2 ; fail if zero-sized cache reported beq CacheCallFailNoL2 ; fail if zero-sized cache reported
mfspr r21, hid0 ; save HID0 mfspr r21, hid0 ; save HID0
@ -190,7 +190,7 @@ CacheCallL2EnableSelected
addi r8, r1, PSA.ProcessorState addi r8, r1, PSA.ProcessorState
lwz r8, NKProcessorState.saveL2CR(r8) lwz r8, NKProcessorState.saveL2CR(r8)
and. r8, r8, r8 and. r8, r8, r8
beq- CacheCallReturn ; fail if zero L2CR was saved? beq CacheCallReturn ; fail if zero L2CR was saved?
sync sync
lis r9, 0x0020 ; set L2CR[GI] (global invalidate) lis r9, 0x0020 ; set L2CR[GI] (global invalidate)
@ -201,7 +201,7 @@ CacheCallL2EnableSelected
mfspr r8, l2cr ; check L2CR[IP] (invalidate progress) mfspr r8, l2cr ; check L2CR[IP] (invalidate progress)
sync sync
andi. r9, r8, 1 andi. r9, r8, 1
bne+ @inval_loop bne @inval_loop
lis r9, 0x0020 ; clear L2CR[GI] lis r9, 0x0020 ; clear L2CR[GI]
andc r8, r8, r9 andc r8, r8, r9
@ -233,7 +233,7 @@ CacheCallL2DisableSelected
mfspr r22, l2cr ; return if already disabled per L2CR[L2E] mfspr r22, l2cr ; return if already disabled per L2CR[L2E]
sync sync
andis. r22, r22, 0x8000 andis. r22, r22, 0x8000
beq- CacheCallReturn beq CacheCallReturn
bl FlushCaches bl FlushCaches
@ -298,9 +298,9 @@ CacheCallGetInfoForReturnValue
clrlwi r8, r3, 16 clrlwi r8, r3, 16
cmplwi r8, 1 cmplwi r8, 1
beq- @level1 beq @level1
cmplwi r8, 2 cmplwi r8, 2
beq- @level2 beq @level2
lisori r3, -5 lisori r3, -5
b CacheCallReturnWithoutFlags b CacheCallReturnWithoutFlags
@ -308,7 +308,7 @@ CacheCallGetInfoForReturnValue
@level1 @level1
mfspr r21, hid0 mfspr r21, hid0
rlwinm. r21, r21, 12, 4, 5 rlwinm. r21, r21, 12, 4, 5
beq- @all_off beq @all_off
oris r23, r21, 0x8000 oris r23, r21, 0x8000
blr blr
@ -316,7 +316,7 @@ CacheCallGetInfoForReturnValue
@level2 @level2
lwz r8, KDP.ProcessorInfo + NKProcessorInfo.ProcessorL2DSize(r1) lwz r8, KDP.ProcessorInfo + NKProcessorInfo.ProcessorL2DSize(r1)
and. r8, r8, r8 and. r8, r8, r8
beq+ CacheCallFailNoL2 beq CacheCallFailNoL2
mfspr r21, hid0 ; same bits as above mfspr r21, hid0 ; same bits as above
rlwinm r21, r21, 12, 4, 5 rlwinm r21, r21, 12, 4, 5
@ -327,7 +327,7 @@ CacheCallGetInfoForReturnValue
mfspr r22, l2cr ; then again, both L2s are off if L2CR[L2E] is cleared mfspr r22, l2cr ; then again, both L2s are off if L2CR[L2E] is cleared
andis. r22, r22, 0x8000 andis. r22, r22, 0x8000
beq- @all_off beq @all_off
or r23, r21, r22 or r23, r21, r22
blr blr
@ -369,12 +369,12 @@ FlushCaches
lhz r25, KDP.ProcessorInfo + NKProcessorInfo.DataCacheLineSize(r1) lhz r25, KDP.ProcessorInfo + NKProcessorInfo.DataCacheLineSize(r1)
and. r25, r25, r25 ; r25 = L1-D line size and. r25, r25, r25 ; r25 = L1-D line size
cntlzw r8, r25 cntlzw r8, r25
beq- @return beq @return
subfic r9, r8, 31 ; r9 = logb(L1-D line size) subfic r9, r8, 31 ; r9 = logb(L1-D line size)
lwz r8, KDP.ProcessorInfo + NKProcessorInfo.DataCacheTotalSize(r1) lwz r8, KDP.ProcessorInfo + NKProcessorInfo.DataCacheTotalSize(r1)
and. r8, r8, r8 ; r8 = L1-D size and. r8, r8, r8 ; r8 = L1-D size
beq- @return beq @return
lwz r24, KDP.ProcessorInfo + NKProcessorInfo.ProcessorFlags(r1) lwz r24, KDP.ProcessorInfo + NKProcessorInfo.ProcessorFlags(r1)
mtcr r24 mtcr r24
@ -397,28 +397,28 @@ FlushCaches
@loop_L1 @loop_L1
lwzux r9, r8, r25 lwzux r9, r8, r25
bdnz+ @loop_L1 bdnz @loop_L1
; Flush level 2 (very similar to above) ; Flush level 2 (very similar to above)
lwz r24, KDP.ProcessorInfo + NKProcessorInfo.ProcessorFlags(r1) lwz r24, KDP.ProcessorInfo + NKProcessorInfo.ProcessorFlags(r1)
andi. r24, r24, 1 << NKProcessorInfo.hasL2CR andi. r24, r24, 1 << NKProcessorInfo.hasL2CR
beq- @return ; return if L2CR unavailable beq @return ; return if L2CR unavailable
mfspr r24, l2cr mfspr r24, l2cr
andis. r24, r24, 0x8000 andis. r24, r24, 0x8000
beq- @return ; return if L2 off (per L2CR[L2E]) beq @return ; return if L2 off (per L2CR[L2E])
lhz r25, KDP.ProcessorInfo + NKProcessorInfo.ProcessorL2DBlockSize(r1) lhz r25, KDP.ProcessorInfo + NKProcessorInfo.ProcessorL2DBlockSize(r1)
and. r25, r25, r25 ; r25 = L2-D line size and. r25, r25, r25 ; r25 = L2-D line size
cntlzw r8, r25 cntlzw r8, r25
beq- @return beq @return
subfic r9, r8, 31 ; r9 = logb(L2-D line size) subfic r9, r8, 31 ; r9 = logb(L2-D line size)
lwz r8, KDP.ProcessorInfo + NKProcessorInfo.ProcessorL2DSize(r1) lwz r8, KDP.ProcessorInfo + NKProcessorInfo.ProcessorL2DSize(r1)
and. r8, r8, r8 ; r8 = L2-D size and. r8, r8, r8 ; r8 = L2-D size
beq- @return beq @return
srw r8, r8, r9 srw r8, r8, r9
mtctr r8 ; loop counter = cache/line mtctr r8 ; loop counter = cache/line
@ -437,7 +437,7 @@ FlushCaches
@loop_L2 @loop_L2
lwzux r9, r8, r25 lwzux r9, r8, r25
bdnz+ @loop_L2 bdnz @loop_L2
rlwinm r24, r24, 0, 10, 8 rlwinm r24, r24, 0, 10, 8
mtspr l2cr, r24 ; clear L2CR[DO] (reenables L2-I) mtspr l2cr, r24 ; clear L2CR[DO] (reenables L2-I)
@ -474,7 +474,7 @@ FlushCaches
mfspr r8, msscr0 mfspr r8, msscr0
sync sync
andis. r8, r8, 0x0080 andis. r8, r8, 0x0080
bne+ @loop_msscr0 bne @loop_msscr0
; Flush level 2: set L2CR[4] and spin until it clears ; Flush level 2: set L2CR[4] and spin until it clears
@ -487,7 +487,7 @@ FlushCaches
mfspr r8, l2cr mfspr r8, l2cr
sync sync
andi. r8, r8, 0x0800 andi. r8, r8, 0x0800
bne+ @loop_l2cr bne @loop_l2cr
; Jump back up to main code path to return ; Jump back up to main code path to return
@ -524,6 +524,6 @@ FlushL1CacheUsingMSSCR0
mfspr r8, msscr0 mfspr r8, msscr0
sync sync
andis. r8, r8, 0x0080 andis. r8, r8, 0x0080
bne+ @loop_msscr0 bne @loop_msscr0
blr blr

View File

@ -18,9 +18,9 @@ prints ; OUTSIDE REFERER
cmpwi cr7, r28, 0x00 cmpwi cr7, r28, 0x00
andi. r29, r29, 0x02 andi. r29, r29, 0x02
beq- cr7, prints_skip_serial beq cr7, prints_skip_serial
crmove 30, 2 crmove 30, 2
beq- PrintS_skip_serial beq PrintS_skip_serial
mfmsr r31 mfmsr r31
bl serial_io bl serial_io
bl serial_flush bl serial_flush
@ -32,24 +32,24 @@ prints_next_char
bl serial_busywait bl serial_busywait
lbzu r29, 0x0001(r8) lbzu r29, 0x0001(r8)
cmpwi r29, 0x00 cmpwi r29, 0x00
beq- print_common beq print_common
cmpwi r29, 10 cmpwi r29, 10
beq- PrintS_newline beq PrintS_newline
cmpwi r29, 13 cmpwi r29, 13
beq- PrintS_newline beq PrintS_newline
cmpwi r29, '\\' cmpwi r29, '\\'
beq- PrintS_escape_code beq PrintS_escape_code
cmpwi r29, '^' cmpwi r29, '^'
bne- PrintS_normal_char bne PrintS_normal_char
prints_escape_code prints_escape_code
lbzu r29, 0x0001(r8) lbzu r29, 0x0001(r8)
cmpwi r29, 'n' cmpwi r29, 'n'
beq- PrintS_newline beq PrintS_newline
cmpwi r29, 'r' cmpwi r29, 'r'
beq- PrintS_newline beq PrintS_newline
cmpwi r29, 'b' cmpwi r29, 'b'
bne- PrintS_literal_backslash_or_caret bne PrintS_literal_backslash_or_caret
li r29, 0x07 li r29, 0x07
b PrintS_normal_char b PrintS_normal_char
@ -62,7 +62,7 @@ prints_normal_char
; r1 = kdp ; r1 = kdp
bl ScreenConsole_putchar bl ScreenConsole_putchar
beq- cr7, prints_0xe4 beq cr7, prints_0xe4
ori r30, r31, 0x10 ori r30, r31, 0x10
mtmsr r30 mtmsr r30
isync isync
@ -86,7 +86,7 @@ prints_newline
; r1 = kdp ; r1 = kdp
bl ScreenConsole_redraw bl ScreenConsole_redraw
beq- cr7, prints_0x13c beq cr7, prints_0x13c
ori r30, r31, 0x10 ori r30, r31, 0x10
mtmsr r30 mtmsr r30
isync isync
@ -98,7 +98,7 @@ prints_0x118
lbz r29, 0x0002(r28) lbz r29, 0x0002(r28)
eieio eieio
andi. r29, r29, 0x04 andi. r29, r29, 0x04
beq+ PrintS_0x118 beq PrintS_0x118
li r29, 0x0a li r29, 0x0a
stb r29, 0x0006(r28) stb r29, 0x0006(r28)
eieio eieio
@ -111,7 +111,7 @@ prints_0x13c
print_common ; OUTSIDE REFERER print_common ; OUTSIDE REFERER
beq- cr7, print_common_0x8c beq cr7, print_common_0x8c
mtmsr r31 mtmsr r31
isync isync
lwz r29, -0x0438(r1) lwz r29, -0x0438(r1)
@ -125,14 +125,14 @@ print_common ; OUTSIDE REFERER
print_common_0x28 print_common_0x28
mfspr r30, dec mfspr r30, dec
subf. r30, r29, r30 subf. r30, r29, r30
ble- print_common_0x50 ble print_common_0x50
li r30, 0x01 li r30, 0x01
stb r30, 0x0002(r28) stb r30, 0x0002(r28)
eieio eieio
lbz r30, 0x0002(r28) lbz r30, 0x0002(r28)
eieio eieio
andi. r30, r30, 0x01 andi. r30, r30, 0x01
beq+ print_common_0x28 beq print_common_0x28
print_common_0x50 print_common_0x50
sync sync
@ -141,7 +141,7 @@ print_common_0x50
mfspr r30, pvr mfspr r30, pvr
rlwinm. r30, r30, 0, 0, 14 rlwinm. r30, r30, 0, 0, 14
li r31, 0x00 li r31, 0x00
beq- print_common_0x78 beq print_common_0x78
mtspr dbat3u, r31 mtspr dbat3u, r31
mtspr dbat3l, r31 mtspr dbat3l, r31
b print_common_0x80 b print_common_0x80
@ -195,27 +195,27 @@ printd ; OUTSIDE REFERER
cmpwi cr7, r28, 0x00 cmpwi cr7, r28, 0x00
andi. r29, r29, 0x02 andi. r29, r29, 0x02
beq- cr7, printd_0x58 beq cr7, printd_0x58
crmove 30, 2 crmove 30, 2
beq- Printd_0x58 beq Printd_0x58
bl serial_io bl serial_io
bl serial_flush bl serial_flush
printd_0x58 printd_0x58
cmpwi r8, 0x00 cmpwi r8, 0x00
li r25, 0x2d li r25, 0x2d
blt- Printd_0x9c blt Printd_0x9c
printd_0x64 printd_0x64
mr. r24, r8 mr. r24, r8
li r25, 0x30 li r25, 0x30
beq- Printd_0x9c beq Printd_0x9c
lis r24, 0x3b9a lis r24, 0x3b9a
ori r24, r24, 0xca00 ori r24, r24, 0xca00
printd_0x78 printd_0x78
divw. r25, r8, r24 divw. r25, r8, r24
bne- Printd_0x8c bne Printd_0x8c
li r25, 0x0a li r25, 0x0a
divw r24, r24, r25 divw r24, r24, r25
b Printd_0x78 b Printd_0x78
@ -232,7 +232,7 @@ printd_0x9c
; r1 = kdp ; r1 = kdp
bl ScreenConsole_putchar bl ScreenConsole_putchar
beq- cr7, printd_0xc8 beq cr7, printd_0xc8
ori r30, r31, 0x10 ori r30, r31, 0x10
mtmsr r30 mtmsr r30
isync isync
@ -243,19 +243,19 @@ printd_0x9c
printd_0xc8 printd_0xc8
cmpwi r8, 0x00 cmpwi r8, 0x00
bge- Printd_0xd8 bge Printd_0xd8
neg r8, r8 neg r8, r8
b Printd_0x64 b Printd_0x64
printd_0xd8 printd_0xd8
li r25, 0x0a li r25, 0x0a
divw. r24, r24, r25 divw. r24, r24, r25
bne+ Printd_0x8c bne Printd_0x8c
li r29, 0x20 li r29, 0x20
; r1 = kdp ; r1 = kdp
bl ScreenConsole_putchar bl ScreenConsole_putchar
beq- cr7, printd_0x120 beq cr7, printd_0x120
ori r30, r31, 0x10 ori r30, r31, 0x10
mtmsr r30 mtmsr r30
isync isync
@ -264,7 +264,7 @@ printd_0xfc
lbz r30, 0x0002(r28) lbz r30, 0x0002(r28)
eieio eieio
andi. r30, r30, 0x04 andi. r30, r30, 0x04
beq+ Printd_0xfc beq Printd_0xfc
li r29, 0x20 li r29, 0x20
stb r29, 0x0006(r28) stb r29, 0x0006(r28)
eieio eieio
@ -352,9 +352,9 @@ print_digity_common ; OUTSIDE REFERER
cmpwi cr7, r28, 0x00 cmpwi cr7, r28, 0x00
andi. r29, r29, 0x02 andi. r29, r29, 0x02
beq- cr7, print_digity_common_0x40 beq cr7, print_digity_common_0x40
crmove 30, 2 crmove 30, 2
beq- print_digity_common_0x40 beq print_digity_common_0x40
bl serial_io bl serial_io
bl serial_flush bl serial_flush
@ -364,7 +364,7 @@ print_digity_common_0x40
rlwimi r25, r8, 4, 28, 31 rlwimi r25, r8, 4, 28, 31
rotlwi r8, r8, 0x04 rotlwi r8, r8, 0x04
cmpwi r25, 0x39 cmpwi r25, 0x39
ble- print_digity_common_0x5c ble print_digity_common_0x5c
addi r25, r25, 0x27 addi r25, r25, 0x27
print_digity_common_0x5c print_digity_common_0x5c
@ -372,7 +372,7 @@ print_digity_common_0x5c
; r1 = kdp ; r1 = kdp
bl ScreenConsole_putchar bl ScreenConsole_putchar
beq- cr7, print_digity_common_0x84 beq cr7, print_digity_common_0x84
ori r30, r31, 0x10 ori r30, r31, 0x10
mtmsr r30 mtmsr r30
isync isync
@ -384,13 +384,13 @@ print_digity_common_0x5c
print_digity_common_0x84 print_digity_common_0x84
addi r24, r24, -0x01 addi r24, r24, -0x01
mr. r24, r24 mr. r24, r24
bne+ print_digity_common_0x40 bne print_digity_common_0x40
bne- cr6, print_digity_common_0xd0 bne cr6, print_digity_common_0xd0
li r29, 0x20 li r29, 0x20
; r1 = kdp ; r1 = kdp
bl ScreenConsole_putchar bl ScreenConsole_putchar
beq- cr7, print_digity_common_0xd0 beq cr7, print_digity_common_0xd0
ori r30, r31, 0x10 ori r30, r31, 0x10
mtmsr r30 mtmsr r30
isync isync
@ -399,7 +399,7 @@ print_digity_common_0xac
lbz r30, 0x0002(r28) lbz r30, 0x0002(r28)
eieio eieio
andi. r30, r30, 0x04 andi. r30, r30, 0x04
beq+ print_digity_common_0xac beq print_digity_common_0xac
li r29, 0x20 li r29, 0x20
stb r29, 0x0006(r28) stb r29, 0x0006(r28)
eieio eieio
@ -423,7 +423,7 @@ getchar ; OUTSIDE REFERER
lwz r28, -0x0900(r1) lwz r28, -0x0900(r1)
cmpwi cr7, r28, 0x00 cmpwi cr7, r28, 0x00
li r8, -0x01 li r8, -0x01
beq+ cr7, print_return beq cr7, print_return
_Lock PSA.DbugLock, scratch1=r30, scratch2=r31 _Lock PSA.DbugLock, scratch1=r30, scratch2=r31
@ -434,7 +434,7 @@ getchar ; OUTSIDE REFERER
lbz r30, 0x0002(r28) lbz r30, 0x0002(r28)
eieio eieio
andi. r30, r30, 0x01 andi. r30, r30, 0x01
beq+ print_common beq print_common
lbz r8, 0x0006(r28) lbz r8, 0x0006(r28)
b print_common b print_common
@ -459,9 +459,9 @@ printc ; OUTSIDE REFERER
cmpwi cr7, r28, 0x00 cmpwi cr7, r28, 0x00
andi. r29, r29, 0x02 andi. r29, r29, 0x02
beq- cr7, printc_0x58 beq cr7, printc_0x58
crmove 30, 2 crmove 30, 2
beq- Printc_0x58 beq Printc_0x58
bl serial_io bl serial_io
bl serial_flush bl serial_flush
@ -470,7 +470,7 @@ printc_0x58
; r1 = kdp ; r1 = kdp
bl ScreenConsole_putchar bl ScreenConsole_putchar
beq- cr7, printc_0x90 beq cr7, printc_0x90
ori r30, r31, 0x10 ori r30, r31, 0x10
mtmsr r30 mtmsr r30
isync isync
@ -479,7 +479,7 @@ printc_0x70
lbz r30, 0x0002(r28) lbz r30, 0x0002(r28)
eieio eieio
andi. r30, r30, 0x04 andi. r30, r30, 0x04
beq+ Printc_0x70 beq Printc_0x70
stb r8, 0x0006(r28) stb r8, 0x0006(r28)
eieio eieio
mtmsr r31 mtmsr r31
@ -602,7 +602,7 @@ serial_io ; OUTSIDE REFERER
mfspr r30, pvr mfspr r30, pvr
rlwinm. r30, r30, 0, 0, 14 rlwinm. r30, r30, 0, 0, 14
rlwinm r29, r28, 0, 0, 14 rlwinm r29, r28, 0, 0, 14
beq- serial_io_0x38 beq serial_io_0x38
li r30, 0x03 li r30, 0x03
or r30, r30, r29 or r30, r30, r29
li r31, 0x3a li r31, 0x3a
@ -631,7 +631,7 @@ serial_io_0x50
; See disclaimer above. ; See disclaimer above.
serial_busywait ; OUTSIDE serial_busywait ; OUTSIDE
beqlr- cr7 beqlr cr7
ori r30, r31, 0x10 ori r30, r31, 0x10
mtmsr r30 mtmsr r30
isync isync
@ -640,7 +640,7 @@ serial_busywait_0x10
lbz r30, 0x0002(r28) lbz r30, 0x0002(r28)
eieio eieio
andi. r30, r30, 0x04 andi. r30, r30, 0x04
beq+ serial_busywait_0x10 beq serial_busywait_0x10
mtmsr r31 mtmsr r31
isync isync
blr blr

View File

@ -32,7 +32,7 @@ InitIDIndex
mr. r22, r8 mr. r22, r8
stw r8, PSA.IndexPtr(r1) stw r8, PSA.IndexPtr(r1)
beq+ Local_Panic beq Local_Panic
li r9, 0 li r9, 0
stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1) stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1)
@ -50,7 +50,7 @@ InitIDIndex
cmpwi r8, 0 cmpwi r8, 0
stw r8, Index.IDsPtr(r22) stw r8, Index.IDsPtr(r22)
beq+ Local_Panic beq Local_Panic
mtlr r23 mtlr r23
@ -82,24 +82,24 @@ MakeID
addi r20, r18, 0x08 addi r20, r18, 0x08
cmpwi r18, 0x00 cmpwi r18, 0x00
add r22, r22, r20 add r22, r22, r20
bne- @_48 bne @_48
li r19, 0x00 li r19, 0x00
b @_c b @_c
@_3c @_3c
add r20, r20, r19 add r20, r20, r19
cmpw r20, r21 cmpw r20, r21
beq- @_70 beq @_70
@_48 @_48
lbz r23, 0x0000(r22) lbz r23, 0x0000(r22)
cmpwi r23, 0x00 cmpwi r23, 0x00
beq- @_f0 beq @_f0
addi r19, r19, 0x01 addi r19, r19, 0x01
cmpwi cr1, r19, 0x1fa cmpwi cr1, r19, 0x1fa
addi r22, r22, 0x08 addi r22, r22, 0x08
lhz r20, 0x0000(r18) lhz r20, 0x0000(r18)
blt+ cr1, @_3c blt cr1, @_3c
addi r19, r20, 0x200 addi r19, r20, 0x200
b @_c b @_c
@ -111,7 +111,7 @@ MakeID
addi r19, r19, 0x200 addi r19, r19, 0x200
rlwinm. r20, r19, 25, 23, 29 rlwinm. r20, r19, 25, 23, 29
li r8, 0x00 li r8, 0x00
beqlr- beqlr
mflr r23 mflr r23
li r8, 0xfd8 li r8, 0xfd8
@ -123,7 +123,7 @@ MakeID
mr. r18, r8 mr. r18, r8
mtlr r23 mtlr r23
li r8, 0x00 li r8, 0x00
beqlr- beqlr
lwz r17, -0x0a98(r1) lwz r17, -0x0a98(r1)
lhz r19, 0x0002(r17) lhz r19, 0x0002(r17)
addi r19, r19, 0x200 addi r19, r19, 0x200
@ -185,14 +185,14 @@ DeleteID
add r22, r22, r20 add r22, r22, r20
clrlwi r20, r8, 0x10 clrlwi r20, r8, 0x10
li r8, 0x00 li r8, 0x00
bgelr- cr1 bgelr cr1
beqlr- beqlr
lbz r19, 0x0000(r22) lbz r19, 0x0000(r22)
lhz r23, 0x0002(r22) lhz r23, 0x0002(r22)
cmpwi r19, 0x00 cmpwi r19, 0x00
cmpw cr1, r23, r20 cmpw cr1, r23, r20
beqlr- beqlr
bnelr- cr1 bnelr cr1
lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1) lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1)
addi r9, r9, -0x01 addi r9, r9, -0x01
stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1) stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1)
@ -224,14 +224,14 @@ LookupID
clrlwi r20, r8, 0x10 clrlwi r20, r8, 0x10
li r8, 0x00 li r8, 0x00
li r9, 0x00 li r9, 0x00
bgelr- cr1 bgelr cr1
beqlr- beqlr
lbz r19, 0x0000(r22) lbz r19, 0x0000(r22)
lhz r23, 0x0002(r22) lhz r23, 0x0002(r22)
cmpwi r19, 0x00 cmpwi r19, 0x00
cmpw cr1, r23, r20 cmpw cr1, r23, r20
beqlr- beqlr
bnelr- cr1 bnelr cr1
lwz r8, 0x0004(r22) lwz r8, 0x0004(r22)
mr r9, r19 mr r9, r19
blr blr
@ -255,40 +255,40 @@ GetNextIDOfClass
addi r20, r18, 0x08 addi r20, r18, 0x08
slwi r22, r19, 3 slwi r22, r19, 3
li r8, 0x00 li r8, 0x00
bgelr- cr1 bgelr cr1
beqlr- beqlr
add r22, r22, r20 add r22, r22, r20
bne- cr2, @_48 bne cr2, @_48
@_3c @_3c
lbz r23, 0x0000(r22) lbz r23, 0x0000(r22)
cmpwi r23, 0x00 cmpwi r23, 0x00
bne- @_8c bne @_8c
@_48 @_48
addi r19, r19, 0x01 addi r19, r19, 0x01
cmpwi r19, 0x1fa cmpwi r19, 0x1fa
addi r22, r22, 0x08 addi r22, r22, 0x08
blt+ @_3c blt @_3c
lhz r20, 0x0000(r18) lhz r20, 0x0000(r18)
addi r20, r20, 0x200 addi r20, r20, 0x200
rlwinm. r20, r20, 25, 23, 29 rlwinm. r20, r20, 25, 23, 29
lwz r18, -0x0a98(r1) lwz r18, -0x0a98(r1)
beqlr- beqlr
addi r20, r20, 0x08 addi r20, r20, 0x08
li r19, 0x00 li r19, 0x00
lwzx r18, r18, r20 lwzx r18, r18, r20
cmpwi r18, 0x00 cmpwi r18, 0x00
addi r22, r18, 0x08 addi r22, r18, 0x08
bne+ @_3c bne @_3c
li r8, 0x00 li r8, 0x00
blr blr
@_8c @_8c
cmpwi r9, 0x00 cmpwi r9, 0x00
cmpw cr1, r9, r23 cmpw cr1, r9, r23
beq- @_9c beq @_9c
bne+ cr1, @_48 bne cr1, @_48
@_9c @_9c
lhz r20, 0x0000(r18) lhz r20, 0x0000(r18)

View File

@ -56,7 +56,7 @@ EndOfNanoKernelHeader
mfmsr r0 mfmsr r0
rlwinm. r0, r0, 0, MSR_DRbit, MSR_DRbit rlwinm. r0, r0, 0, MSR_DRbit, MSR_DRbit
beql- InitBuiltin beql InitBuiltin
; But if data paging is on, do some very strange things... ; But if data paging is on, do some very strange things...
@ -118,7 +118,7 @@ InitIRP
stw r10, 4(r12) stw r10, 4(r12)
addi r12, r12, 8 addi r12, r12, 8
andi. r10, r12, 0xfff andi. r10, r12, 0xfff
bne+ @wipe_loop bne @wipe_loop
blr blr
@ -350,7 +350,7 @@ InitHighLevel
subic. r22, r22, 4 subic. r22, r22, 4
lwzx r0, r22, r8 lwzx r0, r22, r8
stwx r0, r22, r9 stwx r0, r22, r9
bgt+ @loop bgt @loop
@ -583,7 +583,7 @@ InitHighLevel
@kctab_initloop @kctab_initloop
subic. r22, r22, 4 subic. r22, r22, 4
stwx r23, r8, r22 stwx r23, r8, r22
bne+ @kctab_initloop bne @kctab_initloop
; Then some overrides (names still pretty poor) ; Then some overrides (names still pretty poor)
@ -639,11 +639,11 @@ SetProcessorFlags
mfpvr r23 mfpvr r23
srwi r23, r23, 16 srwi r23, r23, 16
andi. r8, r23, 0x8000 andi. r8, r23, 0x8000
bne- @pvr_has_high_bit_set bne @pvr_has_high_bit_set
; PVR < 0x8000 (therefore probably equals 000*) ; PVR < 0x8000 (therefore probably equals 000*)
cmplwi r23, 0x000f ; but if not, pretend it's zero cmplwi r23, 0x000f ; but if not, pretend it's zero
ble- @pvr_not_low ble @pvr_not_low
li r23, 0x0000 li r23, 0x0000
@pvr_not_low @pvr_not_low
@ -664,7 +664,7 @@ SetProcessorFlags
andi. r23, r23, 0x7fff andi. r23, r23, 0x7fff
cmplwi r23, 0x000f cmplwi r23, 0x000f
ble- @other_pvr_not_low ble @other_pvr_not_low
li r23, -0x10 li r23, -0x10
@other_pvr_not_low @other_pvr_not_low
@ -763,7 +763,7 @@ SetProcessorFlags
bl PoolAllocClear ; takes size and returns ptr, all in r8 bl PoolAllocClear ; takes size and returns ptr, all in r8
mr. r31, r8 mr. r31, r8
beq- Init_Panic beq Init_Panic
; Get opaque ID ; Get opaque ID
li r9, Process.kIDClass li r9, Process.kIDClass
@ -802,7 +802,7 @@ SetProcessorFlags
li r8, 0x58 ;CoherenceGroup.Size li r8, 0x58 ;CoherenceGroup.Size
bl PoolAllocClear bl PoolAllocClear
mr. r31, r8 mr. r31, r8
beq- Init_Panic beq Init_Panic
; Append to the global CGRP list ; Append to the global CGRP list
@ -926,13 +926,13 @@ SetProcessorFlags
rlwinm r23, r21, 0, 23, 21 ; munge the second byte rlwinm r23, r21, 0, 23, 21 ; munge the second byte
cmpw r21, r23 cmpw r21, r23
beq- @bitnotset beq @bitnotset
add r21, r23, r26 add r21, r23, r26
@bitnotset @bitnotset
addic. r22, r22, -8 addic. r22, r22, -8
stwu r21, 4(r8) ; but store it eventually stwu r21, 4(r8) ; but store it eventually
bgt+ @BAT_copyloop bgt @BAT_copyloop
@ -953,7 +953,7 @@ SetProcessorFlags
cmpwi r8, 0 cmpwi r8, 0
mr r30, r9 mr r30, r9
bne- Init_Panic bne Init_Panic
; The relationship between SPACes and PROCs is still unclear... ; The relationship between SPACes and PROCs is still unclear...
@ -1116,7 +1116,7 @@ SetProcessorFlags
; Check ; Check
mr. r31, r8 mr. r31, r8
beq- Init_Panic beq Init_Panic
lwz r8, Task.ID(r31) lwz r8, Task.ID(r31)
stw r8, KDP.NanoKernelInfo + NKNanoKernelInfo.blueTaskID(r1) stw r8, KDP.NanoKernelInfo + NKNanoKernelInfo.blueTaskID(r1)
@ -1224,7 +1224,7 @@ av set PSA.AVFeatureBit
; Check ; Check
mr. r31, r8 mr. r31, r8
beq- Init_Panic beq Init_Panic
; Misc population ; Misc population
lisori r8, 'idle' lisori r8, 'idle'
@ -1302,7 +1302,7 @@ av set PSA.AVFeatureBit
cmpwi r8, 0 cmpwi r8, 0
mr r30, r9 mr r30, r9
lwz r31, EWA.CPUBase + CPU.IdleTaskPtr(r1) lwz r31, EWA.CPUBase + CPU.IdleTaskPtr(r1)
bne- Init_Panic bne Init_Panic
stw r30, Task.AddressSpacePtr(r31) stw r30, Task.AddressSpacePtr(r31)
@ -1317,7 +1317,7 @@ av set PSA.AVFeatureBit
; Put HTABORG and PTEGMask in KDP, and zero out the last PTEG ; Put HTABORG and PTEGMask in KDP, and zero out the last PTEG
beq- cr5, @skip_zeroing_pteg beq cr5, @skip_zeroing_pteg
mfspr r8, sdr1 mfspr r8, sdr1
; get settable HTABMASK bits ; get settable HTABMASK bits
@ -1339,7 +1339,7 @@ av set PSA.AVFeatureBit
@loop @loop
subic. r22, r22, 4 subic. r22, r22, 4
stwx r23, r8, r22 stwx r23, r8, r22
bgt+ @loop bgt @loop
@skip_zeroing_pteg @skip_zeroing_pteg
@ -1352,7 +1352,7 @@ av set PSA.AVFeatureBit
; Copy the ConfigInfo pagemap into KDP, absolut-ising entries ; Copy the ConfigInfo pagemap into KDP, absolut-ising entries
; whose physical addresses are relative to ConfigInfo. ; whose physical addresses are relative to ConfigInfo.
beq- cr5, @skip_copying_pagemap beq cr5, @skip_copying_pagemap
lwz r9, NKConfigurationInfo.PageMapInitOffset(r26) ; from base of CI lwz r9, NKConfigurationInfo.PageMapInitOffset(r26) ; from base of CI
lwz r22, NKConfigurationInfo.PageMapInitSize(r26) lwz r22, NKConfigurationInfo.PageMapInitSize(r26)
add r9, r9, r26 add r9, r9, r26
@ -1363,7 +1363,7 @@ av set PSA.AVFeatureBit
andi. r23, r21, PMDT.DaddyFlag | PMDT.PhysicalIsRelativeFlag andi. r23, r21, PMDT.DaddyFlag | PMDT.PhysicalIsRelativeFlag
cmpwi r23, PMDT.PhysicalIsRelativeFlag cmpwi r23, PMDT.PhysicalIsRelativeFlag
bne- @physical_address_not_relative_to_config_info bne @physical_address_not_relative_to_config_info
rlwinm r21, r21, 0, ~PMDT.PhysicalIsRelativeFlag rlwinm r21, r21, 0, ~PMDT.PhysicalIsRelativeFlag
add r21, r21, r26 add r21, r21, r26
@ -1374,7 +1374,7 @@ av set PSA.AVFeatureBit
subic. r22, r22, 4 subic. r22, r22, 4
lwzx r20, r9, r22 ; load another word, but no be cray lwzx r20, r9, r22 ; load another word, but no be cray
stwx r20, r18, r22 ; just save it in KDP stwx r20, r18, r22 ; just save it in KDP
bgt+ @copyloop_pagemap bgt @copyloop_pagemap
@skip_copying_pagemap @skip_copying_pagemap
@ -1455,7 +1455,7 @@ IRPTopOffset equ IRPOffset + 0x1000
oris r23, r23, 0x2000 ; no clue? oris r23, r23, 0x2000 ; no clue?
stwu r23, 4(r8) stwu r23, 4(r8)
bgt+ @copyloop_segmaps bgt @copyloop_segmaps
@ -1523,14 +1523,14 @@ IRPTopOffset equ IRPOffset + 0x1000
cmplwi cr7, r30, 0xffff ; if not at base: cmplwi cr7, r30, 0xffff ; if not at base:
rlwinm. r31, r31, 0, PMDT.DaddyFlag | PMDT.CountingFlag ; if neither flag: rlwinm. r31, r31, 0, PMDT.DaddyFlag | PMDT.CountingFlag ; if neither flag:
bgt- cr7, @finish_count ; stop counting bgt cr7, @finish_count ; stop counting
cmpwi cr6, r31, PMDT.DaddyFlag | PMDT.CountingFlag ; if both flags: cmpwi cr6, r31, PMDT.DaddyFlag | PMDT.CountingFlag ; if both flags:
beq- @finish_count ; stop counting beq @finish_count ; stop counting
beq+ cr6, @skip_pmdt ; next PMDT instead beq cr6, @skip_pmdt ; next PMDT instead
add r22, r22, r30 add r22, r22, r30
addi r22, r22, 1 addi r22, r22, 1
beq+ cr7, @next_segment ; else count and move on to next segment descriptor beq cr7, @next_segment ; else count and move on to next segment descriptor
@finish_count @finish_count
stw r22, KDP.VMMaxVirtualPages(r1) stw r22, KDP.VMMaxVirtualPages(r1)
@ -1555,7 +1555,7 @@ IRPTopOffset equ IRPOffset + 0x1000
ListFreePhysicalPages ListFreePhysicalPages
beq- cr5, @skip beq cr5, @skip
lwz r21, KDP.KernelMemoryBase(r1) lwz r21, KDP.KernelMemoryBase(r1)
lwz r20, KDP.KernelMemoryEnd(r1) lwz r20, KDP.KernelMemoryEnd(r1)
@ -1583,7 +1583,7 @@ ListFreePhysicalPages
@nextbank @nextbank
subic. r23, r23, 1 subic. r23, r23, 1
blt- @done blt @done
lwzu r31, 8(r19) ; bank start address lwzu r31, 8(r19) ; bank start address
lwz r22, 4(r19) ; bank size lwz r22, 4(r19) ; bank size
@ -1594,11 +1594,11 @@ ListFreePhysicalPages
cmplw cr6, r31, r21 cmplw cr6, r31, r21
cmplw cr7, r31, r20 cmplw cr7, r31, r20
subi r22, r22, 4096 subi r22, r22, 4096
blt+ @nextbank blt @nextbank
; Check that this page is outside the kernel's reserved area ; Check that this page is outside the kernel's reserved area
blt- cr6, @below_reserved blt cr6, @below_reserved
blt- cr7, @in_reserved blt cr7, @in_reserved
@below_reserved @below_reserved
stwu r31, 4(r29) ; write that part-PTE at the base of kernel memory stwu r31, 4(r29) ; write that part-PTE at the base of kernel memory
@in_reserved @in_reserved
@ -1613,7 +1613,7 @@ ListFreePhysicalPages
PrimeFreeListFromBanks PrimeFreeListFromBanks
beq- cr5, PrimeFreeListFromSystemHeap beq cr5, PrimeFreeListFromSystemHeap
; Add ~18 to 20 of these pages to the free list, depending on RAM size ; Add ~18 to 20 of these pages to the free list, depending on RAM size
subf r22, r21, r29 subf r22, r21, r29
@ -1636,7 +1636,7 @@ PrimeFreeListFromBanks
subi r17, r17, 1 subi r17, r17, 1
subi r29, r29, 4 subi r29, r29, 4
cmpwi r17, 0 cmpwi r17, 0
bgt+ @loop bgt @loop
b DonePrimingFreeList b DonePrimingFreeList
@ -1651,7 +1651,7 @@ PrimeFreeListFromSystemHeap
lwz r8, 0x05a8(r1) ; kdp.0x5a8 lwz r8, 0x05a8(r1) ; kdp.0x5a8
addi r18, r1, 0x2000 ; kdp.0x2000 addi r18, r1, 0x2000 ; kdp.0x2000
subf. r8, r18, r8 subf. r8, r18, r8
blt- DonePrimingFreeList blt DonePrimingFreeList
addi r8, r8, 0x1000 addi r8, r8, 0x1000
srwi r17, r8, 12 srwi r17, r8, 12
@ -1670,7 +1670,7 @@ PrimeFreeListFromSystemHeap
addi r17, r17, -0x01 addi r17, r17, -0x01
addi r18, r18, 0x1000 addi r18, r18, 0x1000
cmpwi r17, 0x00 cmpwi r17, 0x00
bgt+ @stupidloop bgt @stupidloop
@ -1714,7 +1714,7 @@ DonePrimingFreeList
; The replacement kernel needs to return to the Mac OS ; The replacement kernel needs to return to the Mac OS
; boot process. ; boot process.
beq- cr5, finish_old_world beq cr5, finish_old_world
@ -1740,7 +1740,7 @@ ReconcileMemory
slwi r8, r8, 2 slwi r8, r8, 2
; Memory We Have versus Memory We Could Use ; Memory We Have versus Memory We Could Use
; (see blt- below) ; (see blt below)
cmplw r22, r8 cmplw r22, r8
; TotalPhysicalPages equals pages not yet in free list but that could go in. ; TotalPhysicalPages equals pages not yet in free list but that could go in.
@ -1750,7 +1750,7 @@ ReconcileMemory
stw r19, KDP.TotalPhysicalPages(r1) stw r19, KDP.TotalPhysicalPages(r1)
; r22 = pages in array destined to be mapped to blue area ; r22 = pages in array destined to be mapped to blue area
blt- @less_than_VMMaxVirtualPages blt @less_than_VMMaxVirtualPages
subi r22, r8, 4 subi r22, r8, 4
@less_than_VMMaxVirtualPages @less_than_VMMaxVirtualPages
@ -1794,7 +1794,7 @@ ReconcileMemory
stwu r21, 0x0004(r29) stwu r21, 0x0004(r29)
addis r21, r21, 4 ; we just used a segment's worth of pages on this addis r21, r21, 4 ; we just used a segment's worth of pages on this
subis r22, r22, 1 ; pages in a segment subis r22, r22, 1 ; pages in a segment
bgt+ @persegment bgt @persegment
; Number of pages in that last segment ; Number of pages in that last segment
sth r22, 0x0002(r8) sth r22, 0x0002(r8)
@ -1807,7 +1807,7 @@ ReconcileMemory
; If any, they will be chucked on the free list ; If any, they will be chucked on the free list
subf. r18, r17, r18 subf. r18, r17, r18
slwi r31, r17, 12 ; does this work with discontiguous banks? hmm... slwi r31, r17, 12 ; does this work with discontiguous banks? hmm...
ble- @no_leftover_ram ble @no_leftover_ram
; See? ; See?
_log 'Physical RAM greater than the initial logical area.^n Moving ' _log 'Physical RAM greater than the initial logical area.^n Moving '
@ -1824,7 +1824,7 @@ ReconcileMemory
addi r31, r31, 4096 addi r31, r31, 4096
subi r18, r18, 1 subi r18, r18, 1
cmpwi r18, 0 cmpwi r18, 0
bgt+ @loop bgt @loop
@no_leftover_ram @no_leftover_ram
@ -1880,7 +1880,7 @@ finish_old_world
lwz r27, 0x0630(r1) lwz r27, 0x0630(r1)
lwz r27, 0x0094(r27) lwz r27, 0x0094(r27)
bl PagingFunc4 bl PagingFunc4
beq- setup_0x1160 beq setup_0x1160
li r30, 0x00 li r30, 0x00
stw r30, -0x0004(r29) stw r30, -0x0004(r29)
eieio eieio
@ -1892,7 +1892,7 @@ setup_0x1160
lwz r27, 0x0630(r1) lwz r27, 0x0630(r1)
lwz r27, 0x009c(r27) lwz r27, 0x009c(r27)
bl PagingFunc4 bl PagingFunc4
beq- setup_0x1188 beq setup_0x1188
li r30, 0x00 li r30, 0x00
stw r30, -0x0004(r29) stw r30, -0x0004(r29)
eieio eieio
@ -1909,7 +1909,7 @@ setup_0x1188
setup_0x11a0 setup_0x11a0
bl PagingFunc4 bl PagingFunc4
beq- setup_0x11bc beq setup_0x11bc
li r30, 0x00 li r30, 0x00
stw r30, -0x0004(r29) stw r30, -0x0004(r29)
eieio eieio
@ -1920,11 +1920,11 @@ setup_0x11bc
bl PagingFunc1 bl PagingFunc1
cmplw r27, r19 cmplw r27, r19
addi r27, r27, -0x1000 addi r27, r27, -0x1000
bgt+ setup_0x11a0 bgt setup_0x11a0
lwz r27, 0x0630(r1) lwz r27, 0x0630(r1)
lwz r27, 0x00a4(r27) lwz r27, 0x00a4(r27)
bl PagingFunc4 bl PagingFunc4
beq- setup_0x11f0 beq setup_0x11f0
li r30, 0x00 li r30, 0x00
stw r30, -0x0004(r29) stw r30, -0x0004(r29)
eieio eieio

View File

@ -38,7 +38,7 @@ major_0x02980 ; OUTSIDE REFERER
lwz r9, EWA.Enables(r1) lwz r9, EWA.Enables(r1)
rlwinm r23, r17, 31, 27, 31 rlwinm r23, r17, 31, 27, 31
rlwnm. r9, r9, r8, 0x00, 0x00 rlwnm. r9, r9, r8, 0x00, 0x00
bsol- cr3, major_0x02980_0x100 bsol cr3, major_0x02980_0x100
lwz r6, -0x0014(r1) lwz r6, -0x0014(r1)
ori r7, r16, 0x10 ori r7, r16, 0x10
neg r23, r23 neg r23, r23
@ -70,10 +70,10 @@ major_0x02980 ; OUTSIDE REFERER
lwz r8, 0x0034(r1) lwz r8, 0x0034(r1)
stw r8, 0x016c(r6) stw r8, 0x016c(r6)
cmpwi cr1, r9, 0x14 cmpwi cr1, r9, 0x14
blt- cr4, major_0x04a20_0x18 blt cr4, major_0x04a20_0x18
bne- cr2, TaskApproachTwo bne cr2, TaskApproachTwo
blt- major_0x02980_0xa8 blt major_0x02980_0xa8
bne- cr1, major_0x02980_0x178 bne cr1, major_0x02980_0x178
b TaskApproachTwo b TaskApproachTwo
major_0x02980_0xa8 major_0x02980_0xa8
@ -91,13 +91,13 @@ major_0x02980_0xa8
lwz r1, -0x0004(r1) lwz r1, -0x0004(r1)
lwz r4, 0x0054(r6) lwz r4, 0x0054(r6)
lwz r3, 0x0654(r1) lwz r3, 0x0654(r1)
blt- cr2, major_0x02980_0xec blt cr2, major_0x02980_0xec
lwz r3, 0x05b4(r1) lwz r3, 0x05b4(r1)
_bclr r11, r11, 16 _bclr r11, r11, 16
major_0x02980_0xec major_0x02980_0xec
lwz r12, 0x0648(r1) lwz r12, 0x0648(r1)
bsol- cr6, PreferRegistersFromEWASavingContextBlock bsol cr6, PreferRegistersFromEWASavingContextBlock
rlwinm r7, r7, 0, 29, 16 rlwinm r7, r7, 0, 29, 16
rlwimi r11, r7, 0, 20, 23 rlwimi r11, r7, 0, 20, 23
b IntReturn b IntReturn
@ -143,8 +143,8 @@ major_0x02980_0x134 ; OUTSIDE REFERER
bc BO_IF, EWA.kFlag16, major_0x04a20_0x18 bc BO_IF, EWA.kFlag16, major_0x04a20_0x18
bc BO_IF_NOT, EWA.kFlagBlue, TaskApproachOne bc BO_IF_NOT, EWA.kFlagBlue, TaskApproachOne
cmpwi cr1, r9, ecInstPageFault cmpwi cr1, r9, ecInstPageFault
blt+ major_0x02980_0xa8 ; when Enables[cause] is set! blt major_0x02980_0xa8 ; when Enables[cause] is set!
beq- cr1, TaskApproachOne beq cr1, TaskApproachOne
major_0x02980_0x178 ; OUTSIDE REFERER major_0x02980_0x178 ; OUTSIDE REFERER
lwz r1, EWA.PA_KDP(r1) lwz r1, EWA.PA_KDP(r1)
@ -209,7 +209,7 @@ major_0x02980_0x1e8
stw r29, 0x01ec(r6) stw r29, 0x01ec(r6)
stw r30, 0x01f4(r6) stw r30, 0x01f4(r6)
stw r31, 0x01fc(r6) stw r31, 0x01fc(r6)
bnel- major_0x03e18_0xb4 bnel major_0x03e18_0xb4
bc BO_IF_NOT, 12, major_0x02980_0x260 bc BO_IF_NOT, 12, major_0x02980_0x260
bl Save_v0_v31 bl Save_v0_v31
@ -232,7 +232,7 @@ major_0x02980_0x260
lwz r8, 0x00f4(r6) lwz r8, 0x00f4(r6)
lwz r10, 0x00fc(r6) lwz r10, 0x00fc(r6)
mtctr r8 mtctr r8
bnel- major_0x03e18_0x8 bnel major_0x03e18_0x8
lwarx r8, 0, r1 lwarx r8, 0, r1
sync sync
stwcx. r8, 0, r1 stwcx. r8, 0, r1
@ -241,7 +241,7 @@ major_0x02980_0x260
cmpwi r29, 0x00 cmpwi r29, 0x00
stw r8, 0x0004(r1) stw r8, 0x0004(r1)
lwz r28, 0x0210(r29) lwz r28, 0x0210(r29)
beq- major_0x02980_0x2d0 beq major_0x02980_0x2d0
mtspr vrsave, r28 mtspr vrsave, r28
major_0x02980_0x2d0 major_0x02980_0x2d0
@ -280,7 +280,7 @@ IntReturn ; OUTSIDE REFERER
andi. r8, r7, (1 << (31 - 26)) | (1 << (31 - 27)) andi. r8, r7, (1 << (31 - 26)) | (1 << (31 - 27))
mfsprg r1, 0 mfsprg r1, 0
bnel- major_0x02ccc ; my counters say almost never called! bnel major_0x02ccc ; my counters say almost never called!
li r8, 0 li r8, 0
stw r7, EWA.Flags(r1) stw r7, EWA.Flags(r1)
stw r8, EWA.WeMightClear(r1) stw r8, EWA.WeMightClear(r1)
@ -317,7 +317,7 @@ major_0x02ccc_0x30
; according to my counter, this point is never reached ; according to my counter, this point is never reached
rlwinm. r8, r7, 0, 8, 8 rlwinm. r8, r7, 0, 8, 8
beq- SuspendBlueTask beq SuspendBlueTask
stw r7, EWA.Flags(r1) stw r7, EWA.Flags(r1)
lwz r8, 0x0104(r6) lwz r8, 0x0104(r6)
stw r8, 0x0000(r1) stw r8, 0x0000(r1)
@ -368,7 +368,7 @@ major_0x02ccc_0x30
mtmsr r15 mtmsr r15
isync isync
rlwimi r25, r26, 2, 22, 29 ; apparently the lower byte of the entry is an FDP (code?) offset, /4! rlwimi r25, r26, 2, 22, 29 ; apparently the lower byte of the entry is an FDP (code?) offset, /4!
bnelr- bnelr
b FDP_011c b FDP_011c
@ -381,11 +381,11 @@ SuspendBlueTask
bl LookupID bl LookupID
cmpwi r9, Queue.kIDClass cmpwi r9, Queue.kIDClass
mr r30, r8 mr r30, r8
bnel- @no_exception_handler bnel @no_exception_handler
lwz r28, Queue.ReservePtr(r30) lwz r28, Queue.ReservePtr(r30)
cmpwi r28, 0 cmpwi r28, 0
beql- @no_memory_reserved_for_exception_messages beql @no_memory_reserved_for_exception_messages
;notify exception handler ;notify exception handler
_Lock PSA.SchLock, scratch1=r8, scratch2=r9 _Lock PSA.SchLock, scratch1=r8, scratch2=r9
@ -468,8 +468,8 @@ TaskApproachOne ; OUTSIDE REFERER
srwi r8, r7, 24 srwi r8, r7, 24
rlwinm. r16, r16, 0, Task.kFlag9, Task.kFlag9 rlwinm. r16, r16, 0, Task.kFlag9, Task.kFlag9
cmpwi cr1, r8, ecInstPageFault cmpwi cr1, r8, ecInstPageFault
bne- TaskNotSuitableForWhatWeWantToDo bne TaskNotSuitableForWhatWeWantToDo
bne- cr1, TaskNotSuitableForWhatWeWantToDo bne cr1, TaskNotSuitableForWhatWeWantToDo
; what is special about the upper 8 Flags? Are they Task-related? ; what is special about the upper 8 Flags? Are they Task-related?
lwz r8, Task.Zero3(r31) lwz r8, Task.Zero3(r31)
@ -510,8 +510,8 @@ TaskApproachTwo ; OUTSIDE REFERER
srwi r8, r7, 24 srwi r8, r7, 24
rlwinm. r16, r16, 0, Task.kFlag9, Task.kFlag9 rlwinm. r16, r16, 0, Task.kFlag9, Task.kFlag9
cmpwi cr1, r8, 0x14 cmpwi cr1, r8, 0x14
bne- TaskNotSuitableForWhatWeWantToDo bne TaskNotSuitableForWhatWeWantToDo
bne- cr1, TaskNotSuitableForWhatWeWantToDo bne cr1, TaskNotSuitableForWhatWeWantToDo
lwz r8, Task.Zero4(r31) lwz r8, Task.Zero4(r31)
addi r8, r8, 1 addi r8, r8, 1
@ -531,7 +531,7 @@ CommonPathBetweenTaskIntFuncs
lisori r17, Area.kSignature lisori r17, Area.kSignature
lwz r16, Area.Signature(r29) lwz r16, Area.Signature(r29)
cmplw r16, r17 cmplw r16, r17
bnel+ Local_Panic bnel Local_Panic
lwz r17, Area.Counter(r29) lwz r17, Area.Counter(r29)
addi r17, r17, 1 addi r17, r17, 1
@ -544,9 +544,9 @@ CommonPathBetweenTaskIntFuncs
cmpwi cr0, r9, ecInstPageFault cmpwi cr0, r9, ecInstPageFault
cmpwi cr1, r16, 0 cmpwi cr1, r16, 0
mr r26, r8 mr r26, r8
bne- cr0, CanSendMessage bne cr0, CanSendMessage
beq- cr1, CantSendMessage beq cr1, CantSendMessage
beq- cr2, CanSendMessage beq cr2, CanSendMessage
CantSendMessage CantSendMessage
lwz r16, Task.Flags(r31) lwz r16, Task.Flags(r31)
@ -573,15 +573,15 @@ CantSendMessage
bl CauseNotification bl CauseNotification
cmpwi r8, 0 cmpwi r8, 0
beq+ IntLocalBlockMPCall ; jump if no error? beq IntLocalBlockMPCall ; jump if no error?
CanSendMessage CanSendMessage
mfcr r28 mfcr r28
li r8, Message.Size li r8, Message.Size
beq- cr2, major_0x02ccc_0x4a8 beq cr2, major_0x02ccc_0x4a8
bl PoolAlloc bl PoolAlloc
mr. r26, r8 mr. r26, r8
beq- major_0x02ccc_PoolAllocFailed beq major_0x02ccc_PoolAllocFailed
addi r17, r31, Task.QueueMember addi r17, r31, Task.QueueMember
addi r18, r31, Task.Semaphore addi r18, r31, Task.Semaphore
@ -612,7 +612,7 @@ major_0x02ccc_0x4a8
bl SchRdyTaskNow bl SchRdyTaskNow
_AssertAndRelease PSA.SchLock, scratch=r31 _AssertAndRelease PSA.SchLock, scratch=r31
mtcr r28 mtcr r28
bns- cr6, major_0x02ccc_0x504 bns cr6, major_0x02ccc_0x504
lwz r8, 0x0064(r6) lwz r8, 0x0064(r6)
lwz r9, 0x0068(r6) lwz r9, 0x0068(r6)
stw r8, 0x0024(r6) stw r8, 0x0024(r6)
@ -663,8 +663,8 @@ IntDecrementer ; OUTSIDE REFERER
lwz r8, KDP.OldKDP(r1) lwz r8, KDP.OldKDP(r1)
rlwinm. r9, r11, 0, 16, 16 rlwinm. r9, r11, 0, 16, 16
cmpwi cr1, r8, 0x00 cmpwi cr1, r8, 0x00
beq- MaskedInterruptTaken beq MaskedInterruptTaken
beq- cr1, IntDecrementer_0x54 beq cr1, IntDecrementer_0x54
stw r16, ContextBlock.r16(r6) stw r16, ContextBlock.r16(r6)
stw r17, ContextBlock.r17(r6) stw r17, ContextBlock.r17(r6)
@ -672,7 +672,7 @@ IntDecrementer ; OUTSIDE REFERER
stw r25, ContextBlock.r25(r6) stw r25, ContextBlock.r25(r6)
bl SchFiddlePriorityShifty bl SchFiddlePriorityShifty
ble- IntDecrementer_0x48 ble IntDecrementer_0x48
lwz r8, PSA.CriticalReadyQ + ReadyQueue.Timecake + 4(r1) lwz r8, PSA.CriticalReadyQ + ReadyQueue.Timecake + 4(r1)
mtspr dec, r8 mtspr dec, r8
@ -727,7 +727,7 @@ IntDSI ; OUTSIDE REFERER
andis. r28, r26, 0x400 andis. r28, r26, 0x400
mtsprg 3, r23 mtsprg 3, r23
mfmsr r14 mfmsr r14
bne- major_0x03324_0x9c bne major_0x03324_0x9c
ori r15, r14, 0x10 ori r15, r14, 0x10
mtmsr r15 mtmsr r15
isync isync
@ -742,7 +742,7 @@ major_0x03324 ; OUTSIDE REFERER
lwz r25, 0x0650(r1) lwz r25, 0x0650(r1)
li r21, 0x00 li r21, 0x00
mfsprg r1, 0 mfsprg r1, 0
beq- major_0x03324_0x18 beq major_0x03324_0x18
lwzx r18, r1, r18 lwzx r18, r1, r18
major_0x03324_0x18 major_0x03324_0x18
@ -750,7 +750,7 @@ major_0x03324_0x18
lwz r16, EWA.Flags(r1) lwz r16, EWA.Flags(r1)
rlwinm r17, r27, 0, 6, 15 rlwinm r17, r27, 0, 6, 15
rlwimi r16, r16, 27, 26, 26 rlwimi r16, r16, 27, 26, 26
bge- major_0x03324_0x58 bge major_0x03324_0x58
rlwimi r25, r27, 7, 26, 29 rlwimi r25, r27, 7, 26, 29
rlwimi r25, r27, 12, 25, 25 rlwimi r25, r27, 12, 25, 25
lwz r26, 0x0b80(r25) lwz r26, 0x0b80(r25)
@ -777,7 +777,7 @@ major_0x03324_0x58
crclr cr5_so crclr cr5_so
rlwimi r17, r26, 6, 26, 5 rlwimi r17, r26, 6, 26, 5
add r18, r18, r23 add r18, r18, r23
blelr- cr3 blelr cr3
neg r23, r23 neg r23, r23
add r18, r18, r23 add r18, r18, r23
blr blr
@ -801,12 +801,12 @@ major_0x03324_0x9c ; OUTSIDE REFERER
mr r16, r28 mr r16, r28
crset cr3_so crset cr3_so
mfsprg r1, 0 mfsprg r1, 0
beq- major_0x03324_0x12c beq major_0x03324_0x12c
mr r18, r8 mr r18, r8
rlwinm r28, r27, 13, 25, 29 rlwinm r28, r27, 13, 25, 29
andis. r9, r31, 0x200 andis. r9, r31, 0x200
rlwimi r18, r17, 0, 0, 19 rlwimi r18, r17, 0, 0, 19
beq- major_0x03324_0x118 beq major_0x03324_0x118
lwzx r31, r1, r28 lwzx r31, r1, r28
stwcx. r31, 0, r18 stwcx. r31, 0, r18
sync sync
@ -861,7 +861,7 @@ IntAlignment ; OUTSIDE REFERER
addi r23, r1, KDP.RedVecBase addi r23, r1, KDP.RedVecBase
bne- major_0x03548_0x20 bne major_0x03548_0x20
; DSISR for misaligned X-form instruction: ; DSISR for misaligned X-form instruction:
@ -878,7 +878,7 @@ FDP_TableBase equ 0xa00
; Get the FDP and F.O. if we were in MSR_LE mode ; Get the FDP and F.O. if we were in MSR_LE mode
lwz r25, KDP.PA_FDP(r1) lwz r25, KDP.PA_FDP(r1)
bne- major_0x03548_0x20 bne major_0x03548_0x20
rlwinm. r21, r27, 17, 30, 31 ; evaluate hi two bits of XO (or 0 for d-form?) rlwinm. r21, r27, 17, 30, 31 ; evaluate hi two bits of XO (or 0 for d-form?)
@ -892,7 +892,7 @@ FDP_TableBase equ 0xa00
rlwimi r16, r16, 27, 26, 26 ; AllCpuFeatures: copy bit 21 to bit 26 rlwimi r16, r16, 27, 26, 26 ; AllCpuFeatures: copy bit 21 to bit 26
bne- @regidx bne @regidx
; D-form (immediate-indexed) instruction ; D-form (immediate-indexed) instruction
lwz r26, FDP_TableBase + 4*(0x40 + 0x20)(r25) ; use upper quarter of table lwz r26, FDP_TableBase + 4*(0x40 + 0x20)(r25) ; use upper quarter of table
@ -916,7 +916,7 @@ FDP_TableBase equ 0xa00
mtcr r26 mtcr r26
rlwimi r17, r26, 6, 26, 5 rlwimi r17, r26, 6, 26, 5
crclr 23 ; unset bit 23 = cr5_so crclr 23 ; unset bit 23 = cr5_so
bgelr- cr3 ; jump now if bit 12 is off bgelr cr3 ; jump now if bit 12 is off
; if bit 12 was on, turn on paging and fetch the offending insn ; if bit 12 was on, turn on paging and fetch the offending insn
; and also activate the Red vector table ; and also activate the Red vector table
@ -960,11 +960,11 @@ IntDSIOtherOther ; OUTSIDE REFERER
mfspr r27, dar mfspr r27, dar
andis. r28, r31, 0xc030 andis. r28, r31, 0xc030
lwz r1, -0x0004(r1) lwz r1, -0x0004(r1)
bne- IntDSIOtherOther_0x1c8 bne IntDSIOtherOther_0x1c8
mfspr r30, srr1 mfspr r30, srr1
andi. r28, r30, 0x4000 andi. r28, r30, 0x4000
mfsprg r30, 0 mfsprg r30, 0
beq- IntDSIOtherOther_0x100 beq IntDSIOtherOther_0x100
stw r8, -0x00e0(r30) stw r8, -0x00e0(r30)
stw r9, -0x00dc(r30) stw r9, -0x00dc(r30)
mfcr r8 mfcr r8
@ -980,25 +980,25 @@ IntDSIOtherOther ; OUTSIDE REFERER
lwz r17, 0x0028(r8) lwz r17, 0x0028(r8)
cmplw r27, r16 cmplw r27, r16
cmplw cr7, r27, r17 cmplw cr7, r27, r17
blt- IntDSIOtherOther_0xe0 blt IntDSIOtherOther_0xe0
bgt- cr7, IntDSIOtherOther_0xe0 bgt cr7, IntDSIOtherOther_0xe0
mr r31, r8 mr r31, r8
mr r8, r27 mr r8, r27
bl MPCall_95_0x1e4 bl MPCall_95_0x1e4
beq- IntDSIOtherOther_0xe0 beq IntDSIOtherOther_0xe0
lwz r8, 0x0000(r30) lwz r8, 0x0000(r30)
lwz r16, 0x0098(r31) lwz r16, 0x0098(r31)
rlwinm r28, r8, 0, 29, 30 rlwinm r28, r8, 0, 29, 30
cmpwi cr7, r28, 0x04 cmpwi cr7, r28, 0x04
cmpwi r28, 0x02 cmpwi r28, 0x02
beq- cr7, IntDSIOtherOther_0xe0 beq cr7, IntDSIOtherOther_0xe0
beq- IntDSIOtherOther_0xe0 beq IntDSIOtherOther_0xe0
IntDSIOtherOther_0x98 IntDSIOtherOther_0x98
addi r17, r31, 0x90 addi r17, r31, 0x90
cmpw r16, r17 cmpw r16, r17
addi r17, r16, 0x14 addi r17, r16, 0x14
beq- IntDSIOtherOther_0x158 beq IntDSIOtherOther_0x158
lwz r9, 0x0010(r16) lwz r9, 0x0010(r16)
add r9, r9, r17 add r9, r9, r17
@ -1006,11 +1006,11 @@ IntDSIOtherOther_0xb0
lwz r18, 0x0000(r17) lwz r18, 0x0000(r17)
cmplw cr7, r17, r9 cmplw cr7, r17, r9
lwz r19, 0x0004(r17) lwz r19, 0x0004(r17)
bgt- cr7, IntDSIOtherOther_0xd8 bgt cr7, IntDSIOtherOther_0xd8
cmplw r27, r18 cmplw r27, r18
cmplw cr7, r27, r19 cmplw cr7, r27, r19
blt- IntDSIOtherOther_0xd0 blt IntDSIOtherOther_0xd0
ble- cr7, IntDSIOtherOther_0xe0 ble cr7, IntDSIOtherOther_0xe0
IntDSIOtherOther_0xd0 IntDSIOtherOther_0xd0
addi r17, r17, 0x08 addi r17, r17, 0x08
@ -1033,14 +1033,14 @@ IntDSIOtherOther_0xe0
IntDSIOtherOther_0x100 IntDSIOtherOther_0x100
andis. r28, r31, 0x800 andis. r28, r31, 0x800
addi r29, r1, 800 addi r29, r1, 800
bnel- PagingFunc3 bnel PagingFunc3
li r28, 0x43 li r28, 0x43
and r28, r31, r28 and r28, r31, r28
cmpwi cr7, r28, 0x43 cmpwi cr7, r28, 0x43
beql+ Local_Panic beql Local_Panic
mfsprg r28, 2 mfsprg r28, 2
mtlr r28 mtlr r28
bne- cr7, IntDSIOtherOther_0x144 bne cr7, IntDSIOtherOther_0x144
mfspr r28, srr0 mfspr r28, srr0
addi r28, r28, 0x04 addi r28, r28, 0x04
lwz r26, 0x0e90(r1) lwz r26, 0x0e90(r1)
@ -1052,7 +1052,7 @@ IntDSIOtherOther_0x100
IntDSIOtherOther_0x144 IntDSIOtherOther_0x144
andi. r28, r31, 0x03 andi. r28, r31, 0x03
li r8, ecDataSupAccessViolation li r8, ecDataSupAccessViolation
beq+ major_0x02980 beq major_0x02980
li r8, ecDataWriteViolation li r8, ecDataWriteViolation
b major_0x02980 b major_0x02980
@ -1084,7 +1084,7 @@ IntDSIOtherOther_0x19c
IntDSIOtherOther_0x1c8 IntDSIOtherOther_0x1c8
andis. r28, r31, 0x8010 andis. r28, r31, 0x8010
bne- IntMachineCheckMemRetry_0x14c bne IntMachineCheckMemRetry_0x14c
_Lock PSA.HTABLock, scratch1=r28, scratch2=r31 _Lock PSA.HTABLock, scratch1=r28, scratch2=r31
@ -1092,9 +1092,9 @@ IntDSIOtherOther_0x1c8
_AssertAndRelease PSA.HTABLock, scratch=r28 _AssertAndRelease PSA.HTABLock, scratch=r28
mfsprg r28, 2 mfsprg r28, 2
mtlr r28 mtlr r28
beq+ IntDSIOtherOther_0x19c beq IntDSIOtherOther_0x19c
li r8, ecDataInvalidAccess li r8, ecDataInvalidAccess
bge+ major_0x02980 bge major_0x02980
li r8, ecDataPageFault li r8, ecDataPageFault
b major_0x02980 b major_0x02980
@ -1131,9 +1131,9 @@ IntMachineCheckMemRetry ; OUTSIDE REFERER
lwz r27, 0x0694(r1) lwz r27, 0x0694(r1)
subf r28, r19, r27 subf r28, r19, r27
cmpwi r28, -0x10 cmpwi r28, -0x10
blt- IntMachineCheckMemRetry_0x14c blt IntMachineCheckMemRetry_0x14c
cmpwi r28, 0x10 cmpwi r28, 0x10
bgt- IntMachineCheckMemRetry_0x14c bgt IntMachineCheckMemRetry_0x14c
_Lock PSA.HTABLock, scratch1=r28, scratch2=r29 _Lock PSA.HTABLock, scratch1=r28, scratch2=r29
@ -1147,7 +1147,7 @@ IntMachineCheckMemRetry ; OUTSIDE REFERER
rlwinm. r28, r28, 0, 0, 14 rlwinm. r28, r28, 0, 0, 14
sync sync
tlbie r27 tlbie r27
beq- IntMachineCheckMemRetry_0x124 beq IntMachineCheckMemRetry_0x124
sync sync
tlbsync tlbsync
@ -1159,7 +1159,7 @@ IntMachineCheckMemRetry_0x124
IntMachineCheckMemRetry_0x14c ; OUTSIDE REFERER IntMachineCheckMemRetry_0x14c ; OUTSIDE REFERER
cmplw r10, r19 cmplw r10, r19
li r8, ecDataHardwareFault li r8, ecDataHardwareFault
bne+ major_0x02980 bne major_0x02980
mfsprg r1, 0 mfsprg r1, 0
mtsprg 3, r24 mtsprg 3, r24
lmw r14, 0x0038(r1) lmw r14, 0x0038(r1)
@ -1186,7 +1186,7 @@ IntISI ; OUTSIDE REFERER
; r13 = cr ; r13 = cr
andis. r8, r11, 0x4020 andis. r8, r11, 0x4020
beq- major_0x039dc_0x14 beq major_0x039dc_0x14
mfsprg r8, 0 mfsprg r8, 0
stmw r14, 0x0038(r8) stmw r14, 0x0038(r8)
@ -1196,7 +1196,7 @@ IntISI ; OUTSIDE REFERER
bl PagingFunc1 bl PagingFunc1
_AssertAndRelease PSA.HTABLock, scratch=r28 _AssertAndRelease PSA.HTABLock, scratch=r28
mfsprg r8, 0 mfsprg r8, 0
bne- major_0x039dc bne major_0x039dc
mfsprg r24, 3 mfsprg r24, 3
mfmsr r14 mfmsr r14
ori r15, r14, 0x10 ori r15, r14, 0x10
@ -1219,14 +1219,14 @@ IntISI ; OUTSIDE REFERER
major_0x039dc ; OUTSIDE REFERER major_0x039dc ; OUTSIDE REFERER
lmw r14, 0x0038(r8) lmw r14, 0x0038(r8)
li r8, ecInstPageFault li r8, ecInstPageFault
blt+ major_0x02980_0x134 blt major_0x02980_0x134
li r8, ecInstInvalidAddress li r8, ecInstInvalidAddress
b major_0x02980_0x134 b major_0x02980_0x134
major_0x039dc_0x14 ; OUTSIDE REFERER major_0x039dc_0x14 ; OUTSIDE REFERER
andis. r8, r11, 0x800 andis. r8, r11, 0x800
li r8, ecInstSupAccessViolation li r8, ecInstSupAccessViolation
bne+ major_0x02980_0x134 bne major_0x02980_0x134
li r8, ecInstHardwareFault li r8, ecInstHardwareFault
b major_0x02980_0x134 b major_0x02980_0x134
@ -1265,7 +1265,7 @@ IntMachineCheck ; OUTSIDE REFERER
_log '^n' _log '^n'
rlwinm. r8, r11, 0, 2, 2 rlwinm. r8, r11, 0, 2, 2
beq- @not_L1_data_cache_error beq @not_L1_data_cache_error
;L1 data cache error ;L1 data cache error
bl FlushL1CacheUsingMSSCR0 bl FlushL1CacheUsingMSSCR0
@ -1297,7 +1297,7 @@ IntDSIOther ; OUTSIDE REFERER
mfspr r8, dsisr mfspr r8, dsisr
rlwimi r11, r8, 0, 0, 9 rlwimi r11, r8, 0, 0, 9
andis. r8, r11, 0x4020 andis. r8, r11, 0x4020
beq+ major_0x039dc_0x14 beq major_0x039dc_0x14
mfsprg r8, 0 mfsprg r8, 0
stmw r14, 0x0038(r8) stmw r14, 0x0038(r8)
lwz r1, -0x0004(r8) lwz r1, -0x0004(r8)
@ -1308,7 +1308,7 @@ IntDSIOther ; OUTSIDE REFERER
bl PagingFunc1 bl PagingFunc1
_AssertAndRelease PSA.HTABLock, scratch=r28 _AssertAndRelease PSA.HTABLock, scratch=r28
mfsprg r8, 0 mfsprg r8, 0
bne+ major_0x039dc bne major_0x039dc
lmw r14, 0x0038(r8) lmw r14, 0x0038(r8)
mfsprg r1, 2 mfsprg r1, 2
mtlr r1 mtlr r1
@ -1334,9 +1334,9 @@ kcReturnFromException ; OUTSIDE REFERER
ori r11, r11, 0x8000 ori r11, r11, 0x8000
mtcrf 0x3f, r7 mtcrf 0x3f, r7
cmplwi cr1, r3, 0x01 cmplwi cr1, r3, 0x01
blt- cr4, major_0x04a20_0x18 blt cr4, major_0x04a20_0x18
blt- cr1, major_0x03be0_0x58 blt cr1, major_0x03be0_0x58
beq- cr1, major_0x03be0_0x90 beq cr1, major_0x03be0_0x90
addi r8, r3, -0x20 addi r8, r3, -0x20
lwz r9, 0x0eac(r1) lwz r9, 0x0eac(r1)
cmplwi r8, 0xe0 cmplwi r8, 0xe0
@ -1344,7 +1344,7 @@ kcReturnFromException ; OUTSIDE REFERER
stw r9, 0x0eac(r1) stw r9, 0x0eac(r1)
mfsprg r1, 0 mfsprg r1, 0
rlwimi r7, r3, 24, 0, 7 rlwimi r7, r3, 24, 0, 7
blt- major_0x03be0_0xe8 blt major_0x03be0_0xe8
li r8, ecTrapInstr li r8, ecTrapInstr
b major_0x02980_0x134 b major_0x02980_0x134
@ -1360,7 +1360,7 @@ major_0x03be0_0x58
lwz r12, 0x008c(r6) lwz r12, 0x008c(r6)
lwz r3, 0x0094(r6) lwz r3, 0x0094(r6)
lwz r4, 0x009c(r6) lwz r4, 0x009c(r6)
bnel- major_0x03e18 bnel major_0x03e18
addi r9, r6, 0x40 addi r9, r6, 0x40
b IntReturn b IntReturn
@ -1379,8 +1379,8 @@ major_0x03be0_0x90
lwz r12, 0x008c(r6) lwz r12, 0x008c(r6)
lwz r3, 0x0094(r6) lwz r3, 0x0094(r6)
lwz r4, 0x009c(r6) lwz r4, 0x009c(r6)
bne- cr2, major_0x03be0_0xe8 bne cr2, major_0x03be0_0xe8
bns- cr6, major_0x03be0_0xe8 bns cr6, major_0x03be0_0xe8
stmw r14, 0x0038(r1) stmw r14, 0x0038(r1)
lwz r17, 0x0064(r6) lwz r17, 0x0064(r6)
lwz r20, 0x0068(r6) lwz r20, 0x0068(r6)
@ -1389,7 +1389,7 @@ major_0x03be0_0x90
lwz r18, 0x007c(r6) lwz r18, 0x007c(r6)
major_0x03be0_0xe8 major_0x03be0_0xe8
beq+ cr2, major_0x02980_0x178 beq cr2, major_0x02980_0x178
crclr cr6_so crclr cr6_so
mfspr r10, srr0 mfspr r10, srr0
li r8, ecTrapInstr li r8, ecTrapInstr
@ -1542,14 +1542,14 @@ IntFPUnavail ; OUTSIDE REFERER
major_0x03e18 ; OUTSIDE REFERER major_0x03e18 ; OUTSIDE REFERER
rlwinm. r8, r11, 0, 18, 18 rlwinm. r8, r11, 0, 18, 18
bnelr- bnelr
major_0x03e18_0x8 ; OUTSIDE REFERER major_0x03e18_0x8 ; OUTSIDE REFERER
lwz r8, 0x00e4(r6) lwz r8, 0x00e4(r6)
rlwinm. r8, r8, 1, 0, 0 rlwinm. r8, r8, 1, 0, 0
mfmsr r8 mfmsr r8
ori r8, r8, 0x2000 ori r8, r8, 0x2000
beqlr- beqlr
mtmsr r8 mtmsr r8
isync isync
ori r11, r11, 0x2000 ori r11, r11, 0x2000
@ -1677,7 +1677,7 @@ major_0x04180 ; OUTSIDE REFERER
lwz r10, 0x00d8(r6) lwz r10, 0x00d8(r6)
mfspr r11, srr1 mfspr r11, srr1
cmpwi r10, 0x00 cmpwi r10, 0x00
beql- major_0x04180_0x9c beql major_0x04180_0x9c
oris r11, r11, 0x200 oris r11, r11, 0x200
stw r9, -0x027c(r1) stw r9, -0x027c(r1)
mtspr srr1, r11 mtspr srr1, r11
@ -1740,14 +1740,14 @@ IntPerfMonitor ; OUTSIDE REFERER
mflr r8 mflr r8
mfcr r13 mfcr r13
cmpwi r8, 0xf20 cmpwi r8, 0xf20
beq+ major_0x04180 beq major_0x04180
mtcr r13 mtcr r13
lwz r13, -0x0284(r1) lwz r13, -0x0284(r1)
lwz r8, -0x0280(r1) lwz r8, -0x0280(r1)
bl save_all_registers bl save_all_registers
mr r28, r8 mr r28, r8
rlwinm. r9, r11, 0, 16, 16 rlwinm. r9, r11, 0, 16, 16
beq+ MaskedInterruptTaken beq MaskedInterruptTaken
_Lock PSA.SchLock, scratch1=r8, scratch2=r9 _Lock PSA.SchLock, scratch1=r8, scratch2=r9
@ -1758,7 +1758,7 @@ IntPerfMonitor ; OUTSIDE REFERER
cmpwi r9, Notification.kIDClass cmpwi r9, Notification.kIDClass
mr r30, r8 mr r30, r8
bne- IntPerfMonitor_0x88 bne IntPerfMonitor_0x88
lwz r16, -0x0340(r28) lwz r16, -0x0340(r28)
lwz r17, -0x0008(r28) lwz r17, -0x0008(r28)
stw r16, 0x0010(r30) stw r16, 0x0010(r30)
@ -1785,7 +1785,7 @@ IntThermalEvent ; OUTSIDE REFERER
bl save_all_registers bl save_all_registers
mr r28, r8 mr r28, r8
rlwinm. r9, r11, 0, 16, 16 rlwinm. r9, r11, 0, 16, 16
beq+ MaskedInterruptTaken beq MaskedInterruptTaken
_log 'Thermal event^n' _log 'Thermal event^n'
_Lock PSA.SchLock, scratch1=r8, scratch2=r9 _Lock PSA.SchLock, scratch1=r8, scratch2=r9
@ -1794,7 +1794,7 @@ IntThermalEvent ; OUTSIDE REFERER
bl LookupID bl LookupID
cmpwi r9, Notification.kIDClass cmpwi r9, Notification.kIDClass
mr r30, r8 mr r30, r8
bne- @no_thermal_handler bne @no_thermal_handler
lwz r16, EWA.CPUBase + CPU.ID(r28) lwz r16, EWA.CPUBase + CPU.ID(r28)
stw r16, Notification.MsgWord1(r30) stw r16, Notification.MsgWord1(r30)
@ -1819,9 +1819,9 @@ kcRunAlternateContext ; OUTSIDE REFERER
lwz r9, KDP.MinusOne1(r1) lwz r9, KDP.MinusOne1(r1)
rlwinm r8, r3, 0, 0, 25 rlwinm r8, r3, 0, 0, 25
cmpw cr1, r8, r9 cmpw cr1, r8, r9
bne+ IntReturn bne IntReturn
lwz r9, 0x0344(r1) lwz r9, 0x0344(r1)
bne- cr1, major_0x043a0_0x48 bne cr1, major_0x043a0_0x48
major_0x043a0_0x24 major_0x043a0_0x24
addi r8, r1, 0x420 addi r8, r1, 0x420
@ -1837,41 +1837,41 @@ major_0x043a0_0x24
major_0x043a0_0x48 major_0x043a0_0x48
lwz r9, 0x0348(r1) lwz r9, 0x0348(r1)
cmpw cr1, r8, r9 cmpw cr1, r8, r9
beq- cr1, major_0x043a0_0x130 beq cr1, major_0x043a0_0x130
lwz r9, 0x0350(r1) lwz r9, 0x0350(r1)
cmpw cr1, r8, r9 cmpw cr1, r8, r9
beq- cr1, major_0x043a0_0x110 beq cr1, major_0x043a0_0x110
lwz r9, 0x0358(r1) lwz r9, 0x0358(r1)
cmpw cr1, r8, r9 cmpw cr1, r8, r9
beq- cr1, major_0x043a0_0xf0 beq cr1, major_0x043a0_0xf0
mfsprg r1, 0 mfsprg r1, 0
stmw r14, 0x0038(r1) stmw r14, 0x0038(r1)
lwz r1, -0x0004(r1) lwz r1, -0x0004(r1)
cmpw cr1, r8, r6 cmpw cr1, r8, r6
beq- cr1, major_0x043a0_0x154 beq cr1, major_0x043a0_0x154
mr r27, r8 mr r27, r8
addi r29, r1, 800 addi r29, r1, 800
bl PagingFunc3 bl PagingFunc3
clrlwi r23, r8, 0x14 clrlwi r23, r8, 0x14
beq- major_0x043a0_0x154 beq major_0x043a0_0x154
cmplwi r23, 0xd00 cmplwi r23, 0xd00
mr r9, r8 mr r9, r8
mr r8, r31 mr r8, r31
ble- major_0x043a0_0xc4 ble major_0x043a0_0xc4
addi r27, r27, 0x1000 addi r27, r27, 0x1000
addi r29, r1, 800 addi r29, r1, 800
bl PagingFunc3 bl PagingFunc3
beq- major_0x043a0_0x154 beq major_0x043a0_0x154
addi r31, r31, -0x1000 addi r31, r31, -0x1000
xor r23, r8, r31 xor r23, r8, r31
rlwinm. r23, r23, 0, 25, 22 rlwinm. r23, r23, 0, 25, 22
bne- major_0x043a0_0x154 bne major_0x043a0_0x154
major_0x043a0_0xc4 major_0x043a0_0xc4
clrlwi r23, r31, 0x1e clrlwi r23, r31, 0x1e
cmpwi r23, 0x03 cmpwi r23, 0x03
rlwimi r8, r9, 0, 20, 31 rlwimi r8, r9, 0, 20, 31
beq- major_0x043a0_0x154 beq major_0x043a0_0x154
lwz r23, 0x0ea4(r1) lwz r23, 0x0ea4(r1)
addi r23, r23, 0x01 addi r23, r23, 0x01
stw r23, 0x0ea4(r1) stw r23, 0x0ea4(r1)
@ -1927,7 +1927,7 @@ major_0x043a0_0x154
wordfill ; OUTSIDE REFERER wordfill ; OUTSIDE REFERER
subic. r22, r22, 4 subic. r22, r22, 4
stwx r23, r8, r22 stwx r23, r8, r22
bne+ wordfill bne wordfill
blr blr
@ -1952,7 +1952,7 @@ kcResetSystem ; OUTSIDE REFERER
; This xoris/cmplwi technique is very cool ; This xoris/cmplwi technique is very cool
xoris r8, r3, 'Ga' xoris r8, r3, 'Ga'
beq- @is_601 beq @is_601
mftb r9 mftb r9
b @endif_601 b @endif_601
@is_601 @is_601
@ -1965,12 +1965,12 @@ kcResetSystem ; OUTSIDE REFERER
andis. r9, r9, 0xffff andis. r9, r9, 0xffff
cmplwi r8, 'ry' cmplwi r8, 'ry'
bne- NonGaryReset bne NonGaryReset
; r4 (i.e. A1) == 5 May 1956? ; r4 (i.e. A1) == 5 May 1956?
xoris r8, r4, 0x0505 xoris r8, r4, 0x0505
cmplwi r8, 0x1956 cmplwi r8, 0x1956
bne- NonGaryReset bne NonGaryReset
andc r11, r11, r5 andc r11, r11, r5
lwz r8, ContextBlock.r7(r6) lwz r8, ContextBlock.r7(r6)
@ -2001,7 +2001,7 @@ NonGaryReset
lwz r8, KDP.OldKDP(r1) lwz r8, KDP.OldKDP(r1)
cmpwi r8, 0 cmpwi r8, 0
beq+ ResetBuiltinKernel beq ResetBuiltinKernel
_log 'Unplugging the replacement nanokernel^n' _log 'Unplugging the replacement nanokernel^n'
@ -2122,7 +2122,7 @@ IntExternalOrange ; OUTSIDE REFERER
; r13 = cr ; r13 = cr
mtcrf 0x3f, r7 mtcrf 0x3f, r7
bnel+ cr2, Local_Panic bnel cr2, Local_Panic
li r8, ecNoException li r8, ecNoException
b major_0x02980_0x134 b major_0x02980_0x134
@ -2147,12 +2147,12 @@ IntProgram
cmplwi cr0, r8, NanoKernelCallTable.ReturnFromException cmplwi cr0, r8, NanoKernelCallTable.ReturnFromException
cmplwi cr1, r8, NanoKernelCallTable.MPDispatch cmplwi cr1, r8, NanoKernelCallTable.MPDispatch
beq- cr0, @emutrap_0_return_from_exception beq cr0, @emutrap_0_return_from_exception
beq- cr1, @emutrap_8_mpdispatch beq cr1, @emutrap_8_mpdispatch
cmplwi cr0, r8, NanoKernelCallTable.VMDispatch cmplwi cr0, r8, NanoKernelCallTable.VMDispatch
cmplwi cr1, r8, NanoKernelCallTable.Size cmplwi cr1, r8, NanoKernelCallTable.Size
beq- cr0, @emutrap_3_vmdispatch beq cr0, @emutrap_3_vmdispatch
blt- cr1, @emutrap_other blt cr1, @emutrap_other
; Not from the emulator image? Return will be to next instruction, ; Not from the emulator image? Return will be to next instruction,
@ -2192,13 +2192,13 @@ IntProgram
xoris r8, r8, 0xfff xoris r8, r8, 0xfff
cmplwi cr0, r8, NanoKernelCallTable.Size / 4 cmplwi cr0, r8, NanoKernelCallTable.Size / 4
cmplwi cr1, r8, NanoKernelCallTable.ReturnFromException / 4 cmplwi cr1, r8, NanoKernelCallTable.ReturnFromException / 4
bge- cr0, @trap_too_high bge cr0, @trap_too_high
cmplwi cr7, r8, NanoKernelCallTable.MPDispatch / 4 cmplwi cr7, r8, NanoKernelCallTable.MPDispatch / 4
cmplwi cr0, r8, NanoKernelCallTable.VMDispatch / 4 cmplwi cr0, r8, NanoKernelCallTable.VMDispatch / 4
slwi r8, r8, 2 slwi r8, r8, 2
beq- cr1, @nonemu_return_from_exception beq cr1, @nonemu_return_from_exception
beq- cr7, @nonemu_mpdispatch beq cr7, @nonemu_mpdispatch
beq- cr0, @nonemu_vmdispatch beq cr0, @nonemu_vmdispatch
; Fall through to some hard truths ; Fall through to some hard truths
bc BO_IF, 16, @_IntProgram_0x150 bc BO_IF, 16, @_IntProgram_0x150
@ -2227,7 +2227,7 @@ IntProgram
lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.NanoKernelCallCounts(r8) lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.NanoKernelCallCounts(r8)
addi r9, r9, 1 addi r9, r9, 1
stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.NanoKernelCallCounts(r8) stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.NanoKernelCallCounts(r8)
bne+ @nonemu_go bne @nonemu_go
; Non-emu MPDispatch trap with r0 == -1: muck around a bit? ; Non-emu MPDispatch trap with r0 == -1: muck around a bit?
addi r10, r10, 4 addi r10, r10, 4
@ -2307,7 +2307,7 @@ IntExternalYellow ; OUTSIDE REFERER
; Sanity check ; Sanity check
rlwinm. r9, r11, 0, MSR_EEbit, MSR_EEbit rlwinm. r9, r11, 0, MSR_EEbit, MSR_EEbit
beq+ MaskedInterruptTaken beq MaskedInterruptTaken
; How many CPUs? ; How many CPUs?
@ -2319,7 +2319,7 @@ IntExternalYellow ; OUTSIDE REFERER
; Uniprocessor machine: go straight to PIH ; Uniprocessor machine: go straight to PIH
blt+ kcPrioritizeInterrupts blt kcPrioritizeInterrupts
; Check with the CPU plugin whether this is an interprocessor interrupt ; Check with the CPU plugin whether this is an interprocessor interrupt
@ -2338,9 +2338,9 @@ IntExternalYellow ; OUTSIDE REFERER
cmpwi cr2, r8, -29279 ; interprocessor interrupt! cmpwi cr2, r8, -29279 ; interprocessor interrupt!
; else: real external interrupt ; else: real external interrupt
beq+ cr0, kcPrioritizeInterrupts beq cr0, kcPrioritizeInterrupts
beq+ cr1, IntReturn beq cr1, IntReturn
bne+ cr2, kcPrioritizeInterrupts bne cr2, kcPrioritizeInterrupts
mfsprg r9, 0 ; "alert" => run scheduler evaluation mfsprg r9, 0 ; "alert" => run scheduler evaluation
li r8, 1 li r8, 1
@ -2381,7 +2381,7 @@ SIGP
bc BO_IF, 16, major_0x04a20_0x18 ; not sure about this bc BO_IF, 16, major_0x04a20_0x18 ; not sure about this
cmpwi cr2, r8, 0 cmpwi cr2, r8, 0
lwz r18, EWA.SIGPSelector(r23) lwz r18, EWA.SIGPSelector(r23)
beq- cr2, @args_in_registers beq cr2, @args_in_registers
slwi r20, r18, 2 slwi r20, r18, 2
@args_in_registers @args_in_registers
@ -2392,11 +2392,11 @@ SIGP
lwz r17, CoherenceGroup.PA_CpuPluginDesc(r22) lwz r17, CoherenceGroup.PA_CpuPluginDesc(r22)
lwz r16, CoherenceGroup.CpuPluginSelectorCount(r22) lwz r16, CoherenceGroup.CpuPluginSelectorCount(r22)
mr. r17, r17 mr. r17, r17
beqlr- beqlr
slwi r16, r16, 2 slwi r16, r16, 2
li r8, -0x7267 li r8, -0x7267
cmplw r20, r16 cmplw r20, r16
bgelr- bgelr
; Save some registers in advance of this unusual "upcall". ; Save some registers in advance of this unusual "upcall".
stw r10, EWA.SIGPSavedR10(r23) stw r10, EWA.SIGPSavedR10(r23)
@ -2416,7 +2416,7 @@ SIGP
lwz r9, EWA.PA_CurAddressSpace(r23) lwz r9, EWA.PA_CurAddressSpace(r23)
lwz r8, CoherenceGroup.CpuPluginSpacePtr(r22) lwz r8, CoherenceGroup.CpuPluginSpacePtr(r22)
cmpw r9, r8 cmpw r9, r8
beq- @noNeedToSwitchSpace beq @noNeedToSwitchSpace
bl SchSwitchSpace bl SchSwitchSpace
@noNeedToSwitchSpace @noNeedToSwitchSpace
@ -2466,7 +2466,7 @@ SIGP
addi r6, r23, -0x318 addi r6, r23, -0x318
stw r6, EWA.PA_ContextBlock(r23) stw r6, EWA.PA_ContextBlock(r23)
beq- cr2, @args_in_registers_2 beq cr2, @args_in_registers_2
;args not in registers ;args not in registers
lwz r4, EWA.SIGPCallR4(r23) lwz r4, EWA.SIGPCallR4(r23)
@ -2505,14 +2505,14 @@ major_0x04a20_0x18 ; OUTSIDE REFERER
lwz r7, -0x02b0(r23) lwz r7, -0x02b0(r23)
andis. r8, r11, 0x02 andis. r8, r11, 0x02
stw r7, -0x0010(r23) stw r7, -0x0010(r23)
bne- major_0x04a20_0x30 bne major_0x04a20_0x30
li r3, -0x7265 li r3, -0x7265
major_0x04a20_0x30 major_0x04a20_0x30
lwz r8, EWA.SIGPSpacOnResume(r23) lwz r8, EWA.SIGPSpacOnResume(r23)
lwz r9, -0x001c(r23) lwz r9, -0x001c(r23)
cmpw r9, r8 cmpw r9, r8
beq- major_0x04a20_0x44 beq major_0x04a20_0x44
bl SchSwitchSpace bl SchSwitchSpace
major_0x04a20_0x44 major_0x04a20_0x44
@ -2551,7 +2551,7 @@ IntSyscall ; OUTSIDE REFERER
; Only r1 and LR have been saved, so these compares clobber cr0 ; Only r1 and LR have been saved, so these compares clobber cr0
cmpwi r0, -3 cmpwi r0, -3
bne- @not_minus_3 bne @not_minus_3
; sc -3: ; sc -3:
@ -2559,7 +2559,7 @@ IntSyscall ; OUTSIDE REFERER
mfspr r1, srr1 mfspr r1, srr1
rlwinm. r0, r1, 26, 26, 27 ; nonsense code? rlwinm. r0, r1, 26, 26, 27 ; nonsense code?
_bclr r1, r1, 17 _bclr r1, r1, 17
blt- @dont_unset_pr ; r0 should never have bit 0 set blt @dont_unset_pr ; r0 should never have bit 0 set
mtspr srr1, r1 mtspr srr1, r1
@dont_unset_pr @dont_unset_pr
@ -2573,7 +2573,7 @@ IntSyscall ; OUTSIDE REFERER
@not_minus_3 @not_minus_3
cmpwi r0, -1 cmpwi r0, -1
mfsprg r1, 0 mfsprg r1, 0
bne- @not_minus_1 bne @not_minus_1
; sc -1: mess around with flags ; sc -1: mess around with flags
@ -2586,7 +2586,7 @@ IntSyscall ; OUTSIDE REFERER
@not_minus_1 @not_minus_1
cmpwi r0, -2 cmpwi r0, -2
bne- @not_any_special bne @not_any_special
; sc -2: more flag nonsense? ; sc -2: more flag nonsense?

View File

@ -103,7 +103,7 @@ MPCallTableEnd
lwz r16, KDP.NanoKernelInfo + NKNanoKernelInfo.MPDispatchCountTblPtr(r1) lwz r16, KDP.NanoKernelInfo + NKNanoKernelInfo.MPDispatchCountTblPtr(r1)
rlwinm r17, r15, 2, 20, 29 rlwinm r17, r15, 2, 20, 29
cmplwi r16, 0 cmplwi r16, 0
beq- @no_count beq @no_count
lwzx r18, r16, r17 lwzx r18, r16, r17
addi r18, r18, 1 addi r18, r18, 1
stwx r18, r16, r17 stwx r18, r16, r17
@ -115,7 +115,7 @@ MPCallTableEnd
lwzx r15, r16, r14 lwzx r15, r16, r14
add r15, r15, r14 add r15, r15, r14
mtlr r15 mtlr r15
bltlr- bltlr
@ -158,7 +158,7 @@ ScrambleMPCall ; OUTSIDE REFERER
mfspr r16, pvr mfspr r16, pvr
rlwinm. r16, r16, 0, 0, 14 rlwinm. r16, r16, 0, 0, 14
beq- @is_601 beq @is_601
mftb r4 mftb r4
b @not_601 b @not_601
@is_601 @is_601
@ -295,24 +295,24 @@ MPCall_0 ; OUTSIDE REFERER
andi. r16, r3, 0xfff andi. r16, r3, 0xfff
mr r30, r7 mr r30, r7
mr r29, r6 mr r29, r6
bne+ ReturnMPCallOOM bne ReturnMPCallOOM
; Fail if this page is outside of the PAR ; Fail if this page is outside of the PAR
rlwinm. r4, r3, 20, 12, 31 rlwinm. r4, r3, 20, 12, 31
lwz r9, KDP.PrimaryAddrRangePages(r1) lwz r9, KDP.PrimaryAddrRangePages(r1)
beq+ ReturnMPCallOOM beq ReturnMPCallOOM
cmplw r4, r9 cmplw r4, r9
bge+ ReturnMPCallOOM bge ReturnMPCallOOM
_Lock PSA.HTABLock, scratch1=r17, scratch2=r18 _Lock PSA.HTABLock, scratch1=r17, scratch2=r18
bl GetPARPageInfo bl GetPARPageInfo
bge- cr4, MPCall_0_0xd8 bge cr4, MPCall_0_0xd8
bgt- cr5, MPCall_0_0xd8 bgt cr5, MPCall_0_0xd8
bns- cr7, MPCall_0_0xd8 bns cr7, MPCall_0_0xd8
bgt- cr7, MPCall_0_0xd8 bgt cr7, MPCall_0_0xd8
bltl+ cr5, RemovePageFromTLB bltl cr5, RemovePageFromTLB
bgel+ cr5, VMSecondLastExportedFunc bgel cr5, VMSecondLastExportedFunc
ori r16, r16, 0x404 ori r16, r16, 0x404
li r31, 0x03 li r31, 0x03
rlwimi r9, r31, 0, 30, 31 rlwimi r9, r31, 0, 30, 31
@ -376,17 +376,17 @@ MPRegisterCpuPlugin
; Check that address of CPU plugin is page-aligned, ; Check that address of CPU plugin is page-aligned,
; and that CPU plugin size if page-aligned and nonzero. ; and that CPU plugin size if page-aligned and nonzero.
andi. r8, r4, 0xfff andi. r8, r4, 0xfff
bne+ ReturnMPCallOOM bne ReturnMPCallOOM
andi. r8, r5, 0xfff andi. r8, r5, 0xfff
cmpwi cr1, r5, 0 cmpwi cr1, r5, 0
bne+ ReturnMPCallOOM bne ReturnMPCallOOM
beq+ cr1, ReturnMPCallOOM beq cr1, ReturnMPCallOOM
_Lock PSA.SchLock, scratch1=r18, scratch2=r19 _Lock PSA.SchLock, scratch1=r18, scratch2=r19
; r14 = coherence group ptr (motherpboard CGRP if not specified in first argument) ; r14 = coherence group ptr (motherpboard CGRP if not specified in first argument)
mr. r8, r3 mr. r8, r3
bne- @use_specified_cgrp bne @use_specified_cgrp
mfsprg r15, 0 mfsprg r15, 0
lwz r14, EWA.CPUBase + CPU.LLL + LLL.Freeform(r15) lwz r14, EWA.CPUBase + CPU.LLL + LLL.Freeform(r15)
b @cgrp_done b @cgrp_done
@ -394,12 +394,12 @@ MPRegisterCpuPlugin
bl LookupID bl LookupID
cmpwi r9, CoherenceGroup.kIDClass cmpwi r9, CoherenceGroup.kIDClass
mr r14, r8 mr r14, r8
bne+ ReturnMPCallInvalidIDErr bne ReturnMPCallInvalidIDErr
@cgrp_done @cgrp_done
; Fail if no CPU plugin descriptor is passed in fourth argument ; Fail if no CPU plugin descriptor is passed in fourth argument
cmpwi r16, 0 cmpwi r16, 0
bne- @no_table_ptr bne @no_table_ptr
stw r16, CoherenceGroup.PA_CpuPluginDesc(r14) stw r16, CoherenceGroup.PA_CpuPluginDesc(r14)
stw r16, CoherenceGroup.LA_CpuPluginDesc(r14) stw r16, CoherenceGroup.LA_CpuPluginDesc(r14)
b ReleaseAndReturnMPCallInvalidIDErr b ReleaseAndReturnMPCallInvalidIDErr
@ -409,19 +409,19 @@ MPRegisterCpuPlugin
add r17, r4, r5 add r17, r4, r5
cmplw r16, r4 cmplw r16, r4
cmplw cr1, r16, r17 cmplw cr1, r16, r17
blt+ ReleaseAndReturnMPCallOOM blt ReleaseAndReturnMPCallOOM
bge+ cr1, ReleaseAndReturnMPCallOOM bge cr1, ReleaseAndReturnMPCallOOM
; What the hell? Wouldn't this always fail? ; What the hell? Wouldn't this always fail?
lwz r19, CoherenceGroup.PA_CpuPluginDesc(r14) lwz r19, CoherenceGroup.PA_CpuPluginDesc(r14)
mr. r19, r19 mr. r19, r19
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
; r18 = physical address of plugin (assumes page-aligned) ; r18 = physical address of plugin (assumes page-aligned)
mr r27, r4 mr r27, r4
addi r29, r1, KDP.BATs + 0xa0 addi r29, r1, KDP.BATs + 0xa0
bl PagingFunc3 bl PagingFunc3
beq+ ReleaseAndReturnMPCallOOM beq ReleaseAndReturnMPCallOOM
rlwinm r18, r31, 0, 0, 19 rlwinm r18, r31, 0, 0, 19
; r18 = physical address of descriptor (does not assume page-aligned) ; r18 = physical address of descriptor (does not assume page-aligned)
@ -429,7 +429,7 @@ MPRegisterCpuPlugin
mr r19, r16 mr r19, r16
addi r29, r1, KDP.BATs + 0xa0 addi r29, r1, KDP.BATs + 0xa0
bl PagingFunc3 bl PagingFunc3
beq+ ReleaseAndReturnMPCallOOM beq ReleaseAndReturnMPCallOOM
rlwimi r19, r31, 0, 0, 19 rlwimi r19, r31, 0, 0, 19
; Populate the coherence group structure. ; Populate the coherence group structure.
@ -449,7 +449,7 @@ MPRegisterCpuPlugin
lwz r27, 0(r19) lwz r27, 0(r19)
addi r29, r1, KDP.BATs + 0xa0 addi r29, r1, KDP.BATs + 0xa0
bl PagingFunc3 bl PagingFunc3
beq+ ReleaseAndReturnMPCallOOM beq ReleaseAndReturnMPCallOOM
rlwimi r27, r31, 0, 0, 19 rlwimi r27, r31, 0, 0, 19
stw r27, CoherenceGroup.PA_CpuPluginStackPtrs(r14) stw r27, CoherenceGroup.PA_CpuPluginStackPtrs(r14)
@ -468,19 +468,19 @@ MPRegisterCpuPlugin
lwz r17, 0x1c(r19) lwz r17, 0x1c(r19)
cmplwi r17, 64 cmplwi r17, 64
stw r17, CoherenceGroup.CpuPluginSelectorCount(r14) stw r17, CoherenceGroup.CpuPluginSelectorCount(r14)
bgt+ ReleaseAndReturnMPCallOOM bgt ReleaseAndReturnMPCallOOM
; Convert those entries to physical addresses ; Convert those entries to physical addresses
@table_convert_loop @table_convert_loop
lwzu r27, 4(r16) lwzu r27, 4(r16)
addi r29, r1, KDP.BATs + 0xa0 addi r29, r1, KDP.BATs + 0xa0
bl PagingFunc3 bl PagingFunc3
beq+ ReleaseAndReturnMPCallOOM beq ReleaseAndReturnMPCallOOM
subi r17, r17, 1 subi r17, r17, 1
rlwimi r27, r31, 0, 0, 19 rlwimi r27, r31, 0, 0, 19
cmpwi r17, 0 cmpwi r17, 0
stw r27, 0(r16) stw r27, 0(r16)
bgt+ @table_convert_loop bgt @table_convert_loop
@ -505,7 +505,7 @@ MPProcessors
mr. r8, r3 mr. r8, r3
lwz r3, CoherenceGroup.CpuCount(r14) lwz r3, CoherenceGroup.CpuCount(r14)
beq+ CommonMPCallReturnPath beq CommonMPCallReturnPath
lwz r3, CoherenceGroup.ScheduledCpuCount(r14) lwz r3, CoherenceGroup.ScheduledCpuCount(r14)
b CommonMPCallReturnPath b CommonMPCallReturnPath
@ -522,7 +522,7 @@ MPCreateProcess
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr. r8, r3 mr. r8, r3
bne- @spac_id_supplied bne @spac_id_supplied
lwz r3, PSA.SystemAddressSpaceID(r1) lwz r3, PSA.SystemAddressSpaceID(r1)
mr r8, r3 mr r8, r3
@spac_id_supplied @spac_id_supplied
@ -533,19 +533,19 @@ MPCreateProcess
cmpwi r9, AddressSpace.kIDClass cmpwi r9, AddressSpace.kIDClass
mr r30, r8 mr r30, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
li r8, 0x20 ;Process.Size li r8, 0x20 ;Process.Size
bl PoolAllocClear bl PoolAllocClear
mr. r31, r8 mr. r31, r8
beq+ ReleaseAndScrambleMPCall beq ReleaseAndScrambleMPCall
li r9, Process.kIDClass li r9, Process.kIDClass
bl MakeID bl MakeID
cmpwi r8, 0x00 cmpwi r8, 0x00
bne- @did_not_fail bne @did_not_fail
mr r8, r31 mr r8, r31
bl PoolFree bl PoolFree
b ReleaseAndScrambleMPCall b ReleaseAndScrambleMPCall
@ -582,11 +582,11 @@ MPTerminateProcess
bl LookupID bl LookupID
cmpwi r9, Process.kIDClass cmpwi r9, Process.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8 mr r31, r8
lwz r16, 0x0008(r31) lwz r16, 0x0008(r31)
rlwinm. r17, r16, 0, 30, 30 rlwinm. r17, r16, 0, 30, 30
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
ori r16, r16, 0x02 ori r16, r16, 0x02
stw r16, 0x0008(r31) stw r16, 0x0008(r31)
mr r8, r3 mr r8, r3
@ -608,15 +608,15 @@ MPDeleteProcess
mr r8, r3 mr r8, r3
bl LookupID bl LookupID
cmpwi r9, Process.kIDClass cmpwi r9, Process.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8 mr r31, r8
lwz r16, Process.Flags(r31) lwz r16, Process.Flags(r31)
lwz r17, Process.TaskCount(r31) lwz r17, Process.TaskCount(r31)
rlwinm. r8, r16, 0, Process.kFlag30, Process.kFlag30 rlwinm. r8, r16, 0, Process.kFlag30, Process.kFlag30
cmpwi cr1, r17, 0 cmpwi cr1, r17, 0
beq+ ReleaseAndReturnMPCallOOM beq ReleaseAndReturnMPCallOOM
bne+ cr1, ReleaseAndReturnMPCallOOM bne cr1, ReleaseAndReturnMPCallOOM
mr r8, r3 mr r8, r3
bl DeleteID bl DeleteID
@ -639,7 +639,7 @@ MPCall_6_0x78 ; OUTSIDE REFERER
lwz r17, KDP.PA_ECB(r1) lwz r17, KDP.PA_ECB(r1)
lwz r31, EWA.PA_CurTask(r16) lwz r31, EWA.PA_CurTask(r16)
beq- MPCall_6_0xb4 beq MPCall_6_0xb4
lwz r8, ContextBlock.PriorityShifty(r17) lwz r8, ContextBlock.PriorityShifty(r17)
rlwinm r8, r8, 0, 24, 21 rlwinm r8, r8, 0, 24, 21
oris r8, r8, 0x8000 oris r8, r8, 0x8000
@ -679,19 +679,19 @@ MPYieldWithHint
rlwinm. r8, r7, 0, 10, 10 rlwinm. r8, r7, 0, 10, 10
lwz r17, KDP.PA_ECB(r1) lwz r17, KDP.PA_ECB(r1)
lwz r31, EWA.PA_CurTask(r16) lwz r31, EWA.PA_CurTask(r16)
beq- @i_am_important ; not 68k mode? beq @i_am_important ; not 68k mode?
clrlwi. r8, r3, 31 clrlwi. r8, r3, 31
lwz r8, ContextBlock.PriorityShifty(r17) lwz r8, ContextBlock.PriorityShifty(r17)
rlwinm r8, r8, 0, 24, 21 rlwinm r8, r8, 0, 24, 21
oris r8, r8, 0x8000 oris r8, r8, 0x8000
stw r8, ContextBlock.PriorityShifty(r17) stw r8, ContextBlock.PriorityShifty(r17)
beq- @i_am_important ; MPYield call beq @i_am_important ; MPYield call
; If this task is ; If this task is
lbz r16, Task.Priority(r31) lbz r16, Task.Priority(r31)
cmpwi r16, Task.kNominalPriority cmpwi r16, Task.kNominalPriority
bge- @return bge @return
mr r8, r31 mr r8, r31
bl SchTaskUnrdy bl SchTaskUnrdy
li r16, Task.kNominalPriority li r16, Task.kNominalPriority
@ -722,7 +722,7 @@ MPYieldWithHint
MPDelayUntil MPDelayUntil
rlwinm. r8, r7, 0, EWA.kFlagBlue, EWA.kFlagBlue rlwinm. r8, r7, 0, EWA.kFlagBlue, EWA.kFlagBlue
bne+ ReturnMPCallBlueBlocking bne ReturnMPCallBlueBlocking
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
b _MPDelayUntilCommon b _MPDelayUntilCommon
@ -740,14 +740,14 @@ MPDelayUntilSys
rlwinm. r8, r7, 0, EWA.kFlagBlue, EWA.kFlagBlue rlwinm. r8, r7, 0, EWA.kFlagBlue, EWA.kFlagBlue
lwz r16, KDP.NanoKernelInfo + NKNanoKernelInfo.ExternalIntCount(r1) lwz r16, KDP.NanoKernelInfo + NKNanoKernelInfo.ExternalIntCount(r1)
beq- _MPDelayUntilCommon beq _MPDelayUntilCommon
; Why the hell are we counting interrupts? ; Why the hell are we counting interrupts?
lwz r17, PSA.OtherSystemContextPtr(r1) lwz r17, PSA.OtherSystemContextPtr(r1)
lwz r18, KDP.PA_ECB(r1) lwz r18, KDP.PA_ECB(r1)
cmpw r16, r17 cmpw r16, r17
stw r16, PSA.OtherSystemContextPtr(r1) stw r16, PSA.OtherSystemContextPtr(r1)
bne+ ReturnZeroFromMPCall bne ReturnZeroFromMPCall
lwz r8, ContextBlock.PriorityShifty(r18) lwz r8, ContextBlock.PriorityShifty(r18)
rlwinm r8, r8, 0, 24, 21 rlwinm r8, r8, 0, 24, 21
@ -759,7 +759,7 @@ MPDelayUntilSys
lwz r16, PSA.BlueSpinningOn(r1) lwz r16, PSA.BlueSpinningOn(r1)
cmpwi r16, -1 cmpwi r16, -1
li r16, 0 li r16, 0
bne- _MPDelayUntilCommon bne _MPDelayUntilCommon
stw r16, PSA.BlueSpinningOn(r1) stw r16, PSA.BlueSpinningOn(r1)
b ReleaseAndReturnZeroFromMPCall b ReleaseAndReturnZeroFromMPCall
@ -809,7 +809,7 @@ MPCall_34 ; OUTSIDE REFERER
; r9 = kind ; r9 = kind
bl MakeID bl MakeID
cmpwi r8, 0x00 cmpwi r8, 0x00
beq+ ScrambleMPCall beq ScrambleMPCall
mr r5, r8 mr r5, r8
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
@ -821,7 +821,7 @@ MPCall_35 ; OUTSIDE REFERER
mr r8, r3 mr r8, r3
bl DeleteID bl DeleteID
cmpwi r8, 0x01 cmpwi r8, 0x01
beq+ ReturnZeroFromMPCall beq ReturnZeroFromMPCall
b ReturnMPCallInvalidIDErr b ReturnMPCallInvalidIDErr
@ -837,7 +837,7 @@ MPCall_36 ; OUTSIDE REFERER
mr r4, r9 mr r4, r9
mr r5, r8 mr r5, r8
bne+ ReturnZeroFromMPCall bne ReturnZeroFromMPCall
b ReturnMPCallInvalidIDErr b ReturnMPCallInvalidIDErr
@ -868,7 +868,7 @@ KCGetNextID ; OUTSIDE REFERER
bl GetNextIDOfClass bl GetNextIDOfClass
cmpwi r8, 0x00 cmpwi r8, 0x00
mr r4, r8 mr r4, r8
bne+ ReturnZeroFromMPCall bne ReturnZeroFromMPCall
b ReturnMPCallInvalidIDErr b ReturnMPCallInvalidIDErr
@ -895,7 +895,7 @@ KCGetNextIDOwnedByProcess ; OUTSIDE REFERER
mr r8, r3 mr r8, r3
bl LookupID bl LookupID
cmpwi r9, Process.kIDClass cmpwi r9, Process.kIDClass
bne+ ReturnMPCallInvalidIDErr bne ReturnMPCallInvalidIDErr
; Loop over IDs (and resolve them) until one is owned by the Process ; Loop over IDs (and resolve them) until one is owned by the Process
@ -909,7 +909,7 @@ KCGetNextIDOwnedByProcess ; OUTSIDE REFERER
; RET ID r8 ; RET ID r8
mr. r5, r8 mr. r5, r8
beq+ ReturnMPCallInvalidIDErr beq ReturnMPCallInvalidIDErr
; ARG ID r8 ; ARG ID r8
bl LookupID bl LookupID
@ -917,28 +917,28 @@ KCGetNextIDOwnedByProcess ; OUTSIDE REFERER
cmpwi r4, Task.kIDClass cmpwi r4, Task.kIDClass
cmpwi cr1, r4, Timer.kIDClass cmpwi cr1, r4, Timer.kIDClass
beq- @task beq @task
beq- cr1, @timer beq cr1, @timer
cmpwi r4, Queue.kIDClass cmpwi r4, Queue.kIDClass
cmpwi cr1, r4, Semaphore.kIDClass cmpwi cr1, r4, Semaphore.kIDClass
beq- @queue beq @queue
beq- cr1, @semaphore beq cr1, @semaphore
cmpwi r4, CriticalRegion.kIDClass cmpwi r4, CriticalRegion.kIDClass
cmpwi cr1, r4, AddressSpace.kIDClass cmpwi cr1, r4, AddressSpace.kIDClass
beq- @critical_region beq @critical_region
beq- cr1, @address_space beq cr1, @address_space
cmpwi r4, EventGroup.kIDClass cmpwi r4, EventGroup.kIDClass
cmpwi cr1, r4, Area.kIDClass cmpwi cr1, r4, Area.kIDClass
beq- @event_group beq @event_group
beq- cr1, @area beq cr1, @area
cmpwi r4, Notification.kIDClass cmpwi r4, Notification.kIDClass
cmpwi cr1, r4, ConsoleLog.kIDClass cmpwi cr1, r4, ConsoleLog.kIDClass
beq- @notification beq @notification
beq- cr1, @console_log beq cr1, @console_log
b ReturnParamErrFromMPCall b ReturnParamErrFromMPCall
@ -947,67 +947,67 @@ KCGetNextIDOwnedByProcess ; OUTSIDE REFERER
lwz r9, Task.ProcessID(r8) lwz r9, Task.ProcessID(r8)
rlwinm. r17, r17, 0, 15, 15 rlwinm. r17, r17, 0, 15, 15
beq- @not_owned_by_blue_process beq @not_owned_by_blue_process
lwz r9, PSA.blueProcessPtr(r1) lwz r9, PSA.blueProcessPtr(r1)
lwz r9, Task.ID(r9) lwz r9, Task.ID(r9)
@not_owned_by_blue_process @not_owned_by_blue_process
cmpw r9, r3 cmpw r9, r3
bne+ @try_another_id bne @try_another_id
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
@timer @timer
lwz r9, Timer.ProcessID(r8) lwz r9, Timer.ProcessID(r8)
cmpw r9, r3 cmpw r9, r3
bne+ @try_another_id bne @try_another_id
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
@queue @queue
lwz r9, Queue.ProcessID(r8) lwz r9, Queue.ProcessID(r8)
cmpw r9, r3 cmpw r9, r3
bne+ @try_another_id bne @try_another_id
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
@semaphore @semaphore
lwz r9, Semaphore.ProcessID(r8) lwz r9, Semaphore.ProcessID(r8)
cmpw r9, r3 cmpw r9, r3
bne+ @try_another_id bne @try_another_id
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
@critical_region @critical_region
lwz r9, CriticalRegion.ProcessID(r8) lwz r9, CriticalRegion.ProcessID(r8)
cmpw r9, r3 cmpw r9, r3
bne+ @try_another_id bne @try_another_id
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
@address_space @address_space
lwz r9, AddressSpace.ProcessID(r8) lwz r9, AddressSpace.ProcessID(r8)
cmpw r9, r3 cmpw r9, r3
bne+ @try_another_id bne @try_another_id
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
@event_group @event_group
lwz r9, EventGroup.ProcessID(r8) lwz r9, EventGroup.ProcessID(r8)
cmpw r9, r3 cmpw r9, r3
bne+ @try_another_id bne @try_another_id
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
@area @area
lwz r9, Area.ProcessID(r8) lwz r9, Area.ProcessID(r8)
cmpw r9, r3 cmpw r9, r3
bne+ @try_another_id bne @try_another_id
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
@notification @notification
lwz r9, Notification.ProcessID(r8) lwz r9, Notification.ProcessID(r8)
cmpw r9, r3 cmpw r9, r3
bne+ @try_another_id bne @try_another_id
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
@console_log @console_log
lwz r9, ConsoleLog.ProcessID(r8) lwz r9, ConsoleLog.ProcessID(r8)
cmpw r9, r3 cmpw r9, r3
bne+ @try_another_id bne @try_another_id
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
@ -1021,7 +1021,7 @@ MPCall_38 ; OUTSIDE REFERER
bl LookupID bl LookupID
cmpwi r9, Process.kIDClass cmpwi r9, Process.kIDClass
bne+ ReturnMPCallInvalidIDErr bne ReturnMPCallInvalidIDErr
mr r31, r8 mr r31, r8
MPCall_38_0x14 MPCall_38_0x14
@ -1029,7 +1029,7 @@ MPCall_38_0x14
li r9, 0x02 li r9, 0x02
bl GetNextIDOfClass bl GetNextIDOfClass
cmpwi r8, 0x00 cmpwi r8, 0x00
beq+ ReturnMPCallInvalidIDErr beq ReturnMPCallInvalidIDErr
mr r4, r8 mr r4, r8
; r8 = id ; r8 = id
@ -1040,13 +1040,13 @@ MPCall_38_0x14
lwz r17, 0x0064(r8) lwz r17, 0x0064(r8)
lwz r16, 0x0060(r8) lwz r16, 0x0060(r8)
rlwinm. r17, r17, 0, 15, 15 rlwinm. r17, r17, 0, 15, 15
beq- MPCall_38_0x48 beq MPCall_38_0x48
lwz r16, -0x041c(r1) lwz r16, -0x041c(r1)
lwz r16, 0x0000(r16) lwz r16, 0x0000(r16)
MPCall_38_0x48 MPCall_38_0x48
cmpw r16, r3 cmpw r16, r3
beq+ ReturnZeroFromMPCall beq ReturnZeroFromMPCall
b MPCall_38_0x14 b MPCall_38_0x14
@ -1055,7 +1055,7 @@ MPCall_38_0x48
MPCall_62 ; OUTSIDE REFERER MPCall_62 ; OUTSIDE REFERER
mr. r8, r3 mr. r8, r3
bne- MPCall_62_0x18 bne MPCall_62_0x18
mfsprg r15, 0 mfsprg r15, 0
lwz r31, EWA.CPUBase + CPU.LLL + LLL.Freeform(r15) lwz r31, EWA.CPUBase + CPU.LLL + LLL.Freeform(r15)
lwz r3, 0x0000(r31) lwz r3, 0x0000(r31)
@ -1066,14 +1066,14 @@ MPCall_62_0x18
bl LookupID bl LookupID
cmpwi r9, CoherenceGroup.kIDClass cmpwi r9, CoherenceGroup.kIDClass
bne+ ReturnMPCallInvalidIDErr bne ReturnMPCallInvalidIDErr
MPCall_62_0x24 MPCall_62_0x24
mr r8, r4 mr r8, r4
li r9, 0x07 li r9, 0x07
bl GetNextIDOfClass bl GetNextIDOfClass
cmpwi r8, 0x00 cmpwi r8, 0x00
beq+ ReturnMPCallInvalidIDErr beq ReturnMPCallInvalidIDErr
mr r4, r8 mr r4, r8
; r8 = id ; r8 = id
@ -1084,7 +1084,7 @@ MPCall_62_0x24
lwz r16, 0x0008(r8) lwz r16, 0x0008(r8)
lwz r17, 0x0000(r16) lwz r17, 0x0000(r16)
cmpw r17, r3 cmpw r17, r3
bne+ MPCall_62_0x24 bne MPCall_62_0x24
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
@ -1093,7 +1093,7 @@ MPCall_62_0x24
KCCreateCpuStruct ; OUTSIDE REFERER KCCreateCpuStruct ; OUTSIDE REFERER
mr. r8, r3 mr. r8, r3
bne- KCCreateCpuStruct_0x14 bne KCCreateCpuStruct_0x14
mfsprg r15, 0 mfsprg r15, 0
lwz r30, EWA.CPUBase + CPU.LLL + LLL.Freeform(r15) lwz r30, EWA.CPUBase + CPU.LLL + LLL.Freeform(r15)
b KCCreateCpuStruct_0x24 b KCCreateCpuStruct_0x24
@ -1104,7 +1104,7 @@ KCCreateCpuStruct_0x14
cmpwi r9, CoherenceGroup.kIDClass cmpwi r9, CoherenceGroup.kIDClass
mr r30, r8 mr r30, r8
bne+ ReturnMPCallInvalidIDErr bne ReturnMPCallInvalidIDErr
KCCreateCpuStruct_0x24 KCCreateCpuStruct_0x24
li r8, 960 li r8, 960
@ -1115,7 +1115,7 @@ KCCreateCpuStruct_0x24
; r8 = ptr ; r8 = ptr
mr. r31, r8 mr. r31, r8
beq+ ScrambleMPCall beq ScrambleMPCall
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
@ -1210,12 +1210,12 @@ MPDeleteProcessor
bl LookupID bl LookupID
cmpwi r9, CPU.kIDClass cmpwi r9, CPU.kIDClass
mr r31, r8 mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
lwz r16, CPU.Flags(r31) lwz r16, CPU.Flags(r31)
lisori r17, 9 lisori r17, 9
and. r17, r17, r16 and. r17, r17, r16
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
mfsprg r15, 0 mfsprg r15, 0
@ -1253,12 +1253,12 @@ KCStartCPU ; OUTSIDE REFERER
mr r8, r3 mr r8, r3
bl LookupID bl LookupID
cmpwi r9, CPU.kIDClass cmpwi r9, CPU.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r30, r8 mr r30, r8
lwz r16, CPU.Flags(r30) lwz r16, CPU.Flags(r30)
rlwinm. r8, r16, 0, 28, 28 rlwinm. r8, r16, 0, 28, 28
bne+ ReleaseAndReturnZeroFromMPCall bne ReleaseAndReturnZeroFromMPCall
mfsprg r15, 0 mfsprg r15, 0
li r16, kResetProcessor li r16, kResetProcessor
@ -1274,8 +1274,8 @@ KCStartCPU ; OUTSIDE REFERER
bl SIGP bl SIGP
cmpwi r8, -0x7264 cmpwi r8, -0x7264
cmpwi cr1, r8, 0 cmpwi cr1, r8, 0
beq+ ReleaseAndReturnMPCallOOM beq ReleaseAndReturnMPCallOOM
bne+ cr1, ReleaseAndReturnMPCallOOM bne cr1, ReleaseAndReturnMPCallOOM
; Every CPU gets an idle task ; Every CPU gets an idle task
@ -1291,7 +1291,7 @@ KCStartCPU ; OUTSIDE REFERER
mr r7, r31 mr r7, r31
mr. r31, r8 mr. r31, r8
beq+ ReleaseAndScrambleMPCall beq ReleaseAndScrambleMPCall
stw r31, CPU.IdleTaskPtr(r30) stw r31, CPU.IdleTaskPtr(r30)
@ -1344,10 +1344,10 @@ MPCall_44_0x15c
bl SIGP bl SIGP
cmpwi r8, -0x7264 cmpwi r8, -0x7264
cmpwi cr1, r8, 0x00 cmpwi cr1, r8, 0x00
beq+ MPCall_44_0x15c beq MPCall_44_0x15c
bne- cr1, MPCall_Panic bne cr1, MPCall_Panic
mfsprg r15, 0 mfsprg r15, 0
@ -1371,8 +1371,8 @@ MPCall_44_0x15c
cmpwi r8, -0x7264 cmpwi r8, -0x7264
cmpwi cr1, r8, 0 cmpwi cr1, r8, 0
beq+ @retry beq @retry
bne- cr1, MPCall_Panic bne cr1, MPCall_Panic
_log 'Processor scheduled^n' _log 'Processor scheduled^n'
@ -1395,19 +1395,19 @@ KCStopScheduling ; OUTSIDE REFERER
bl LookupID bl LookupID
cmpwi r9, CPU.kIDClass cmpwi r9, CPU.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r30, r8 mr r30, r8
lwz r16, 0x0018(r30) lwz r16, 0x0018(r30)
rlwinm. r8, r16, 0, 28, 28 rlwinm. r8, r16, 0, 28, 28
; r1 = kdp ; r1 = kdp
beq+ ReleaseAndReturnZeroFromMPCall beq ReleaseAndReturnZeroFromMPCall
lwz r31, 0x001c(r30) lwz r31, 0x001c(r30)
clrlwi. r8, r16, 0x1f clrlwi. r8, r16, 0x1f
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
lbz r17, 0x0019(r31) lbz r17, 0x0019(r31)
cmpwi r17, 0x00 cmpwi r17, 0x00
beq- KCStopScheduling_0x94 beq KCStopScheduling_0x94
lwz r17, 0x0064(r31) lwz r17, 0x0064(r31)
oris r17, r17, 0x80 oris r17, r17, 0x80
stw r17, 0x0064(r31) stw r17, 0x0064(r31)
@ -1458,10 +1458,10 @@ MPCpuPlugin
MPCall_47 ; OUTSIDE REFERER MPCall_47 ; OUTSIDE REFERER
rlwinm. r8, r7, 0, 12, 12 rlwinm. r8, r7, 0, 12, 12
lwz r15, 0x00d8(r6) lwz r15, 0x00d8(r6)
beq+ ReturnMPCallOOM beq ReturnMPCallOOM
cmpwi r15, 0x00 cmpwi r15, 0x00
mr r16, r2 mr r16, r2
beq+ ReturnMPCallOOM beq ReturnMPCallOOM
mr r17, r3 mr r17, r3
mr r18, r4 mr r18, r4
mr r19, r5 mr r19, r5
@ -1492,10 +1492,10 @@ MPCall_48_Bad ; OUTSIDE REFERER
NKxprintf ; OUTSIDE REFERER NKxprintf ; OUTSIDE REFERER
rlwinm. r9, r11, 0, 27, 27 rlwinm. r9, r11, 0, 27, 27
mr r8, r3 mr r8, r3
beq- NKxprintf_0x1c beq NKxprintf_0x1c
li r9, 0x00 li r9, 0x00
bl V2P bl V2P
beq- NKxprintf_0x24 beq NKxprintf_0x24
rlwimi r8, r17, 0, 0, 19 rlwimi r8, r17, 0, 0, 19
NKxprintf_0x1c NKxprintf_0x1c
@ -1518,8 +1518,8 @@ NKPrintHex
cmpwi r4, 1 cmpwi r4, 1
cmpwi cr1, r4, 2 cmpwi cr1, r4, 2
beq- @byte beq @byte
beq- cr1, @half beq cr1, @half
bl Printw bl Printw
@ -1553,7 +1553,7 @@ KCSetBlueProcessID ; OUTSIDE REFERER
mfsprg r16, 0 mfsprg r16, 0
rlwinm. r8, r7, 0, 10, 10 rlwinm. r8, r7, 0, 10, 10
lwz r31, EWA.PA_CurTask(r16) lwz r31, EWA.PA_CurTask(r16)
beq+ ReturnMPCallOOM beq ReturnMPCallOOM
mr r8, r3 mr r8, r3
; r8 = id ; r8 = id
@ -1562,7 +1562,7 @@ KCSetBlueProcessID ; OUTSIDE REFERER
; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cohg, 11:area, 12:not, 13:log ; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cohg, 11:area, 12:not, 13:log
cmpwi r9, Process.kIDClass cmpwi r9, Process.kIDClass
bne+ ReturnMPCallInvalidIDErr bne ReturnMPCallInvalidIDErr
stw r3, Task.ProcessID(r31) stw r3, Task.ProcessID(r31)
stw r4, 0x00ec(r31) stw r4, 0x00ec(r31)
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
@ -1579,10 +1579,10 @@ KCRegisterThermalHandler ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr. r8, r3 mr. r8, r3
beq- @is_zero beq @is_zero
bl LookupID bl LookupID
cmpwi r9, Notification.kIDClass cmpwi r9, Notification.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
@is_zero @is_zero
stw r3, PSA.ThermalHandlerID(r1) stw r3, PSA.ThermalHandlerID(r1)
@ -1601,10 +1601,10 @@ KCRegisterPMFHandler ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr. r8, r3 mr. r8, r3
beq- @is_zero beq @is_zero
bl LookupID bl LookupID
cmpwi r9, Notification.kIDClass cmpwi r9, Notification.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
@is_zero @is_zero
stw r3, PSA.PMFHandlerID(r1) stw r3, PSA.PMFHandlerID(r1)
@ -1626,11 +1626,11 @@ KCMarkPMFTask ; OUTSIDE REFERER
mr. r8, r3 mr. r8, r3
lwz r31, EWA.PA_CurTask(r30) lwz r31, EWA.PA_CurTask(r30)
beq- @use_blue_task_instead beq @use_blue_task_instead
bl LookupID bl LookupID
cmpwi r9, Task.kIDClass cmpwi r9, Task.kIDClass
mr r31, r8 mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
@use_blue_task_instead @use_blue_task_instead
; Insert bit 31 of r4 into bit 21 of these flags ; Insert bit 31 of r4 into bit 21 of these flags
@ -1663,18 +1663,18 @@ NKLocateInfoRecord
cmpwi r3, 5 cmpwi r3, 5
cmpwi cr1, r3, 2 cmpwi cr1, r3, 2
beq- @ProcessorInfo beq @ProcessorInfo
beq- cr1, @SystemInfo beq cr1, @SystemInfo
cmpwi r3, 3 cmpwi r3, 3
cmpwi cr1, r3, 4 cmpwi cr1, r3, 4
beq- @DiagInfo beq @DiagInfo
beq- cr1, @NanoKernelInfo beq cr1, @NanoKernelInfo
cmpwi r3, 7 cmpwi r3, 7
cmpwi cr1, r3, 6 cmpwi cr1, r3, 6
beq- @ProcessorState beq @ProcessorState
bne+ cr1, ReturnParamErrFromMPCall bne cr1, ReturnParamErrFromMPCall
lwz r4, KDP.InfoRecord + InfoRecord.NKHWInfoPtr(r1) lwz r4, KDP.InfoRecord + InfoRecord.NKHWInfoPtr(r1)
lhz r16, KDP.InfoRecord + InfoRecord.NKHWInfoLen(r1) lhz r16, KDP.InfoRecord + InfoRecord.NKHWInfoLen(r1)
@ -1730,7 +1730,7 @@ NKLocateInfoRecord
NKSetPrInfoClockRates NKSetPrInfoClockRates
cmplwi r3, 2 cmplwi r3, 2
bge+ ReturnParamErrFromMPCall bge ReturnParamErrFromMPCall
mulli r17, r3, 16 mulli r17, r3, 16
addi r18, r1, KDP.ProcessorInfo + NKProcessorInfo.ClockRates addi r18, r1, KDP.ProcessorInfo + NKProcessorInfo.ClockRates
@ -1773,7 +1773,7 @@ NKSetClockStep ; OUTSIDE REFERER
lwz r8, EWA.CPUBase + CPU.LLL + LLL.Freeform(r9) lwz r8, EWA.CPUBase + CPU.LLL + LLL.Freeform(r9)
lwz r9, 0x0024(r8) lwz r9, 0x0024(r8)
cmpwi r9, 0x01 cmpwi r9, 0x01
bgt+ ReturnMPCallOOM bgt ReturnMPCallOOM
lhz r19, 0x0f7e(r1) lhz r19, 0x0f7e(r1)
_log 'NKSetClockStep - current ' _log 'NKSetClockStep - current '
mr r8, r19 mr r8, r19
@ -1784,8 +1784,8 @@ NKSetClockStep ; OUTSIDE REFERER
_log '^n' _log '^n'
cmplwi r3, 0x02 cmplwi r3, 0x02
cmpw cr1, r3, r19 cmpw cr1, r3, r19
bge+ ReturnParamErrFromMPCall bge ReturnParamErrFromMPCall
beq+ cr1, ReturnMPCallOOM beq cr1, ReturnMPCallOOM
mulli r17, r3, 0x10 mulli r17, r3, 0x10
addi r18, r1, 0xf80 addi r18, r1, 0xf80
sth r17, 0x0f7e(r1) sth r17, 0x0f7e(r1)
@ -1801,13 +1801,13 @@ NKSetClockStep ; OUTSIDE REFERER
lwz r16, 0x0008(r18) lwz r16, 0x0008(r18)
stw r16, -0x0438(r1) stw r16, -0x0438(r1)
bgt- cr1, NKSetClockStep_0xec bgt cr1, NKSetClockStep_0xec
lwz r31, -0x0434(r1) lwz r31, -0x0434(r1)
lbz r18, 0x0017(r31) lbz r18, 0x0017(r31)
cmpwi r18, 0x00 cmpwi r18, 0x00
; r1 = kdp ; r1 = kdp
beq+ ReleaseAndReturnZeroFromMPCall beq ReleaseAndReturnZeroFromMPCall
mr r8, r31 mr r8, r31
bl DequeueTimer bl DequeueTimer
@ -1820,7 +1820,7 @@ NKSetClockStep_0xec
cmpwi r18, 0x01 cmpwi r18, 0x01
; r1 = kdp ; r1 = kdp
beq+ ReleaseAndReturnZeroFromMPCall beq ReleaseAndReturnZeroFromMPCall
bl GetTime bl GetTime
stw r8, 0x0038(r31) stw r8, 0x0038(r31)
stw r9, 0x003c(r31) stw r9, 0x003c(r31)
@ -1847,24 +1847,24 @@ NKSetClockDriftCorrection ; OUTSIDE REFERER
lwz r31, -0x0364(r1) lwz r31, -0x0364(r1)
mfsprg r9, 0 mfsprg r9, 0
cmpwi r31, 0x00 cmpwi r31, 0x00
beq+ ReturnMPCallOOM beq ReturnMPCallOOM
lwz r8, EWA.CPUBase + CPU.LLL + LLL.Freeform(r9) lwz r8, EWA.CPUBase + CPU.LLL + LLL.Freeform(r9)
lwz r9, 0x0024(r8) lwz r9, 0x0024(r8)
cmpwi r9, 0x01 cmpwi r9, 0x01
bgt+ ReturnMPCallOOM bgt ReturnMPCallOOM
lwz r19, 0x0fa0(r1) lwz r19, 0x0fa0(r1)
cmpwi r3, 0x00 cmpwi r3, 0x00
cmpw cr1, r3, r19 cmpw cr1, r3, r19
stw r3, 0x0fa0(r1) stw r3, 0x0fa0(r1)
beq- NKSetClockDriftCorrection_0x12c beq NKSetClockDriftCorrection_0x12c
beq+ cr1, ReturnZeroFromMPCall beq cr1, ReturnZeroFromMPCall
lis r16, 0x3b9a lis r16, 0x3b9a
ori r16, r16, 0xca00 ori r16, r16, 0xca00
lwz r17, 0x0f88(r1) lwz r17, 0x0f88(r1)
srwi r17, r17, 7 srwi r17, r17, 7
divw r18, r16, r3 divw r18, r16, r3
cmpw r18, r17 cmpw r18, r17
bge- NKSetClockDriftCorrection_0x64 bge NKSetClockDriftCorrection_0x64
divw r16, r16, r17 divw r16, r16, r17
mr r18, r17 mr r18, r17
divw r17, r3, r16 divw r17, r3, r16
@ -1895,7 +1895,7 @@ NKSetClockDriftCorrection_0x6c
cmpwi r18, 0x01 cmpwi r18, 0x01
; r1 = kdp ; r1 = kdp
beq+ ReleaseAndReturnZeroFromMPCall beq ReleaseAndReturnZeroFromMPCall
bl GetTime bl GetTime
stw r8, 0x0038(r31) stw r8, 0x0038(r31)
stw r9, 0x003c(r31) stw r9, 0x003c(r31)
@ -1917,7 +1917,7 @@ NKSetClockDriftCorrection_0x12c
cmpwi r18, 0x00 cmpwi r18, 0x00
; r1 = kdp ; r1 = kdp
beq+ ReleaseAndReturnZeroFromMPCall beq ReleaseAndReturnZeroFromMPCall
mr r8, r31 mr r8, r31
bl DequeueTimer bl DequeueTimer
@ -1939,10 +1939,10 @@ MPCall_115 ; OUTSIDE REFERER
cmpwi r9, ConsoleLog.kIDClass cmpwi r9, ConsoleLog.kIDClass
mr r31, r8 mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
lwz r30, 0x000c(r31) lwz r30, 0x000c(r31)
cmpwi r30, 0x00 cmpwi r30, 0x00
bne- MPCall_115_0x94 bne MPCall_115_0x94
_Lock PSA.DbugLock, scratch1=r16, scratch2=r17 _Lock PSA.DbugLock, scratch1=r16, scratch2=r17
@ -1951,32 +1951,32 @@ MPCall_115 ; OUTSIDE REFERER
MPCall_115_0x54 MPCall_115_0x54
addi r30, r30, 0x01 addi r30, r30, 0x01
andi. r29, r30, 0xfff andi. r29, r30, 0xfff
bne- MPCall_115_0x64 bne MPCall_115_0x64
lwz r30, -0x1000(r30) lwz r30, -0x1000(r30)
MPCall_115_0x64 MPCall_115_0x64
lbz r16, 0x0000(r30) lbz r16, 0x0000(r30)
cmpwi r16, 0x00 cmpwi r16, 0x00
beq+ MPCall_115_0x54 beq MPCall_115_0x54
stw r30, 0x000c(r31) stw r30, 0x000c(r31)
_AssertAndRelease PSA.DbugLock, scratch=r16 _AssertAndRelease PSA.DbugLock, scratch=r16
MPCall_115_0x94 MPCall_115_0x94
cmpwi r5, 0x00 cmpwi r5, 0x00
ble+ ReleaseAndReturnMPCallOOM ble ReleaseAndReturnMPCallOOM
rlwinm. r9, r11, 0, 27, 27 rlwinm. r9, r11, 0, 27, 27
mr r8, r4 mr r8, r4
crmove 30, 2 crmove 30, 2
beq- MPCall_115_0xd0 beq MPCall_115_0xd0
li r9, 0x00 li r9, 0x00
bl MPCall_95_0x45c bl MPCall_95_0x45c
beq+ ReleaseAndReturnMPCallOOM beq ReleaseAndReturnMPCallOOM
add r8, r4, r5 add r8, r4, r5
li r9, 0x00 li r9, 0x00
addi r8, r8, -0x01 addi r8, r8, -0x01
mr r30, r8 mr r30, r8
bl MPCall_95_0x45c bl MPCall_95_0x45c
beq+ ReleaseAndReturnMPCallOOM beq ReleaseAndReturnMPCallOOM
MPCall_115_0xd0 MPCall_115_0xd0
lwz r28, -0x0404(r1) lwz r28, -0x0404(r1)
@ -1987,18 +1987,18 @@ MPCall_115_0xd0
MPCall_115_0xe0 MPCall_115_0xe0
cmpw r28, r29 cmpw r28, r29
cmplw cr1, r4, r30 cmplw cr1, r4, r30
beq- MPCall_115_0x144 beq MPCall_115_0x144
bgt- cr1, MPCall_115_0x144 bgt cr1, MPCall_115_0x144
rlwinm r16, r4, 0, 0, 19 rlwinm r16, r4, 0, 0, 19
mr r8, r4 mr r8, r4
beq- cr7, MPCall_115_0x11c beq cr7, MPCall_115_0x11c
cmpw r16, r27 cmpw r16, r27
mr r17, r26 mr r17, r26
beq- MPCall_115_0x11c beq MPCall_115_0x11c
mr r27, r16 mr r27, r16
li r9, 0x00 li r9, 0x00
bl MPCall_95_0x45c bl MPCall_95_0x45c
beq+ ReleaseAndReturnMPCallOOM beq ReleaseAndReturnMPCallOOM
mr r26, r17 mr r26, r17
MPCall_115_0x11c MPCall_115_0x11c
@ -2035,10 +2035,10 @@ KCRegisterExternalHandler
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr. r8, r3 mr. r8, r3
beq- @zero beq @zero
bl LookupID bl LookupID
cmpwi r9, Notification.kIDClass cmpwi r9, Notification.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
@zero @zero
stw r3, PSA.ExternalHandlerID(r1) stw r3, PSA.ExternalHandlerID(r1)
@ -2056,7 +2056,7 @@ MPCall_133 ; OUTSIDE REFERER
cmpw r3, r0 cmpw r3, r0
lwz r16, 0x0edc(r1) lwz r16, 0x0edc(r1)
li r17, 0x0b li r17, 0x0b
blt- MPCall_133_0x34 blt MPCall_133_0x34
and r3, r3, r17 and r3, r3, r17
or r16, r16, r3 or r16, r16, r3
b MPCall_133_0x3c b MPCall_133_0x3c
@ -2071,16 +2071,16 @@ MPCall_133_0x3c
extsh r17, r4 extsh r17, r4
cmpwi r16, -0x01 cmpwi r16, -0x01
cmpwi cr1, r17, -0x01 cmpwi cr1, r17, -0x01
beq- MPCall_133_0x60 beq MPCall_133_0x60
bgt- MPCall_133_0x5c bgt MPCall_133_0x5c
li r16, 0x00 li r16, 0x00
MPCall_133_0x5c MPCall_133_0x5c
sth r16, -0x0360(r1) sth r16, -0x0360(r1)
MPCall_133_0x60 MPCall_133_0x60
beq- cr1, MPCall_133_0x70 beq cr1, MPCall_133_0x70
bgt- cr1, MPCall_133_0x6c bgt cr1, MPCall_133_0x6c
li r17, 0x00 li r17, 0x00
MPCall_133_0x6c MPCall_133_0x6c
@ -2091,16 +2091,16 @@ MPCall_133_0x70
extsh r17, r5 extsh r17, r5
cmpwi r16, -0x01 cmpwi r16, -0x01
cmpwi cr1, r17, -0x01 cmpwi cr1, r17, -0x01
beq- MPCall_133_0x90 beq MPCall_133_0x90
bgt- MPCall_133_0x8c bgt MPCall_133_0x8c
li r16, 0x00 li r16, 0x00
MPCall_133_0x8c MPCall_133_0x8c
sth r16, -0x035c(r1) sth r16, -0x035c(r1)
MPCall_133_0x90 MPCall_133_0x90
beq- cr1, MPCall_133_0xa0 beq cr1, MPCall_133_0xa0
bgt- cr1, MPCall_133_0x9c bgt cr1, MPCall_133_0x9c
li r17, 0x00 li r17, 0x00
MPCall_133_0x9c MPCall_133_0x9c

View File

@ -55,22 +55,22 @@ PagingFunc1 ; OUTSIDE REFERER
lwz r17, 0x0020(r31) lwz r17, 0x0020(r31)
cmplw r16, r27 cmplw r16, r27
lwz r18, 0x007c(r31) lwz r18, 0x007c(r31)
bgt- @_1a0 bgt @_1a0
bgt+ @_44 bgt @_44
and r28, r27, r18 and r28, r27, r18
rlwinm. r26, r17, 0, 16, 16 rlwinm. r26, r17, 0, 16, 16
lwz r17, 0x0038(r31) lwz r17, 0x0038(r31)
beq- @_fc beq @_fc
lwz r18, 0x0070(r31) lwz r18, 0x0070(r31)
subf r19, r16, r28 subf r19, r16, r28
clrlwi r31, r18, 0x1e clrlwi r31, r18, 0x1e
cmpwi cr7, r17, -0x01 cmpwi cr7, r17, -0x01
cmpwi cr6, r31, 0x00 cmpwi cr6, r31, 0x00
beq- cr7, @_1a0 beq cr7, @_1a0
beq+ cr6, @_44 beq cr6, @_44
cmpwi r17, 0x01 cmpwi r17, 0x01
add r31, r18, r19 add r31, r18, r19
blt+ @_44 blt @_44
li r26, 0x00 li r26, 0x00
b @_208 b @_208
@ -81,10 +81,10 @@ PagingFunc1 ; OUTSIDE REFERER
mr r26, r30 mr r26, r30
mr r8, r27 mr r8, r27
bl MPCall_95_0x254 bl MPCall_95_0x254
beq- @_12c beq @_12c
lhz r16, 0x0000(r30) lhz r16, 0x0000(r30)
rlwinm. r8, r16, 0, 16, 16 rlwinm. r8, r16, 0, 16, 16
bne- @_12c bne @_12c
srwi r16, r16, 1 srwi r16, r16, 1
sth r16, 0x0000(r30) sth r16, 0x0000(r30)
@ -95,8 +95,8 @@ PagingFunc1 ; OUTSIDE REFERER
cmpwi cr6, r9, 0x00 cmpwi cr6, r9, 0x00
li r8, 0x801 li r8, 0x801
li r9, 0x01 li r9, 0x01
bne- @_154 bne @_154
beq- cr6, @_154 beq cr6, @_154
li r8, 0x881 li r8, 0x881
li r9, 0x81 li r9, 0x81
@ -106,7 +106,7 @@ PagingFunc1 ; OUTSIDE REFERER
rlwimi r31, r28, 0, 0, 19 rlwimi r31, r28, 0, 0, 19
cmplwi cr6, r30, 0x800 cmplwi cr6, r30, 0x800
cmplwi r30, 0x01 cmplwi r30, 0x01
bge- cr6, @_2ec bge cr6, @_2ec
cmplw cr7, r30, r9 cmplw cr7, r30, r9
ori r31, r31, 0x100 ori r31, r31, 0x100
rlwimi r31, r28, 28, 28, 28 rlwimi r31, r28, 28, 28, 28
@ -117,8 +117,8 @@ PagingFunc1 ; OUTSIDE REFERER
rlwimi r31, r28, 30, 31, 31 rlwimi r31, r28, 30, 31, 31
rlwimi r31, r28, 0, 30, 30 rlwimi r31, r28, 0, 30, 30
xori r31, r31, 0x02 xori r31, r31, 0x02
beq- @_208 beq @_208
blt+ cr7, @_44 blt cr7, @_44
bl Local_Panic bl Local_Panic
@_1a0 @_1a0
@ -136,17 +136,17 @@ PagingFunc1 ; OUTSIDE REFERER
lhz r31, 0x0002(r29) lhz r31, 0x0002(r29)
subf r30, r30, r28 subf r30, r30, r28
cmplw cr7, r30, r31 cmplw cr7, r30, r31
bgt+ cr7, @_1b8 bgt cr7, @_1b8
lwz r28, 0x0690(r1) lwz r28, 0x0690(r1)
lwz r31, 0x0004(r29) lwz r31, 0x0004(r29)
cmpwi cr7, r28, 0x00 cmpwi cr7, r28, 0x00
bnel- cr7, @_314 bnel cr7, @_314
rlwinm. r26, r31, 23, 29, 30 rlwinm. r26, r31, 23, 29, 30
cmplwi cr7, r26, 0x06 cmplwi cr7, r26, 0x06
beq- @_200 beq @_200
cmplwi cr6, r26, 0x02 cmplwi cr6, r26, 0x02
beq- cr7, @_368 beq cr7, @_368
beq- cr6, @_3b8 beq cr6, @_3b8
b @_44 b @_44
dc.l 0x41800168 dc.l 0x41800168
dc.l 0x418101bc dc.l 0x418101bc
@ -172,28 +172,28 @@ PagingFunc1 ; OUTSIDE REFERER
lwz r30, 0x0010(r29) lwz r30, 0x0010(r29)
cmpwi cr7, r28, 0x00 cmpwi cr7, r28, 0x00
lwzu r28, 0x0018(r29) lwzu r28, 0x0018(r29)
bge- cr6, @_298 bge cr6, @_298
cmpwi cr6, r30, 0x00 cmpwi cr6, r30, 0x00
lwzu r30, 0x0008(r29) lwzu r30, 0x0008(r29)
bge- cr7, @_298 bge cr7, @_298
cmpwi cr7, r28, 0x00 cmpwi cr7, r28, 0x00
lwzu r28, 0x0008(r29) lwzu r28, 0x0008(r29)
bge- cr6, @_298 bge cr6, @_298
cmpwi cr6, r30, 0x00 cmpwi cr6, r30, 0x00
lwzu r30, 0x0008(r29) lwzu r30, 0x0008(r29)
bge- cr7, @_298 bge cr7, @_298
cmpwi cr7, r28, 0x00 cmpwi cr7, r28, 0x00
lwzu r28, 0x0008(r29) lwzu r28, 0x0008(r29)
bge- cr6, @_298 bge cr6, @_298
cmpwi cr6, r30, 0x00 cmpwi cr6, r30, 0x00
addi r29, r29, 0x08 addi r29, r29, 0x08
bge- cr7, @_298 bge cr7, @_298
cmpwi cr7, r28, 0x00 cmpwi cr7, r28, 0x00
addi r29, r29, 0x08 addi r29, r29, 0x08
bge- cr6, @_298 bge cr6, @_298
rlwinm r28, r31, 0, 26, 26 rlwinm r28, r31, 0, 26, 26
addi r29, r29, 0x08 addi r29, r29, 0x08
blt- cr7, @_3e0 blt cr7, @_3e0
@_298 @_298
cmpwi r26, 0x00 cmpwi r26, 0x00
@ -213,9 +213,9 @@ PagingFunc1 ; OUTSIDE REFERER
stw r29, 0x0698(r1) stw r29, 0x0698(r1)
addi r28, r28, 0x01 addi r28, r28, 0x01
stw r28, 0x0e94(r1) stw r28, 0x0e94(r1)
beq+ @_44 beq @_44
cmpwi r26, 0x5a5a cmpwi r26, 0x5a5a
bne- @_2f4 bne @_2f4
stw r29, 0x0690(r1) stw r29, 0x0690(r1)
@_2ec @_2ec
@ -246,7 +246,7 @@ PagingFunc1 ; OUTSIDE REFERER
rlwinm. r28, r28, 0, 0, 14 rlwinm. r28, r28, 0, 0, 14
sync sync
tlbie r29 tlbie r29
beq- @_354 beq @_354
sync sync
tlbsync tlbsync
@ -267,7 +267,7 @@ PagingFunc1 ; OUTSIDE REFERER
cmplwi cr6, r30, 0x800 cmplwi cr6, r30, 0x800
cmplwi cr7, r30, 0x81 cmplwi cr7, r30, 0x81
cmplwi r30, 0x01 cmplwi r30, 0x01
bge+ cr6, @_2ec bge cr6, @_2ec
cmplwi cr7, r30, 0x81 cmplwi cr7, r30, 0x81
ori r31, r31, 0x100 ori r31, r31, 0x100
rlwimi r31, r28, 3, 24, 24 rlwimi r31, r28, 3, 24, 24
@ -275,8 +275,8 @@ PagingFunc1 ; OUTSIDE REFERER
rlwimi r31, r28, 1, 25, 25 rlwimi r31, r28, 1, 25, 25
xori r31, r31, 0x40 xori r31, r31, 0x40
rlwimi r31, r28, 30, 31, 31 rlwimi r31, r28, 30, 31, 31
beq+ @_208 beq @_208
blt+ cr7, @_44 blt cr7, @_44
bl Local_Panic bl Local_Panic
@_3b8 @_3b8
@ -294,12 +294,12 @@ PagingFunc1 ; OUTSIDE REFERER
@_3e0 @_3e0
cmplw cr6, r28, r26 cmplw cr6, r28, r26
addi r29, r29, -0x50 addi r29, r29, -0x50
ble- cr6, @_400 ble cr6, @_400
crnot 2, 2 crnot 2, 2
lwz r30, KDP.PTEGMask(r1) lwz r30, KDP.PTEGMask(r1)
xori r31, r31, 0x800 xori r31, r31, 0x800
xor r29, r29, r30 xor r29, r29, r30
beq+ @_228 beq @_228
@_400 @_400
lwz r26, 0x069c(r1) lwz r26, 0x069c(r1)
@ -319,16 +319,16 @@ PagingFunc1 ; OUTSIDE REFERER
rlwimi r29, r26, 0, 0, 25 rlwimi r29, r26, 0, 0, 25
lwz r31, 0x0004(r29) lwz r31, 0x0004(r29)
lwz r30, 0x0000(r29) lwz r30, 0x0000(r29)
beq- cr6, @_444 beq cr6, @_444
rlwinm r28, r31, 30, 25, 25 rlwinm r28, r31, 30, 25, 25
andc. r28, r28, r30 andc. r28, r28, r30
bne+ @_420 bne @_420
@_444 @_444
addi r9, r9, -0x01 addi r9, r9, -0x01
cmpwi cr7, r9, 0x00 cmpwi cr7, r9, 0x00
rlwinm r31, r30, 0, 25, 25 rlwinm r31, r30, 0, 25, 25
blel+ cr7, Local_Panic blel cr7, Local_Panic
rlwinm r28, r30, 1, 0, 3 rlwinm r28, r30, 1, 0, 3
neg r31, r31 neg r31, r31
rlwimi r28, r30, 22, 4, 9 rlwimi r28, r30, 22, 4, 9
@ -349,7 +349,7 @@ PagingFunc1 ; OUTSIDE REFERER
mfspr r31, pvr mfspr r31, pvr
rlwinm. r31, r31, 0, 0, 14 rlwinm. r31, r31, 0, 0, 14
tlbie r28 tlbie r28
beq- @_4b0 beq @_4b0
sync sync
tlbsync tlbsync
@ -369,11 +369,11 @@ PagingFunc1 ; OUTSIDE REFERER
mr r31, r8 mr r31, r8
cmplw r16, r28 cmplw r16, r28
mr r8, r28 mr r8, r28
bgt- @_600 bgt @_600
bgt+ Local_Panic bgt Local_Panic
bl MPCall_95_0x1e4 bl MPCall_95_0x1e4
mr r26, r30 mr r26, r30
beql+ @_88 beql @_88
@_500 @_500
lwz r28, 0x0000(r26) lwz r28, 0x0000(r26)
@ -381,10 +381,10 @@ PagingFunc1 ; OUTSIDE REFERER
andi. r30, r28, 0x800 andi. r30, r28, 0x800
rlwinm r30, r28, 23, 9, 28 rlwinm r30, r28, 23, 9, 28
xor r30, r30, r29 xor r30, r30, r29
beq+ Local_Panic beq Local_Panic
andi. r30, r30, 0xffff andi. r30, r30, 0xffff
xori r28, r28, 0x800 xori r28, r28, 0x800
bne+ Local_Panic bne Local_Panic
rlwimi r28, r31, 0, 0, 19 rlwimi r28, r31, 0, 0, 19
rlwimi r28, r31, 29, 27, 27 rlwimi r28, r31, 29, 27, 27
rlwimi r28, r31, 27, 28, 28 rlwimi r28, r31, 27, 28, 28
@ -431,15 +431,15 @@ PagingFunc1 ; OUTSIDE REFERER
lwz r31, -0x0004(r26) lwz r31, -0x0004(r26)
andi. r31, r31, 0xe01 andi. r31, r31, 0xe01
cmpwi r31, 0xa01 cmpwi r31, 0xa01
bgt+ cr7, @_60c bgt cr7, @_60c
beq+ @_60c beq @_60c
lwz r26, -0x0004(r26) lwz r26, -0x0004(r26)
slwi r30, r30, 2 slwi r30, r30, 2
rlwinm r31, r26, 22, 30, 31 rlwinm r31, r26, 22, 30, 31
cmpwi cr7, r31, 0x03 cmpwi cr7, r31, 0x03
rlwinm r26, r26, 22, 0, 29 rlwinm r26, r26, 22, 0, 29
add r26, r26, r30 add r26, r26, r30
bnel+ cr7, @_88 bnel cr7, @_88
b @_500 b @_500
@ -457,7 +457,7 @@ PagingFunc2 ; OUTSIDE REFERER
addis r31, r31, -0x1000 addis r31, r31, -0x1000
mr. r31, r31 mr. r31, r31
mtsrin r30, r31 mtsrin r30, r31
bne+ @_18 bne @_18
isync isync
PagingFunc2AndAHalf PagingFunc2AndAHalf
@ -466,7 +466,7 @@ PagingFunc2AndAHalf
rlwinm. r31, r31, 0, 0, 14 rlwinm. r31, r31, 0, 0, 14
addi r29, r1, 0x00 addi r29, r1, 0x00
stw r28, 0x05ec(r1) stw r28, 0x05ec(r1)
beq- @_168 beq @_168
li r30, 0x00 li r30, 0x00
mtspr ibat0u, r30 mtspr ibat0u, r30
mtspr ibat1u, r30 mtspr ibat1u, r30
@ -604,22 +604,22 @@ PagingFunc3 ; OUTSIDE REFERER
rlwimi r28, r30, 15, 0, 14 rlwimi r28, r30, 15, 0, 14
xor r31, r27, r30 xor r31, r27, r30
andc. r31, r31, r28 andc. r31, r31, r28
beq- @_54 beq @_54
lwzu r30, 0x0008(r29) lwzu r30, 0x0008(r29)
rlwimi r28, r30, 15, 0, 14 rlwimi r28, r30, 15, 0, 14
xor r31, r27, r30 xor r31, r27, r30
andc. r31, r31, r28 andc. r31, r31, r28
beq- @_54 beq @_54
lwzu r30, 0x0008(r29) lwzu r30, 0x0008(r29)
rlwimi r28, r30, 15, 0, 14 rlwimi r28, r30, 15, 0, 14
xor r31, r27, r30 xor r31, r27, r30
andc. r31, r31, r28 andc. r31, r31, r28
beq- @_54 beq @_54
lwzu r30, 0x0008(r29) lwzu r30, 0x0008(r29)
rlwimi r28, r30, 15, 0, 14 rlwimi r28, r30, 15, 0, 14
xor r31, r27, r30 xor r31, r27, r30
andc. r31, r31, r28 andc. r31, r31, r28
bne- PagingFunc4 bne PagingFunc4
@_54 @_54
andi. r31, r30, 0x01 andi. r31, r30, 0x01
@ -627,7 +627,7 @@ PagingFunc3 ; OUTSIDE REFERER
lwzu r31, 0x0004(r29) lwzu r31, 0x0004(r29)
and r28, r27, r28 and r28, r27, r28
or r31, r31, r28 or r31, r31, r28
bnelr- bnelr
@ -651,7 +651,7 @@ PagingFunc4 ; OUTSIDE REFERER
lwz r31, 0x0010(r29) lwz r31, 0x0010(r29)
cmpw cr7, r30, r28 cmpw cr7, r30, r28
lwzu r28, 0x0018(r29) lwzu r28, 0x0018(r29)
bne- cr6, @_50 bne cr6, @_50
@_48 @_48
lwzu r31, -0x0014(r29) lwzu r31, -0x0014(r29)
@ -660,30 +660,30 @@ PagingFunc4 ; OUTSIDE REFERER
@_50 @_50
cmpw cr6, r30, r31 cmpw cr6, r30, r31
lwzu r31, 0x0008(r29) lwzu r31, 0x0008(r29)
beq+ cr7, @_48 beq cr7, @_48
cmpw cr7, r30, r28 cmpw cr7, r30, r28
lwzu r28, 0x0008(r29) lwzu r28, 0x0008(r29)
beq+ cr6, @_48 beq cr6, @_48
cmpw cr6, r30, r31 cmpw cr6, r30, r31
lwzu r31, 0x0008(r29) lwzu r31, 0x0008(r29)
beq+ cr7, @_48 beq cr7, @_48
cmpw cr7, r30, r28 cmpw cr7, r30, r28
lwzu r28, 0x0008(r29) lwzu r28, 0x0008(r29)
beq+ cr6, @_48 beq cr6, @_48
cmpw cr6, r30, r31 cmpw cr6, r30, r31
lwzu r31, -0x000c(r29) lwzu r31, -0x000c(r29)
beqlr- cr7 beqlr cr7
cmpw cr7, r30, r28 cmpw cr7, r30, r28
lwzu r31, 0x0008(r29) lwzu r31, 0x0008(r29)
beqlr- cr6 beqlr cr6
lwzu r31, 0x0008(r29) lwzu r31, 0x0008(r29)
beqlr- cr7 beqlr cr7
lwz r31, KDP.PTEGMask(r1) lwz r31, KDP.PTEGMask(r1)
xori r30, r30, 0x40 xori r30, r30, 0x40
andi. r28, r30, 0x40 andi. r28, r30, 0x40
addi r29, r29, -0x3c addi r29, r29, -0x3c
xor r29, r29, r31 xor r29, r29, r31
bne+ @_2c bne @_2c
blr blr
@ -698,14 +698,14 @@ PagingFlushTLB ; OUTSIDE REFERER
subi r29, r29, 1 << pb subi r29, r29, 1 << pb
cmpwi r29, 0 cmpwi r29, 0
tlbie r29 tlbie r29
bgt+ @loop bgt @loop
mfspr r29, pvr mfspr r29, pvr
rlwinm. r29, r29, 0, 0, 14 rlwinm. r29, r29, 0, 0, 14
; All cpus ; All cpus
sync sync
beqlr- beqlr
; Non-601 stuff ; Non-601 stuff
tlbsync tlbsync

View File

@ -173,8 +173,8 @@ _PoolAllocCommon
cmpwi r8, 0 cmpwi r8, 0
cmpwi cr1, r8, 0xfd8 cmpwi cr1, r8, 0xfd8
ble+ _PoolPanic ble _PoolPanic
bgt- cr1, @request_too_large bgt cr1, @request_too_large
; Up-align to 32b boundary and snatch an extra 8b ; Up-align to 32b boundary and snatch an extra 8b
@ -203,7 +203,7 @@ _PoolAllocCommon
lwz r17, PSA.UnheldFreePageCount(r1) lwz r17, PSA.UnheldFreePageCount(r1)
subf. r16, r9, r16 subf. r16, r9, r16
subf r17, r9, r17 subf r17, r9, r17
blt- _PoolReturn blt _PoolReturn
stw r16, PSA.FreePageCount(r1) stw r16, PSA.FreePageCount(r1)
stw r17, PSA.UnheldFreePageCount(r1) stw r17, PSA.UnheldFreePageCount(r1)
@ -239,8 +239,8 @@ _PoolAllocCommon
cmplw r16, r8 cmplw r16, r8
lis r20, 'fr' lis r20, 'fr'
bgt- @decide_whether_to_split bgt @decide_whether_to_split
beq- @do_not_split beq @do_not_split
ori r20, r20, 'ee' ori r20, r20, 'ee'
@ -253,8 +253,8 @@ _PoolAllocCommon
lwz r19, Block.Signature(r18) lwz r19, Block.Signature(r18)
cmplw cr1, r18, r15 cmplw cr1, r18, r15
cmpw r19, r20 cmpw r19, r20
ble+ cr1, _PoolPanic ble cr1, _PoolPanic
bne- @physically_adjacent_block_is_not_free bne @physically_adjacent_block_is_not_free
lwz r17, Block.OffsetToNext(r18) lwz r17, Block.OffsetToNext(r18)
rotlwi r19, r19, 8 rotlwi r19, r19, 8
@ -279,7 +279,7 @@ _PoolAllocCommon
subf r16, r8, r16 subf r16, r8, r16
cmpwi r16, 40 cmpwi r16, 40
blt- @do_not_split blt @do_not_split
; Use the rightmost part of the block, leaving ptr in r15 ; Use the rightmost part of the block, leaving ptr in r15
@ -323,7 +323,7 @@ _PoolAllocCommon
@clrloop @clrloop
stwu r14, 4(r15) stwu r14, 4(r15)
cmpw r15, r16 cmpw r15, r16
ble+ @clrloop ble @clrloop
b _PoolReturn b _PoolReturn
@ -378,7 +378,7 @@ _PoolAddBlockToFreeList
lhz r16, Block.Signature(r15) lhz r16, Block.Signature(r15)
_lfinish _lfinish
cmplwi r16, 0x876c ; Block.kAllocSig >> 16 cmplwi r16, 0x876c ; Block.kAllocSig >> 16
bne+ _PoolPanic bne _PoolPanic
stw r20, Block.Signature(r15) stw r20, Block.Signature(r15)
; Insert into the global free block list ; Insert into the global free block list
@ -404,8 +404,8 @@ _PoolMergeAdjacentFreeBlocks
lwz r19, Block.Signature(r18) ; r19 = signature of that block lwz r19, Block.Signature(r18) ; r19 = signature of that block
cmplw cr1, r18, r15 cmplw cr1, r18, r15
cmpw r19, r20 cmpw r19, r20
ble+ cr1, _PoolPanic ; die if block was of non-positive size! ble cr1, _PoolPanic ; die if block was of non-positive size!
bnelr- ; return if block to right is not free bnelr ; return if block to right is not free
lwz r17, Block.OffsetToNext(r18) lwz r17, Block.OffsetToNext(r18)
rotlwi r19, r19, 8 ; scramble old signature to clarify mem dumps rotlwi r19, r19, 8 ; scramble old signature to clarify mem dumps
@ -466,7 +466,7 @@ _pool_page_seg equ 0x1000
subi r16, r16, 32 subi r16, r16, 32
cmpwi r16, 0 cmpwi r16, 0
dcbz r16, r17 dcbz r16, r17
bgt+ @zeroloop bgt @zeroloop
; Begin block ; Begin block
@ -552,7 +552,7 @@ PoolCheck
lwz r18, Block.OffsetToNext(r17) lwz r18, Block.OffsetToNext(r17)
cmpwi r18, 0 cmpwi r18, 0
add r20, r18, r17 add r20, r18, r17
bne+ @next_segment bne @next_segment
; If there are no more Begins, we are done ; If there are no more Begins, we are done
@ -578,27 +578,27 @@ _PoolCheckBlocks
lisori r18, Block.kEndSig lisori r18, Block.kEndSig
cmpw r17, r18 cmpw r17, r18
li r9, 0 li r9, 0
beq- @return beq @return
lisori r18, Block.kAllocSig lisori r18, Block.kAllocSig
cmpw r17, r18 cmpw r17, r18
beq- @block_is_allocated beq @block_is_allocated
lisori r18, Block.kFreeSig lisori r18, Block.kFreeSig
li r9, 4 li r9, 4
cmpw r17, r18 cmpw r17, r18
bne- @block_corrupt bne @block_corrupt
; From now we assume Free ; From now we assume Free
lwz r17, Block.FreePrev(r16) lwz r17, Block.FreePrev(r16)
cmpwi r17, 0 cmpwi r17, 0
li r9, 5 li r9, 5
beq- @block_corrupt beq @block_corrupt
lwz r17, Block.FreeNext(r16) lwz r17, Block.FreeNext(r16)
cmpwi r17, 0 cmpwi r17, 0
li r9, 6 li r9, 6
beq- @block_corrupt beq @block_corrupt
@block_is_allocated @block_is_allocated
;or block is free (fallthru) ;or block is free (fallthru)
@ -606,7 +606,7 @@ _PoolCheckBlocks
add r16, r16, r17 add r16, r16, r17
cmpwi r17, 0 cmpwi r17, 0
li r9, 7 li r9, 7
bgt+ @loop bgt @loop
; 4: neither Allocated nor Free ; 4: neither Allocated nor Free
@ -655,19 +655,19 @@ _PoolCheckBlocks
lbzu r8, 1(r16) lbzu r8, 1(r16)
cmpwi r8, ' ' cmpwi r8, ' '
bgt- @dont_use_space bgt @dont_use_space
li r8, ' ' li r8, ' '
@dont_use_space @dont_use_space
bl Printc bl Printc
bdnz+ @dump_next_char bdnz @dump_next_char
_log '*^n' _log '*^n'
subi r17, r17, 1 subi r17, r17, 1
addi r16, r16, 1 addi r16, r16, 1
cmpwi r17, 0x00 cmpwi r17, 0x00
bne+ @dump_next_line bne @dump_next_line
mr r8, r18 mr r8, r18

View File

@ -55,17 +55,17 @@ kcPowerDispatch
@use_provided_mcr @use_provided_mcr
and. r8, r4, r9 and. r8, r4, r9
bgt- cr7, PowerEarlyReturnError ; invalid selector bgt cr7, PowerEarlyReturnError ; invalid selector
bne- PowerEarlyReturnSuccess bne PowerEarlyReturnSuccess
cmplwi cr7, r3, 11 cmplwi cr7, r3, 11
beq- cr7, PwrInfiniteLoop beq cr7, PwrInfiniteLoop
cmplwi cr7, r3, 8 cmplwi cr7, r3, 8
beq- cr7, PwrSuspendSystem beq cr7, PwrSuspendSystem
cmplwi cr7, r3, 9 cmplwi cr7, r3, 9
beq- cr7, PwrSetICTC beq cr7, PwrSetICTC
; Fall through to 0-7: PwrIdle ; Fall through to 0-7: PwrIdle
@ -130,7 +130,7 @@ PwrIdle
addi r3, r3, 26 addi r3, r3, 26
rlwnm r3, r8, r3, 30, 31 rlwnm r3, r8, r3, 30, 31
cmpwi r3, 0 cmpwi r3, 0
beq- PowerEarlyRestoreReturnError beq PowerEarlyRestoreReturnError
; Depending on pre-programmed flags, set: ; Depending on pre-programmed flags, set:
@ -139,12 +139,12 @@ PwrIdle
lbz r9, KDP.CpuSpecificByte2(r1) lbz r9, KDP.CpuSpecificByte2(r1)
cmpwi r9, 0 cmpwi r9, 0
beq- @set_neither beq @set_neither
mfspr r27, hid0 ; will restore r27 => HID0 when system wakes below mfspr r27, hid0 ; will restore r27 => HID0 when system wakes below
mr r8, r27 mr r8, r27
cmpwi r9, 1 cmpwi r9, 1
beq- @set_only_nhr beq @set_only_nhr
oris r9, r3, 0x0100 ; set bit 7 oris r9, r3, 0x0100 ; set bit 7
srw r9, r9, r9 ; shift right by 0-3 srw r9, r9, r9 ; shift right by 0-3
@ -159,7 +159,7 @@ PwrIdle
; Flush L1 and L2 caches if argument & 4 ; Flush L1 and L2 caches if argument & 4
cmplwi r26, 4 cmplwi r26, 4
beql- FlushCaches beql FlushCaches
; Set MSR bits to enter the selected pwrmgt state ; Set MSR bits to enter the selected pwrmgt state
@ -167,7 +167,7 @@ PwrIdle
mfmsr r8 mfmsr r8
ori r8, r8, 0x8002 ; Always set MSR[EE] and MSR[RI] so we can wake! ori r8, r8, 0x8002 ; Always set MSR[EE] and MSR[RI] so we can wake!
cmplwi r3, 0 ; If using HID0[pwrmgt state], set MSR[POW] so it takes effect cmplwi r3, 0 ; If using HID0[pwrmgt state], set MSR[POW] so it takes effect
beq- @no_pow beq @no_pow
oris r8, r8, 4 oris r8, r8, 4
@no_pow @no_pow
sync ; Apply MSR! sync ; Apply MSR!
@ -185,7 +185,7 @@ IntReturnToFullOn
lbz r8, KDP.CpuSpecificByte2(r1) lbz r8, KDP.CpuSpecificByte2(r1)
cmpwi r8, 0 cmpwi r8, 0
beq- @hid_was_not_changed beq @hid_was_not_changed
mtspr hid0, r27 mtspr hid0, r27
@hid_was_not_changed @hid_was_not_changed
@ -252,7 +252,7 @@ PwrSuspendSystem
lwz r9, CoherenceGroup.ScheduledCpuCount(r8) lwz r9, CoherenceGroup.ScheduledCpuCount(r8)
cmpwi r9, 1 cmpwi r9, 1
li r3, -0x7267 li r3, -0x7267
bgt+ IntReturn bgt IntReturn
; Some breathing room ; Some breathing room
@ -277,7 +277,7 @@ PwrSuspendSystem
lwz r26, KDP.ProcessorInfo + NKProcessorInfo.ProcessorFlags(r1) lwz r26, KDP.ProcessorInfo + NKProcessorInfo.ProcessorFlags(r1)
andi. r26, r26, 1 << NKProcessorInfo.hasL2CR andi. r26, r26, 1 << NKProcessorInfo.hasL2CR
beq- @no_need_to_deactivate_l2 beq @no_need_to_deactivate_l2
mfspr r9, l2cr mfspr r9, l2cr
clrlwi r9, r9, 1 ; unset L2CR[L2E] clrlwi r9, r9, 1 ; unset L2CR[L2E]
mtspr l2cr, r9 mtspr l2cr, r9
@ -299,7 +299,7 @@ PwrSuspendSystem
; Save floats ; Save floats
andi. r8, r11, 0x2000 ; MSR[FP] andi. r8, r11, 0x2000 ; MSR[FP]
beq- @no_save_float beq @no_save_float
mfmsr r8 mfmsr r8
ori r8, r8, 0x2000 ; ensure that MSR bit is set? ori r8, r8, 0x2000 ; ensure that MSR bit is set?
mtmsr r8 mtmsr r8
@ -335,7 +335,7 @@ PwrSuspendSystem
mftbu r8 mftbu r8
lwz r9, NKProcessorState.saveTBU(r16) lwz r9, NKProcessorState.saveTBU(r16)
cmpw r8, r9 cmpw r8, r9
bne+ @tb_retry bne @tb_retry
; Save MSR ; Save MSR
@ -421,7 +421,7 @@ PwrSuspendSystem
addis r8, r8, -0x10 addis r8, r8, -0x10
mr. r9, r9 mr. r9, r9
mtsrin r8, r9 mtsrin r8, r9
bne+ @srin_loop bne @srin_loop
isync isync
@ -446,10 +446,10 @@ PwrSuspendSystem
lwz r26, KDP.ProcessorInfo + NKProcessorInfo.ProcessorFlags(r1) lwz r26, KDP.ProcessorInfo + NKProcessorInfo.ProcessorFlags(r1)
andi. r26, r26, 1 << NKProcessorInfo.hasL2CR andi. r26, r26, 1 << NKProcessorInfo.hasL2CR
beq- @no_need_to_reactivate_l2 beq @no_need_to_reactivate_l2
lwz r8, KDP.ProcessorInfo + NKProcessorInfo.ProcessorL2DSize(r1) lwz r8, KDP.ProcessorInfo + NKProcessorInfo.ProcessorL2DSize(r1)
mr. r8, r8 mr. r8, r8
beq- @no_need_to_reactivate_l2 beq @no_need_to_reactivate_l2
mfspr r9, hid0 mfspr r9, hid0
rlwinm r9, r9, 0, 12, 10 rlwinm r9, r9, 0, 12, 10
@ -470,7 +470,7 @@ PwrSuspendSystem
@l2_reactivate_loop @l2_reactivate_loop
mfspr r8, l2cr mfspr r8, l2cr
rlwinm. r8, r8, 31, 0, 0 rlwinm. r8, r8, 31, 0, 0
bne+ @l2_reactivate_loop bne @l2_reactivate_loop
mfspr r8, l2cr mfspr r8, l2cr
@ -518,7 +518,7 @@ PwrSuspendSystem
; Load floats ; Load floats
andi. r8, r11, 0x2000 ; MSR[FP] andi. r8, r11, 0x2000 ; MSR[FP]
beq- @no_restore_float beq @no_restore_float
mfmsr r8 mfmsr r8
ori r8, r8, 0x2000 ; ensure that MSR bit is set? ori r8, r8, 0x2000 ; ensure that MSR bit is set?
mtmsr r8 mtmsr r8
@ -677,7 +677,7 @@ ActuallySuspend
mtmsr r8 ; sleep now mtmsr r8 ; sleep now
isync isync
cmpwi r1, 0 cmpwi r1, 0
beq+ @evil_aligned_sleep_loop ; re-sleep until the world is sane? beq @evil_aligned_sleep_loop ; re-sleep until the world is sane?
lwz r0, 0(r9) lwz r0, 0(r9)
andi. r1, r1, 0 andi. r1, r1, 0
b @evil_aligned_sleep_loop ; actually, there is no escape b @evil_aligned_sleep_loop ; actually, there is no escape

View File

@ -65,9 +65,9 @@ CommonPIHPath ; OUTSIDE REFERER
CommonPIHPath_0xc ; OUTSIDE REFERER CommonPIHPath_0xc ; OUTSIDE REFERER
cmpwi cr7, r28, 0 cmpwi cr7, r28, 0
li r31, 0 li r31, 0
blt- cr7, @negative blt cr7, @negative
beq- cr7, @zero_rupt beq cr7, @zero_rupt
ori r28, r28, 0x8000 ori r28, r28, 0x8000
lwz r31, KDP.PostIntMaskInit(r1) lwz r31, KDP.PostIntMaskInit(r1)
@zero_rupt @zero_rupt
@ -76,16 +76,16 @@ CommonPIHPath_0xc ; OUTSIDE REFERER
cmpwi cr1, r27, 0 cmpwi cr1, r27, 0
lwz r29, KDP.ClearIntMaskInit(r1) lwz r29, KDP.ClearIntMaskInit(r1)
bne- @noperf bne @noperf
bne- cr1, @CommonPIHPath_0x78 bne cr1, @CommonPIHPath_0x78
@noperf @noperf
rlwinm. r8, r7, 0, 10, 10 rlwinm. r8, r7, 0, 10, 10
beq- @actual_meat beq @actual_meat
sth r28, 0x0000(r23) sth r28, 0x0000(r23)
or r13, r13, r31 or r13, r13, r31
bgt- cr7, @negative bgt cr7, @negative
and r13, r13, r29 and r13, r13, r29
@negative @negative
@ -103,7 +103,7 @@ CommonPIHPath_0xc ; OUTSIDE REFERER
bl LookupID bl LookupID
cmpwi r9, Notification.kIDClass cmpwi r9, Notification.kIDClass
mr r30, r8 mr r30, r8
bne- @no_handler_notification bne @no_handler_notification
clrlwi r9, r28, 17 clrlwi r9, r28, 17
stw r9, Notification.MsgWord1(r30) stw r9, Notification.MsgWord1(r30)
@ -152,12 +152,12 @@ CommonPIHPath_0xc ; OUTSIDE REFERER
cmpwi r29, 0 cmpwi r29, 0
lhz r16, Task.CPUIndex(r31) lhz r16, Task.CPUIndex(r31)
beq- @task_not_running beq @task_not_running
lhz r17, EWA.CPUIndex(r30) lhz r17, EWA.CPUIndex(r30)
cmpw cr1, r16, r17 cmpw cr1, r16, r17
rlwinm. r8, r28, 0, Task.kFlag26, Task.kFlag26 rlwinm. r8, r28, 0, Task.kFlag26, Task.kFlag26
beq- cr1, @running_on_this_cpu beq cr1, @running_on_this_cpu
bne- @flag_and_run bne @flag_and_run
@running_on_this_cpu @running_on_this_cpu
mr r8, r31 mr r8, r31
@ -169,7 +169,7 @@ CommonPIHPath_0xc ; OUTSIDE REFERER
RemoveFromList r16, scratch1=r17, scratch2=r18 RemoveFromList r16, scratch1=r17, scratch2=r18
lbz r17, Task.Timer + Timer.Byte3(r31) lbz r17, Task.Timer + Timer.Byte3(r31)
cmpwi r17, 1 cmpwi r17, 1
bne- @task_timer_not_in_use bne @task_timer_not_in_use
addi r8, r31, Task.Timer addi r8, r31, Task.Timer
bl DequeueTimer bl DequeueTimer
@task_timer_not_in_use @task_timer_not_in_use
@ -202,8 +202,8 @@ CommonPIHPath_0xc ; OUTSIDE REFERER
KCPropogateExternalInterrupt ; OUTSIDE REFERER KCPropogateExternalInterrupt ; OUTSIDE REFERER
rlwinm. r8, r7, 0, 10, 10 rlwinm. r8, r7, 0, 10, 10
cmplwi cr1, r3, 7 cmplwi cr1, r3, 7
bne- @notthegumdropbuttons bne @notthegumdropbuttons
bgt- cr1, @too_high bgt cr1, @too_high
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9 _Lock PSA.PIHLock, scratch1=r8, scratch2=r9
@ -213,7 +213,7 @@ KCPropogateExternalInterrupt ; OUTSIDE REFERER
; r28 = max(current level, desired level) ; r28 = max(current level, desired level)
cmpw r3, r28 cmpw r3, r28
ble- @desired_is_lower ble @desired_is_lower
mr r28, r3 mr r28, r3
@desired_is_lower @desired_is_lower
@ -300,7 +300,7 @@ PDM_PIH
mfsprg r30, 3 mfsprg r30, 3
bne- @nocount bne @nocount
lwz r21, KDP.NanoKernelInfo + NKNanoKernelInfo.ExternalIntCount(r1) lwz r21, KDP.NanoKernelInfo + NKNanoKernelInfo.ExternalIntCount(r1)
addi r21, r21, 0x01 addi r21, r21, 0x01
stw r21, KDP.NanoKernelInfo + NKNanoKernelInfo.ExternalIntCount(r1) stw r21, KDP.NanoKernelInfo + NKNanoKernelInfo.ExternalIntCount(r1)
@ -377,7 +377,7 @@ PBX_PIH
addi r9, r1, -0x750 addi r9, r1, -0x750
andis. r8, r11, 0x02 andis. r8, r11, 0x02
mfsprg r30, 3 mfsprg r30, 3
bne- PBX_PIH_0x38 bne PBX_PIH_0x38
lwz r21, 0x0e80(r1) lwz r21, 0x0e80(r1)
addi r21, r21, 0x01 addi r21, r21, 0x01
stw r21, 0x0e80(r1) stw r21, 0x0e80(r1)
@ -441,7 +441,7 @@ GazellePIH
addi r9, r1, -0x750 addi r9, r1, -0x750
andis. r8, r11, 0x02 andis. r8, r11, 0x02
mfsprg r30, 3 mfsprg r30, 3
bne- GazellePIH_0x38 bne GazellePIH_0x38
lwz r21, 0x0e80(r1) lwz r21, 0x0e80(r1)
addi r21, r21, 0x01 addi r21, r21, 0x01
stw r21, 0x0e80(r1) stw r21, 0x0e80(r1)
@ -485,18 +485,18 @@ GazellePIH_0x38
isync isync
andis. r28, r23, 0x10 andis. r28, r23, 0x10
li r28, 0x07 li r28, 0x07
bne- GazellePIH_0x104 bne GazellePIH_0x104
rlwinm r28, r23, 0, 15, 16 rlwinm r28, r23, 0, 15, 16
rlwimi. r28, r23, 0, 22, 31 rlwimi. r28, r23, 0, 22, 31
li r28, 0x04 li r28, 0x04
bne- GazellePIH_0x104 bne GazellePIH_0x104
andis. r28, r23, 0x5fca andis. r28, r23, 0x5fca
rlwimi. r28, r23, 0, 17, 20 rlwimi. r28, r23, 0, 17, 20
li r28, 0x02 li r28, 0x02
bne- GazellePIH_0x104 bne GazellePIH_0x104
andis. r28, r23, 0x04 andis. r28, r23, 0x04
li r28, 0x01 li r28, 0x01
bne- GazellePIH_0x104 bne GazellePIH_0x104
li r28, 0x00 li r28, 0x00
GazellePIH_0x104 GazellePIH_0x104
@ -529,7 +529,7 @@ TNT_PIH
addi r9, r1, -0x750 addi r9, r1, -0x750
andis. r8, r11, 0x02 andis. r8, r11, 0x02
mfsprg r30, 3 mfsprg r30, 3
bne- TNT_PIH_0x38 bne TNT_PIH_0x38
lwz r21, 0x0e80(r1) lwz r21, 0x0e80(r1)
addi r21, r21, 0x01 addi r21, r21, 0x01
stw r21, 0x0e80(r1) stw r21, 0x0e80(r1)
@ -562,18 +562,18 @@ TNT_PIH_0x38
isync isync
rlwinm. r28, r23, 0, 11, 11 rlwinm. r28, r23, 0, 11, 11
li r28, 0x07 li r28, 0x07
bne- TNT_PIH_0xd8 bne TNT_PIH_0xd8
rlwinm r28, r23, 0, 15, 16 rlwinm r28, r23, 0, 15, 16
rlwimi. r28, r23, 0, 21, 31 rlwimi. r28, r23, 0, 21, 31
li r28, 0x04 li r28, 0x04
bne- TNT_PIH_0xd8 bne TNT_PIH_0xd8
rlwinm. r28, r23, 0, 17, 17 rlwinm. r28, r23, 0, 17, 17
li r28, 0x03 li r28, 0x03
bne- TNT_PIH_0xd8 bne TNT_PIH_0xd8
andis. r28, r23, 0x7fea andis. r28, r23, 0x7fea
rlwimi. r28, r23, 0, 18, 19 rlwimi. r28, r23, 0, 18, 19
li r28, 0x02 li r28, 0x02
bne- TNT_PIH_0xd8 bne TNT_PIH_0xd8
rlwinm. r28, r23, 14, 31, 31 rlwinm. r28, r23, 14, 31, 31
TNT_PIH_0xd8 TNT_PIH_0xd8
@ -605,7 +605,7 @@ GossamerPIH
addi r9, r1, -0x750 addi r9, r1, -0x750
andis. r8, r11, 0x02 andis. r8, r11, 0x02
mfsprg r30, 3 mfsprg r30, 3
bne- GossamerPIH_0x38 bne GossamerPIH_0x38
lwz r21, 0x0e80(r1) lwz r21, 0x0e80(r1)
addi r21, r21, 0x01 addi r21, r21, 0x01
stw r21, 0x0e80(r1) stw r21, 0x0e80(r1)
@ -648,24 +648,24 @@ GossamerPIH_0x38
isync isync
rlwinm. r28, r23, 0, 11, 11 rlwinm. r28, r23, 0, 11, 11
li r28, 0x07 li r28, 0x07
bne- GossamerPIH_0x118 bne GossamerPIH_0x118
rlwinm r28, r23, 0, 15, 16 rlwinm r28, r23, 0, 15, 16
rlwimi. r28, r23, 0, 22, 31 rlwimi. r28, r23, 0, 22, 31
li r28, 0x04 li r28, 0x04
bne- GossamerPIH_0x118 bne GossamerPIH_0x118
clrlwi. r28, r24, 0x1e clrlwi. r28, r24, 0x1e
li r28, 0x04 li r28, 0x04
bne- GossamerPIH_0x118 bne GossamerPIH_0x118
rlwinm. r28, r24, 0, 21, 21 rlwinm. r28, r24, 0, 21, 21
li r28, 0x03 li r28, 0x03
bne- GossamerPIH_0x118 bne GossamerPIH_0x118
andis. r28, r23, 0x3fea andis. r28, r23, 0x3fea
rlwimi. r28, r23, 0, 17, 20 rlwimi. r28, r23, 0, 17, 20
li r28, 0x02 li r28, 0x02
bne- GossamerPIH_0x118 bne GossamerPIH_0x118
rlwinm. r28, r24, 0, 20, 20 rlwinm. r28, r24, 0, 20, 20
li r28, 0x01 li r28, 0x01
bne- GossamerPIH_0x118 bne GossamerPIH_0x118
rlwinm. r28, r23, 14, 31, 31 rlwinm. r28, r23, 14, 31, 31
GossamerPIH_0x118 GossamerPIH_0x118
@ -698,7 +698,7 @@ NewWorldPowerBookPIH
addi r9, r1, -0x750 addi r9, r1, -0x750
andis. r8, r11, 0x02 andis. r8, r11, 0x02
mfsprg r30, 3 mfsprg r30, 3
bne- NewWorldPowerBookPIH_0x38 bne NewWorldPowerBookPIH_0x38
lwz r21, 0x0e80(r1) lwz r21, 0x0e80(r1)
addi r21, r21, 0x01 addi r21, r21, 0x01
stw r21, 0x0e80(r1) stw r21, 0x0e80(r1)
@ -738,13 +738,13 @@ NewWorldPowerBookPIH_0x38
NewWorldPowerBookPIH_0xb0 NewWorldPowerBookPIH_0xb0
lwz r26, 0x001c(r25) lwz r26, 0x001c(r25)
and. r26, r24, r26 and. r26, r24, r26
bne- NewWorldPowerBookPIH_0xd4 bne NewWorldPowerBookPIH_0xd4
lwzu r26, -0x0004(r25) lwzu r26, -0x0004(r25)
and. r26, r23, r26 and. r26, r23, r26
bne- NewWorldPowerBookPIH_0xd4 bne NewWorldPowerBookPIH_0xd4
addi r28, r28, -0x01 addi r28, r28, -0x01
cmplwi r28, 0x00 cmplwi r28, 0x00
bne+ NewWorldPowerBookPIH_0xb0 bne NewWorldPowerBookPIH_0xb0
NewWorldPowerBookPIH_0xd4 NewWorldPowerBookPIH_0xd4
mtsrin r21, r22 mtsrin r21, r22
@ -775,7 +775,7 @@ CordycepsPIH
addi r9, r1, -0x750 addi r9, r1, -0x750
andis. r8, r11, 0x02 andis. r8, r11, 0x02
mfsprg r30, 3 mfsprg r30, 3
bne- CordycepsPIH_0x38 bne CordycepsPIH_0x38
lwz r21, 0x0e80(r1) lwz r21, 0x0e80(r1)
addi r21, r21, 0x01 addi r21, r21, 0x01
stw r21, 0x0e80(r1) stw r21, 0x0e80(r1)
@ -839,7 +839,7 @@ NewWorldPIH
addi r9, r1, -0x750 addi r9, r1, -0x750
andis. r8, r11, 0x02 andis. r8, r11, 0x02
mfsprg r30, 3 mfsprg r30, 3
bne- NewWorldPIH_0x38 bne NewWorldPIH_0x38
lwz r21, 0x0e80(r1) lwz r21, 0x0e80(r1)
addi r21, r21, 0x01 addi r21, r21, 0x01
stw r21, 0x0e80(r1) stw r21, 0x0e80(r1)
@ -860,8 +860,8 @@ NewWorldPIH_0x38
isync isync
cmpwi cr1, r27, 0x00 cmpwi cr1, r27, 0x00
andis. r26, r11, 0x02 andis. r26, r11, 0x02
beq- cr1, NewWorldPIH_0x23c beq cr1, NewWorldPIH_0x23c
beq- NewWorldPIH_0x150 beq NewWorldPIH_0x150
lbz r29, 0x0f93(r20) lbz r29, 0x0f93(r20)
stb r28, 0x0f93(r20) stb r28, 0x0f93(r20)
addi r26, r1, 0x912 addi r26, r1, 0x912
@ -869,7 +869,7 @@ NewWorldPIH_0x38
cmplwi r27, 0x01 cmplwi r27, 0x01
bne+ cr1, NewWorldPIH_0xa8 bne+ cr1, NewWorldPIH_0xa8
addi r27, r27, -0x01 addi r27, r27, -0x01
ble- NewWorldPIH_0x1fc ble NewWorldPIH_0x1fc
lbzx r26, r26, r27 lbzx r26, r26, r27
lbz r28, 0x3f00(r26) lbz r28, 0x3f00(r26)
b NewWorldPIH_0x1fc b NewWorldPIH_0x1fc
@ -877,7 +877,7 @@ NewWorldPIH_0x38
NewWorldPIH_0xa8 NewWorldPIH_0xa8
cmplwi r27, 0x01 cmplwi r27, 0x01
addi r27, r27, -0x01 addi r27, r27, -0x01
ble- NewWorldPIH_0x1fc ble NewWorldPIH_0x1fc
add r26, r26, r27 add r26, r26, r27
addi r27, r20, 0xf93 addi r27, r20, 0xf93
lbz r24, 0x0000(r26) lbz r24, 0x0000(r26)
@ -886,8 +886,8 @@ NewWorldPIH_0xc0
lbzu r28, -0x0001(r27) lbzu r28, -0x0001(r27)
cmpw r24, r28 cmpw r24, r28
cmpwi cr1, r28, 0xfe cmpwi cr1, r28, 0xfe
beq- NewWorldPIH_0xdc beq NewWorldPIH_0xdc
bne+ cr1, NewWorldPIH_0xc0 bne cr1, NewWorldPIH_0xc0
li r28, -0x01 li r28, -0x01
b NewWorldPIH_0x1fc b NewWorldPIH_0x1fc
@ -936,8 +936,8 @@ NewWorldPIH_0x150
cmplwi r26, 0x40 cmplwi r26, 0x40
cmplwi cr1, r26, 0x41 cmplwi cr1, r26, 0x41
li r29, 0x00 li r29, 0x00
beq- NewWorldPIH_0x208 beq NewWorldPIH_0x208
bge- cr1, NewWorldPIH_0x218 bge cr1, NewWorldPIH_0x218
cmplw r26, r27 cmplw r26, r27
lis r27, 0x02 lis r27, 0x02
ori r27, r27, 0xb0 ori r27, r27, 0xb0
@ -1027,7 +1027,7 @@ UnknownPIH
addi r9, r1, -0x750 addi r9, r1, -0x750
andis. r8, r11, 0x02 andis. r8, r11, 0x02
mfsprg r30, 3 mfsprg r30, 3
bne- UnknownPIH_0x38 bne UnknownPIH_0x38
lwz r21, 0x0e80(r1) lwz r21, 0x0e80(r1)
addi r21, r21, 0x01 addi r21, r21, 0x01
stw r21, 0x0e80(r1) stw r21, 0x0e80(r1)
@ -1048,10 +1048,10 @@ UnknownPIH_0x38
isync isync
cmpwi cr1, r27, 0x00 cmpwi cr1, r27, 0x00
andis. r26, r11, 0x02 andis. r26, r11, 0x02
beq- cr1, UnknownPIH_0x23c beq cr1, UnknownPIH_0x23c
beq- UnknownPIH_0x170 beq UnknownPIH_0x170
cmplwi r27, 0x01 cmplwi r27, 0x01
ble- UnknownPIH_0x1f8 ble UnknownPIH_0x1f8
addi r27, r27, -0x01 addi r27, r27, -0x01
addi r26, r1, 0x912 addi r26, r1, 0x912
add r26, r26, r27 add r26, r26, r27
@ -1068,7 +1068,7 @@ UnknownPIH_0xac
lis r28, -0x8000 lis r28, -0x8000
srw r28, r28, r24 srw r28, r28, r24
and. r27, r27, r28 and. r27, r27, r28
bne- UnknownPIH_0xc8 bne UnknownPIH_0xc8
li r28, -0x01 li r28, -0x01
b UnknownPIH_0x1f8 b UnknownPIH_0x1f8
@ -1094,7 +1094,7 @@ UnknownPIH_0xf4
addi r26, r26, -0x01 addi r26, r26, -0x01
lbz r26, 0x0000(r26) lbz r26, 0x0000(r26)
cmpwi r26, 0xff cmpwi r26, 0xff
beq- UnknownPIH_0x114 beq UnknownPIH_0x114
b UnknownPIH_0x118 b UnknownPIH_0x118
UnknownPIH_0x114 UnknownPIH_0x114
@ -1110,7 +1110,7 @@ UnknownPIH_0x118
stwx r28, r22, r27 stwx r28, r22, r27
eieio eieio
cmpwi r26, 0x800 cmpwi r26, 0x800
beq- UnknownPIH_0x158 beq UnknownPIH_0x158
lis r28, 0x01 lis r28, 0x01
ori r28, r28, 0x00 ori r28, r28, 0x00
rlwinm r27, r26, 5, 16, 31 rlwinm r27, r26, 5, 16, 31
@ -1138,8 +1138,8 @@ UnknownPIH_0x170
clrlwi r26, r26, 0x14 clrlwi r26, r26, 0x14
cmplwi r26, 0x31 cmplwi r26, 0x31
cmplwi cr1, r26, 0x28 cmplwi cr1, r26, 0x28
beq- UnknownPIH_0x204 beq UnknownPIH_0x204
bge- cr1, UnknownPIH_0x214 bge cr1, UnknownPIH_0x214
rlwinm r27, r26, 5, 16, 31 rlwinm r27, r26, 5, 16, 31
add r28, r28, r27 add r28, r28, r27
lwbrx r28, r22, r28 lwbrx r28, r22, r28

View File

@ -49,4 +49,4 @@ OverrideProcessorInfo
subic. r9, r9, 4 subic. r9, r9, 4
lwzx r12, r11, r9 lwzx r12, r11, r9
stwx r12, r10, r9 stwx r12, r10, r9
bgt+ @loop bgt @loop

View File

@ -17,7 +17,7 @@ Local_Panic set *
kcRTASDispatch ; OUTSIDE REFERER kcRTASDispatch ; OUTSIDE REFERER
lwz r8, 0x0908(r1) lwz r8, 0x0908(r1)
cmpwi r8, 0x00 cmpwi r8, 0x00
bne- rtas_is_available bne rtas_is_available
li r3, -0x01 li r3, -0x01
b IntReturn b IntReturn
@ -30,7 +30,7 @@ rtas_is_available
lwz r8, EWA.Enables(r1) lwz r8, EWA.Enables(r1)
stw r7, 0x0000(r6) stw r7, 0x0000(r6)
stw r8, 0x0004(r6) stw r8, 0x0004(r6)
bns- cr6, kcRTASDispatch_0x5c bns cr6, kcRTASDispatch_0x5c
stw r17, 0x0024(r6) stw r17, 0x0024(r6)
stw r20, 0x0028(r6) stw r20, 0x0028(r6)
stw r21, 0x002c(r6) stw r21, 0x002c(r6)
@ -46,7 +46,7 @@ kcRTASDispatch_0x5c
mfctr r8 mfctr r8
stw r10, 0x00fc(r6) stw r10, 0x00fc(r6)
stw r8, 0x00f4(r6) stw r8, 0x00f4(r6)
ble- cr3, kcRTASDispatch_0x8c ble cr3, kcRTASDispatch_0x8c
lwz r8, 0x00c4(r9) lwz r8, 0x00c4(r9)
mfspr r12, mq mfspr r12, mq
mtspr mq, r8 mtspr mq, r8
@ -80,21 +80,21 @@ kcRTASDispatch_0x8c
stw r29, 0x01ec(r6) stw r29, 0x01ec(r6)
stw r30, 0x01f4(r6) stw r30, 0x01f4(r6)
stw r31, 0x01fc(r6) stw r31, 0x01fc(r6)
bnel+ major_0x03e18_0xb4 bnel major_0x03e18_0xb4
stw r11, 0x00a4(r6) stw r11, 0x00a4(r6)
mr r27, r3 mr r27, r3
addi r29, r1, 800 addi r29, r1, 800
bl PagingFunc3 bl PagingFunc3
beql+ Local_Panic beql Local_Panic
rlwimi r3, r31, 0, 0, 19 rlwimi r3, r31, 0, 0, 19
lhz r8, 0x0004(r3) lhz r8, 0x0004(r3)
cmpwi r8, 0x00 cmpwi r8, 0x00
beq- kcRTASDispatch_0x14c beq kcRTASDispatch_0x14c
slwi r8, r8, 2 slwi r8, r8, 2
lwzx r27, r8, r3 lwzx r27, r8, r3
addi r29, r1, 800 addi r29, r1, 800
bl PagingFunc3 bl PagingFunc3
beql+ Local_Panic beql Local_Panic
lwzx r9, r8, r3 lwzx r9, r8, r3
rlwimi r9, r31, 0, 0, 19 rlwimi r9, r31, 0, 0, 19
stwx r9, r8, r3 stwx r9, r8, r3
@ -126,7 +126,7 @@ kcRTASDispatch_0x190
dcbf r29, r28 dcbf r29, r28
sync sync
icbi r29, r28 icbi r29, r28
bge+ kcRTASDispatch_0x190 bge kcRTASDispatch_0x190
sync sync
isync isync
lwz r8, 0x0000(r6) lwz r8, 0x0000(r6)
@ -142,7 +142,7 @@ kcRTASDispatch_0x190
lwz r8, 0x00f4(r6) lwz r8, 0x00f4(r6)
lwz r10, 0x00fc(r6) lwz r10, 0x00fc(r6)
mtctr r8 mtctr r8
bnel+ major_0x03e18_0x8 bnel major_0x03e18_0x8
lwz r8, 0x010c(r6) lwz r8, 0x010c(r6)
stw r8, 0x0004(r1) stw r8, 0x0004(r1)
lwz r2, 0x0114(r6) lwz r2, 0x0114(r6)

View File

@ -25,7 +25,7 @@ InitReplacement
@wipeloop @wipeloop
subic. r12, r12, 4 subic. r12, r12, 4
stwx r0, r13, r12 stwx r0, r13, r12
bgt+ @wipeloop bgt @wipeloop
; Copy the old KDP to r4 + 10 pages. ; Copy the old KDP to r4 + 10 pages.
@ -40,7 +40,7 @@ InitReplacement
subic. r12, r12, 4 subic. r12, r12, 4
lwzx r10, r11, r12 lwzx r10, r11, r12
stwx r10, r1, r12 stwx r10, r1, r12
bgt+ @kdp_copyloop bgt @kdp_copyloop
; IRP goes at the base of the area we were given. ; IRP goes at the base of the area we were given.
@ -69,7 +69,7 @@ InitReplacement
; discarded ; discarded
bne- @emulatordata_ptr_provided bne @emulatordata_ptr_provided
addi r6, r1, 0x1000 addi r6, r1, 0x1000
@emulatordata_ptr_provided @emulatordata_ptr_provided
@ -150,7 +150,7 @@ InitReplacement
lhz r12, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoVer(r11) lhz r12, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoVer(r11)
cmpwi r12, 0x0101 cmpwi r12, 0x0101
bgt- @replaces_later_than_0101 bgt @replaces_later_than_0101
; ;
lwz r12, KDP.PA_ECB_Old(r1) lwz r12, KDP.PA_ECB_Old(r1)
@ -168,7 +168,7 @@ InitReplacement
; Obviously cannot replace a v2 NanoKernel like myself ; Obviously cannot replace a v2 NanoKernel like myself
cmpwi r12, 0x0200 cmpwi r12, 0x0200
bge- CancelReplacement bge CancelReplacement
lwz r12, EWA.PA_ContextBlock(r11) lwz r12, EWA.PA_ContextBlock(r11)
stw r12, EWA.PA_ContextBlock(r1) stw r12, EWA.PA_ContextBlock(r1)
@ -188,7 +188,7 @@ InitReplacement
lwz r10, 0x05b4(r11) lwz r10, 0x05b4(r11)
cmpw r12, r10 cmpw r12, r10
beq- replace_old_kernel_0x198 beq replace_old_kernel_0x198
stw r12, 0x05b4(r1) stw r12, 0x05b4(r1)
stw r0, 0x06b4(r1) stw r0, 0x06b4(r1)
lwz r10, 0x05b0(r11) lwz r10, 0x05b0(r11)
@ -242,7 +242,7 @@ replace_old_kernel_0x198
@wipeloop @wipeloop
subic. r12, r12, 4 subic. r12, r12, 4
stwx r0, r10, r12 stwx r0, r10, r12
bgt+ @wipeloop bgt @wipeloop
@ -292,7 +292,7 @@ replace_old_kernel_0x198
lhz r10, KDP.InfoRecord + InfoRecord.NKProcessorInfoVer(r1) lhz r10, KDP.InfoRecord + InfoRecord.NKProcessorInfoVer(r1)
cmplwi r10, 0x0112 cmplwi r10, 0x0112
bge- @ProcessorInfo_version_already_current bge @ProcessorInfo_version_already_current
li r12, 160 li r12, 160
li r10, 0x0112 li r10, 0x0112
@ -359,7 +359,7 @@ replace_old_kernel_0x198
endif endif
cmplwi r23, 0x27f3 ; set bit 27 on ROM 2.7f3 or later cmplwi r23, 0x27f3 ; set bit 27 on ROM 2.7f3 or later
blt- @oldrom ; means later than PDM and Cordyceps blt @oldrom ; means later than PDM and Cordyceps
_bset r8, r8, 27 _bset r8, r8, 27
@oldrom @oldrom
@ -429,7 +429,7 @@ MoveRecord ; OUTSIDE REFERER
subf r9, r22, r9 ; r9 = offset of old address in irp subf r9, r22, r9 ; r9 = offset of old address in irp
cmplwi r9, 0x1000 cmplwi r9, 0x1000
bge- @kdp bge @kdp
add r21, r9, r11 ; r21 = the old address if it had been in KDP instead? add r21, r9, r11 ; r21 = the old address if it had been in KDP instead?
@ -444,10 +444,10 @@ MoveRecord ; OUTSIDE REFERER
; ;
@loop @loop
subic. r12, r12, 4 subic. r12, r12, 4
blt- @exit_loop blt @exit_loop
lwzx r9, r21, r12 lwzx r9, r21, r12
stwx r9, r10, r12 stwx r9, r10, r12
bgt+ @loop bgt @loop
@exit_loop @exit_loop
lwz r22, KDP.PA_ConfigInfo(r1) lwz r22, KDP.PA_ConfigInfo(r1)
@ -456,7 +456,7 @@ MoveRecord ; OUTSIDE REFERER
subf r10, r1, r10 subf r10, r1, r10
lisori r21, -9 * 4096 lisori r21, -9 * 4096
cmpw r10, r21 ; if dest is nearer than 9 pages below kdp... cmpw r10, r21 ; if dest is nearer than 9 pages below kdp...
blt- @0x50 blt @0x50
add r10, r10, r22 add r10, r10, r22
blr blr
@0x50 @0x50

File diff suppressed because it is too large Load Diff

View File

@ -29,7 +29,7 @@ InitScreenConsole ; OUTSIDE REFERER
InitScreenConsole_0x18 InitScreenConsole_0x18
cmplw r30, r31 cmplw r30, r31
addi r29, r31, 0x04 addi r29, r31, 0x04
bge- InitScreenConsole_0x2c bge InitScreenConsole_0x2c
stwu r29, -0x1000(r31) stwu r29, -0x1000(r31)
b InitScreenConsole_0x18 b InitScreenConsole_0x18
@ -63,7 +63,7 @@ ScreenConsole_putchar ; OUTSIDE REFERER
addi r30, r30, 0x01 addi r30, r30, 0x01
andi. r29, r30, 0xfff andi. r29, r30, 0xfff
stw r30, -0x0404(r1) stw r30, -0x0404(r1)
bnelr- bnelr
lwz r30, -0x1000(r30) lwz r30, -0x1000(r30)
stw r30, -0x0404(r1) stw r30, -0x0404(r1)
blr blr
@ -83,11 +83,11 @@ ScreenConsole_redraw ; OUTSIDE REFERER
mtsprg 3, r26 mtsprg 3, r26
lwz r26, 0x0edc(r1) lwz r26, 0x0edc(r1)
andi. r26, r26, 0x08 andi. r26, r26, 0x08
beq- major_0x18bec beq major_0x18bec
lwz r14, -0x0404(r1) lwz r14, -0x0404(r1)
lwz r15, -0x0400(r1) lwz r15, -0x0400(r1)
cmpw r14, r15 cmpw r14, r15
beq- major_0x18bec beq major_0x18bec
bl major_0x18c18 bl major_0x18c18
ScreenConsole_redraw_0x40 ScreenConsole_redraw_0x40
@ -107,7 +107,7 @@ ScreenConsole_redraw_0x40
ScreenConsole_redraw_0x74 ScreenConsole_redraw_0x74
cmpw r14, r15 cmpw r14, r15
beq- ScreenConsole_redraw_0x118 beq ScreenConsole_redraw_0x118
lbz r25, 0x0000(r15) lbz r25, 0x0000(r15)
addi r15, r15, 0x01 addi r15, r15, 0x01
andi. r17, r15, 0xfff andi. r17, r15, 0xfff
@ -117,27 +117,27 @@ ScreenConsole_redraw_0x74
ScreenConsole_redraw_0x90 ScreenConsole_redraw_0x90
cmplwi r25, 0x0d cmplwi r25, 0x0d
cmplwi cr1, r25, 0x0a cmplwi cr1, r25, 0x0a
beq+ ScreenConsole_redraw_0x74 beq ScreenConsole_redraw_0x74
beq- cr1, ScreenConsole_redraw_0xc0 beq cr1, ScreenConsole_redraw_0xc0
cmpwi r25, 0x00 cmpwi r25, 0x00
cmpwi cr1, r25, 0x07 cmpwi cr1, r25, 0x07
beq+ ScreenConsole_redraw_0x74 beq ScreenConsole_redraw_0x74
beq- cr1, ScreenConsole_redraw_0xe4 beq cr1, ScreenConsole_redraw_0xe4
bl major_0x18e54 bl major_0x18e54
lhz r17, -0x0358(r1) lhz r17, -0x0358(r1)
cmpw r9, r17 cmpw r9, r17
blt+ ScreenConsole_redraw_0x74 blt ScreenConsole_redraw_0x74
ScreenConsole_redraw_0xc0 ScreenConsole_redraw_0xc0
cmpwi r16, 0x00 cmpwi r16, 0x00
bne- ScreenConsole_redraw_0xcc bne ScreenConsole_redraw_0xcc
mr r16, r15 mr r16, r15
ScreenConsole_redraw_0xcc ScreenConsole_redraw_0xcc
bl funny_thing bl funny_thing
lhz r17, -0x0356(r1) lhz r17, -0x0356(r1)
cmpw r10, r17 cmpw r10, r17
blt+ ScreenConsole_redraw_0x74 blt ScreenConsole_redraw_0x74
stw r16, -0x0400(r1) stw r16, -0x0400(r1)
b ScreenConsole_redraw_0x40 b ScreenConsole_redraw_0x40
@ -145,7 +145,7 @@ ScreenConsole_redraw_0xe4
lhz r17, -0x0356(r1) lhz r17, -0x0356(r1)
addi r17, r17, -0x01 addi r17, r17, -0x01
cmpw r10, r17 cmpw r10, r17
blt+ ScreenConsole_redraw_0x74 blt ScreenConsole_redraw_0x74
lwz r17, -0x0438(r1) lwz r17, -0x0438(r1)
slwi r25, r17, 2 slwi r25, r17, 2
add r25, r25, r17 add r25, r25, r17
@ -155,7 +155,7 @@ ScreenConsole_redraw_0xe4
ScreenConsole_redraw_0x108 ScreenConsole_redraw_0x108
mfspr r25, dec mfspr r25, dec
subf. r25, r17, r25 subf. r25, r17, r25
bge+ ScreenConsole_redraw_0x108 bge ScreenConsole_redraw_0x108
b ScreenConsole_redraw_0x74 b ScreenConsole_redraw_0x74
ScreenConsole_redraw_0x118 ScreenConsole_redraw_0x118
@ -163,7 +163,7 @@ ScreenConsole_redraw_0x118
mfspr r31, pvr mfspr r31, pvr
rlwinm. r31, r31, 0, 0, 14 rlwinm. r31, r31, 0, 0, 14
li r31, 0x00 li r31, 0x00
bne- ScreenConsole_redraw_0x140 bne ScreenConsole_redraw_0x140
mtspr ibat3l, r31 mtspr ibat3l, r31
isync isync
mtspr ibat3u, r18 mtspr ibat3u, r18
@ -195,7 +195,7 @@ major_0x18bec ; OUTSIDE REFERER
major_0x18c08 ; OUTSIDE REFERER major_0x18c08 ; OUTSIDE REFERER
mfsrin r31, r27 mfsrin r31, r27
cmpwi r31, 0x00 cmpwi r31, 0x00
beqlr- beqlr
b PagingFunc4 b PagingFunc4
@ -204,14 +204,14 @@ major_0x18c18 ; OUTSIDE REFERER
mflr r13 mflr r13
lwz r27, -0x08f8(r1) lwz r27, -0x08f8(r1)
cmpwi r27, 0x00 cmpwi r27, 0x00
bne- major_0x18c18_0x40 bne major_0x18c18_0x40
lwz r27, 0x0630(r1) lwz r27, 0x0630(r1)
lhz r31, 0x0378(r27) lhz r31, 0x0378(r27)
cmpwi r31, 0x00 cmpwi r31, 0x00
beq- major_0x18c18_0x40 beq major_0x18c18_0x40
lwz r31, 0x037c(r27) lwz r31, 0x037c(r27)
cmpwi r31, 0x00 cmpwi r31, 0x00
beq- major_0x18c18_0x40 beq major_0x18c18_0x40
stw r31, -0x08f8(r1) stw r31, -0x08f8(r1)
lhz r31, 0x0384(r27) lhz r31, 0x0384(r27)
sth r31, -0x08f4(r1) sth r31, -0x08f4(r1)
@ -221,33 +221,33 @@ major_0x18c18 ; OUTSIDE REFERER
major_0x18c18_0x40 major_0x18c18_0x40
li r27, 0x8a4 li r27, 0x8a4
bl major_0x18c08 bl major_0x18c08
beq- major_0x18c18_0xe0 beq major_0x18c18_0xe0
rlwimi. r27, r31, 0, 0, 19 rlwimi. r27, r31, 0, 0, 19
ble- major_0x18c18_0xe0 ble major_0x18c18_0xe0
lwz r27, 0x0000(r27) lwz r27, 0x0000(r27)
cmpwi r27, 0x00 cmpwi r27, 0x00
ble- major_0x18c18_0xe0 ble major_0x18c18_0xe0
bl major_0x18c08 bl major_0x18c08
beq- major_0x18c18_0xe0 beq major_0x18c18_0xe0
rlwimi r27, r31, 0, 0, 19 rlwimi r27, r31, 0, 0, 19
lwz r27, 0x0000(r27) lwz r27, 0x0000(r27)
cmpwi r27, 0x00 cmpwi r27, 0x00
ble- major_0x18c18_0xe0 ble major_0x18c18_0xe0
addi r27, r27, 0x16 addi r27, r27, 0x16
bl major_0x18c08 bl major_0x18c08
beq- major_0x18c18_0xe0 beq major_0x18c18_0xe0
rlwimi r27, r31, 0, 0, 19 rlwimi r27, r31, 0, 0, 19
lwz r27, 0x0000(r27) lwz r27, 0x0000(r27)
cmpwi r27, 0x00 cmpwi r27, 0x00
ble- major_0x18c18_0xe0 ble major_0x18c18_0xe0
bl major_0x18c08 bl major_0x18c08
beq- major_0x18c18_0xe0 beq major_0x18c18_0xe0
rlwimi r27, r31, 0, 0, 19 rlwimi r27, r31, 0, 0, 19
lwz r27, 0x0000(r27) lwz r27, 0x0000(r27)
cmpwi r27, 0x00 cmpwi r27, 0x00
ble- major_0x18c18_0xe0 ble major_0x18c18_0xe0
bl major_0x18c08 bl major_0x18c08
beq- major_0x18c18_0xe0 beq major_0x18c18_0xe0
rlwimi r27, r31, 0, 0, 19 rlwimi r27, r31, 0, 0, 19
lwz r3, 0x0000(r27) lwz r3, 0x0000(r27)
lhz r5, 0x0004(r27) lhz r5, 0x0004(r27)
@ -255,7 +255,7 @@ major_0x18c18_0x40
lhz r6, 0x0020(r27) lhz r6, 0x0020(r27)
srwi r6, r6, 3 srwi r6, r6, 3
cmplwi r6, 0x08 cmplwi r6, 0x08
bgt- major_0x18c18_0xe0 bgt major_0x18c18_0xe0
stw r3, -0x08f8(r1) stw r3, -0x08f8(r1)
sth r5, -0x08f4(r1) sth r5, -0x08f4(r1)
sth r6, -0x08f2(r1) sth r6, -0x08f2(r1)
@ -265,7 +265,7 @@ major_0x18c18_0xe0
lhz r5, -0x08f4(r1) lhz r5, -0x08f4(r1)
lhz r6, -0x08f2(r1) lhz r6, -0x08f2(r1)
cmpwi r3, 0x00 cmpwi r3, 0x00
bne- major_0x18d5c bne major_0x18d5c
b major_0x18bec b major_0x18bec
@ -297,9 +297,9 @@ major_0x18c18_0xe0
major_0x18d5c ; OUTSIDE REFERER major_0x18d5c ; OUTSIDE REFERER
cmpwi cr4, r6, 0x02 cmpwi cr4, r6, 0x02
bl major_0x19ab0 bl major_0x19ab0
blt- cr4, major_0x18d5c_0x18 blt cr4, major_0x18d5c_0x18
bl major_0x19b00 bl major_0x19b00
beq- cr4, major_0x18d5c_0x18 beq cr4, major_0x18d5c_0x18
bl load_log_colours bl load_log_colours
major_0x18d5c_0x18 major_0x18d5c_0x18
@ -307,7 +307,7 @@ major_0x18d5c_0x18
mfspr r31, pvr mfspr r31, pvr
rlwinm. r31, r31, 0, 0, 14 rlwinm. r31, r31, 0, 0, 14
li r31, 0x00 li r31, 0x00
bne- major_0x18d5c_0x3c bne major_0x18d5c_0x3c
mfspr r19, ibat3l mfspr r19, ibat3l
mfspr r18, ibat3u mfspr r18, ibat3u
mtspr ibat3l, r31 mtspr ibat3l, r31
@ -321,7 +321,7 @@ major_0x18d5c_0x3c
major_0x18d5c_0x48 major_0x18d5c_0x48
isync isync
rlwinm r29, r3, 0, 0, 7 rlwinm r29, r3, 0, 0, 7
beq- major_0x18d5c_0x70 beq major_0x18d5c_0x70
li r30, 0x7e li r30, 0x7e
or r30, r30, r29 or r30, r30, r29
li r31, 0x32 li r31, 0x32
@ -367,8 +367,8 @@ major_0x18e24_0x4
lbz r25, 0x0000(r21) lbz r25, 0x0000(r21)
cmplwi r25, 0x00 cmplwi r25, 0x00
addi r21, r21, 0x01 addi r21, r21, 0x01
beq- major_0x18e24_0x28 beq major_0x18e24_0x28
bge+ cr1, major_0x18e24_0x4 bge cr1, major_0x18e24_0x4
bl major_0x18e54 bl major_0x18e54
b major_0x18e24_0x4 b major_0x18e24_0x4
@ -397,12 +397,12 @@ major_0x18e54 ; OUTSIDE REFERER
add r7, r7, r27 add r7, r7, r27
add r7, r7, r28 add r7, r7, r28
subf. r27, r3, r7 subf. r27, r3, r7
blt- major_0x18e54_0x174 blt major_0x18e54_0x174
li r8, 0x00 li r8, 0x00
major_0x18e54_0x50 major_0x18e54_0x50
beq- cr4, major_0x18e54_0x9c beq cr4, major_0x18e54_0x9c
bgt- cr4, major_0x18e54_0xe0 bgt cr4, major_0x18e54_0xe0
lbz r27, 0x0000(r23) lbz r27, 0x0000(r23)
rlwinm r27, r27, 28, 28, 29 rlwinm r27, r27, 28, 28, 29
lwzx r28, r24, r27 lwzx r28, r24, r27
@ -479,7 +479,7 @@ major_0x18e54_0x160
cmplwi r8, 0x0a cmplwi r8, 0x0a
add r7, r7, r5 add r7, r7, r5
addi r23, r23, 0x100 addi r23, r23, 0x100
blt+ major_0x18e54_0x50 blt major_0x18e54_0x50
major_0x18e54_0x174 major_0x18e54_0x174
addi r9, r9, 0x01 addi r9, r9, 0x01
@ -501,13 +501,13 @@ funny_thing_0xc
funny_thing_0x10 funny_thing_0x10
lhz r25, -0x0358(r1) lhz r25, -0x0358(r1)
cmpw r9, r25 cmpw r9, r25
bge- funny_thing_0x28 bge funny_thing_0x28
li r25, 0x20 li r25, 0x20
bl major_0x18e54 bl major_0x18e54
b funny_thing_0x10 b funny_thing_0x10
funny_thing_0x28 funny_thing_0x28
beq- cr2, funny_thing_0x3c beq cr2, funny_thing_0x3c
li r9, 0x00 li r9, 0x00
addi r10, r10, 0x01 addi r10, r10, 0x01
li r25, 0x20 li r25, 0x20

View File

@ -28,7 +28,7 @@ MPGetKernelStateSize
lwz r8, EWA.CPUBase + CPU.LLL + LLL.Freeform(r9) lwz r8, EWA.CPUBase + CPU.LLL + LLL.Freeform(r9)
lwz r9, CoherenceGroup.ScheduledCpuCount(r8) lwz r9, CoherenceGroup.ScheduledCpuCount(r8)
cmpwi r9, 1 cmpwi r9, 1
bgt+ Local_ReturnInsufficientResourcesErrFromMPCall bgt Local_ReturnInsufficientResourcesErrFromMPCall
bl KernelStateSize bl KernelStateSize
@ -50,16 +50,16 @@ MPGetKernelState
lwz r8, EWA.CPUBase + CPU.LLL + LLL.Freeform(r9) lwz r8, EWA.CPUBase + CPU.LLL + LLL.Freeform(r9)
lwz r9, CoherenceGroup.ScheduledCpuCount(r8) lwz r9, CoherenceGroup.ScheduledCpuCount(r8)
cmpwi r9, 1 cmpwi r9, 1
bgt+ Local_ReturnInsufficientResourcesErrFromMPCall bgt Local_ReturnInsufficientResourcesErrFromMPCall
clrlwi. r8, r5, 20 clrlwi. r8, r5, 20
bne+ Local_ReturnParamErrFromMPCall bne Local_ReturnParamErrFromMPCall
bl KernelStateSize bl KernelStateSize
cmpw r3, r8 cmpw r3, r8
blt+ Local_ReturnParamErrFromMPCall blt Local_ReturnParamErrFromMPCall
cmpw r4, r9 cmpw r4, r9
blt+ Local_ReturnParamErrFromMPCall blt Local_ReturnParamErrFromMPCall
bl PagingFlushTLB bl PagingFlushTLB
mfsprg r9, 0 mfsprg r9, 0
@ -73,7 +73,7 @@ MPGetKernelState
mfpvr r8 mfpvr r8
rlwinm. r8, r8, 0, 0, 14 rlwinm. r8, r8, 0, 0, 14
bne- @not_601 bne @not_601
mfspr r8, mq mfspr r8, mq
stw r8, ContextBlock.MQ(r6) stw r8, ContextBlock.MQ(r6)
@not_601 @not_601
@ -87,9 +87,9 @@ MPGetKernelState
lwz r8, EWA.r6(r9) lwz r8, EWA.r6(r9)
stw r5, ContextBlock.r5(r6) stw r5, ContextBlock.r5(r6)
stw r8, ContextBlock.r6(r6) stw r8, ContextBlock.r6(r6)
bnel+ Save_f0_f31 bnel Save_f0_f31
rlwinm. r8, r7, 0, 12, 12 ; flags rlwinm. r8, r7, 0, 12, 12 ; flags
bnel+ Save_v0_v31 bnel Save_v0_v31
lwz r3, ContextBlock.r3(r6) lwz r3, ContextBlock.r3(r6)
lwz r4, ContextBlock.r4(r6) lwz r4, ContextBlock.r4(r6)
@ -99,7 +99,7 @@ MPGetKernelState
mr r27, r5 mr r27, r5
addi r29, r1, 800 addi r29, r1, 800
bl PagingFunc3 bl PagingFunc3
beq+ Local_ReturnInsufficientResourcesErrFromMPCall beq Local_ReturnInsufficientResourcesErrFromMPCall
rlwimi r27, r31, 0, 0, 19 rlwimi r27, r31, 0, 0, 19
mr r17, r27 mr r17, r27
addi r15, r17, 0x34 addi r15, r17, 0x34
@ -109,13 +109,13 @@ MPGetKernelState_0xc8
mr r27, r5 mr r27, r5
addi r29, r1, 800 addi r29, r1, 800
bl PagingFunc3 bl PagingFunc3
beq+ Local_ReturnInsufficientResourcesErrFromMPCall beq Local_ReturnInsufficientResourcesErrFromMPCall
rlwimi r27, r31, 0, 0, 19 rlwimi r27, r31, 0, 0, 19
stwu r27, 0x0004(r15) stwu r27, 0x0004(r15)
addi r3, r3, -0x01 addi r3, r3, -0x01
addi r5, r5, 0x1000 addi r5, r5, 0x1000
cmpwi r3, 0x00 cmpwi r3, 0x00
bge+ MPGetKernelState_0xc8 bge MPGetKernelState_0xc8
addi r15, r15, 0x04 addi r15, r15, 0x04
subf r15, r17, r15 subf r15, r17, r15
stw r15, 0x0034(r17) stw r15, 0x0034(r17)
@ -174,7 +174,7 @@ MPGetKernelState_0x1a4
andi. r19, r18, 0xe00 andi. r19, r18, 0xe00
lhz r16, 0x0002(r30) lhz r16, 0x0002(r30)
cmplwi r19, 0xc00 cmplwi r19, 0xc00
bne- MPGetKernelState_0x1dc bne MPGetKernelState_0x1dc
addi r16, r16, 0x01 addi r16, r16, 0x01
slwi r16, r16, 2 slwi r16, r16, 2
stw r16, 0x0000(r29) stw r16, 0x0000(r29)
@ -186,12 +186,12 @@ MPGetKernelState_0x1a4
MPGetKernelState_0x1dc MPGetKernelState_0x1dc
cmpwi r15, 0x00 cmpwi r15, 0x00
bne- MPGetKernelState_0x1fc bne MPGetKernelState_0x1fc
cmplwi r16, 0xffff cmplwi r16, 0xffff
bne- MPGetKernelState_0x1fc bne MPGetKernelState_0x1fc
addis r31, r31, 0x1000 addis r31, r31, 0x1000
cmpwi r31, 0x00 cmpwi r31, 0x00
bne+ MPGetKernelState_0x1a0 bne MPGetKernelState_0x1a0
b MPGetKernelState_0x204 b MPGetKernelState_0x204
MPGetKernelState_0x1fc MPGetKernelState_0x1fc
@ -211,7 +211,7 @@ MPGetKernelState_0x208
addi r29, r29, 0x0c addi r29, r29, 0x0c
addi r14, r14, 0x01 addi r14, r14, 0x01
cmpwi r19, 0x00 cmpwi r19, 0x00
beq- MPGetKernelState_0x238 beq MPGetKernelState_0x238
add r16, r19, r18 add r16, r19, r18
b MPGetKernelState_0x208 b MPGetKernelState_0x208
@ -221,7 +221,7 @@ MPGetKernelState_0x238
MPGetKernelState_0x240 MPGetKernelState_0x240
cmpw r31, r19 cmpw r31, r19
beq- MPGetKernelState_0x264 beq MPGetKernelState_0x264
li r18, 0x10 li r18, 0x10
stw r18, 0x0000(r29) stw r18, 0x0000(r29)
stw r31, 0x0004(r29) stw r31, 0x0004(r29)
@ -246,7 +246,7 @@ MPGetKernelState_0x270
addi r30, r30, 0x0c addi r30, r30, 0x0c
addi r14, r14, -0x01 addi r14, r14, -0x01
cmpwi r14, 0x00 cmpwi r14, 0x00
bne+ MPGetKernelState_0x270 bne MPGetKernelState_0x270
subf r8, r17, r29 subf r8, r17, r29
stw r8, 0x0020(r17) stw r8, 0x0020(r17)
lwz r24, 0x001c(r17) lwz r24, 0x001c(r17)
@ -308,7 +308,7 @@ RestoreKernelState_0x38
addi r30, r30, 0x0c addi r30, r30, 0x0c
addi r14, r14, -0x01 addi r14, r14, -0x01
cmpwi r14, 0x00 cmpwi r14, 0x00
bne+ RestoreKernelState_0x38 bne RestoreKernelState_0x38
lwz r16, 0x0024(r17) lwz r16, 0x0024(r17)
mtsprg 0, r16 mtsprg 0, r16
lwz r8, 0x0028(r17) lwz r8, 0x0028(r17)
@ -340,7 +340,7 @@ RestoreKernelState_0x38
mfpvr r8 mfpvr r8
rlwinm. r8, r8, 0, 0, 14 rlwinm. r8, r8, 0, 0, 14
bne- RestoreKernelState_0xf8 bne RestoreKernelState_0xf8
lwz r8, 0x00c4(r6) lwz r8, 0x00c4(r6)
DIALECT POWER DIALECT POWER
mtmq r8 mtmq r8
@ -364,7 +364,7 @@ RestoreKernelState_0xf8
lwz r29, 0x00d8(r6) lwz r29, 0x00d8(r6)
cmpwi r29, 0x00 cmpwi r29, 0x00
lwz r8, 0x0210(r29) lwz r8, 0x0210(r29)
beq- RestoreKernelState_0x144 beq RestoreKernelState_0x144
mtspr vrsave, r8 mtspr vrsave, r8
RestoreKernelState_0x144 RestoreKernelState_0x144
@ -436,7 +436,7 @@ KernelStateSize
andi. r18, r18, PMDT.TopFieldMask ; r18 = 3b field at top of pageAttr andi. r18, r18, PMDT.TopFieldMask ; r18 = 3b field at top of pageAttr
lhz r16, PMDT.PageCount(r17) ; PageCountMinus1(16b) lhz r16, PMDT.PageCount(r17) ; PageCountMinus1(16b)
cmplwi r18, PMDT.DaddyFlag | PMDT.CountingFlag cmplwi r18, PMDT.DaddyFlag | PMDT.CountingFlag
bne- @entry_seems_blank bne @entry_seems_blank
addi r16, r16, 1 addi r16, r16, 1
add r19, r19, r16 add r19, r19, r16
@ -445,14 +445,14 @@ KernelStateSize
@entry_seems_blank @entry_seems_blank
cmpwi r15, 0 ; if not full-segment, might not be blank? cmpwi r15, 0 ; if not full-segment, might not be blank?
bne- @continue_next_entry bne @continue_next_entry
cmplwi r16, 0xffff cmplwi r16, 0xffff
bne- @continue_next_entry bne @continue_next_entry
; This is the "normal" way to loop to the next segment ; This is the "normal" way to loop to the next segment
addis r31, r31, 0x1000 addis r31, r31, 0x1000
cmpwi r31, 0 cmpwi r31, 0
bne+ @next_segment bne @next_segment
b @exit b @exit
@continue_next_entry @continue_next_entry
@ -467,7 +467,7 @@ KernelStateSize
add r8, r8, r19 add r8, r8, r19
cmpwi r14, 0x00 ; no entries? fail! cmpwi r14, 0x00 ; no entries? fail!
beq+ Local_ReturnInsufficientResourcesErrFromMPCall beq Local_ReturnInsufficientResourcesErrFromMPCall
mulli r9, r14, 12 mulli r9, r14, 12
add r8, r8, r9 ; 12 bytes per SegMap entry add r8, r8, r9 ; 12 bytes per SegMap entry
@ -492,7 +492,7 @@ KernelStateSize
cmpwi r19, 0 ; last segment? cmpwi r19, 0 ; last segment?
add r16, r19, r18 add r16, r19, r18
beq- @exit_pool_counter beq @exit_pool_counter
b @next_pool_segment ; odd... what happened here? b @next_pool_segment ; odd... what happened here?
@exit_pool_counter @exit_pool_counter
@ -504,7 +504,7 @@ KernelStateSize
@next_page_in_freelist @next_page_in_freelist
cmpw r18, r16 cmpw r18, r16
beq- @exit_freelist_counter beq @exit_freelist_counter
addi r9, r9, 16 addi r9, r9, 16
addi r14, r14, 1 addi r14, r14, 1
lwz r18, LLL.Next(r18) lwz r18, LLL.Next(r18)
@ -544,7 +544,7 @@ CoherenceFunc_0x138 ; OUTSIDE REFERER
AnotherCoherenceFunc ; OUTSIDE REFERER AnotherCoherenceFunc ; OUTSIDE REFERER
cmpwi r26, 0x00 cmpwi r26, 0x00
beqlr- beqlr
mflr r22 mflr r22
addi r24, r24, -0x01 addi r24, r24, -0x01
mr r28, r25 mr r28, r25
@ -554,7 +554,7 @@ AnotherCoherenceFunc_0x14
clrlwi r25, r23, 0x14 clrlwi r25, r23, 0x14
subfic r25, r25, 0x1000 subfic r25, r25, 0x1000
cmplw r25, r26 cmplw r25, r26
blt- AnotherCoherenceFunc_0x2c blt AnotherCoherenceFunc_0x2c
mr r25, r26 mr r25, r26
AnotherCoherenceFunc_0x2c AnotherCoherenceFunc_0x2c
@ -566,12 +566,12 @@ AnotherCoherenceFunc_0x2c
AnotherCoherenceFunc_0x3c AnotherCoherenceFunc_0x3c
lbzu r27, 0x0001(r24) lbzu r27, 0x0001(r24)
stbu r27, 0x0001(r23) stbu r27, 0x0001(r23)
bdnz+ AnotherCoherenceFunc_0x3c bdnz AnotherCoherenceFunc_0x3c
bl YetAnotherCoherenceFunc_0x64 bl YetAnotherCoherenceFunc_0x64
subf r26, r25, r26 subf r26, r25, r26
add r28, r28, r25 add r28, r28, r25
cmpwi r26, 0x00 cmpwi r26, 0x00
bne+ AnotherCoherenceFunc_0x14 bne AnotherCoherenceFunc_0x14
mtlr r22 mtlr r22
blr blr
@ -579,7 +579,7 @@ AnotherCoherenceFunc_0x3c
YetAnotherCoherenceFunc ; OUTSIDE REFERER YetAnotherCoherenceFunc ; OUTSIDE REFERER
cmpwi r26, 0x00 cmpwi r26, 0x00
beqlr- beqlr
mr r19, r25 mr r19, r25
mr r20, r26 mr r20, r26
mflr r22 mflr r22
@ -591,7 +591,7 @@ YetAnotherCoherenceFunc_0x1c
clrlwi r24, r23, 0x14 clrlwi r24, r23, 0x14
subfic r24, r24, 0x1000 subfic r24, r24, 0x1000
cmplw r24, r26 cmplw r24, r26
blt- YetAnotherCoherenceFunc_0x34 blt YetAnotherCoherenceFunc_0x34
mr r24, r26 mr r24, r26
YetAnotherCoherenceFunc_0x34 YetAnotherCoherenceFunc_0x34
@ -601,11 +601,11 @@ YetAnotherCoherenceFunc_0x34
YetAnotherCoherenceFunc_0x3c YetAnotherCoherenceFunc_0x3c
lbzu r27, 0x0001(r23) lbzu r27, 0x0001(r23)
stbu r27, 0x0001(r25) stbu r27, 0x0001(r25)
bdnz+ YetAnotherCoherenceFunc_0x3c bdnz YetAnotherCoherenceFunc_0x3c
add r28, r28, r24 add r28, r28, r24
subf r26, r24, r26 subf r26, r24, r26
cmpwi r26, 0x00 cmpwi r26, 0x00
bne+ YetAnotherCoherenceFunc_0x1c bne YetAnotherCoherenceFunc_0x1c
bl YetAnotherCoherenceFunc_0x64 bl YetAnotherCoherenceFunc_0x64
mtlr r22 mtlr r22
blr blr
@ -627,7 +627,7 @@ YetAnotherCoherenceFunc_0x88
icbi 0, r19 icbi 0, r19
add r19, r19, r21 add r19, r19, r21
cmpw r19, r20 cmpw r19, r20
blt+ YetAnotherCoherenceFunc_0x88 blt YetAnotherCoherenceFunc_0x88
sync sync
isync isync
blr blr

File diff suppressed because it is too large Load Diff

View File

@ -15,7 +15,7 @@ Local_Panic set *
MPCall_7 ; OUTSIDE REFERER MPCall_7 ; OUTSIDE REFERER
rlwinm. r8, r5, 0, 31, 28 rlwinm. r8, r5, 0, 31, 28
bne+ ReturnMPCallOOM bne ReturnMPCallOOM
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
@ -23,18 +23,18 @@ MPCall_7 ; OUTSIDE REFERER
bl LookupID bl LookupID
cmpwi r9, Process.kIDClass cmpwi r9, Process.kIDClass
mr r30, r8 mr r30, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
lwz r16, Process.Flags(r30) lwz r16, Process.Flags(r30)
rlwinm. r17, r16, 0, 30, 30 rlwinm. r17, r16, 0, 30, 30
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
; ARG CPUFlags r7, Process *r8 ; ARG CPUFlags r7, Process *r8
bl CreateTask bl CreateTask
; RET Task *r8 ; RET Task *r8
mr. r31, r8 mr. r31, r8
beq+ ReleaseAndScrambleMPCall beq ReleaseAndScrambleMPCall
mfsprg r15, 0 mfsprg r15, 0
@ -66,12 +66,12 @@ MPCall_7 ; OUTSIDE REFERER
lwz r16, Task.Flags(r28) lwz r16, Task.Flags(r28)
rlwinm. r8, r5, 0, 30, 30 rlwinm. r8, r5, 0, 30, 30
beq- @noflag beq @noflag
oris r16, r16, 0x40 ; Task.kFlag9 oris r16, r16, 0x40 ; Task.kFlag9
@noflag @noflag
rlwinm. r8, r5, 0, 29, 29 rlwinm. r8, r5, 0, 29, 29
beq- @noflag2 beq @noflag2
oris r16, r16, 0x02 ; Task.kFlag14 oris r16, r16, 0x02 ; Task.kFlag14
@noflag2 @noflag2
@ -97,13 +97,13 @@ CreateTask
li r8, 0x400 ;Task.Size li r8, 0x400 ;Task.Size
bl PoolAllocClear bl PoolAllocClear
mr. r28, r8 mr. r28, r8
beq- @fail_oom beq @fail_oom
; Allocate an opaque ID for it ; Allocate an opaque ID for it
li r9, Task.kIDClass li r9, Task.kIDClass
bl MakeID bl MakeID
cmpwi r8, 0 cmpwi r8, 0
beq- @fail_no_id beq @fail_no_id
; ID and sign it ; ID and sign it
stw r8, Task.ID(r28) stw r8, Task.ID(r28)
@ -123,7 +123,7 @@ CreateTask
bl PoolAllocClear bl PoolAllocClear
cmpwi r8, 0 cmpwi r8, 0
stw r8, Task.NotificationPtr(r28) stw r8, Task.NotificationPtr(r28)
beq- @fail_note_oom beq @fail_note_oom
lisori r9, 'note' lisori r9, 'note'
stw r9, 4(r8) stw r9, 4(r8)
@ -148,7 +148,7 @@ CreateTask
li r9, Semaphore.kIDClass li r9, Semaphore.kIDClass
bl MakeID bl MakeID
cmpwi r8, 0 cmpwi r8, 0
beq- @fail_semq_no_id beq @fail_semq_no_id
stw r8, Task.Semaphore + Semaphore.BlockedTasks + LLL.Freeform(r28) stw r8, Task.Semaphore + Semaphore.BlockedTasks + LLL.Freeform(r28)
@ -157,15 +157,15 @@ CreateTask
; Conditionally, that is ; Conditionally, that is
rlwinm. r8, r7, 0, PSA.AVFeatureBit, PSA.AVFeatureBit rlwinm. r8, r7, 0, PSA.AVFeatureBit, PSA.AVFeatureBit
beq- @non_altivec_task beq @non_altivec_task
; Allocate and check ; Allocate and check
li r8, 0x214 ;VectorSaveArea.Size ; room for v registers plus 20 bytes li r8, 0x214 ;VectorSaveArea.Size ; room for v registers plus 20 bytes
bl PoolAllocClear bl PoolAllocClear
andi. r9, r8, 16-1 ; Sanity check: aligned to size of vector register? andi. r9, r8, 16-1 ; Sanity check: aligned to size of vector register?
cmpwi cr1, r8, 0 cmpwi cr1, r8, 0
bne+ Local_Panic bne Local_Panic
beq- cr1, @fail_altivec_oom beq cr1, @fail_altivec_oom
; Point to it (from inside and outside the ECB-like area) ; Point to it (from inside and outside the ECB-like area)
stw r8, Task.VectorSaveArea(r28) stw r8, Task.VectorSaveArea(r28)
@ -179,7 +179,7 @@ CreateTask
subi r16, r16, 1 subi r16, r16, 1
stwu r17, 4(r8) stwu r17, 4(r8)
cmpwi r16, 0 cmpwi r16, 0
bgt+ @vectorarea_copyloop bgt @vectorarea_copyloop
@non_altivec_task @non_altivec_task
@ -317,20 +317,20 @@ MPCall_8 ; OUTSIDE REFERER
cmpwi r9, Task.kIDClass cmpwi r9, Task.kIDClass
mr r31, r8 mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
lbz r16, 0x0018(r31) lbz r16, 0x0018(r31)
cmpwi r16, 0x00 cmpwi r16, 0x00
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
lwz r8, 0x0060(r31) lwz r8, 0x0060(r31)
; r8 = id ; r8 = id
bl LookupID bl LookupID
cmpwi r9, Process.kIDClass cmpwi r9, Process.kIDClass
bne+ Local_Panic bne Local_Panic
lwz r16, 0x0008(r8) lwz r16, 0x0008(r8)
rlwinm. r17, r16, 0, 30, 30 rlwinm. r17, r16, 0, 30, 30
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
lwz r30, 0x0088(r31) lwz r30, 0x0088(r31)
stw r4, 0x0074(r31) stw r4, 0x0074(r31)
stw r5, 0x011c(r30) stw r5, 0x011c(r30)
@ -371,18 +371,18 @@ MPCall_9 ; OUTSIDE REFERER
mr r31, r8 mr r31, r8
cmpwi r9, 0x02 cmpwi r9, 0x02
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
lwz r16, 0x0064(r31) lwz r16, 0x0064(r31)
lbz r17, 0x0018(r31) lbz r17, 0x0018(r31)
rlwinm. r18, r16, 0, 30, 30 rlwinm. r18, r16, 0, 30, 30
cmpwi cr1, r17, 0x00 cmpwi cr1, r17, 0x00
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
beq- cr1, MPCall_9_0xb4 beq cr1, MPCall_9_0xb4
mfsprg r15, 0 mfsprg r15, 0
lhz r18, 0x001a(r31) lhz r18, 0x001a(r31)
lhz r17, EWA.CPUIndex(r15) lhz r17, EWA.CPUIndex(r15)
cmpw r18, r17 cmpw r18, r17
beq- MPCall_9_0xe0 beq MPCall_9_0xe0
ori r16, r16, 0x400 ori r16, r16, 0x400
stw r16, 0x0064(r31) stw r16, 0x0064(r31)
li r17, 0x01 li r17, 0x01
@ -427,7 +427,7 @@ MPCall_9_0xfc
InsertAsPrev r17, r16, scratch=r18 InsertAsPrev r17, r16, scratch=r18
lbz r8, 0x0037(r31) lbz r8, 0x0037(r31)
cmpwi r8, 0x01 cmpwi r8, 0x01
bne- MPCall_9_0x130 bne MPCall_9_0x130
addi r8, r31, 0x20 addi r8, r31, 0x20
bl DequeueTimer bl DequeueTimer
@ -441,7 +441,7 @@ MPCall_9_0x130
li r18, 0x00 li r18, 0x00
lwz r17, 0x009c(r31) lwz r17, 0x009c(r31)
stw r18, 0x009c(r31) stw r18, 0x009c(r31)
bne- MPCall_9_0x15c bne MPCall_9_0x15c
mr r31, r8 mr r31, r8
mr r8, r17 mr r8, r17
bl EnqueueMessage ; Message *r8, Queue *r31 bl EnqueueMessage ; Message *r8, Queue *r31
@ -466,14 +466,14 @@ MPCall_10 ; OUTSIDE REFERER
bl LookupID bl LookupID
cmpwi r9, Task.kIDClass cmpwi r9, Task.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8 mr r31, r8
lbz r16, 0x0018(r31) lbz r16, 0x0018(r31)
cmpwi r16, 0x00 cmpwi r16, 0x00
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
lwz r16, 0x0064(r31) lwz r16, 0x0064(r31)
rlwinm. r16, r16, 0, 30, 30 rlwinm. r16, r16, 0, 30, 30
beq+ ReleaseAndReturnMPCallOOM beq ReleaseAndReturnMPCallOOM
mr r8, r31 mr r8, r31
bl TasksFuncThatIsNotAMPCall bl TasksFuncThatIsNotAMPCall
@ -493,13 +493,13 @@ TasksFuncThatIsNotAMPCall
bl DeleteID bl DeleteID
lwz r8, 0x009c(r26) lwz r8, 0x009c(r26)
cmpwi r8, 0x00 cmpwi r8, 0x00
beq- @_0x98 beq @_0x98
bl PoolFree bl PoolFree
@_0x98 @_0x98
lwz r8, 0x008c(r26) lwz r8, 0x008c(r26)
cmpwi r8, 0x00 cmpwi r8, 0x00
beq- @_0xa8 beq @_0xa8
bl PoolFree bl PoolFree
@_0xa8 @_0xa8
@ -529,13 +529,13 @@ MPCall_11 ; OUTSIDE REFERER
lwz r17, PSA.PA_BlueTask(r1) lwz r17, PSA.PA_BlueTask(r1)
lwz r18, -0x0008(r16) lwz r18, -0x0008(r16)
lwz r19, 0x0000(r17) lwz r19, 0x0000(r17)
bne- MPCall_11_0x1c bne MPCall_11_0x1c
lwz r3, 0x0000(r18) lwz r3, 0x0000(r18)
MPCall_11_0x1c MPCall_11_0x1c
cmpw r3, r19 cmpw r3, r19
li r3, 0x01 li r3, 0x01
beq+ CommonMPCallReturnPath beq CommonMPCallReturnPath
li r3, 0x00 li r3, 0x00
b CommonMPCallReturnPath b CommonMPCallReturnPath
@ -557,8 +557,8 @@ MPCall_12 ; OUTSIDE REFERER
MPCall_14 ; OUTSIDE REFERER MPCall_14 ; OUTSIDE REFERER
cmpwi r4, 0x01 cmpwi r4, 0x01
cmpwi cr1, r4, 10000 cmpwi cr1, r4, 10000
blt+ ReturnMPCallInvalidIDErr blt ReturnMPCallInvalidIDErr
bgt+ cr1, ReturnMPCallInvalidIDErr bgt cr1, ReturnMPCallInvalidIDErr
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
@ -568,11 +568,11 @@ MPCall_14 ; OUTSIDE REFERER
bl LookupID bl LookupID
cmpwi r9, Task.kIDClass cmpwi r9, Task.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8 mr r31, r8
lbz r16, 0x0018(r31) lbz r16, 0x0018(r31)
cmpwi r16, 0x01 cmpwi r16, 0x01
bne- MPCall_14_0x70 bne MPCall_14_0x70
lwz r16, 0x0008(r31) lwz r16, 0x0008(r31)
lwz r17, 0x001c(r31) lwz r17, 0x001c(r31)
lwz r18, 0x0014(r16) lwz r18, 0x0014(r16)
@ -580,7 +580,7 @@ MPCall_14 ; OUTSIDE REFERER
add r18, r17, r18 add r18, r17, r18
cmpwi r17, 0x00 cmpwi r17, 0x00
stw r18, 0x0014(r16) stw r18, 0x0014(r16)
beq- MPCall_14_0x70 beq MPCall_14_0x70
mr r8, r31 mr r8, r31
bl FlagSchEval bl FlagSchEval
@ -611,7 +611,7 @@ MPSetExceptionHandler
mr r8, r3 mr r8, r3
bl LookupID bl LookupID
cmpwi r9, Task.kIDClass cmpwi r9, Task.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8 mr r31, r8
@ -620,8 +620,8 @@ MPSetExceptionHandler
cmpwi r9, 0 cmpwi r9, 0
cmpwi cr1, r9, Queue.kIDClass cmpwi cr1, r9, Queue.kIDClass
beq- @isnil beq @isnil
bne+ cr1, ReleaseAndReturnMPCallInvalidIDErr bne cr1, ReleaseAndReturnMPCallInvalidIDErr
@isnil @isnil
mr r30, r8 mr r30, r8
@ -648,7 +648,7 @@ MPThrowException
mr r8, r3 mr r8, r3
bl LookupID bl LookupID
cmpwi r9, Task.kIDClass cmpwi r9, Task.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8 mr r31, r8
; This is gold! ; This is gold!
@ -677,7 +677,7 @@ MPThrowException
KCThrowException_0x70 KCThrowException_0x70
lhz r19, EWA.CPUIndex(r15) lhz r19, EWA.CPUIndex(r15)
cmpw r19, r18 cmpw r19, r18
bne- KCThrowException_0xb8 bne KCThrowException_0xb8
ori r16, r16, 0x200 ori r16, r16, 0x200
stw r4, 0x00f8(r31) stw r4, 0x00f8(r31)
stw r16, 0x0064(r31) stw r16, 0x0064(r31)
@ -716,7 +716,7 @@ MPCall_58 ; OUTSIDE REFERER
bl LookupID bl LookupID
cmpwi r9, Task.kIDClass cmpwi r9, Task.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8 mr r31, r8
lwz r29, Task.Flags(r31) lwz r29, Task.Flags(r31)
@ -735,7 +735,7 @@ MPCall_58_0x44
li r8, 0x1c li r8, 0x1c
bl PoolAlloc bl PoolAlloc
cmpwi r8, 0x00 cmpwi r8, 0x00
beq+ ReleaseAndScrambleMPCall beq ReleaseAndScrambleMPCall
li r3, 0x00 li r3, 0x00
b MPCall_58_0x114 b MPCall_58_0x114
@ -744,11 +744,11 @@ MPCall_58_0x68
rlwinm. r8, r29, 0, 18, 18 rlwinm. r8, r29, 0, 18, 18
andc r29, r29, r17 andc r29, r29, r17
li r17, 0x00 li r17, 0x00
bne- cr7, MPCall_58_0x80 bne cr7, MPCall_58_0x80
ori r17, r17, 0x400 ori r17, r17, 0x400
MPCall_58_0x80 MPCall_58_0x80
ble- cr7, MPCall_58_0x88 ble cr7, MPCall_58_0x88
ori r17, r17, 0x200 ori r17, r17, 0x200
MPCall_58_0x88 MPCall_58_0x88
@ -761,8 +761,8 @@ MPCall_58_0x88
andc r29, r29, r19 andc r29, r29, r19
cmpw cr1, r17, r18 cmpw cr1, r17, r18
stw r29, 0x0064(r31) stw r29, 0x0064(r31)
bne- MPCall_58_0xb4 bne MPCall_58_0xb4
bne- cr1, MPCall_58_0xe0 bne cr1, MPCall_58_0xe0
MPCall_58_0xb4 MPCall_58_0xb4
addi r16, r31, 0x08 addi r16, r31, 0x08
@ -800,7 +800,7 @@ MPCall_58_0x114
mr r30, r8 mr r30, r8
ori r29, r29, 0x800 ori r29, r29, 0x800
beq- MPCall_58_0x184 beq MPCall_58_0x184
MPCall_58_0x13c MPCall_58_0x13c
bc BO_IF, 19, MPCall_58_0x158 bc BO_IF, 19, MPCall_58_0x158
@ -812,11 +812,11 @@ MPCall_58_0x13c
mr r30, r8 mr r30, r8
ori r29, r29, 0x1000 ori r29, r29, 0x1000
beq- MPCall_58_0x184 beq MPCall_58_0x184
MPCall_58_0x158 MPCall_58_0x158
mr. r8, r28 mr. r8, r28
bnel- PoolFree bnel PoolFree
addi r16, r31, 0x08 addi r16, r31, 0x08
RemoveFromList r16, scratch1=r17, scratch2=r18 RemoveFromList r16, scratch1=r17, scratch2=r18
b MPCall_9_0x98 b MPCall_9_0x98
@ -824,10 +824,10 @@ MPCall_58_0x158
MPCall_58_0x184 MPCall_58_0x184
mr. r8, r28 mr. r8, r28
stw r29, 0x0064(r31) stw r29, 0x0064(r31)
bne- MPCall_58_0x1a4 bne MPCall_58_0x1a4
lwz r8, 0x0028(r30) lwz r8, 0x0028(r30)
cmpwi r8, 0x00 cmpwi r8, 0x00
beq+ MPCall_58_0x114 beq MPCall_58_0x114
lwz r17, 0x0008(r8) lwz r17, 0x0008(r8)
stw r17, 0x0028(r30) stw r17, 0x0028(r30)
@ -873,13 +873,13 @@ MPCall_59 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr. r8, r3 mr. r8, r3
beq- MPCall_59_0x30 beq MPCall_59_0x30
; r8 = id ; r8 = id
bl LookupID bl LookupID
cmpwi r9, Queue.kIDClass cmpwi r9, Queue.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8 mr r31, r8
MPCall_59_0x30 MPCall_59_0x30
@ -902,10 +902,10 @@ MPCall_60 ; OUTSIDE REFERER
bl LookupID bl LookupID
cmpwi r9, Task.kIDClass cmpwi r9, Task.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8 mr r31, r8
cmpwi r4, 0x05 cmpwi r4, 0x05
beq- MPCall_60_0x288 beq MPCall_60_0x288
lwz r16, Task.Flags(r31) lwz r16, Task.Flags(r31)
mtcr r16 mtcr r16
@ -919,27 +919,27 @@ MPCall_60 ; OUTSIDE REFERER
MPCall_60_0x4c MPCall_60_0x4c
lbz r16, 0x0018(r31) lbz r16, 0x0018(r31)
cmpwi r16, 0x00 cmpwi r16, 0x00
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
cmpwi r4, 0x00 cmpwi r4, 0x00
cmpwi cr1, r4, 0x01 cmpwi cr1, r4, 0x01
beq- MPCall_60_0xf8 beq MPCall_60_0xf8
beq- cr1, MPCall_60_0x10c beq cr1, MPCall_60_0x10c
cmpwi r4, 0x02 cmpwi r4, 0x02
cmpwi cr1, r4, 0x03 cmpwi cr1, r4, 0x03
beq- MPCall_60_0x150 beq MPCall_60_0x150
beq- cr1, MPCall_60_0x1c0 beq cr1, MPCall_60_0x1c0
cmpwi r4, 0x04 cmpwi r4, 0x04
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
lwz r16, 0x0088(r31) lwz r16, 0x0088(r31)
li r17, 0x00 li r17, 0x00
cmplwi r5, 0x00 cmplwi r5, 0x00
cmplwi cr1, r5, 0x04 cmplwi cr1, r5, 0x04
beq- MPCall_60_0xac beq MPCall_60_0xac
beq- cr1, MPCall_60_0xc0 beq cr1, MPCall_60_0xc0
cmplwi r5, 0x08 cmplwi r5, 0x08
cmplwi cr1, r5, 0x0c cmplwi cr1, r5, 0x0c
beq- MPCall_60_0xc8 beq MPCall_60_0xc8
beq- cr1, MPCall_60_0xd0 beq cr1, MPCall_60_0xd0
b ReleaseAndReturnMPCallOOM b ReleaseAndReturnMPCallOOM
MPCall_60_0xac MPCall_60_0xac
@ -962,10 +962,10 @@ MPCall_60_0xd0
lwz r18, 0x0064(r16) lwz r18, 0x0064(r16)
rlwinm. r8, r17, 0, 27, 27 rlwinm. r8, r17, 0, 27, 27
li r17, 0x02 li r17, 0x02
beq- MPCall_60_0x36c beq MPCall_60_0x36c
rlwinm. r8, r18, 0, 1, 1 rlwinm. r8, r18, 0, 1, 1
li r17, 0x01 li r17, 0x01
bne- MPCall_60_0x36c bne MPCall_60_0x36c
li r17, 0x00 li r17, 0x00
b MPCall_60_0x36c b MPCall_60_0x36c
@ -980,14 +980,14 @@ MPCall_60_0x10c
lwz r16, 0x0088(r31) lwz r16, 0x0088(r31)
cmplwi r5, 0x100 cmplwi r5, 0x100
cmplwi cr1, r5, 0xf8 cmplwi cr1, r5, 0xf8
beq- MPCall_60_0x144 beq MPCall_60_0x144
andi. r17, r5, 0x07 andi. r17, r5, 0x07
addi r16, r16, 0x1fc addi r16, r16, 0x1fc
MPCall_60_0x124 MPCall_60_0x124
add r16, r16, r5 add r16, r16, r5
bgt+ cr1, ReleaseAndReturnMPCallOOM bgt cr1, ReleaseAndReturnMPCallOOM
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
lwzu r17, 0x0004(r16) lwzu r17, 0x0004(r16)
lwzu r18, 0x0004(r16) lwzu r18, 0x0004(r16)
lwzu r19, 0x0004(r16) lwzu r19, 0x0004(r16)
@ -1003,19 +1003,19 @@ MPCall_60_0x150
lwz r16, 0x0088(r31) lwz r16, 0x0088(r31)
rlwinm. r8, r7, 0, 12, 12 rlwinm. r8, r7, 0, 12, 12
lwz r16, 0x00d8(r16) lwz r16, 0x00d8(r16)
beq+ ReleaseAndReturnMPCallOOM beq ReleaseAndReturnMPCallOOM
cmplwi cr3, r16, 0x00 cmplwi cr3, r16, 0x00
cmplwi r5, 0x200 cmplwi r5, 0x200
cmplwi cr2, r5, 0x210 cmplwi cr2, r5, 0x210
cmplwi cr1, r5, 0x1f0 cmplwi cr1, r5, 0x1f0
beql+ cr3, Local_Panic beql cr3, Local_Panic
beq- MPCall_60_0x1a4 beq MPCall_60_0x1a4
beq- cr2, MPCall_60_0x1b8 beq cr2, MPCall_60_0x1b8
andi. r8, r5, 0x0f andi. r8, r5, 0x0f
add r16, r16, r5 add r16, r16, r5
subi r16, r16, 4 subi r16, r16, 4
bgt+ cr1, ReleaseAndReturnMPCallOOM bgt cr1, ReleaseAndReturnMPCallOOM
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
lwzu r17, 0x0004(r16) lwzu r17, 0x0004(r16)
lwzu r18, 0x0004(r16) lwzu r18, 0x0004(r16)
lwzu r19, 0x0004(r16) lwzu r19, 0x0004(r16)
@ -1038,24 +1038,24 @@ MPCall_60_0x1c0
li r17, 0x00 li r17, 0x00
cmplwi r5, 0x00 cmplwi r5, 0x00
cmplwi cr1, r5, 0x08 cmplwi cr1, r5, 0x08
beq- MPCall_60_0x21c beq MPCall_60_0x21c
beq- cr1, MPCall_60_0x228 beq cr1, MPCall_60_0x228
cmplwi r5, 0x10 cmplwi r5, 0x10
cmplwi cr1, r5, 0x30 cmplwi cr1, r5, 0x30
beq- MPCall_60_0x234 beq MPCall_60_0x234
beq- cr1, MPCall_60_0x240 beq cr1, MPCall_60_0x240
cmplwi r5, 0x1c cmplwi r5, 0x1c
cmplwi cr1, r5, 0x20 cmplwi cr1, r5, 0x20
beq- MPCall_60_0x24c beq MPCall_60_0x24c
beq- cr1, MPCall_60_0x254 beq cr1, MPCall_60_0x254
cmplwi r5, 0x24 cmplwi r5, 0x24
cmplwi cr1, r5, 0x28 cmplwi cr1, r5, 0x28
beq- MPCall_60_0x25c beq MPCall_60_0x25c
beq- cr1, MPCall_60_0x264 beq cr1, MPCall_60_0x264
cmplwi r5, 0x2c cmplwi r5, 0x2c
cmplwi cr1, r5, 0x18 cmplwi cr1, r5, 0x18
beq- MPCall_60_0x278 beq MPCall_60_0x278
beq- cr1, MPCall_60_0x280 beq cr1, MPCall_60_0x280
b ReleaseAndReturnMPCallOOM b ReleaseAndReturnMPCallOOM
MPCall_60_0x21c MPCall_60_0x21c
@ -1108,18 +1108,18 @@ MPCall_60_0x280
MPCall_60_0x288 MPCall_60_0x288
cmplwi cr1, r5, 0x04 cmplwi cr1, r5, 0x04
cmplwi r5, 0x14 cmplwi r5, 0x14
beq- cr1, MPCall_60_0x2c4 beq cr1, MPCall_60_0x2c4
beq- MPCall_60_0x2e4 beq MPCall_60_0x2e4
cmplwi cr1, r5, 0x20 cmplwi cr1, r5, 0x20
cmplwi r5, 0x30 cmplwi r5, 0x30
beq- cr1, MPCall_60_0x2f4 beq cr1, MPCall_60_0x2f4
beq- MPCall_60_0x308 beq MPCall_60_0x308
cmpwi cr1, r5, 0x40 cmpwi cr1, r5, 0x40
cmplwi r5, 0x3c cmplwi r5, 0x3c
beq- cr1, MPCall_60_0x320 beq cr1, MPCall_60_0x320
beq- MPCall_60_0x318 beq MPCall_60_0x318
cmpwi cr1, r5, 0x50 cmpwi cr1, r5, 0x50
beq- cr1, MPCall_60_0x34c beq cr1, MPCall_60_0x34c
b ReleaseAndReturnMPCallOOM b ReleaseAndReturnMPCallOOM
MPCall_60_0x2c4 MPCall_60_0x2c4
@ -1164,7 +1164,7 @@ MPCall_60_0x320
lwz r19, 0x0094(r31) lwz r19, 0x0094(r31)
lwz r20, 0x0090(r31) lwz r20, 0x0090(r31)
lwz r18, 0x0000(r18) lwz r18, 0x0000(r18)
bne- MPCall_60_0x3a8 bne MPCall_60_0x3a8
lwz r17, 0x0000(r16) lwz r17, 0x0000(r16)
b MPCall_60_0x3a8 b MPCall_60_0x3a8
@ -1174,7 +1174,7 @@ MPCall_60_0x34c
lwz r19, -0x0008(r18) lwz r19, -0x0008(r18)
cmpw r19, r31 cmpw r19, r31
lwz r17, 0x0004(r18) lwz r17, 0x0004(r18)
beq- MPCall_60_0x36c beq MPCall_60_0x36c
lwz r17, 0x010c(r20) lwz r17, 0x010c(r20)
b MPCall_60_0x36c b MPCall_60_0x36c
@ -1230,7 +1230,7 @@ MPCall_61 ; OUTSIDE REFERER
bl LookupID bl LookupID
cmpwi r9, Task.kIDClass cmpwi r9, Task.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8 mr r31, r8
lwz r16, Task.Flags(r31) lwz r16, Task.Flags(r31)
@ -1245,19 +1245,19 @@ MPCall_61 ; OUTSIDE REFERER
MPCall_61_0x44 MPCall_61_0x44
lbz r16, 0x0018(r31) lbz r16, 0x0018(r31)
cmpwi r16, 0x00 cmpwi r16, 0x00
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
lwz r17, 0x0134(r6) lwz r17, 0x0134(r6)
lwz r18, 0x013c(r6) lwz r18, 0x013c(r6)
lwz r19, 0x0144(r6) lwz r19, 0x0144(r6)
lwz r20, 0x014c(r6) lwz r20, 0x014c(r6)
cmpwi r4, 0x00 cmpwi r4, 0x00
cmpwi cr1, r4, 0x01 cmpwi cr1, r4, 0x01
beq- MPCall_61_0x84 beq MPCall_61_0x84
beq- cr1, MPCall_61_0x98 beq cr1, MPCall_61_0x98
cmpwi r4, 0x02 cmpwi r4, 0x02
cmpwi cr1, r4, 0x03 cmpwi cr1, r4, 0x03
beq- MPCall_61_0xe8 beq MPCall_61_0xe8
beq- cr1, MPCall_61_0x170 beq cr1, MPCall_61_0x170
b ReleaseAndReturnMPCallOOM b ReleaseAndReturnMPCallOOM
MPCall_61_0x84 MPCall_61_0x84
@ -1271,14 +1271,14 @@ MPCall_61_0x98
lwz r16, 0x0088(r31) lwz r16, 0x0088(r31)
cmplwi r5, 0x100 cmplwi r5, 0x100
cmplwi cr1, r5, 0xf8 cmplwi cr1, r5, 0xf8
beq- MPCall_61_0xd8 beq MPCall_61_0xd8
andi. r8, r5, 0x07 andi. r8, r5, 0x07
addi r16, r16, 0x1fc addi r16, r16, 0x1fc
MPCall_61_0xb0 MPCall_61_0xb0
add r16, r16, r5 add r16, r16, r5
bgt+ cr1, ReleaseAndReturnMPCallOOM bgt cr1, ReleaseAndReturnMPCallOOM
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
li r21, 0x10 li r21, 0x10
stwu r17, 0x0004(r16) stwu r17, 0x0004(r16)
stwu r18, 0x0004(r16) stwu r18, 0x0004(r16)
@ -1301,19 +1301,19 @@ MPCall_61_0xe8
lwz r16, 0x0088(r31) lwz r16, 0x0088(r31)
rlwinm. r8, r7, 0, 12, 12 rlwinm. r8, r7, 0, 12, 12
lwz r16, 0x00d8(r16) lwz r16, 0x00d8(r16)
beq+ ReleaseAndReturnMPCallOOM beq ReleaseAndReturnMPCallOOM
cmplwi cr3, r16, 0x00 cmplwi cr3, r16, 0x00
cmplwi r5, 0x200 cmplwi r5, 0x200
cmplwi cr2, r5, 0x210 cmplwi cr2, r5, 0x210
cmplwi cr1, r5, 0x1f0 cmplwi cr1, r5, 0x1f0
beql+ cr3, Local_Panic beql cr3, Local_Panic
beq- MPCall_61_0x144 beq MPCall_61_0x144
beq- cr2, MPCall_61_0x160 beq cr2, MPCall_61_0x160
andi. r8, r5, 0x0f andi. r8, r5, 0x0f
add r16, r16, r5 add r16, r16, r5
subi r16, r16, 4 subi r16, r16, 4
bgt+ cr1, ReleaseAndReturnMPCallOOM bgt cr1, ReleaseAndReturnMPCallOOM
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
li r21, 0x10 li r21, 0x10
stwu r17, 0x0004(r16) stwu r17, 0x0004(r16)
stwu r18, 0x0004(r16) stwu r18, 0x0004(r16)
@ -1347,18 +1347,18 @@ MPCall_61_0x170
lwz r16, 0x0088(r31) lwz r16, 0x0088(r31)
cmplwi r5, 0x00 cmplwi r5, 0x00
cmplwi cr1, r5, 0x08 cmplwi cr1, r5, 0x08
beq- MPCall_61_0x1b0 beq MPCall_61_0x1b0
beq- cr1, MPCall_61_0x1c4 beq cr1, MPCall_61_0x1c4
cmplwi r5, 0x10 cmplwi r5, 0x10
beq- MPCall_61_0x1d8 beq MPCall_61_0x1d8
cmplwi r5, 0x1c cmplwi r5, 0x1c
cmplwi cr1, r5, 0x20 cmplwi cr1, r5, 0x20
beq- MPCall_61_0x1ec beq MPCall_61_0x1ec
beq- cr1, MPCall_61_0x1fc beq cr1, MPCall_61_0x1fc
cmplwi r5, 0x24 cmplwi r5, 0x24
cmplwi cr1, r5, 0x18 cmplwi cr1, r5, 0x18
beq- MPCall_61_0x218 beq MPCall_61_0x218
beq- cr1, MPCall_61_0x228 beq cr1, MPCall_61_0x228
b ReleaseAndReturnMPCallOOM b ReleaseAndReturnMPCallOOM
MPCall_61_0x1b0 MPCall_61_0x1b0
@ -1437,7 +1437,7 @@ MPCall_63 ; OUTSIDE REFERER
bl LookupID bl LookupID
cmpwi r9, Task.kIDClass cmpwi r9, Task.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
stw r4, 0x00ec(r8) stw r4, 0x00ec(r8)
; r1 = kdp ; r1 = kdp
@ -1458,7 +1458,7 @@ MPCall_114 ; OUTSIDE REFERER
cmpwi r9, Task.kIDClass cmpwi r9, Task.kIDClass
mr r31, r8 mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r8, r4 mr r8, r4
; r8 = id ; r8 = id
@ -1466,17 +1466,17 @@ MPCall_114 ; OUTSIDE REFERER
cmpwi r9, CPU.kIDClass cmpwi r9, CPU.kIDClass
mr r30, r8 mr r30, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
lwz r16, 0x0064(r31) lwz r16, 0x0064(r31)
lwz r17, 0x00e8(r31) lwz r17, 0x00e8(r31)
rlwinm. r8, r16, 0, 30, 30 rlwinm. r8, r16, 0, 30, 30
cmplw cr1, r17, r5 cmplw cr1, r17, r5
lwz r18, 0x0018(r30) lwz r18, 0x0018(r30)
bne+ ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
bne+ cr1, ReleaseAndReturnMPCallOOM bne cr1, ReleaseAndReturnMPCallOOM
rlwinm. r8, r18, 0, 28, 28 rlwinm. r8, r18, 0, 28, 28
cmplwi cr1, r17, 0x04 cmplwi cr1, r17, 0x04
beq+ ReleaseAndReturnMPCallOOM beq ReleaseAndReturnMPCallOOM
lwz r16, 0x0064(r31) lwz r16, 0x0064(r31)
lhz r17, CPU.EWA + EWA.CPUIndex(r30) lhz r17, CPU.EWA + EWA.CPUIndex(r30)
ori r16, r16, 0x40 ori r16, r16, 0x40
@ -1484,7 +1484,7 @@ MPCall_114 ; OUTSIDE REFERER
sth r17, 0x001a(r31) sth r17, 0x001a(r31)
rlwinm. r8, r16, 0, 26, 26 rlwinm. r8, r16, 0, 26, 26
mr r8, r31 mr r8, r31
bne- MPCall_114_0x90 bne MPCall_114_0x90
bl SchTaskUnrdy bl SchTaskUnrdy
bl SchRdyTaskNow bl SchRdyTaskNow
@ -1508,7 +1508,7 @@ KCSetTaskType
mr r8, r3 mr r8, r3
bl LookupID bl LookupID
cmpwi r9, Task.kIDClass cmpwi r9, Task.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
stw r4, Task.Name(r8) stw r4, Task.Name(r8)

View File

@ -33,7 +33,7 @@ panic_common
mfspr r0, pvr mfspr r0, pvr
rlwinm. r0, r0, 0, 0, 14 rlwinm. r0, r0, 0, 0, 14
bne- @no_mq bne @no_mq
dialect POWER dialect POWER
mfmq r0 mfmq r0
dialect PowerPC dialect PowerPC
@ -58,7 +58,7 @@ panic_common
mfpvr r0 mfpvr r0
rlwinm. r0, r0, 0, 0, 14 rlwinm. r0, r0, 0, 0, 14
bne- @not_601 bne @not_601
@rtcloop @rtcloop
dialect POWER dialect POWER
@ -67,7 +67,7 @@ panic_common
mfrtcu r3 mfrtcu r3
dialect PowerPC dialect PowerPC
cmpw r0, r3 cmpw r0, r3
bne+ @rtcloop bne @rtcloop
stw r0, KDP.ThudSavedTBU(r1) stw r0, KDP.ThudSavedTBU(r1)
stw r2, KDP.ThudSavedTB(r1) stw r2, KDP.ThudSavedTB(r1)
@ -79,7 +79,7 @@ panic_common
mftb r2 mftb r2
mftbu r3 mftbu r3
cmpw r0, r3 cmpw r0, r3
bne+ @tbloop bne @tbloop
stw r0, KDP.ThudSavedTBU(r1) stw r0, KDP.ThudSavedTBU(r1)
stw r2, KDP.ThudSavedTB(r1) stw r2, KDP.ThudSavedTB(r1)
@end_if_601 @end_if_601
@ -172,7 +172,7 @@ panic_common
lwz r0, 0x08fc(r1) lwz r0, 0x08fc(r1)
stfd f31, 0x08fc(r1) stfd f31, 0x08fc(r1)
stw r0, 0x08fc(r1) stw r0, 0x08fc(r1)
bne- cr1, @0x260 bne cr1, @0x260
if &TYPE('NKDebugShim') != 'UNDEFINED' if &TYPE('NKDebugShim') != 'UNDEFINED'
b @go_here_to_use_saved_debug_command b @go_here_to_use_saved_debug_command
@ -190,7 +190,7 @@ panic_common
; gets kdp from print!!! ; gets kdp from print!!!
cmpwi r8, -0x01 cmpwi r8, -0x01
bne- @0x260 bne @0x260
b @0x23c b @0x23c
@0x260 @0x260
@ -212,13 +212,13 @@ panic_common
@input_busywait @input_busywait
bl getchar bl getchar
cmpwi r8, -1 cmpwi r8, -1
beq+ @input_busywait beq @input_busywait
mr r16, r8 mr r16, r8
cmpwi r16, 8 ; backspace cmpwi r16, 8 ; backspace
cmpwi cr1, r17, 0 cmpwi cr1, r17, 0
bne- @not_backspace bne @not_backspace
ble+ cr1, @input_busywait ble cr1, @input_busywait
; Backspace, wipe position, then backspace again! ; Backspace, wipe position, then backspace again!
@ -236,7 +236,7 @@ panic_common
; If ; If
cmpwi cr2, r17, 95 cmpwi cr2, r17, 95
addi r18, r1, -0x960 ; prepare to copy the line! addi r18, r1, -0x960 ; prepare to copy the line!
blt- cr2, @short_line blt cr2, @short_line
_log '^b' _log '^b'
b @input_busywait b @input_busywait
@ -249,7 +249,7 @@ panic_common
cmpwi r16, 13 cmpwi r16, 13
stbx r16, r17, r18 stbx r16, r17, r18
bne+ @0x30c bne @0x30c
li r16, 0x00 li r16, 0x00
stbx r16, r17, r18 stbx r16, r17, r18
_log '^n' _log '^n'
@ -268,7 +268,7 @@ panic_common
; r16 = char ; r16 = char
cmpwi r16, 0x00 cmpwi r16, 0x00
beq+ @prompt beq @prompt
bl @load_commands bl @load_commands
mflr r16 mflr r16
bl @load_tbl bl @load_tbl
@ -280,7 +280,7 @@ panic_common
; cr0 = found ; cr0 = found
; r17 = ptr to lut entry ; r17 = ptr to lut entry
bne- @bad_command bne @bad_command
bl @load_tbl bl @load_tbl
mflr r16 mflr r16
lwz r17, 0x0000(r17) lwz r17, 0x0000(r17)
@ -339,9 +339,9 @@ panic_common
; r16 = char ; r16 = char
cmpwi r16, 0x00 cmpwi r16, 0x00
beq- @missing_physical_addr beq @missing_physical_addr
bl major_0x187b0 bl major_0x187b0
bne- @bad_length_1 bne @bad_length_1
mr r30, r16 mr r30, r16
li r31, 0x10 li r31, 0x10
@ -351,9 +351,9 @@ panic_common
; r16 = char ; r16 = char
cmpwi r16, 0x00 cmpwi r16, 0x00
beq- @0x5e0 beq @0x5e0
bl major_0x187b0 bl major_0x187b0
bne- @bad_length_1 bne @bad_length_1
mr r31, r16 mr r31, r16
@0x5e0 @0x5e0
@ -381,9 +381,9 @@ panic_common
; r16 = char ; r16 = char
cmpwi r16, 0x00 cmpwi r16, 0x00
beq- @missing_logical_addr beq @missing_logical_addr
bl major_0x187b0 bl major_0x187b0
bne- @bad_length_2 bne @bad_length_2
mr r30, r16 mr r30, r16
li r31, 0x10 li r31, 0x10
@ -393,9 +393,9 @@ panic_common
; r16 = char ; r16 = char
cmpwi r16, 0x00 cmpwi r16, 0x00
beq- @0x6b0 beq @0x6b0
bl major_0x187b0 bl major_0x187b0
bne- @bad_length_2 bne @bad_length_2
mr r31, r16 mr r31, r16
@0x6b0 @0x6b0
@ -422,9 +422,9 @@ panic_common
cmpwi r16, 0x00 cmpwi r16, 0x00
lwz r31, 0x0904(r1) lwz r31, 0x0904(r1)
beq- @0x748 beq @0x748
bl major_0x187b0 bl major_0x187b0
bne- @bad_resume_address bne @bad_resume_address
stw r16, 0x0904(r1) stw r16, 0x0904(r1)
@0x748 @0x748
@ -454,7 +454,7 @@ panic_common
; r16 = char ; r16 = char
cmpwi r16, 0x00 cmpwi r16, 0x00
beq- @missing_opaque_id beq @missing_opaque_id
bl @load_id_args bl @load_id_args
mflr r16 mflr r16
li r17, 0x00 li r17, 0x00
@ -465,7 +465,7 @@ panic_common
; cr0 = found ; cr0 = found
; r17 = ptr to lut entry ; r17 = ptr to lut entry
bne- @0x884 bne @0x884
li r29, 0x00 li r29, 0x00
li r30, 0x00 li r30, 0x00
srwi r31, r17, 2 srwi r31, r17, 2
@ -475,24 +475,24 @@ panic_common
mr r9, r31 mr r9, r31
bl GetNextIDOfClass bl GetNextIDOfClass
mr. r30, r8 mr. r30, r8
beq- @0x868 beq @0x868
mr r8, r8 mr r8, r8
bl Printw bl Printw
addi r29, r29, 0x01 addi r29, r29, 0x01
andi. r29, r29, 0x07 andi. r29, r29, 0x07
bne+ @0x82c bne @0x82c
_log '^n' _log '^n'
b @0x82c b @0x82c
@0x868 @0x868
cmpwi r29, 0x00 cmpwi r29, 0x00
beq+ @prompt beq @prompt
_log '^n' _log '^n'
b @prompt b @prompt
@0x884 @0x884
bl major_0x187b0 bl major_0x187b0
bne- @bad_opaque_id bne @bad_opaque_id
mr r30, r16 mr r30, r16
mr r8, r16 mr r8, r16
@ -511,7 +511,7 @@ panic_common
add r8, r17, r18 add r8, r17, r18
bl PrintS bl PrintS
cmpwi r9, 0x00 cmpwi r9, 0x00
beq- @0x978 beq @0x978
_log ' at ' _log ' at '
mr r8, r31 mr r8, r31
bl Printw bl Printw
@ -684,12 +684,12 @@ panic_common
lwz r17, 0x07b4(r1) lwz r17, 0x07b4(r1)
rlwinm r17, r17, 16, 16, 27 rlwinm r17, r17, 16, 16, 27
cmpwi r17, 0x6800 cmpwi r17, 0x6800
bne- major_0x18040_0x100 bne major_0x18040_0x100
lwz r17, 0x071c(r1) lwz r17, 0x071c(r1)
srwi r17, r17, 16 srwi r17, r17, 16
andi. r17, r17, 0xffa0 andi. r17, r17, 0xffa0
cmpwi r17, 0x2a0 cmpwi r17, 0x2a0
bne- major_0x18040_0x64 bne major_0x18040_0x64
_log 'Caused by emulator termination request^n' _log 'Caused by emulator termination request^n'
b major_0x18040_0x9c b major_0x18040_0x9c
@ -702,8 +702,8 @@ major_0x18040_0x9c
subf r17, r18, r17 subf r17, r18, r17
cmpwi r17, 0x100 cmpwi r17, 0x100
cmpwi cr1, r17, -0x100 cmpwi cr1, r17, -0x100
bgt- major_0x18040_0x100 bgt major_0x18040_0x100
blt- cr1, major_0x18040_0x100 blt cr1, major_0x18040_0x100
_log 'Looks like interrupt stack overflow by os or application^n' _log 'Looks like interrupt stack overflow by os or application^n'
major_0x18040_0x100 major_0x18040_0x100
@ -723,8 +723,8 @@ print_xpt_info ; OUTSIDE REFERER
bl Printw bl Printw
subf. r21, r18, r20 subf. r21, r18, r20
cmplw cr1, r20, r19 cmplw cr1, r20, r19
blt- print_xpt_info_0x84 blt print_xpt_info_0x84
bge- cr1, print_xpt_info_0x84 bge cr1, print_xpt_info_0x84
_log '( NK+' _log '( NK+'
mr r8, r21 mr r8, r21
bl Printw bl Printw
@ -739,8 +739,8 @@ print_xpt_info_0x84
mfspr r8, srr0 mfspr r8, srr0
subf. r21, r18, r8 subf. r21, r18, r8
cmplw cr1, r8, r19 cmplw cr1, r8, r19
blt- print_xpt_info_0xf8 blt print_xpt_info_0xf8
bge- cr1, print_xpt_info_0xf8 bge cr1, print_xpt_info_0xf8
_log '( NK+' _log '( NK+'
mr r8, r21 mr r8, r21
bl Printw bl Printw
@ -821,7 +821,7 @@ print_segment_registers_0x28
mfsrin r8, r18 mfsrin r8, r18
addis r18, r18, 0x1000 addis r18, r18, 0x1000
bl Printw bl Printw
bdnz+ print_segment_registers_0x28 bdnz print_segment_registers_0x28
_log '^n sr8-sr15 ' _log '^n sr8-sr15 '
li r17, 0x08 li r17, 0x08
mtctr r17 mtctr r17
@ -830,7 +830,7 @@ print_segment_registers_0x5c
mfsrin r8, r18 mfsrin r8, r18
addis r18, r18, 0x1000 addis r18, r18, 0x1000
bl Printw bl Printw
bdnz+ print_segment_registers_0x5c bdnz print_segment_registers_0x5c
_log '^n' _log '^n'
mtlr r16 mtlr r16
blr blr
@ -847,7 +847,7 @@ print_gprs ; OUTSIDE REFERER
print_gprs_0x28 print_gprs_0x28
lwzu r8, 0x0004(r17) lwzu r8, 0x0004(r17)
bl Printw bl Printw
bdnz+ print_gprs_0x28 bdnz print_gprs_0x28
_log '^n r8-r15 ' _log '^n r8-r15 '
li r18, 0x08 li r18, 0x08
mtctr r18 mtctr r18
@ -855,7 +855,7 @@ print_gprs_0x28
print_gprs_0x58 print_gprs_0x58
lwzu r8, 0x0004(r17) lwzu r8, 0x0004(r17)
bl Printw bl Printw
bdnz+ print_gprs_0x58 bdnz print_gprs_0x58
_log '^n r16-r23 ' _log '^n r16-r23 '
li r18, 0x08 li r18, 0x08
mtctr r18 mtctr r18
@ -863,7 +863,7 @@ print_gprs_0x58
print_gprs_0x88 print_gprs_0x88
lwzu r8, 0x0004(r17) lwzu r8, 0x0004(r17)
bl Printw bl Printw
bdnz+ print_gprs_0x88 bdnz print_gprs_0x88
_log '^n r24-r31 ' _log '^n r24-r31 '
li r18, 0x08 li r18, 0x08
mtctr r18 mtctr r18
@ -871,7 +871,7 @@ print_gprs_0x88
print_gprs_0xb8 print_gprs_0xb8
lwzu r8, 0x0004(r17) lwzu r8, 0x0004(r17)
bl Printw bl Printw
bdnz+ print_gprs_0xb8 bdnz print_gprs_0xb8
_log '^n' _log '^n'
mtlr r16 mtlr r16
blr blr
@ -902,24 +902,24 @@ print_memory_0x8
print_memory_0x60 print_memory_0x60
lbzu r8, 0x0001(r16) lbzu r8, 0x0001(r16)
cmpwi r8, 0xff cmpwi r8, 0xff
beq- print_memory_0x74 beq print_memory_0x74
cmpwi r8, 0x20 cmpwi r8, 0x20
bgt- print_memory_0x78 bgt print_memory_0x78
print_memory_0x74 print_memory_0x74
li r8, 0x20 li r8, 0x20
print_memory_0x78 print_memory_0x78
bl Printc bl Printc
bdnz+ print_memory_0x60 bdnz print_memory_0x60
_log '*^n' _log '*^n'
addi r16, r16, 0x01 addi r16, r16, 0x01
addi r17, r17, -0x01 addi r17, r17, -0x01
bl getchar bl getchar
cmpwi r8, -0x01 cmpwi r8, -0x01
bne- print_memory_0xb0 bne print_memory_0xb0
cmpwi r17, 0x00 cmpwi r17, 0x00
bne+ print_memory_0x8 bne print_memory_0x8
print_memory_0xb0 print_memory_0xb0
_log '^n' _log '^n'
@ -941,8 +941,8 @@ print_memory_logical_0x8
print_memory_logical_0x24 print_memory_logical_0x24
mr r27, r16 mr r27, r16
bl PagingFunc1 bl PagingFunc1
beq- print_memory_logical_0x5c beq print_memory_logical_0x5c
blt- print_memory_logical_0x48 blt print_memory_logical_0x48
_log '..' _log '..'
b print_memory_logical_0x6c b print_memory_logical_0x6c
@ -960,13 +960,13 @@ print_memory_logical_0x6c
addi r16, r16, 0x01 addi r16, r16, 0x01
addi r19, r19, -0x01 addi r19, r19, -0x01
andi. r8, r19, 0x03 andi. r8, r19, 0x03
bne- print_memory_logical_0x84 bne print_memory_logical_0x84
li r8, 0x20 li r8, 0x20
bl Printc bl Printc
print_memory_logical_0x84 print_memory_logical_0x84
cmpwi r19, 0x00 cmpwi r19, 0x00
bgt+ print_memory_logical_0x24 bgt print_memory_logical_0x24
_log ' *' _log ' *'
li r8, 0x10 li r8, 0x10
addi r16, r16, -0x10 addi r16, r16, -0x10
@ -976,14 +976,14 @@ print_memory_logical_0xac
mr r27, r16 mr r27, r16
bl PagingFunc1 bl PagingFunc1
li r8, 0x20 li r8, 0x20
bne- print_memory_logical_0xdc bne print_memory_logical_0xdc
bl PagingFunc4 bl PagingFunc4
rlwimi r31, r27, 0, 20, 31 rlwimi r31, r27, 0, 20, 31
lbz r8, 0x0000(r31) lbz r8, 0x0000(r31)
cmpwi r8, 0xff cmpwi r8, 0xff
beq- print_memory_logical_0xd8 beq print_memory_logical_0xd8
cmpwi r8, 0x20 cmpwi r8, 0x20
bgt- print_memory_logical_0xdc bgt print_memory_logical_0xdc
print_memory_logical_0xd8 print_memory_logical_0xd8
li r8, 0x20 li r8, 0x20
@ -991,14 +991,14 @@ print_memory_logical_0xd8
print_memory_logical_0xdc print_memory_logical_0xdc
bl Printc bl Printc
addi r16, r16, 0x01 addi r16, r16, 0x01
bdnz+ print_memory_logical_0xac bdnz print_memory_logical_0xac
_log '*^n' _log '*^n'
addi r17, r17, -0x01 addi r17, r17, -0x01
bl getchar bl getchar
cmpwi r8, -0x01 cmpwi r8, -0x01
bne- print_memory_logical_0x114 bne print_memory_logical_0x114
cmpwi r17, 0x00 cmpwi r17, 0x00
bne+ print_memory_logical_0x8 bne print_memory_logical_0x8
print_memory_logical_0x114 print_memory_logical_0x114
_log '^n' _log '^n'
@ -1023,15 +1023,15 @@ cmd_lookup_0xc
lbzu r20, 0x0001(r15) lbzu r20, 0x0001(r15)
cmpwi r21, 0xff cmpwi r21, 0xff
cmpwi cr1, r21, 0x00 cmpwi cr1, r21, 0x00
beq- cmd_lookup_0x44 beq cmd_lookup_0x44
beq- cr1, cmd_lookup_0x50 beq cr1, cmd_lookup_0x50
cmpw r20, r21 cmpw r20, r21
beq+ cmd_lookup_0xc beq cmd_lookup_0xc
cmd_lookup_0x2c cmd_lookup_0x2c
lbzu r21, 0x0001(r16) lbzu r21, 0x0001(r16)
cmpwi r21, 0x00 cmpwi r21, 0x00
bne+ cmd_lookup_0x2c bne cmd_lookup_0x2c
cmd_lookup_0x38 cmd_lookup_0x38
addi r17, r17, 0x04 addi r17, r17, 0x04
@ -1045,9 +1045,9 @@ cmd_lookup_0x44
cmd_lookup_0x50 cmd_lookup_0x50
cmpwi r20, 0x20 cmpwi r20, 0x20
beqlr- beqlr
cmpwi r20, 0x00 cmpwi r20, 0x00
beqlr- beqlr
b cmd_lookup_0x38 b cmd_lookup_0x38
@ -1063,7 +1063,7 @@ next_cmd_word ; OUTSIDE REFERER
next_cmd_word_0x4 next_cmd_word_0x4
lbzu r16, 0x0001(r15) lbzu r16, 0x0001(r15)
cmpwi r16, 0x20 cmpwi r16, 0x20
beq+ next_cmd_word_0x4 beq next_cmd_word_0x4
blr blr
@ -1076,8 +1076,8 @@ major_0x187b0_0x8
lbzu r17, 0x0001(r15) lbzu r17, 0x0001(r15)
cmplwi r17, 0x30 cmplwi r17, 0x30
cmplwi cr1, r17, 0x39 cmplwi cr1, r17, 0x39
blt- major_0x187b0_0x28 blt major_0x187b0_0x28
bgt- cr1, major_0x187b0_0x28 bgt cr1, major_0x187b0_0x28
slwi r16, r16, 4 slwi r16, r16, 4
rlwimi r16, r17, 0, 28, 31 rlwimi r16, r17, 0, 28, 31
b major_0x187b0_0x8 b major_0x187b0_0x8
@ -1085,8 +1085,8 @@ major_0x187b0_0x8
major_0x187b0_0x28 major_0x187b0_0x28
cmplwi r17, 0x61 cmplwi r17, 0x61
cmplwi cr1, r17, 0x66 cmplwi cr1, r17, 0x66
blt- major_0x187b0_0x48 blt major_0x187b0_0x48
bgt- cr1, major_0x187b0_0x48 bgt cr1, major_0x187b0_0x48
addi r17, r17, -0x57 addi r17, r17, -0x57
slwi r16, r16, 4 slwi r16, r16, 4
rlwimi r16, r17, 0, 28, 31 rlwimi r16, r17, 0, 28, 31
@ -1095,8 +1095,8 @@ major_0x187b0_0x28
major_0x187b0_0x48 major_0x187b0_0x48
cmplwi r17, 0x41 cmplwi r17, 0x41
cmplwi cr1, r17, 0x46 cmplwi cr1, r17, 0x46
blt- major_0x187b0_0x68 blt major_0x187b0_0x68
bgt- cr1, major_0x187b0_0x68 bgt cr1, major_0x187b0_0x68
addi r17, r17, -0x37 addi r17, r17, -0x37
slwi r16, r16, 4 slwi r16, r16, 4
rlwimi r16, r17, 0, 28, 31 rlwimi r16, r17, 0, 28, 31
@ -1104,7 +1104,7 @@ major_0x187b0_0x48
major_0x187b0_0x68 major_0x187b0_0x68
cmpwi r17, 0x00 cmpwi r17, 0x00
beqlr- beqlr
cmpwi r17, 0x20 cmpwi r17, 0x20
blr blr
@ -1199,7 +1199,7 @@ prereturn ; OUTSIDE REFERER
mfpvr r0 mfpvr r0
rlwinm. r0, r0, 0, 0, 14 rlwinm. r0, r0, 0, 0, 14
bne- @not_601 bne @not_601
lwz r0, 0x0784(r1) lwz r0, 0x0784(r1)
mtspr mq, r0 mtspr mq, r0
@not_601 @not_601

View File

@ -23,7 +23,7 @@ InitTMRQs ; OUTSIDE REFERER
stw r8, 0x003c(r9) stw r8, 0x003c(r9)
mfspr r8, pvr mfspr r8, pvr
rlwinm. r8, r8, 0, 0, 14 rlwinm. r8, r8, 0, 0, 14
beq- InitTMRQs_0x7c beq InitTMRQs_0x7c
mflr r30 mflr r30
li r8, 0x40 li r8, 0x40
@ -33,7 +33,7 @@ InitTMRQs ; OUTSIDE REFERER
; r8 = ptr ; r8 = ptr
mr. r31, r8 mr. r31, r8
beq+ Local_Panic beq Local_Panic
stw r31, -0x0434(r1) stw r31, -0x0434(r1)
li r9, 0x07 li r9, 0x07
stb r9, 0x0014(r31) stb r9, 0x0014(r31)
@ -44,7 +44,7 @@ InitTMRQs ; OUTSIDE REFERER
InitTMRQs_0x7c InitTMRQs_0x7c
mfspr r8, pvr mfspr r8, pvr
rlwinm. r8, r8, 0, 0, 14 rlwinm. r8, r8, 0, 0, 14
beq- InitTMRQs_0xb4 beq InitTMRQs_0xb4
mflr r30 mflr r30
li r8, 0x40 li r8, 0x40
@ -54,7 +54,7 @@ InitTMRQs_0x7c
; r8 = ptr ; r8 = ptr
mr. r31, r8 mr. r31, r8
beq+ Local_Panic beq Local_Panic
stw r31, -0x0364(r1) stw r31, -0x0364(r1)
li r9, 0x08 li r9, 0x08
stb r9, 0x0014(r31) stb r9, 0x0014(r31)
@ -70,11 +70,11 @@ InitTMRQs_0xb4
lwz r30, KDP.PA_ConfigInfo(r1) lwz r30, KDP.PA_ConfigInfo(r1)
lhz r31, NKConfigurationInfo.Debug(r30) lhz r31, NKConfigurationInfo.Debug(r30)
cmplwi r31, NKConfigurationInfo.DebugThreshold cmplwi r31, NKConfigurationInfo.DebugThreshold
blt- @nodebug blt @nodebug
lwz r31, NKConfigurationInfo.DebugFlags(r30) lwz r31, NKConfigurationInfo.DebugFlags(r30)
rlwinm. r8, r31, 0, NKConfigurationInfo.NanodbgrFlagBit, NKConfigurationInfo.NanodbgrFlagBit rlwinm. r8, r31, 0, NKConfigurationInfo.NanodbgrFlagBit, NKConfigurationInfo.NanodbgrFlagBit
beq- @nodebug beq @nodebug
lwz r8, KDP.NanoKernelInfo + NKNanoKernelInfo.ConfigFlags(r1) lwz r8, KDP.NanoKernelInfo + NKNanoKernelInfo.ConfigFlags(r1)
_bset r8, r8, NKNanoKernelInfo.NanodbgrFlagBit _bset r8, r8, NKNanoKernelInfo.NanodbgrFlagBit
@ -85,7 +85,7 @@ InitTMRQs_0xb4
li r8, Timer.Size li r8, Timer.Size
bl PoolAllocClear ; one of those weird queue structures bl PoolAllocClear ; one of those weird queue structures
mr. r31, r8 mr. r31, r8
beq+ Local_Panic beq Local_Panic
li r9, Timer.kKind6 li r9, Timer.kKind6
stb r9, Timer.Kind(r31) stb r9, Timer.Kind(r31)
@ -128,7 +128,7 @@ TimerDispatch ; OUTSIDE REFERER
TimerDispatch_0x30 ; OUTSIDE REFERER TimerDispatch_0x30 ; OUTSIDE REFERER
mfspr r8, pvr mfspr r8, pvr
rlwinm. r8, r8, 0, 0, 14 rlwinm. r8, r8, 0, 0, 14
beq- @is_601 beq @is_601
;not 601 ;not 601
@gettime_loop_non_601 @gettime_loop_non_601
@ -171,7 +171,7 @@ TimerDispatch_0x30 ; OUTSIDE REFERER
addi r30, r18, EWA.Base addi r30, r18, EWA.Base
cmpwi r19, 1 cmpwi r19, 1
lwz r16, EWA.GlobalTime - EWA.Base(r30) lwz r16, EWA.GlobalTime - EWA.Base(r30)
bne- timer_earlier_than_sometime bne timer_earlier_than_sometime
lwz r17, EWA.GlobalTime + 4 - EWA.Base(r30) lwz r17, EWA.GlobalTime + 4 - EWA.Base(r30)
_b_if_time_gt r16, r8, timer_earlier_than_sometime _b_if_time_gt r16, r8, timer_earlier_than_sometime
@ -196,7 +196,7 @@ timer_earlier_than_sometime
llabel r20, TimerTable llabel r20, TimerTable
li r21, 0x00 li r21, 0x00
add r20, r20, r19 add r20, r20, r19
bgel+ Local_Panic bgel Local_Panic
stb r21, 0x0017(r30) stb r21, 0x0017(r30)
lwz r20, 0x0000(r20) lwz r20, 0x0000(r20)
add r20, r20, r19 add r20, r20, r19
@ -210,13 +210,13 @@ TimerDispatch_0x144
lbz r19, 0x0016(r30) lbz r19, 0x0016(r30)
cmpwi r19, 0x01 cmpwi r19, 0x01
lwz r8, 0x0000(r30) lwz r8, 0x0000(r30)
beq+ TimerDispatch_0x30 beq TimerDispatch_0x30
bl DeleteID bl DeleteID
mr r8, r30 mr r8, r30
bl PoolFree bl PoolFree
lwz r8, 0x001c(r30) lwz r8, 0x001c(r30)
cmpwi r8, 0x00 cmpwi r8, 0x00
beq- TimerDispatch_0x180 beq TimerDispatch_0x180
bl PoolFree bl PoolFree
li r8, 0x00 li r8, 0x00
stw r8, 0x001c(r30) stw r8, 0x001c(r30)
@ -288,7 +288,7 @@ SetTimesliceFromCurTimeAndTripTime
; r16/r17 = soonest(last timer, global PSA time if available) ; r16/r17 = soonest(last timer, global PSA time if available)
bne- global_time_invalid bne global_time_invalid
lwz r18, EWA.GlobalTime(r19) lwz r18, EWA.GlobalTime(r19)
lwz r19, EWA.GlobalTime+4(r19) lwz r19, EWA.GlobalTime+4(r19)
@ -304,10 +304,10 @@ global_time_invalid
subfe. r16, r8, r16 subfe. r16, r8, r16
mtxer r20 mtxer r20
blt- @that_time_has_passed ; hi bit of r16 = 1 blt @that_time_has_passed ; hi bit of r16 = 1
bne- @that_time_is_in_future ; bne @that_time_is_in_future ;
cmplw r16, r21 ; typo? should be r17??? cmplw r16, r21 ; typo? should be r17???
bgt- @that_time_is_in_future ; will never be taken... bgt @that_time_is_in_future ; will never be taken...
; When the times are roughly equal? ; When the times are roughly equal?
mtspr dec, r17 mtspr dec, r17
@ -344,7 +344,7 @@ TimerFire1 ; OUTSIDE REFERER
lwz r19, 0x0088(r8) lwz r19, 0x0088(r8)
cmpwi r17, 0x00 cmpwi r17, 0x00
stw r16, 0x011c(r19) stw r16, 0x011c(r19)
bne- TimerFire1_0x64 bne TimerFire1_0x64
addi r16, r8, 0x08 addi r16, r8, 0x08
RemoveFromList r16, scratch1=r17, scratch2=r19 RemoveFromList r16, scratch1=r17, scratch2=r19
li r17, 0x01 li r17, 0x01
@ -363,7 +363,7 @@ TimerFire1_0x64
; TimerFire2 ; TimerFire2
TimerFire2 ; OUTSIDE REFERER TimerFire2 ; OUTSIDE REFERER
bne+ TimerDispatch_0x144 bne TimerDispatch_0x144
bl Local_Panic bl Local_Panic
lwz r18, 0x0018(r30) lwz r18, 0x0018(r30)
stw r16, 0x0080(r18) stw r16, 0x0080(r18)
@ -373,7 +373,7 @@ TimerFire2 ; OUTSIDE REFERER
lbz r17, 0x0018(r8) lbz r17, 0x0018(r8)
lwz r18, 0x0088(r8) lwz r18, 0x0088(r8)
cmpwi r17, 0x00 cmpwi r17, 0x00
bne- TimerFire3_0x8 bne TimerFire3_0x8
stw r16, 0x011c(r18) stw r16, 0x011c(r18)
lwz r8, 0x0008(r8) lwz r8, 0x0008(r8)
lwz r8, 0x0000(r8) lwz r8, 0x0000(r8)
@ -383,12 +383,12 @@ TimerFire2 ; OUTSIDE REFERER
cmpwi r9, Queue.kIDClass cmpwi r9, Queue.kIDClass
cmpwi cr1, r9, 0x05 cmpwi cr1, r9, 0x05
beq- TimerFire2_0x8c beq TimerFire2_0x8c
beq- cr1, TimerFire2_0x7c beq cr1, TimerFire2_0x7c
cmpwi r9, 0x09 cmpwi r9, 0x09
cmpwi cr1, r9, 0x06 cmpwi cr1, r9, 0x06
beq- TimerFire2_0x6c beq TimerFire2_0x6c
bne+ cr1, Local_Panic bne cr1, Local_Panic
lwz r16, 0x0020(r8) lwz r16, 0x0020(r8)
addi r16, r16, -0x01 addi r16, r16, -0x01
stw r16, 0x0020(r8) stw r16, 0x0020(r8)
@ -441,21 +441,21 @@ TimerFire3_0x8 ; OUTSIDE REFERER
cmpwi r9, Queue.kIDClass cmpwi r9, Queue.kIDClass
mr r31, r8 mr r31, r8
bne- major_0x13258_0x68 bne major_0x13258_0x68
lwz r16, 0x0024(r31) lwz r16, 0x0024(r31)
lwz r8, 0x001c(r30) lwz r8, 0x001c(r30)
cmpwi r16, 0x00 cmpwi r16, 0x00
cmpwi cr1, r8, 0x00 cmpwi cr1, r8, 0x00
beq- major_0x13258_0x40 beq major_0x13258_0x40
lwz r17, 0x0028(r31) lwz r17, 0x0028(r31)
mr. r8, r17 mr. r8, r17
lwz r17, 0x0008(r17) lwz r17, 0x0008(r17)
beq- major_0x13258_0x68 beq major_0x13258_0x68
stw r17, 0x0028(r31) stw r17, 0x0028(r31)
b major_0x13258_0x4c b major_0x13258_0x4c
major_0x13258_0x40 major_0x13258_0x40
beq- cr1, major_0x13258_0x68 beq cr1, major_0x13258_0x68
li r16, 0x00 li r16, 0x00
stw r16, 0x001c(r30) stw r16, 0x001c(r30)
@ -476,7 +476,7 @@ major_0x13258_0x68
cmpwi r9, Semaphore.kIDClass cmpwi r9, Semaphore.kIDClass
mr r31, r8 mr r31, r8
bne- major_0x13258_0x80 bne major_0x13258_0x80
bl SignalSemaphore bl SignalSemaphore
major_0x13258_0x80 major_0x13258_0x80
@ -493,7 +493,7 @@ major_0x13258_0x80
; TimerFire4 ; TimerFire4
TimerFire4 ; OUTSIDE REFERER TimerFire4 ; OUTSIDE REFERER
bne- TimerFire4_0xc bne TimerFire4_0xc
lwz r8, 0x0030(r30) lwz r8, 0x0030(r30)
bl SetEvent bl SetEvent
@ -507,12 +507,12 @@ TimerFire4_0x10 ; OUTSIDE REFERER
bl SchTaskUnrdy bl SchTaskUnrdy
lbz r17, 0x0019(r29) lbz r17, 0x0019(r29)
cmpwi r17, 0x02 cmpwi r17, 0x02
bge- TimerFire4_0x64 bge TimerFire4_0x64
mr r8, r29 mr r8, r29
lwz r16, 0x0038(r30) lwz r16, 0x0038(r30)
lwz r17, 0x003c(r30) lwz r17, 0x003c(r30)
bl clear_cr0_lt bl clear_cr0_lt
bge- TimerFire4_0x50 bge TimerFire4_0x50
mr r8, r29 mr r8, r29
bl SchRdyTaskNow bl SchRdyTaskNow
bl CalculateTimeslice bl CalculateTimeslice
@ -624,7 +624,7 @@ TimerFire7 ; OUTSIDE REFERER
lwz r18, -0x0438(r1) lwz r18, -0x0438(r1)
lwz r19, 0x0f88(r1) lwz r19, 0x0f88(r1)
subf. r19, r18, r19 subf. r19, r18, r19
ble- TimerFire8_0x1c ble TimerFire8_0x1c
srwi r19, r19, 11 srwi r19, r19, 11
mfxer r20 mfxer r20
@ -669,7 +669,7 @@ TimerFire8_0x1c ; OUTSIDE REFERER
mfxer r20 mfxer r20
cmpwi cr1, r19, 0x00 cmpwi cr1, r19, 0x00
srawi r8, r19, 31 srawi r8, r19, 31
beq- cr1, TimerFire6_0x4 beq cr1, TimerFire6_0x4
major_0x13544_0x14 major_0x13544_0x14
mftbu r16 mftbu r16
@ -683,7 +683,7 @@ major_0x13544_0x14
adde r18, r16, r8 adde r18, r16, r8
mttbu r18 mttbu r18
mttb r19 mttb r19
bgt- cr1, major_0x13544_0x64 bgt cr1, major_0x13544_0x64
major_0x13544_0x44 major_0x13544_0x44
mftbu r18 mftbu r18
@ -693,7 +693,7 @@ major_0x13544_0x44
bne- major_0x13544_0x44 bne- major_0x13544_0x44
subfc r19, r17, r19 subfc r19, r17, r19
subfe. r18, r16, r18 subfe. r18, r16, r18
blt+ major_0x13544_0x44 blt major_0x13544_0x44
major_0x13544_0x64 major_0x13544_0x64
lwz r18, -0x0368(r1) lwz r18, -0x0368(r1)
@ -710,7 +710,7 @@ TimerFire6 ; OUTSIDE REFERER
TimerFire6_0x4 ; OUTSIDE REFERER TimerFire6_0x4 ; OUTSIDE REFERER
mtxer r20 mtxer r20
beq+ cr1, TimerDispatch_0x144 beq cr1, TimerDispatch_0x144
mr r8, r30 mr r8, r30
bl EnqueueTimer bl EnqueueTimer
b TimerDispatch_0x144 b TimerDispatch_0x144
@ -735,7 +735,7 @@ TimerFire6_0x4 ; OUTSIDE REFERER
bl EnqueueTimer bl EnqueueTimer
bl getchar bl getchar
cmpwi r8, -0x01 cmpwi r8, -0x01
beq+ TimerDispatch_0x144 beq TimerDispatch_0x144
bl panic_non_interactive bl panic_non_interactive
b TimerDispatch_0x144 b TimerDispatch_0x144
@ -759,9 +759,9 @@ EnqueueTimer ; OUTSIDE REFERER
; First try to insert at head of global TMRQ ; First try to insert at head of global TMRQ
cmpw r16, r18 cmpw r16, r18
cmplw cr1, r17, r19 cmplw cr1, r17, r19
bgt- @insert_further_ahead bgt @insert_further_ahead
blt- @insert_at_tail blt @insert_at_tail
bge- cr1, @insert_further_ahead bge cr1, @insert_further_ahead
@insert_at_tail @insert_at_tail
addi r20, r1, PSA.TimerQueue + TimerQueueStruct.LLL addi r20, r1, PSA.TimerQueue + TimerQueueStruct.LLL
@ -790,9 +790,9 @@ EnqueueTimer ; OUTSIDE REFERER
lwz r19, Timer.Time+4(r20) lwz r19, Timer.Time+4(r20)
cmpw r16, r18 cmpw r16, r18
cmplw cr1, r17, r19 cmplw cr1, r17, r19
bgt- @insert_after_this_one bgt @insert_after_this_one
blt- @next blt @next
bge- cr1, @insert_after_this_one bge cr1, @insert_after_this_one
@next @next
lwz r20, LLL.Prev(r20) lwz r20, LLL.Prev(r20)
@ -826,7 +826,7 @@ DequeueTimer
lwz r16, Timer.QueueLLL + LLL.FreeForm(r8) lwz r16, Timer.QueueLLL + LLL.FreeForm(r8)
cmpwi r16, 0 cmpwi r16, 0
lwz r18, PSA.TimerQueue + TimerQueueStruct.LLL + LLL.Next(r1) lwz r18, PSA.TimerQueue + TimerQueueStruct.LLL + LLL.Next(r1)
beq+ Local_Panic beq Local_Panic
RemoveFromList r8, scratch1=r16, scratch2=r17 RemoveFromList r8, scratch1=r16, scratch2=r17
@ -834,7 +834,7 @@ DequeueTimer
cmpw r18, r8 cmpw r18, r8
stb r16, Timer.Byte3(r8) stb r16, Timer.Byte3(r8)
beq+ SetTimeslice beq SetTimeslice
blr blr
@ -880,7 +880,7 @@ GetTime
mfpvr r8 mfpvr r8
rlwinm. r8, r8, 0, 0, 14 rlwinm. r8, r8, 0, 0, 14
beq- @is_601 beq @is_601
@retry_timebase: @retry_timebase:
mftbu r8 mftbu r8

View File

@ -2141,14 +2141,14 @@ ProbePerfMonitor ; OUTSIDE REFERER
TestSPR r19, r18, r19, SIA TestSPR r19, r18, r19, SIA
or. r17, r17, r19 or. r17, r17, r19
bne- @dont_set_bit_31 bne @dont_set_bit_31
_bset r23, r23, 31 _bset r23, r23, 31
@dont_set_bit_31 @dont_set_bit_31
; ONLY test for bits 28-30 if bit 31 was just set... ; ONLY test for bits 28-30 if bit 31 was just set...
mr. r23, r23 mr. r23, r23
beq- @stop_testing_perf_monitor beq @stop_testing_perf_monitor
; SET BIT 30 if all the 750 perf monitor registers work ; SET BIT 30 if all the 750 perf monitor registers work
@ -2158,7 +2158,7 @@ ProbePerfMonitor ; OUTSIDE REFERER
TestSPR r19, r18, r19, PMC4 TestSPR r19, r18, r19, PMC4
or. r17, r17, r19 or. r17, r17, r19
bne- @dont_set_bit_30 bne @dont_set_bit_30
_bset r23, r23, 30 _bset r23, r23, 30
@dont_set_bit_30 @dont_set_bit_30
@ -2167,7 +2167,7 @@ ProbePerfMonitor ; OUTSIDE REFERER
li r18, 0xaaa0 li r18, 0xaaa0
TestSPR. r17, r18, r19, SDA TestSPR. r17, r18, r19, SDA
beq- @dont_set_bit_29 beq @dont_set_bit_29
_bset r23, r23, 29 _bset r23, r23, 29
@dont_set_bit_29 @dont_set_bit_29
@ -2181,7 +2181,7 @@ ProbePerfMonitor ; OUTSIDE REFERER
or. r17, r17, r19 or. r17, r17, r19
bne- @dont_set_bit_28 bne @dont_set_bit_28
_bset r23, r23, 28 _bset r23, r23, 28
@dont_set_bit_28 @dont_set_bit_28
@ -2204,7 +2204,7 @@ ProbePerfMonitor ; OUTSIDE REFERER
; SET BIT 18 if any perf monitor features present ; SET BIT 18 if any perf monitor features present
beq- * + 8 beq * + 8
_bset r23, r23, 18 _bset r23, r23, 18
@ -2225,7 +2225,7 @@ ProbePerfMonitor ; OUTSIDE REFERER
cmpw cr1, r20, r19 cmpw cr1, r20, r19
addi r23, r23, 0x02 addi r23, r23, 0x02
xor. r24, r24, r24 xor. r24, r24, r24
bge- cr1, ProbePerfMonitor_0x180 bge cr1, ProbePerfMonitor_0x180
addi r23, r23, -0x01 addi r23, r23, -0x01
ProbePerfMonitor_0x160 ProbePerfMonitor_0x160
@ -2235,15 +2235,15 @@ ProbePerfMonitor_0x160
cmplw cr2, r20, r19 cmplw cr2, r20, r19
rlwinm. r24, r24, 1, 0, 30 rlwinm. r24, r24, 1, 0, 30
slwi r21, r21, 1 slwi r21, r21, 1
blt- cr1, ProbePerfMonitor_0x180 blt cr1, ProbePerfMonitor_0x180
blt- cr2, ProbePerfMonitor_0x188 blt cr2, ProbePerfMonitor_0x188
ProbePerfMonitor_0x180 ProbePerfMonitor_0x180
subf r20, r19, r20 subf r20, r19, r20
ori r24, r24, 0x01 ori r24, r24, 0x01
ProbePerfMonitor_0x188 ProbePerfMonitor_0x188
bge+ ProbePerfMonitor_0x160 bge ProbePerfMonitor_0x160
stw r24, 0x05bc(r1) stw r24, 0x05bc(r1)
stb r23, 0x05b8(r1) stb r23, 0x05b8(r1)
li r21, 0x20 li r21, 0x20
@ -2309,11 +2309,11 @@ FDPEmulateInstruction
mfsprg r1, 0 mfsprg r1, 0
rlwinm r17, r27, 13, 25, 29 rlwinm r17, r27, 13, 25, 29
rlwinm r18, r27, 18, 25, 29 rlwinm r18, r27, 18, 25, 29
beq- cr6, FDP_1214_0x2b4 beq cr6, FDP_1214_0x2b4
mtcrf 0x3f, r21 mtcrf 0x3f, r21
rlwinm r19, r27, 23, 25, 29 rlwinm r19, r27, 23, 25, 29
beq- FDP_1bd0 beq FDP_1bd0
bne- cr1, FDP_1324 bne cr1, FDP_1324
rlwinm r21, r27, 2, 24, 28 rlwinm r21, r27, 2, 24, 28
add r21, r21, r25 add r21, r21, r25
lwz r20, 0x1374(r21) lwz r20, 0x1374(r21)
@ -2322,25 +2322,25 @@ FDPEmulateInstruction
rotlw. r20, r20, r23 rotlw. r20, r20, r23
add r21, r21, r25 add r21, r21, r25
mtlr r21 mtlr r21
bltlr- bltlr
FDP_1324 FDP_1324
ble- cr1, FDP_1338 ble cr1, FDP_1338
lis r20, 0x5556 lis r20, 0x5556
ori r20, r20, 0x5500 ori r20, r20, 0x5500
rotlw. r20, r20, r23 rotlw. r20, r20, r23
blt- FDP_1c18 blt FDP_1c18
FDP_1338 FDP_1338
mtcrf 0x70, r11 mtcrf 0x70, r11
li r8, 0x04 li r8, 0x04
ble- cr3, FDP_1354 ble cr3, FDP_1354
FDP_1344 FDP_1344
mtcrf 0x0f, r11 mtcrf 0x0f, r11
li r8, 0x04 li r8, 0x04
ble- cr4, FDP_1354 ble cr4, FDP_1354
li r8, 0x05 li r8, 0x05
FDP_1354 FDP_1354
@ -2424,12 +2424,12 @@ FDP_14b0
FDP_1214_0x2b4 FDP_1214_0x2b4
mtcrf 0x3f, r21 mtcrf 0x3f, r21
bns+ cr2, FDP_1338 bns cr2, FDP_1338
lwzx r18, r1, r18 lwzx r18, r1, r18
extsh r19, r27 extsh r19, r27
cmpw cr1, r19, r18 cmpw cr1, r19, r18
subf r21, r21, r21 subf r21, r21, r21
blt+ cr1, FDP_1484 blt cr1, FDP_1484
subf r21, r18, r19 subf r21, r18, r19
b FDP_1484 b FDP_1484
@ -3061,7 +3061,7 @@ FDP_1b50
FDP_1b54 FDP_1b54
bns+ cr7, FDP_0da0 bns cr7, FDP_0da0
mfcr r23 mfcr r23
rlwimi r13, r23, 0, 0, 3 rlwimi r13, r23, 0, 0, 3
b FDP_0da0 b FDP_0da0
@ -3104,7 +3104,7 @@ FDP_1bbc
FDP_1bd0 FDP_1bd0
bns+ cr2, FDP_1338 bns cr2, FDP_1338
lwzx r17, r1, r17 lwzx r17, r1, r17
rlwinm r20, r27, 26, 27, 31 rlwinm r20, r27, 26, 27, 31
lwzx r19, r1, r19 lwzx r19, r1, r19
@ -3128,7 +3128,7 @@ FDP_1c08
FDP_1c18 FDP_1c18
ble+ cr3, FDP_1338 ble cr3, FDP_1338
b major_0x03324 b major_0x03324
bgt cr6, FDP_1C18 bgt cr6, FDP_1C18
bge cr4, FDP_1338 bge cr4, FDP_1338
@ -3267,9 +3267,9 @@ FDP_1c40 ; OUTSIDE REFERER
rlwinm r17, r27, 15, 23, 27 rlwinm r17, r27, 15, 23, 27
rlwinm r18, r27, 20, 23, 27 rlwinm r18, r27, 20, 23, 27
rlwinm r19, r27, 25, 23, 27 rlwinm r19, r27, 25, 23, 27
blt- FDP_1c40_0x398 blt FDP_1c40_0x398
beq- cr2, FDP_1c40_0x43c beq cr2, FDP_1c40_0x43c
bgt- cr1, FDP_1c40_0x278 bgt cr1, FDP_1c40_0x278
lvx v3, r24, r19 lvx v3, r24, r19
vspltisw v31, 0x00 vspltisw v31, 0x00
vspltisw v29, 0x01 vspltisw v29, 0x01
@ -3384,7 +3384,7 @@ FDP_1c40_0x278
mfsprg r1, 0 mfsprg r1, 0
mtspr srr0, r10 mtspr srr0, r10
mtspr srr1, r11 mtspr srr1, r11
bne+ FDP_0E30 bne FDP_0E30
mtlr r12 mtlr r12
b FDP_0DC8 b FDP_0DC8
@ -3395,7 +3395,7 @@ FDP_1c40_0x398
mtmsr r15 mtmsr r15
isync isync
rlwinm. r8, r11, 0, 18, 18 rlwinm. r8, r11, 0, 18, 18
beq- FDP_1c40_0x3cc beq FDP_1c40_0x3cc
stfd f0, 0x0200(r6) stfd f0, 0x0200(r6)
mffs f0 mffs f0
stfd f1, 0x0208(r6) stfd f1, 0x0208(r6)
@ -3415,22 +3415,22 @@ FDP_1c40_0x3e0
addic. r8, r8, -0x01 addic. r8, r8, -0x01
lfsx f1, r24, r19 lfsx f1, r24, r19
lfsx f2, r24, r22 lfsx f2, r24, r22
bne- cr6, FDP_1c40_0x408 bne cr6, FDP_1c40_0x408
fnmsubs f3, f0, f2, f1 fnmsubs f3, f0, f2, f1
stfsx f3, r24, r17 stfsx f3, r24, r17
addi r24, r24, 0x04 addi r24, r24, 0x04
bge+ FDP_1c40_0x3e0 bge FDP_1c40_0x3e0
b FDP_1c40_0x418 b FDP_1c40_0x418
FDP_1c40_0x408 FDP_1c40_0x408
fmadds f3, f0, f2, f1 fmadds f3, f0, f2, f1
stfsx f3, r24, r17 stfsx f3, r24, r17
addi r24, r24, 0x04 addi r24, r24, 0x04
bge+ FDP_1c40_0x3e0 bge FDP_1c40_0x3e0
FDP_1c40_0x418 FDP_1c40_0x418
addi r24, r24, -0x10 addi r24, r24, -0x10
beq+ cr7, FDP_1c40_0x278 beq cr7, FDP_1c40_0x278
lfd f0, 0x00e0(r6) lfd f0, 0x00e0(r6)
mtfsf 0xff, f0 mtfsf 0xff, f0
lfd f0, 0x0200(r6) lfd f0, 0x0200(r6)
@ -3445,7 +3445,7 @@ FDP_1c40_0x43c
mtmsr r15 mtmsr r15
isync isync
rlwinm. r8, r11, 0, 18, 18 rlwinm. r8, r11, 0, 18, 18
beq- FDP_1c40_0x468 beq FDP_1c40_0x468
stfd f0, 0x0200(r6) stfd f0, 0x0200(r6)
mffs f0 mffs f0
stfd f1, 0x0208(r6) stfd f1, 0x0208(r6)
@ -3463,22 +3463,22 @@ FDP_1c40_0x47c
lfsx f0, r24, r18 lfsx f0, r24, r18
addic. r8, r8, -0x01 addic. r8, r8, -0x01
lfsx f1, r24, r19 lfsx f1, r24, r19
bne- cr6, FDP_1c40_0x4a0 bne cr6, FDP_1c40_0x4a0
fsubs f3, f0, f1 fsubs f3, f0, f1
stfsx f3, r24, r17 stfsx f3, r24, r17
addi r24, r24, 0x04 addi r24, r24, 0x04
bge+ FDP_1c40_0x47c bge FDP_1c40_0x47c
b FDP_1c40_0x4b0 b FDP_1c40_0x4b0
FDP_1c40_0x4a0 FDP_1c40_0x4a0
fadds f3, f0, f1 fadds f3, f0, f1
stfsx f3, r24, r17 stfsx f3, r24, r17
addi r24, r24, 0x04 addi r24, r24, 0x04
bge+ FDP_1c40_0x47c bge FDP_1c40_0x47c
FDP_1c40_0x4b0 FDP_1c40_0x4b0
addi r24, r24, -0x10 addi r24, r24, -0x10
beq+ cr7, FDP_1c40_0x278 beq cr7, FDP_1c40_0x278
lfd f0, 0x00e0(r6) lfd f0, 0x00e0(r6)
mtfsf 0xff, f0 mtfsf 0xff, f0
lfd f0, 0x0200(r6) lfd f0, 0x0200(r6)

File diff suppressed because it is too large Load Diff