mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-24 14:49:42 -06:00
Prevent paired singles routines clobbering PC,SRR0
Paired single (ps) instructions can call asm_routines that try to update PowerPC::ppcState.pc. At the time the asm_routine is built, emulation has not started and the PC is invalid (0). If the ps instruction causes an exception (e.g. DSI), SRR0 gets clobbered with the invalid PC. This change makes the relevant ps instructions store PC before calling out to asm_routines, and prevents the asm_routine from trying to store PC itself.
This commit is contained in:
@ -32,12 +32,14 @@ public:
|
||||
// Out: XMM0: Bottom two 32-bit slots hold the read value,
|
||||
// converted to a pair of floats.
|
||||
// Trashes: all three RSCRATCH
|
||||
// Note: Store PC if this could cause an exception
|
||||
const u8** pairedLoadQuantized;
|
||||
|
||||
// In: array index: GQR to use.
|
||||
// In: ECX: Address to read from.
|
||||
// Out: XMM0: Bottom 32-bit slot holds the read value.
|
||||
// Trashes: all three RSCRATCH
|
||||
// Note: Store PC if this could cause an exception
|
||||
const u8** singleLoadQuantized;
|
||||
|
||||
// In: array index: GQR to use.
|
||||
@ -45,10 +47,12 @@ public:
|
||||
// In: XMM0: Bottom two 32-bit slots hold the pair of floats to be written.
|
||||
// Out: Nothing.
|
||||
// Trashes: all three RSCRATCH
|
||||
// Note: Store PC if this could cause an exception
|
||||
const u8** pairedStoreQuantized;
|
||||
|
||||
// In: array index: GQR to use.
|
||||
// In: ECX: Address to write to.
|
||||
// In: XMM0: Bottom 32-bit slot holds the float to be written.
|
||||
// Note: Store PC if this could cause an exception
|
||||
const u8** singleStoreQuantized;
|
||||
};
|
||||
|
Reference in New Issue
Block a user