mirror of
https://github.com/elliotnunn/powermac-rom.git
synced 2024-06-01 16:41:33 +00:00
memretry fixup
This commit is contained in:
parent
cdbe4d6d96
commit
79465405d2
|
@ -84,10 +84,10 @@ _S set 0
|
|||
; LEGEND .... access size (r17 bits 27-30) and 0=Store/1=Load (r17 bit 31)
|
||||
; ................ MRRestab entry (r17 bits 0-5)
|
||||
;
|
||||
; . mrOpflag1 }
|
||||
; . mrOpflag2 } cr3 flags
|
||||
; . mrOpflag3 }
|
||||
; . mrFlagDidLoad }
|
||||
; . mrSkipInstLoad }
|
||||
; . mrXformIgnoreIdxReg } cr3 flags
|
||||
; . mrSuppressUpdate }
|
||||
; . mrChangedRegInEWA }
|
||||
;
|
||||
; primary routine secondary routine X-form extended opcode D-form opcode
|
||||
; ................ ................ ....................... .................
|
||||
|
|
|
@ -165,20 +165,20 @@ MRStore22 ; Fast return paths from MemAccess code
|
|||
MRLoad22
|
||||
lhz r23, -4(r19)
|
||||
addi r17, r17, -4
|
||||
insrwi r21, r23, 16,0
|
||||
insrwi r21, r23, 16, 0
|
||||
MRLoad2
|
||||
lhz r23, -2(r19)
|
||||
insrwi r21, r23, 16,16
|
||||
insrwi r21, r23, 16, 16
|
||||
|
||||
MRDoSecondary
|
||||
sync
|
||||
rlwinm. r28, r17, 18,25,29
|
||||
rlwinm. r28, r17, 18,25,29 ; get the block-offset of rA
|
||||
mtlr r25
|
||||
cror cr0_eq, cr0_eq, mrOpflag3
|
||||
cror cr0_eq, cr0_eq, mrSuppressUpdate
|
||||
mtmsr r14
|
||||
mtsprg 3, r24
|
||||
beqlr
|
||||
crset mrFlagDidLoad
|
||||
crset mrChangedRegInEWA ; do this only if it's a non-zero register and we aren't suppressing update
|
||||
stwx r18, r1, r28
|
||||
blr
|
||||
|
||||
|
@ -189,7 +189,7 @@ MRSecLoadExt
|
|||
|
||||
MRSecLoad
|
||||
rlwinm r28, r17, 13,25,29
|
||||
crset mrFlagDidLoad
|
||||
crset mrChangedRegInEWA
|
||||
stwx r21, r1, r28
|
||||
|
||||
########################################################################
|
||||
|
@ -202,7 +202,7 @@ MRSecDone
|
|||
bne @trace ; Is a Trace flagged?
|
||||
mtlr r12
|
||||
|
||||
bc BO_IF_NOT, mrFlagDidLoad, @load_ewa_registers
|
||||
bc BO_IF_NOT, mrChangedRegInEWA, @load_ewa_registers
|
||||
mtcr r13
|
||||
lmw r2, KDP.r2(r1)
|
||||
lwz r0, KDP.r0(r1)
|
||||
|
@ -235,7 +235,7 @@ MRSecLHBRX
|
|||
|
||||
MRSecLWBRX
|
||||
rlwinm r28, r17, 13,25,29
|
||||
crset mrFlagDidLoad
|
||||
crset mrChangedRegInEWA
|
||||
stwbrx r21, r1, r28
|
||||
b MRSecDone
|
||||
|
||||
|
@ -333,7 +333,7 @@ MRComDCBZ
|
|||
|
||||
MRSecLWARX
|
||||
rlwinm r28, r17, 13,25,29
|
||||
crset mrFlagDidLoad
|
||||
crset mrChangedRegInEWA
|
||||
stwx r21, r1, r28
|
||||
stwcx. r21, r1, r28
|
||||
b MRSecDone
|
||||
|
|
|
@ -80,10 +80,10 @@ maskMsrFlags equ 0x00000F00
|
|||
########################################################################
|
||||
|
||||
; MemRetry flags in CR3
|
||||
mrOpflag1 equ cr3_lt
|
||||
mrOpflag2 equ cr3_gt
|
||||
mrOpflag3 equ cr3_eq
|
||||
mrFlagDidLoad equ cr3_so
|
||||
_bitequate cr3_lt, mrSkipInstLoad ; misalignment handler need not read the instruction
|
||||
_bitequate cr3_gt, mrXformIgnoreIdxReg ; instruction is X-form but without an rB field
|
||||
_bitequate cr3_eq, mrSuppressUpdate ; instruction may not update base reg in-place
|
||||
_bitequate cr3_so, mrChangedRegInEWA ; have "loaded" a new reg value (i.e. saved into EWA)
|
||||
|
||||
########################################################################
|
||||
|
||||
|
|
|
@ -331,7 +331,7 @@ EmulateDataAccess
|
|||
lwzx r23, r1, r23 ; get rB from saved registers
|
||||
rlwimi r17, r26, 6, 26, 5 ; r17 = pretend X-form inst with: maj opcode (from tbl), rS/D and RA (from inst), min opcode (from tbl)
|
||||
add r18, r18, r23 ; r18 = effective address attempted by instruction
|
||||
bclr BO_IF_NOT, mrOpflag2
|
||||
bclr BO_IF_NOT, mrXformIgnoreIdxReg
|
||||
neg r23, r23
|
||||
add r18, r18, r23
|
||||
blr
|
||||
|
@ -385,7 +385,7 @@ AlignmentInt
|
|||
_ori r15, r14, MsrDR
|
||||
mtcr r26
|
||||
rlwimi r17, r26, 6, 26, 5
|
||||
bclr BO_IF_NOT, mrOpflag1
|
||||
bclr BO_IF_NOT, mrSkipInstLoad
|
||||
mtmsr r15
|
||||
lwz r27, 0(r10)
|
||||
mtmsr r14
|
||||
|
|
Loading…
Reference in New Issue
Block a user