diff options
Diffstat (limited to 'fix-range-check.diff')
-rw-r--r-- | fix-range-check.diff | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/fix-range-check.diff b/fix-range-check.diff new file mode 100644 index 000000000000..49d9e72341f8 --- /dev/null +++ b/fix-range-check.diff @@ -0,0 +1,22 @@ +--- a/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterALU.hpp ++++ b/src/Cafe/HW/Espresso/Interpreter/PPCInterpreterALU.hpp +@@ -421,7 +421,7 @@ static void PPCInterpreter_MULLWO(PPCInterpreter_t* hCPU, uint32 opcode) + PPC_OPC_TEMPL3_XO(); + sint64 result = (sint64)hCPU->gpr[rA] * (sint64)hCPU->gpr[rB]; + hCPU->gpr[rD] = (uint32)result; +- if (result < -0x80000000ll && result > 0x7FFFFFFFLL) ++ if (result < -0x80000000ll || result > 0x7FFFFFFFLL) + { + hCPU->spr.XER |= XER_SO; + hCPU->spr.XER |= XER_OV; +--- a/src/Cemu/PPCAssembler/ppcAssembler.cpp ++++ b/src/Cemu/PPCAssembler/ppcAssembler.cpp +@@ -653,7 +653,7 @@ class EncodedOperand_MemLoc + { + immD = ep.Evaluate(svExpressionPart); + sint32 imm = (sint32)immD; +- if (imm < -32768 && imm > 32767) ++ if (imm < -32768 || imm > 32767) + { + std::string msg = fmt::format("\"{}\" evaluates to offset out of range (Valid range is -32768 to 32767)", svExpressionPart); + ppcAssembler_setError(assemblerCtx->ctx, msg); |