From e12cdbefa592a576af85b6da4be82a3cad257559 Mon Sep 17 00:00:00 2001 From: CrystalGamma Date: Sat, 22 Dec 2018 23:09:16 +0100 Subject: [PATCH 1/2] PowerPC: Thread state through PS dequantize helper --- .../Core/Core/PowerPC/Interpreter/Interpreter.h | 1 - .../Interpreter/Interpreter_LoadStorePaired.cpp | 17 +++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Source/Core/Core/PowerPC/Interpreter/Interpreter.h b/Source/Core/Core/PowerPC/Interpreter/Interpreter.h index 61c87e60a7..9561f948e0 100644 --- a/Source/Core/Core/PowerPC/Interpreter/Interpreter.h +++ b/Source/Core/Core/PowerPC/Interpreter/Interpreter.h @@ -292,7 +292,6 @@ private: static void Helper_UpdateCR0(u32 value); // paired helper - static void Helper_Dequantize(u32 addr, u32 instI, u32 instRD, u32 instW); static void Helper_Quantize(u32 addr, u32 instI, u32 instRS, u32 instW); static void Helper_FloatCompareOrdered(UGeckoInstruction inst, double a, double b); diff --git a/Source/Core/Core/PowerPC/Interpreter/Interpreter_LoadStorePaired.cpp b/Source/Core/Core/PowerPC/Interpreter/Interpreter_LoadStorePaired.cpp index af96d59df7..60ded043bb 100644 --- a/Source/Core/Core/PowerPC/Interpreter/Interpreter_LoadStorePaired.cpp +++ b/Source/Core/Core/PowerPC/Interpreter/Interpreter_LoadStorePaired.cpp @@ -245,9 +245,10 @@ std::pair LoadAndDequantize(u32 addr, u32 instW, u32 ldScale) return {ps0, ps1}; } -void Interpreter::Helper_Dequantize(u32 addr, u32 instI, u32 instRD, u32 instW) +static void Helper_Dequantize(PowerPC::PowerPCState* ppcs, u32 addr, u32 instI, u32 instRD, + u32 instW) { - UGQR gqr(rSPR(SPR_GQR0 + instI)); + UGQR gqr(ppcs->spr[SPR_GQR0 + instI]); EQuantizeType ldType = gqr.ld_type; unsigned int ldScale = gqr.ld_scale; @@ -296,12 +297,12 @@ void Interpreter::Helper_Dequantize(u32 addr, u32 instI, u32 instRD, u32 instW) break; } - if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI) + if (ppcs->Exceptions & EXCEPTION_DSI) { return; } - rPS(instRD).SetBoth(ps0, ps1); + ppcs->ps[instRD].SetBoth(ps0, ps1); } void Interpreter::psq_l(UGeckoInstruction inst) @@ -313,7 +314,7 @@ void Interpreter::psq_l(UGeckoInstruction inst) } const u32 EA = inst.RA ? (rGPR[inst.RA] + inst.SIMM_12) : (u32)inst.SIMM_12; - Helper_Dequantize(EA, inst.I, inst.RD, inst.W); + Helper_Dequantize(&PowerPC::ppcState, EA, inst.I, inst.RD, inst.W); } void Interpreter::psq_lu(UGeckoInstruction inst) @@ -325,7 +326,7 @@ void Interpreter::psq_lu(UGeckoInstruction inst) } const u32 EA = rGPR[inst.RA] + inst.SIMM_12; - Helper_Dequantize(EA, inst.I, inst.RD, inst.W); + Helper_Dequantize(&PowerPC::ppcState, EA, inst.I, inst.RD, inst.W); if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI) { @@ -367,7 +368,7 @@ void Interpreter::psq_stu(UGeckoInstruction inst) void Interpreter::psq_lx(UGeckoInstruction inst) { const u32 EA = inst.RA ? (rGPR[inst.RA] + rGPR[inst.RB]) : rGPR[inst.RB]; - Helper_Dequantize(EA, inst.Ix, inst.RD, inst.Wx); + Helper_Dequantize(&PowerPC::ppcState, EA, inst.Ix, inst.RD, inst.Wx); } void Interpreter::psq_stx(UGeckoInstruction inst) @@ -379,7 +380,7 @@ void Interpreter::psq_stx(UGeckoInstruction inst) void Interpreter::psq_lux(UGeckoInstruction inst) { const u32 EA = rGPR[inst.RA] + rGPR[inst.RB]; - Helper_Dequantize(EA, inst.Ix, inst.RD, inst.Wx); + Helper_Dequantize(&PowerPC::ppcState, EA, inst.Ix, inst.RD, inst.Wx); if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI) { From e5c8b889ef88f8f24ee8b0613f4f561bc6c6616e Mon Sep 17 00:00:00 2001 From: CrystalGamma Date: Sat, 22 Dec 2018 23:02:45 +0100 Subject: [PATCH 2/2] PowerPC: Thread state through PS quantize helper --- .../Core/Core/PowerPC/Interpreter/Interpreter.h | 3 --- .../Interpreter/Interpreter_LoadStorePaired.cpp | 17 +++++++++-------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Source/Core/Core/PowerPC/Interpreter/Interpreter.h b/Source/Core/Core/PowerPC/Interpreter/Interpreter.h index 9561f948e0..a275948fe9 100644 --- a/Source/Core/Core/PowerPC/Interpreter/Interpreter.h +++ b/Source/Core/Core/PowerPC/Interpreter/Interpreter.h @@ -291,9 +291,6 @@ private: // flag helper static void Helper_UpdateCR0(u32 value); - // paired helper - static void Helper_Quantize(u32 addr, u32 instI, u32 instRS, u32 instW); - static void Helper_FloatCompareOrdered(UGeckoInstruction inst, double a, double b); static void Helper_FloatCompareUnordered(UGeckoInstruction inst, double a, double b); diff --git a/Source/Core/Core/PowerPC/Interpreter/Interpreter_LoadStorePaired.cpp b/Source/Core/Core/PowerPC/Interpreter/Interpreter_LoadStorePaired.cpp index 60ded043bb..b65e642198 100644 --- a/Source/Core/Core/PowerPC/Interpreter/Interpreter_LoadStorePaired.cpp +++ b/Source/Core/Core/PowerPC/Interpreter/Interpreter_LoadStorePaired.cpp @@ -170,14 +170,15 @@ void QuantizeAndStore(double ps0, double ps1, u32 addr, u32 instW, u32 stScale) } } -void Interpreter::Helper_Quantize(u32 addr, u32 instI, u32 instRS, u32 instW) +static void Helper_Quantize(const PowerPC::PowerPCState* ppcs, u32 addr, u32 instI, u32 instRS, + u32 instW) { - const UGQR gqr(rSPR(SPR_GQR0 + instI)); + const UGQR gqr(ppcs->spr[SPR_GQR0 + instI]); const EQuantizeType stType = gqr.st_type; const unsigned int stScale = gqr.st_scale; - const double ps0 = rPS(instRS).PS0AsDouble(); - const double ps1 = rPS(instRS).PS1AsDouble(); + const double ps0 = ppcs->ps[instRS].PS0AsDouble(); + const double ps1 = ppcs->ps[instRS].PS1AsDouble(); switch (stType) { @@ -344,7 +345,7 @@ void Interpreter::psq_st(UGeckoInstruction inst) } const u32 EA = inst.RA ? (rGPR[inst.RA] + inst.SIMM_12) : (u32)inst.SIMM_12; - Helper_Quantize(EA, inst.I, inst.RS, inst.W); + Helper_Quantize(&PowerPC::ppcState, EA, inst.I, inst.RS, inst.W); } void Interpreter::psq_stu(UGeckoInstruction inst) @@ -356,7 +357,7 @@ void Interpreter::psq_stu(UGeckoInstruction inst) } const u32 EA = rGPR[inst.RA] + inst.SIMM_12; - Helper_Quantize(EA, inst.I, inst.RS, inst.W); + Helper_Quantize(&PowerPC::ppcState, EA, inst.I, inst.RS, inst.W); if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI) { @@ -374,7 +375,7 @@ void Interpreter::psq_lx(UGeckoInstruction inst) void Interpreter::psq_stx(UGeckoInstruction inst) { const u32 EA = inst.RA ? (rGPR[inst.RA] + rGPR[inst.RB]) : rGPR[inst.RB]; - Helper_Quantize(EA, inst.Ix, inst.RS, inst.Wx); + Helper_Quantize(&PowerPC::ppcState, EA, inst.Ix, inst.RS, inst.Wx); } void Interpreter::psq_lux(UGeckoInstruction inst) @@ -392,7 +393,7 @@ void Interpreter::psq_lux(UGeckoInstruction inst) void Interpreter::psq_stux(UGeckoInstruction inst) { const u32 EA = rGPR[inst.RA] + rGPR[inst.RB]; - Helper_Quantize(EA, inst.Ix, inst.RS, inst.Wx); + Helper_Quantize(&PowerPC::ppcState, EA, inst.Ix, inst.RS, inst.Wx); if (PowerPC::ppcState.Exceptions & EXCEPTION_DSI) {