mirror of
https://github.com/elliotnunn/powermac-rom.git
synced 2024-06-04 20:29:28 +00:00
archive
This commit is contained in:
parent
0760db7b89
commit
45787c7d0a
|
@ -1885,7 +1885,7 @@ finish_old_world
|
|||
sync
|
||||
|
||||
setup_0x1160
|
||||
bl PagingFunc1
|
||||
bl GetMeAccessToThisPage ; Page *r27 // success cr0.eq
|
||||
lwz r27, 0x0630(r1)
|
||||
lwz r27, 0x009c(r27)
|
||||
bl PagingL2PWithoutBATs
|
||||
|
@ -1897,7 +1897,7 @@ setup_0x1160
|
|||
sync
|
||||
|
||||
setup_0x1188
|
||||
bl PagingFunc1
|
||||
bl GetMeAccessToThisPage ; Page *r27 // success cr0.eq
|
||||
lwz r27, 0x0630(r1)
|
||||
lwz r27, 0x00a0(r27)
|
||||
lis r19, 0x00
|
||||
|
@ -1914,7 +1914,7 @@ setup_0x11a0
|
|||
sync
|
||||
|
||||
setup_0x11bc
|
||||
bl PagingFunc1
|
||||
bl GetMeAccessToThisPage ; Page *r27 // success cr0.eq
|
||||
cmplw r27, r19
|
||||
addi r27, r27, -0x1000
|
||||
bgt setup_0x11a0
|
||||
|
@ -1929,7 +1929,7 @@ setup_0x11bc
|
|||
sync
|
||||
|
||||
setup_0x11f0
|
||||
bl PagingFunc1
|
||||
bl GetMeAccessToThisPage ; Page *r27 // success cr0.eq
|
||||
|
||||
_log 'Nanokernel replaced. Returning to boot process^n'
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ ecDataPageFault equ 20 ; ExceptionMemRetried
|
|||
ecDataWriteViolation equ 21 ; ExceptionMemRetried
|
||||
ecDataSupAccessViolation equ 22 ; ExceptionMemRetried
|
||||
ecDataSupWriteViolation equ 23 ; ?
|
||||
ecUnknown24 equ 24 ; ExceptionMemRetried
|
||||
ecAlignment equ 24 ; ExceptionMemRetried
|
||||
|
||||
|
||||
|
||||
|
@ -1070,7 +1070,7 @@ IntAlignment ; OUTSIDE REFERER
|
|||
|
||||
addi r23, r1, KDP.VecBaseMemRetry
|
||||
|
||||
bne major_0x03548_0x20
|
||||
bne ThrowAlignmentException
|
||||
|
||||
; DSISR for misaligned X-form instruction:
|
||||
|
||||
|
@ -1087,7 +1087,7 @@ FDP_TableBase equ 0xa00
|
|||
|
||||
; Get the FDP and F.O. if we were in MSR_LE mode
|
||||
lwz r25, KDP.PA_FDP(r1)
|
||||
bne major_0x03548_0x20
|
||||
bne ThrowAlignmentException
|
||||
|
||||
|
||||
rlwinm. r21, r27, 17, 30, 31 ; evaluate hi two bits of XO (or 0 for d-form?)
|
||||
|
@ -1139,7 +1139,8 @@ FDP_TableBase equ 0xa00
|
|||
|
||||
|
||||
|
||||
IcbiNextBlock ; msr r14 // ; OUTSIDE REFERER
|
||||
IcbiNextBlock ; msr r14 //
|
||||
|
||||
sync
|
||||
mtmsr r14
|
||||
isync
|
||||
|
@ -1149,14 +1150,18 @@ IcbiNextBlock ; msr r14 // ; OUTSIDE REFERER
|
|||
isync
|
||||
blr
|
||||
|
||||
major_0x03548_0x20 ; OUTSIDE REFERER
|
||||
li r8, 0x00
|
||||
lis r17, -0x100
|
||||
|
||||
ThrowAlignmentException
|
||||
|
||||
li r8, 0
|
||||
lis r17, 0xFF00
|
||||
mtcr r8
|
||||
mr r19, r18
|
||||
rlwimi r17, r27, 7, 31, 31
|
||||
xori r17, r17, 0x01
|
||||
li r8, ecUnknown24
|
||||
|
||||
rlwimi r17, r27, 7, 31, 31 ; why ~DSISR[6]... those DSISR bytes are reserved?
|
||||
xori r17, r17, 1
|
||||
|
||||
li r8, ecAlignment
|
||||
b ExceptionMemRetried
|
||||
|
||||
|
||||
|
@ -1250,14 +1255,18 @@ MemRetryDSI_0x100
|
|||
beql IntPanicIsland
|
||||
mfsprg r28, 2
|
||||
mtlr r28
|
||||
bne cr7, MemRetryDSI_0x144
|
||||
|
||||
bc BO_IF_NOT, 30, MemRetryDSI_0x144
|
||||
|
||||
; "Ignore write to ROM", for example
|
||||
mfspr r28, srr0
|
||||
addi r28, r28, 0x04
|
||||
lwz r26, 0x0e90(r1)
|
||||
addi r28, r28, 4
|
||||
lwz r26, KDP.NanoKernelInfo + NKNanoKernelInfo.QuietWriteCount(r1)
|
||||
mtspr srr0, r28
|
||||
addi r26, r26, 0x01
|
||||
stw r26, 0x0e90(r1)
|
||||
b MemRetryDSI_0x19c
|
||||
addi r26, r26, 1
|
||||
stw r26, KDP.NanoKernelInfo + NKNanoKernelInfo.QuietWriteCount(r1)
|
||||
|
||||
b MemRetryDSI_GracefulExit
|
||||
|
||||
MemRetryDSI_0x144
|
||||
andi. r28, r31, 0x03
|
||||
|
@ -1285,7 +1294,7 @@ MemRetryDSI_0x158
|
|||
mtlr r28
|
||||
mtspr srr1, r29
|
||||
|
||||
MemRetryDSI_0x19c
|
||||
MemRetryDSI_GracefulExit
|
||||
mfsprg r1, 1
|
||||
rlwinm r26, r25, 30, 24, 31
|
||||
rfi
|
||||
|
@ -1297,14 +1306,17 @@ MemRetryDSI_0x1c8
|
|||
bne MemRetryMachineCheck_0x14c
|
||||
|
||||
_Lock PSA.HTABLock, scratch1=r28, scratch2=r31
|
||||
|
||||
bl PagingFunc1
|
||||
bl GetMeAccessToThisPage ; Page *r27 // success cr0.eq
|
||||
_AssertAndRelease PSA.HTABLock, scratch=r28
|
||||
|
||||
mfsprg r28, 2
|
||||
mtlr r28
|
||||
beq MemRetryDSI_0x19c
|
||||
|
||||
beq MemRetryDSI_GracefulExit
|
||||
|
||||
li r8, ecDataInvalidAddress
|
||||
bge ExceptionMemRetried
|
||||
|
||||
li r8, ecDataPageFault
|
||||
b ExceptionMemRetried
|
||||
|
||||
|
@ -1337,10 +1349,13 @@ MemRetryMachineCheck ; OUTSIDE REFERER
|
|||
_log '^n'
|
||||
|
||||
mr r8, r28
|
||||
|
||||
lwz r1, EWA.PA_KDP(r1)
|
||||
lwz r27, 0x0694(r1)
|
||||
|
||||
subf r28, r19, r27
|
||||
cmpwi r28, -0x10
|
||||
|
||||
blt MemRetryMachineCheck_0x14c
|
||||
cmpwi r28, 0x10
|
||||
bgt MemRetryMachineCheck_0x14c
|
||||
|
@ -1350,7 +1365,9 @@ MemRetryMachineCheck ; OUTSIDE REFERER
|
|||
lwz r28, 0x0e98(r1)
|
||||
addi r28, r28, 0x01
|
||||
stw r28, 0x0e98(r1)
|
||||
|
||||
lwz r29, 0x0698(r1)
|
||||
|
||||
li r28, 0x00
|
||||
stw r28, 0x0000(r29)
|
||||
mfspr r28, pvr
|
||||
|
@ -1394,7 +1411,7 @@ IntISI ; OUTSIDE REFERER
|
|||
_Lock PSA.HTABLock, scratch1=r28, scratch2=r31
|
||||
|
||||
mr r27, r10
|
||||
bl PagingFunc1
|
||||
bl GetMeAccessToThisPage ; Page *r27 // success cr0.eq
|
||||
_AssertAndRelease PSA.HTABLock, scratch=r28
|
||||
mfsprg r8, 0
|
||||
bne major_0x039dc
|
||||
|
@ -1499,7 +1516,7 @@ PIHDSI ; OUTSIDE REFERER
|
|||
_Lock PSA.HTABLock, scratch1=r28, scratch2=r31
|
||||
|
||||
mfspr r27, dar
|
||||
bl PagingFunc1
|
||||
bl GetMeAccessToThisPage ; Page *r27 // success cr0.eq
|
||||
_AssertAndRelease PSA.HTABLock, scratch=r28
|
||||
mfsprg r8, 0
|
||||
bne major_0x039dc
|
||||
|
|
|
@ -5,7 +5,7 @@ Local_Panic set *
|
|||
|
||||
align 5
|
||||
|
||||
PagingFunc1 ; OUTSIDE REFERER
|
||||
GetMeAccessToThisPage ; Page *r27 // success cr0.eq ; OUTSIDE REFERER
|
||||
mfsprg r29, 0
|
||||
mflr r28
|
||||
stw r8, -0x00dc(r29)
|
||||
|
|
|
@ -940,7 +940,7 @@ print_memory_logical_0x8
|
|||
|
||||
print_memory_logical_0x24
|
||||
mr r27, r16
|
||||
bl PagingFunc1
|
||||
bl GetMeAccessToThisPage ; Page *r27 // success cr0.eq
|
||||
beq print_memory_logical_0x5c
|
||||
blt print_memory_logical_0x48
|
||||
_log '..'
|
||||
|
@ -974,7 +974,7 @@ print_memory_logical_0x84
|
|||
|
||||
print_memory_logical_0xac
|
||||
mr r27, r16
|
||||
bl PagingFunc1
|
||||
bl GetMeAccessToThisPage ; Page *r27 // success cr0.eq
|
||||
li r8, 0x20
|
||||
bne print_memory_logical_0xdc
|
||||
bl PagingL2PWithoutBATs
|
||||
|
|
|
@ -1868,7 +1868,7 @@ VMLastExportedFunc_0xd7
|
|||
mr r14, r26
|
||||
mflr r6
|
||||
slwi r27, r4, 12
|
||||
bl PagingFunc1
|
||||
bl GetMeAccessToThisPage ; Page *r27 // success cr0.eq
|
||||
bnel Local_Panic
|
||||
mr r27, r7
|
||||
mr r29, r8
|
||||
|
|
137
al2.txt
Normal file
137
al2.txt
Normal file
|
@ -0,0 +1,137 @@
|
|||
MRLoad1241
|
||||
lbz mrScratch, -8(mrBase)
|
||||
subi mrCtr, mrCtr, 2
|
||||
rlwimi mrHigh, mrScratch, 8, 0xFF000000
|
||||
|
||||
MRLoad241
|
||||
lhz mrScratch, -7(mrBase)
|
||||
subi mrCtr, mrCtr, 4
|
||||
rlwimi mrHigh, mrScratch, 24, 0x00FFFF00
|
||||
b MRLoad41
|
||||
|
||||
MRLoad141
|
||||
lbz mrScratch, -6(mrBase)
|
||||
subi mrCtr, mrCtr, 2
|
||||
rlwimi mrHigh, mrScratch, 24, 0x0000FF00
|
||||
|
||||
MRLoad41
|
||||
lwz mrScratch, -5(mrBase)
|
||||
subi mrCtr, mrCtr, 8
|
||||
rlwimi mrHigh, mrScratch, 24, 0x000000FF
|
||||
rlwimi mrLow, mrScratch, 24, 0xFFFFFF00
|
||||
b MRLoad1
|
||||
|
||||
MRLoad1421
|
||||
lbz mrScratch, -8(mrBase)
|
||||
subi mrCtr, mrCtr, 2
|
||||
rlwimi mrHigh, mrScratch, 8, 0xFF000000
|
||||
|
||||
MRLoad421
|
||||
lwz mrScratch, -7(mrBase)
|
||||
subi mrCtr, mrCtr, 8
|
||||
rlwimi mrHigh, mrScratch, 8, 0x00FFFFFF
|
||||
rlwimi mrLow, mrScratch, 8, 0xFF000000
|
||||
b MRLoad21
|
||||
|
||||
MRLoad1221
|
||||
lbz mrScratch, -6(mrBase)
|
||||
subi mrCtr, mrCtr, 2
|
||||
rlwimi mrHigh, mrScratch, 24, 0x0000FF00
|
||||
|
||||
MRLoad221
|
||||
lhz mrScratch, -5(mrBase)
|
||||
subi mrCtr, mrCtr, 4
|
||||
rlwimi mrHigh, mrScratch, 8, 0x000000FF
|
||||
rlwimi mrLow, mrScratch, 8, 0xFF000000
|
||||
b MRLoad21
|
||||
|
||||
MRLoad121
|
||||
lbz mrScratch, -4(mrBase)
|
||||
subi mrCtr, mrCtr, 2
|
||||
rlwimi mrLow, mrScratch, 8, 0xFF000000
|
||||
|
||||
MRLoad21
|
||||
lhz mrScratch, -3(mrBase)
|
||||
subi mrCtr, mrCtr, 4
|
||||
rlwimi mrLow, mrScratch, 24, 0x00FFFF00
|
||||
b MRLoad1
|
||||
|
||||
MRLoad11
|
||||
lbz mrScratch, -2(mrBase)
|
||||
subi mrCtr, mrCtr, 2
|
||||
rlwimi mrLow, mrScratch, 24, 0x0000FF00
|
||||
|
||||
MRLoad1
|
||||
lbz mrScratch, -1(mrBase)
|
||||
rlwimi mrLow, mrScratch, 0, 0x000000FF
|
||||
b MRExecuted
|
||||
|
||||
MRLoad242
|
||||
lhz mrScratch, -8(mrBase)
|
||||
subi mrCtr, mrCtr, 4
|
||||
rlwimi mrHigh, mrScratch, 16, 0xFFFF0000
|
||||
b MRLoad42
|
||||
|
||||
MRLoad142
|
||||
lbz mrScratch, -7(mrBase)
|
||||
subi mrCtr, mrCtr, 2
|
||||
rlwimi mrHigh, mrScratch, 16, 0x00FF0000
|
||||
|
||||
MRLoad42
|
||||
lwz mrScratch, -6(mrBase)
|
||||
subi mrCtr, mrCtr, 8
|
||||
rlwimi mrHigh, mrScratch, 16, 0x0000FFFF
|
||||
rlwimi mrLow, mrScratch, 16, 0xFFFF0000
|
||||
b MRLoad2
|
||||
|
||||
MRLoad122
|
||||
lbz mrScratch, -5(mrBase)
|
||||
subi mrCtr, mrCtr, 2
|
||||
rlwimi mrHigh, mrScratch, 0, 0x000000FF
|
||||
b MRLoad22
|
||||
|
||||
MRLoad12
|
||||
lbz mrScratch, -3(mrBase)
|
||||
subi mrCtr, mrCtr, 2
|
||||
rlwimi mrLow, mrScratch, 16, 0x00FF0000
|
||||
b MRLoad2
|
||||
|
||||
MRLoad44
|
||||
lwz mrHigh, -8(mrBase)
|
||||
subi mrCtr, mrCtr, 8
|
||||
lwz mrLow, -4(mrBase)
|
||||
b MRExecuted
|
||||
|
||||
MRLoad124
|
||||
lbz mrScratch, -7(mrBase)
|
||||
subi mrCtr, mrCtr, 2
|
||||
rlwimi mrHigh, mrScratch, 16, 0x00FF0000
|
||||
|
||||
MRLoad24
|
||||
lhz mrScratch, -6(mrBase)
|
||||
subi mrCtr, mrCtr, 4
|
||||
rlwimi mrHigh, mrScratch, 0, 0x0000FFFF
|
||||
lwz mrLow, -4(mrBase)
|
||||
b MRExecuted
|
||||
|
||||
MRLoad14
|
||||
lbz mrScratch, -5(mrBase)
|
||||
subi mrCtr, mrCtr, 2
|
||||
rlwimi mrHigh, mrScratch, 0, 0x000000FF
|
||||
lwz mrLow, -4(mrBase)
|
||||
b MRExecuted
|
||||
|
||||
MRLoad4
|
||||
bc BO_IF, 23, @atomic
|
||||
lwz mrLow, -4(mrBase)
|
||||
b MRExecuted
|
||||
@atomic
|
||||
li mrScratch, -4
|
||||
lwarx mrScratch, mrBase
|
||||
b MRExecuted
|
||||
|
||||
MRLoad8
|
||||
lwz mrLow, -8(mrBase)
|
||||
lwz mrHigh, -4(mrBase)
|
||||
b MRExecuted
|
||||
|
|
@ -151,6 +151,12 @@ MRLoadVector
|
|||
_bset r11, r11, 6
|
||||
blr
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
MRStore1241
|
||||
srwi mrScratch, mrHigh, 24
|
||||
stb mrScratch, -8(mrBase)
|
||||
|
|
314
halfwits.s
Normal file
314
halfwits.s
Normal file
|
@ -0,0 +1,314 @@
|
|||
FDP_03ec
|
||||
lbz r23, -0x0008(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r23, 8, 0
|
||||
FDP_03f8
|
||||
lhz r23, -0x0007(r19)
|
||||
subi r17, r17, 4
|
||||
insrwi r20, r23, 16, 8
|
||||
b FDP_0414
|
||||
|
||||
|
||||
FDP_0408
|
||||
lbz r23, -0x0006(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r23, 8, 16
|
||||
FDP_0414
|
||||
lwz r23, -0x0005(r19)
|
||||
subi r17, r17, 8
|
||||
inslwi r20, r23, 8, 24
|
||||
insrwi r21, r23, 24, 0
|
||||
b FDP_0490
|
||||
|
||||
|
||||
FDP_0428
|
||||
lbz r23, -0x0008(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r23, 8, 0
|
||||
FDP_0434
|
||||
lwz r23, -0x0007(r19)
|
||||
subi r17, r17, 8
|
||||
inslwi r20, r23, 24, 8
|
||||
insrwi r21, r23, 8, 0
|
||||
b FDP_0474
|
||||
|
||||
|
||||
FDP_0448
|
||||
lbz r23, -0x0006(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r23, 8, 16
|
||||
FDP_0454
|
||||
lhz r23, -0x0005(r19)
|
||||
subi r17, r17, 4
|
||||
rlwimi r20, r23, 24, 24, 31
|
||||
insrwi r21, r23, 8, 0
|
||||
b FDP_0474
|
||||
|
||||
|
||||
FDP_0468
|
||||
lbz r23, -0x0004(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r21, r23, 8, 0
|
||||
FDP_0474
|
||||
lhz r23, -0x0003(r19)
|
||||
subi r17, r17, 4
|
||||
insrwi r21, r23, 16, 8
|
||||
b FDP_0490
|
||||
|
||||
|
||||
FDP_0484
|
||||
lbz r23, -0x0002(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r21, r23, 8, 16
|
||||
FDP_0490
|
||||
lbz r23, -0x0001(r19)
|
||||
insrwi r21, r23, 8, 24
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_049c
|
||||
lhz r23, -0x0008(r19)
|
||||
subi r17, r17, 4
|
||||
insrwi r20, r23, 16, 0
|
||||
b FDP_04B8
|
||||
|
||||
|
||||
FDP_04ac
|
||||
lbz r23, -0x0007(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r23, 8, 8
|
||||
FDP_04b8
|
||||
lwz r23, -0x0006(r19)
|
||||
subi r17, r17, 8
|
||||
inslwi r20, r23, 16, 16
|
||||
insrwi r21, r23, 16, 0
|
||||
b FDP_0114
|
||||
|
||||
|
||||
FDP_04cc
|
||||
lbz r23, -0x0005(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r23, 8, 24
|
||||
b FDP_0108
|
||||
|
||||
|
||||
FDP_04dc
|
||||
lbz r23, -0x0003(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r21, r23, 8, 8
|
||||
b FDP_0114
|
||||
|
||||
|
||||
FDP_04ec
|
||||
lwz r20, -0x0008(r19)
|
||||
subi r17, r17, 8
|
||||
lwz r21, -0x0004(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_04fc
|
||||
lbz r23, -0x0007(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r23, 8, 8
|
||||
FDP_0508
|
||||
lhz r23, -0x0006(r19)
|
||||
subi r17, r17, 4
|
||||
insrwi r20, r23, 16, 16
|
||||
lwz r21, -0x0004(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_051c
|
||||
lbz r23, -0x0005(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r23, 8, 24
|
||||
lwz r21, -0x0004(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_0530
|
||||
bso cr5, FDP_053C
|
||||
lwz r21, -0x0004(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_053c
|
||||
li r23, -4
|
||||
lwarx r21, r23, r19
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_0548
|
||||
lwz r20, -0x0008(r19)
|
||||
lwz r21, -0x0004(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_0554
|
||||
clrrwi r23, r25, 10
|
||||
rlwimi r23, r17, 14, 24, 28
|
||||
addi r23, r23, 9760
|
||||
mtlr r23
|
||||
mr r23, r18
|
||||
oris r11, r11, 0x0200
|
||||
blr
|
||||
|
||||
|
||||
FDP_0570
|
||||
srwi r23, r20, 24
|
||||
stb r23, -0x0008(r19)
|
||||
subi r17, r17, 2
|
||||
FDP_057c
|
||||
srwi r23, r20, 8
|
||||
sth r23, -0x0007(r19)
|
||||
subi r17, r17, 4
|
||||
b FDP_0598
|
||||
|
||||
|
||||
FDP_058c
|
||||
srwi r23, r20, 8
|
||||
stb r23, -0x0006(r19)
|
||||
subi r17, r17, 2
|
||||
FDP_0598
|
||||
srwi r23, r21, 8
|
||||
insrwi r23, r20, 8, 0
|
||||
stw r23, -0x0005(r19)
|
||||
subi r17, r17, 8
|
||||
stb r21, -0x0001(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_05b0
|
||||
srwi r23, r20, 24
|
||||
stb r23, -0x0008(r19)
|
||||
subi r17, r17, 2
|
||||
FDP_05bc
|
||||
srwi r23, r21, 24
|
||||
insrwi r23, r20, 24, 0
|
||||
stw r23, -0x0007(r19)
|
||||
subi r17, r17, 8
|
||||
b FDP_05FC
|
||||
|
||||
|
||||
FDP_05d0
|
||||
srwi r23, r20, 8
|
||||
stb r23, -0x0006(r19)
|
||||
subi r17, r17, 2
|
||||
FDP_05dc
|
||||
srwi r23, r21, 24
|
||||
insrwi r23, r20, 8, 16
|
||||
sth r23, -0x0005(r19)
|
||||
subi r17, r17, 4
|
||||
b FDP_05FC
|
||||
|
||||
|
||||
FDP_05f0
|
||||
srwi r23, r21, 24
|
||||
stb r23, -0x0004(r19)
|
||||
subi r17, r17, 2
|
||||
FDP_05fc
|
||||
srwi r23, r21, 8
|
||||
sth r23, -0x0003(r19)
|
||||
subi r17, r17, 4
|
||||
stb r21, -0x0001(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_0610
|
||||
srwi r23, r21, 8
|
||||
stb r23, -0x0002(r19)
|
||||
subi r17, r17, 2
|
||||
FDP_061c
|
||||
stb r21, -0x0001(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_0624
|
||||
srwi r23, r20, 16
|
||||
sth r23, -0x0008(r19)
|
||||
subi r17, r17, 4
|
||||
b FDP_0640
|
||||
|
||||
|
||||
FDP_0634
|
||||
srwi r23, r20, 16
|
||||
stb r23, -0x0007(r19)
|
||||
subi r17, r17, 2
|
||||
FDP_0640
|
||||
srwi r23, r21, 16
|
||||
insrwi r23, r20, 16, 0
|
||||
stw r23, -0x0006(r19)
|
||||
subi r17, r17, 8
|
||||
sth r21, -0x0002(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_0658
|
||||
stb r20, -0x0005(r19)
|
||||
subi r17, r17, 2
|
||||
b FDP_00F4
|
||||
|
||||
|
||||
FDP_0664
|
||||
srwi r23, r21, 16
|
||||
stb r23, -0x0003(r19)
|
||||
subi r17, r17, 2
|
||||
FDP_0670
|
||||
sth r21, -0x0002(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_0678
|
||||
stw r20, -0x0008(r19)
|
||||
subi r17, r17, 8
|
||||
stw r21, -0x0004(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_0688
|
||||
srwi r23, r20, 16
|
||||
stb r23, -0x0007(r19)
|
||||
subi r17, r17, 2
|
||||
FDP_0694
|
||||
sth r20, -0x0006(r19)
|
||||
subi r17, r17, 4
|
||||
stw r21, -0x0004(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_06a4
|
||||
stb r20, -0x0005(r19)
|
||||
subi r17, r17, 2
|
||||
stw r21, -0x0004(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_06b4
|
||||
bso cr5, FDP_06C0
|
||||
stw r21, -0x0004(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_06c0
|
||||
li r23, -4
|
||||
stwcx. r21, r23, r19
|
||||
isync
|
||||
mfcr r23
|
||||
rlwimi r13, r23, 0, 0, 3
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_06d8
|
||||
stw r20, -0x0008(r19)
|
||||
stw r21, -0x0004(r19)
|
||||
b FDP_011C
|
||||
|
||||
|
||||
FDP_06e4
|
||||
clrrwi r23, r25, 10
|
||||
rlwimi r23, r17, 14, 24, 28
|
||||
addi r23, r23, 10784
|
||||
mtlr r23
|
||||
mr r23, r18
|
||||
oris r11, r11, 0x0200
|
||||
blr
|
104
pdp.py
104
pdp.py
|
@ -85,22 +85,35 @@ def list_perms_ending_with(x):
|
|||
yield from list_perms_ending_with(nextlet + x)
|
||||
|
||||
|
||||
SPECIAL_LOADSTORE_RETURN_PATHS = ['2', '22']
|
||||
|
||||
def final_loadstore_list():
|
||||
def final_load_list():
|
||||
"""
|
||||
Big waterfall of loads/stores!
|
||||
Big waterfall of loads!
|
||||
"""
|
||||
the_list = []
|
||||
|
||||
for ender in '8421':
|
||||
for x in list_perms_ending_with(ender):
|
||||
if x not in SPECIAL_LOADSTORE_RETURN_PATHS:
|
||||
if x not in ('2','22'):
|
||||
the_list.append(x)
|
||||
|
||||
return list(reversed(the_list))
|
||||
|
||||
FINAL_LOADSTORE_LIST = final_loadstore_list()
|
||||
FINAL_LOAD_LIST = final_load_list()
|
||||
|
||||
def final_store_list():
|
||||
"""
|
||||
Big waterfall of stores!
|
||||
"""
|
||||
the_list = []
|
||||
|
||||
for ender in '8421':
|
||||
for x in list_perms_ending_with(ender):
|
||||
if x not in []:
|
||||
the_list.append(x)
|
||||
|
||||
return list(reversed(the_list))
|
||||
|
||||
FINAL_STORE_LIST = final_store_list()
|
||||
|
||||
|
||||
################################################################
|
||||
|
@ -160,7 +173,7 @@ def MRVectorAlignDispatchTable():
|
|||
|
||||
|
||||
def MRAlignLoads():
|
||||
waterfall = FINAL_LOADSTORE_LIST
|
||||
waterfall = FINAL_LOAD_LIST
|
||||
|
||||
for wi in range(len(waterfall)):
|
||||
sizes = waterfall[wi]
|
||||
|
@ -230,6 +243,81 @@ def MRAlignLoads():
|
|||
|
||||
print()
|
||||
|
||||
def MRAlignStores():
|
||||
waterfall = FINAL_STORE_LIST
|
||||
|
||||
for wi in range(len(waterfall)):
|
||||
sizes = waterfall[wi]
|
||||
|
||||
label('MRStore' + sizes)
|
||||
|
||||
sizes_as_list = [int(x) for x in sizes]
|
||||
this_size = sizes_as_list[0]
|
||||
total_size = sum(sizes_as_list)
|
||||
remain_size = sum(sizes_as_list[1:])
|
||||
|
||||
|
||||
MRAlignLoads()
|
||||
# PART 1: load a number of bytes equal to the first element in "sizes"
|
||||
|
||||
inst = {1: 'stb', 2: 'sth', 4: 'stw', 8: 'no way'}[this_size]
|
||||
|
||||
if sizes == '8': # special case
|
||||
directive('stw', 'mrLow', '-8(mrBase)')
|
||||
directive('stw', 'mrHigh', '-4(mrBase)')
|
||||
|
||||
elif remain_size == 4: # straight store!
|
||||
directive(inst, 'mrHigh', '-%d(mrBase)' % total_size)
|
||||
if len(sizes) > 1: directive('subi', 'mrCtr', 'mrCtr', 2 * this_size)
|
||||
|
||||
elif sizes == '4': # special case: emulate lwarx if asked
|
||||
directive('bc', 'BO_IF', 23, '@atomic')
|
||||
directive('stw', 'mrLow', '-4(mrBase)')
|
||||
directive('b', 'MRExecuted')
|
||||
label('@atomic')
|
||||
directive('li', 'mrScratch', -4)
|
||||
directive('stwcx.', 'mrScratch', 'mrBase')
|
||||
directive('isync')
|
||||
directive('mfcr', 'mrScratch')
|
||||
directive('rlwimi', 'r13', 'mrScratch', 0, '0xFF000000')
|
||||
|
||||
else: # arrange intermediate register then store it
|
||||
fiddler = 'rlwinm'
|
||||
|
||||
for regexponent, regname in [(0,'mrLow'), (4,'mrHigh')]:
|
||||
thisexponent = remain_size
|
||||
if regexponent >= thisexponent + this_size: continue
|
||||
if thisexponent >= regexponent + 4: continue
|
||||
|
||||
lshift = (regexponent - thisexponent) * 8
|
||||
|
||||
mask = (1 << (8 * this_size)) - 1
|
||||
|
||||
directive(fiddler, 'mrScratch', regname, normlshift(lshift), '0x%08X' % mask)
|
||||
fiddler = 'rlwimi'
|
||||
|
||||
directive(inst, 'mrScratch', '-%d(mrBase)' % total_size)
|
||||
if len(sizes) > 1: directive('subi', 'mrCtr', 'mrCtr', 2 * this_size)
|
||||
|
||||
|
||||
# PART 2: jump somewhere that will do the rest of the loads in "sizes"
|
||||
|
||||
if wi + 1 < len(waterfall) and waterfall[wi+1] == sizes[1:] and sizes[1:] != '4': # fall through
|
||||
# but beware the special case!
|
||||
pass
|
||||
|
||||
elif len(sizes[1:]) == 1: # special case: inline a single store instead of jumping
|
||||
inst = {1: 'stb', 2: 'sth', 4: 'stw', 8: 'no way'}[remain_size]
|
||||
directive(inst, 'mrLow', '-%d(mrBase)' % remain_size)
|
||||
directive('b', 'MRExecuted')
|
||||
|
||||
elif remain_size == 0: # finished executing
|
||||
directive('b', 'MRExecuted')
|
||||
|
||||
else:
|
||||
directive('b', 'MRStore' + sizes[1:])
|
||||
|
||||
print()
|
||||
|
||||
|
||||
|
||||
MRAlignStores()
|
||||
|
|
3320
translation-remaining.s
Normal file
3320
translation-remaining.s
Normal file
File diff suppressed because it is too large
Load Diff
256
vector stuff.s
Normal file
256
vector stuff.s
Normal file
|
@ -0,0 +1,256 @@
|
|||
lvx v0, 0, r23
|
||||
lvx v1, 0, r23
|
||||
lvx v2, 0, r23
|
||||
lvx v3, 0, r23
|
||||
lvx v4, 0, r23
|
||||
lvx v5, 0, r23
|
||||
lvx v6, 0, r23
|
||||
lvx v7, 0, r23
|
||||
lvx v8, 0, r23
|
||||
lvx v9, 0, r23
|
||||
lvx v10, 0, r23
|
||||
lvx v11, 0, r23
|
||||
lvx v12, 0, r23
|
||||
lvx v13, 0, r23
|
||||
lvx v14, 0, r23
|
||||
lvx v15, 0, r23
|
||||
lvx v16, 0, r23
|
||||
lvx v17, 0, r23
|
||||
lvx v18, 0, r23
|
||||
lvx v19, 0, r23
|
||||
lvx v20, 0, r23
|
||||
lvx v21, 0, r23
|
||||
lvx v22, 0, r23
|
||||
lvx v23, 0, r23
|
||||
lvx v24, 0, r23
|
||||
lvx v25, 0, r23
|
||||
lvx v26, 0, r23
|
||||
lvx v27, 0, r23
|
||||
lvx v28, 0, r23
|
||||
lvx v29, 0, r23
|
||||
lvx v30, 0, r23
|
||||
lvx v31, 0, r23
|
||||
lvebx v0, 0, r23
|
||||
lvebx v1, 0, r23
|
||||
lvebx v2, 0, r23
|
||||
lvebx v3, 0, r23
|
||||
lvebx v4, 0, r23
|
||||
lvebx v5, 0, r23
|
||||
lvebx v6, 0, r23
|
||||
lvebx v7, 0, r23
|
||||
lvebx v8, 0, r23
|
||||
lvebx v9, 0, r23
|
||||
lvebx v10, 0, r23
|
||||
lvebx v11, 0, r23
|
||||
lvebx v12, 0, r23
|
||||
lvebx v13, 0, r23
|
||||
lvebx v14, 0, r23
|
||||
lvebx v15, 0, r23
|
||||
lvebx v16, 0, r23
|
||||
lvebx v17, 0, r23
|
||||
lvebx v18, 0, r23
|
||||
lvebx v19, 0, r23
|
||||
lvebx v20, 0, r23
|
||||
lvebx v21, 0, r23
|
||||
lvebx v22, 0, r23
|
||||
lvebx v23, 0, r23
|
||||
lvebx v24, 0, r23
|
||||
lvebx v25, 0, r23
|
||||
lvebx v26, 0, r23
|
||||
lvebx v27, 0, r23
|
||||
lvebx v28, 0, r23
|
||||
lvebx v29, 0, r23
|
||||
lvebx v30, 0, r23
|
||||
lvebx v31, 0, r23
|
||||
lvehx v0, 0, r23
|
||||
lvehx v1, 0, r23
|
||||
lvehx v2, 0, r23
|
||||
lvehx v3, 0, r23
|
||||
lvehx v4, 0, r23
|
||||
lvehx v5, 0, r23
|
||||
lvehx v6, 0, r23
|
||||
lvehx v7, 0, r23
|
||||
lvehx v8, 0, r23
|
||||
lvehx v9, 0, r23
|
||||
lvehx v10, 0, r23
|
||||
lvehx v11, 0, r23
|
||||
lvehx v12, 0, r23
|
||||
lvehx v13, 0, r23
|
||||
lvehx v14, 0, r23
|
||||
lvehx v15, 0, r23
|
||||
lvehx v16, 0, r23
|
||||
lvehx v17, 0, r23
|
||||
lvehx v18, 0, r23
|
||||
lvehx v19, 0, r23
|
||||
lvehx v20, 0, r23
|
||||
lvehx v21, 0, r23
|
||||
lvehx v22, 0, r23
|
||||
lvehx v23, 0, r23
|
||||
lvehx v24, 0, r23
|
||||
lvehx v25, 0, r23
|
||||
lvehx v26, 0, r23
|
||||
lvehx v27, 0, r23
|
||||
lvehx v28, 0, r23
|
||||
lvehx v29, 0, r23
|
||||
lvehx v30, 0, r23
|
||||
lvehx v31, 0, r23
|
||||
lvewx v0, 0, r23
|
||||
lvewx v1, 0, r23
|
||||
lvewx v2, 0, r23
|
||||
lvewx v3, 0, r23
|
||||
lvewx v4, 0, r23
|
||||
lvewx v5, 0, r23
|
||||
lvewx v6, 0, r23
|
||||
lvewx v7, 0, r23
|
||||
lvewx v8, 0, r23
|
||||
lvewx v9, 0, r23
|
||||
lvewx v10, 0, r23
|
||||
lvewx v11, 0, r23
|
||||
lvewx v12, 0, r23
|
||||
lvewx v13, 0, r23
|
||||
lvewx v14, 0, r23
|
||||
lvewx v15, 0, r23
|
||||
lvewx v16, 0, r23
|
||||
lvewx v17, 0, r23
|
||||
lvewx v18, 0, r23
|
||||
lvewx v19, 0, r23
|
||||
lvewx v20, 0, r23
|
||||
lvewx v21, 0, r23
|
||||
lvewx v22, 0, r23
|
||||
lvewx v23, 0, r23
|
||||
lvewx v24, 0, r23
|
||||
lvewx v25, 0, r23
|
||||
lvewx v26, 0, r23
|
||||
lvewx v27, 0, r23
|
||||
lvewx v28, 0, r23
|
||||
lvewx v29, 0, r23
|
||||
lvewx v30, 0, r23
|
||||
lvewx v31, 0, r23
|
||||
stvx v0, 0, r23
|
||||
stvx v1, 0, r23
|
||||
stvx v2, 0, r23
|
||||
stvx v3, 0, r23
|
||||
stvx v4, 0, r23
|
||||
stvx v5, 0, r23
|
||||
stvx v6, 0, r23
|
||||
stvx v7, 0, r23
|
||||
stvx v8, 0, r23
|
||||
stvx v9, 0, r23
|
||||
stvx v10, 0, r23
|
||||
stvx v11, 0, r23
|
||||
stvx v12, 0, r23
|
||||
stvx v13, 0, r23
|
||||
stvx v14, 0, r23
|
||||
stvx v15, 0, r23
|
||||
stvx v16, 0, r23
|
||||
stvx v17, 0, r23
|
||||
stvx v18, 0, r23
|
||||
stvx v19, 0, r23
|
||||
stvx v20, 0, r23
|
||||
stvx v21, 0, r23
|
||||
stvx v22, 0, r23
|
||||
stvx v23, 0, r23
|
||||
stvx v24, 0, r23
|
||||
stvx v25, 0, r23
|
||||
stvx v26, 0, r23
|
||||
stvx v27, 0, r23
|
||||
stvx v28, 0, r23
|
||||
stvx v29, 0, r23
|
||||
stvx v30, 0, r23
|
||||
stvx v31, 0, r23
|
||||
stvebx v0, 0, r23
|
||||
stvebx v1, 0, r23
|
||||
stvebx v2, 0, r23
|
||||
stvebx v3, 0, r23
|
||||
stvebx v4, 0, r23
|
||||
stvebx v5, 0, r23
|
||||
stvebx v6, 0, r23
|
||||
stvebx v7, 0, r23
|
||||
stvebx v8, 0, r23
|
||||
stvebx v9, 0, r23
|
||||
stvebx v10, 0, r23
|
||||
stvebx v11, 0, r23
|
||||
stvebx v12, 0, r23
|
||||
stvebx v13, 0, r23
|
||||
stvebx v14, 0, r23
|
||||
stvebx v15, 0, r23
|
||||
stvebx v16, 0, r23
|
||||
stvebx v17, 0, r23
|
||||
stvebx v18, 0, r23
|
||||
stvebx v19, 0, r23
|
||||
stvebx v20, 0, r23
|
||||
stvebx v21, 0, r23
|
||||
stvebx v22, 0, r23
|
||||
stvebx v23, 0, r23
|
||||
stvebx v24, 0, r23
|
||||
stvebx v25, 0, r23
|
||||
stvebx v26, 0, r23
|
||||
stvebx v27, 0, r23
|
||||
stvebx v28, 0, r23
|
||||
stvebx v29, 0, r23
|
||||
stvebx v30, 0, r23
|
||||
stvebx v31, 0, r23
|
||||
stvehx v0, 0, r23
|
||||
stvehx v1, 0, r23
|
||||
stvehx v2, 0, r23
|
||||
stvehx v3, 0, r23
|
||||
stvehx v4, 0, r23
|
||||
stvehx v5, 0, r23
|
||||
stvehx v6, 0, r23
|
||||
stvehx v7, 0, r23
|
||||
stvehx v8, 0, r23
|
||||
stvehx v9, 0, r23
|
||||
stvehx v10, 0, r23
|
||||
stvehx v11, 0, r23
|
||||
stvehx v12, 0, r23
|
||||
stvehx v13, 0, r23
|
||||
stvehx v14, 0, r23
|
||||
stvehx v15, 0, r23
|
||||
stvehx v16, 0, r23
|
||||
stvehx v17, 0, r23
|
||||
stvehx v18, 0, r23
|
||||
stvehx v19, 0, r23
|
||||
stvehx v20, 0, r23
|
||||
stvehx v21, 0, r23
|
||||
stvehx v22, 0, r23
|
||||
stvehx v23, 0, r23
|
||||
stvehx v24, 0, r23
|
||||
stvehx v25, 0, r23
|
||||
stvehx v26, 0, r23
|
||||
stvehx v27, 0, r23
|
||||
stvehx v28, 0, r23
|
||||
stvehx v29, 0, r23
|
||||
stvehx v30, 0, r23
|
||||
stvehx v31, 0, r23
|
||||
stvewx v0, 0, r23
|
||||
stvewx v1, 0, r23
|
||||
stvewx v2, 0, r23
|
||||
stvewx v3, 0, r23
|
||||
stvewx v4, 0, r23
|
||||
stvewx v5, 0, r23
|
||||
stvewx v6, 0, r23
|
||||
stvewx v7, 0, r23
|
||||
stvewx v8, 0, r23
|
||||
stvewx v9, 0, r23
|
||||
stvewx v10, 0, r23
|
||||
stvewx v11, 0, r23
|
||||
stvewx v12, 0, r23
|
||||
stvewx v13, 0, r23
|
||||
stvewx v14, 0, r23
|
||||
stvewx v15, 0, r23
|
||||
stvewx v16, 0, r23
|
||||
stvewx v17, 0, r23
|
||||
stvewx v18, 0, r23
|
||||
stvewx v19, 0, r23
|
||||
stvewx v20, 0, r23
|
||||
stvewx v21, 0, r23
|
||||
stvewx v22, 0, r23
|
||||
stvewx v23, 0, r23
|
||||
stvewx v24, 0, r23
|
||||
stvewx v25, 0, r23
|
||||
stvewx v26, 0, r23
|
||||
stvewx v27, 0, r23
|
||||
stvewx v28, 0, r23
|
||||
stvewx v29, 0, r23
|
||||
stvewx v30, 0, r23
|
||||
stvewx v31, 0, r23
|
Loading…
Reference in New Issue
Block a user