diff --git a/Core/MIPS/ARM/ArmCompBranch.cpp b/Core/MIPS/ARM/ArmCompBranch.cpp index af3fb645f6..1780547b3f 100644 --- a/Core/MIPS/ARM/ArmCompBranch.cpp +++ b/Core/MIPS/ARM/ArmCompBranch.cpp @@ -49,6 +49,8 @@ #define _SIZE ((op>>11) & 0x1F) #define _IMM16 (signed short)(op & 0xFFFF) #define _IMM26 (op & 0x03FFFFFF) +#define TARGET16 ((int)((uint32_t)_IMM16 << 2)) +#define TARGET26 (_IMM26 << 2) #define LOOPOPTIMIZATION 0 @@ -69,7 +71,7 @@ void ArmJit::BranchRSRTComp(MIPSOpcode op, CCFlags cc, bool likely) ERROR_LOG_REPORT(JIT, "Branch in RSRTComp delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; MIPSGPReg rt = _RT; MIPSGPReg rs = _RS; u32 targetAddr = GetCompilerPC() + offset + 4; @@ -182,7 +184,7 @@ void ArmJit::BranchRSZeroComp(MIPSOpcode op, CCFlags cc, bool andLink, bool like ERROR_LOG_REPORT(JIT, "Branch in RSZeroComp delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; MIPSGPReg rs = _RS; u32 targetAddr = GetCompilerPC() + offset + 4; @@ -328,7 +330,7 @@ void ArmJit::BranchFPFlag(MIPSOpcode op, CCFlags cc, bool likely) ERROR_LOG_REPORT(JIT, "Branch in FPFlag delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; u32 targetAddr = GetCompilerPC() + offset + 4; MIPSOpcode delaySlotOp = GetOffsetInstruction(1); @@ -386,7 +388,7 @@ void ArmJit::BranchVFPUFlag(MIPSOpcode op, CCFlags cc, bool likely) ERROR_LOG_REPORT(JIT, "Branch in VFPU delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; u32 targetAddr = GetCompilerPC() + offset + 4; MIPSOpcode delaySlotOp = GetOffsetInstruction(1); @@ -456,7 +458,7 @@ void ArmJit::Comp_Jump(MIPSOpcode op) { ERROR_LOG_REPORT(JIT, "Branch in Jump delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - u32 off = _IMM26 << 2; + u32 off = TARGET26; u32 targetAddr = (GetCompilerPC() & 0xF0000000) | off; // Might be a stubbed address or something? diff --git a/Core/MIPS/ARM64/Arm64CompBranch.cpp b/Core/MIPS/ARM64/Arm64CompBranch.cpp index ce7bc2d341..9212d0fc9b 100644 --- a/Core/MIPS/ARM64/Arm64CompBranch.cpp +++ b/Core/MIPS/ARM64/Arm64CompBranch.cpp @@ -49,6 +49,8 @@ #define _SIZE ((op>>11) & 0x1F) #define _IMM16 (signed short)(op & 0xFFFF) #define _IMM26 (op & 0x03FFFFFF) +#define TARGET16 ((int)((uint32_t)_IMM16 << 2)) +#define TARGET26 (_IMM26 << 2) #define LOOPOPTIMIZATION 0 @@ -69,7 +71,7 @@ void Arm64Jit::BranchRSRTComp(MIPSOpcode op, CCFlags cc, bool likely) ERROR_LOG_REPORT(JIT, "Branch in RSRTComp delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; MIPSGPReg rt = _RT; MIPSGPReg rs = _RS; u32 targetAddr = GetCompilerPC() + offset + 4; @@ -200,7 +202,7 @@ void Arm64Jit::BranchRSZeroComp(MIPSOpcode op, CCFlags cc, bool andLink, bool li ERROR_LOG_REPORT(JIT, "Branch in RSZeroComp delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; MIPSGPReg rs = _RS; u32 targetAddr = GetCompilerPC() + offset + 4; @@ -345,7 +347,7 @@ void Arm64Jit::BranchFPFlag(MIPSOpcode op, CCFlags cc, bool likely) { ERROR_LOG_REPORT(JIT, "Branch in FPFlag delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; u32 targetAddr = GetCompilerPC() + offset + 4; MIPSOpcode delaySlotOp = GetOffsetInstruction(1); @@ -402,7 +404,7 @@ void Arm64Jit::BranchVFPUFlag(MIPSOpcode op, CCFlags cc, bool likely) { ERROR_LOG_REPORT(JIT, "Branch in VFPU delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; u32 targetAddr = GetCompilerPC() + offset + 4; MIPSOpcode delaySlotOp = GetOffsetInstruction(1); @@ -471,7 +473,7 @@ void Arm64Jit::Comp_Jump(MIPSOpcode op) { ERROR_LOG_REPORT(JIT, "Branch in Jump delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - u32 off = _IMM26 << 2; + u32 off = TARGET26; u32 targetAddr = (GetCompilerPC() & 0xF0000000) | off; // Might be a stubbed address or something? diff --git a/Core/MIPS/IR/IRCompBranch.cpp b/Core/MIPS/IR/IRCompBranch.cpp index 2592d6227c..959b7403ce 100644 --- a/Core/MIPS/IR/IRCompBranch.cpp +++ b/Core/MIPS/IR/IRCompBranch.cpp @@ -42,6 +42,8 @@ #define _SIZE ((op>>11) & 0x1F) #define _IMM16 (signed short)(op & 0xFFFF) #define _IMM26 (op & 0x03FFFFFF) +#define TARGET16 ((int)((uint32_t)_IMM16 << 2)) +#define TARGET26 (_IMM26 << 2) #define LOOPOPTIMIZATION 0 @@ -57,7 +59,7 @@ void IRFrontend::BranchRSRTComp(MIPSOpcode op, IRComparison cc, bool likely) { ERROR_LOG_REPORT(JIT, "Branch in RSRTComp delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; MIPSGPReg rt = _RT; MIPSGPReg rs = _RS; u32 targetAddr = GetCompilerPC() + offset + 4; @@ -114,7 +116,7 @@ void IRFrontend::BranchRSZeroComp(MIPSOpcode op, IRComparison cc, bool andLink, ERROR_LOG_REPORT(JIT, "Branch in RSZeroComp delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; MIPSGPReg rs = _RS; u32 targetAddr = GetCompilerPC() + offset + 4; @@ -192,7 +194,7 @@ void IRFrontend::BranchFPFlag(MIPSOpcode op, IRComparison cc, bool likely) { ERROR_LOG_REPORT(JIT, "Branch in FPFlag delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; u32 targetAddr = GetCompilerPC() + offset + 4; ir.Write(IROp::FpCondToReg, IRTEMP_LHS); @@ -235,7 +237,7 @@ void IRFrontend::BranchVFPUFlag(MIPSOpcode op, IRComparison cc, bool likely) { ERROR_LOG_REPORT(JIT, "Branch in VFPU delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; u32 targetAddr = GetCompilerPC() + offset + 4; MIPSOpcode delaySlotOp = GetOffsetInstruction(1); @@ -290,7 +292,7 @@ void IRFrontend::Comp_Jump(MIPSOpcode op) { return; } - u32 off = _IMM26 << 2; + u32 off = TARGET26; u32 targetAddr = (GetCompilerPC() & 0xF0000000) | off; // Might be a stubbed address or something? diff --git a/Core/MIPS/x86/CompBranch.cpp b/Core/MIPS/x86/CompBranch.cpp index 8c8ce8fd3d..09b0cc09a1 100644 --- a/Core/MIPS/x86/CompBranch.cpp +++ b/Core/MIPS/x86/CompBranch.cpp @@ -48,6 +48,8 @@ #define _SIZE ((op>>11) & 0x1F) #define _IMM16 (signed short)(op & 0xFFFF) #define _IMM26 (op & 0x03FFFFFF) +#define TARGET16 ((int)((uint32_t)_IMM16 << 2)) +#define TARGET26 (_IMM26 << 2) #define LOOPOPTIMIZATION 0 @@ -319,7 +321,7 @@ void Jit::BranchRSRTComp(MIPSOpcode op, Gen::CCFlags cc, bool likely) ERROR_LOG_REPORT(JIT, "Branch in RSRTComp delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; MIPSGPReg rt = _RT; MIPSGPReg rs = _RS; u32 targetAddr = GetCompilerPC() + offset + 4; @@ -395,7 +397,7 @@ void Jit::BranchRSZeroComp(MIPSOpcode op, Gen::CCFlags cc, bool andLink, bool li ERROR_LOG_REPORT(JIT, "Branch in RSZeroComp delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; MIPSGPReg rs = _RS; u32 targetAddr = GetCompilerPC() + offset + 4; @@ -511,7 +513,7 @@ void Jit::BranchFPFlag(MIPSOpcode op, Gen::CCFlags cc, bool likely) ERROR_LOG_REPORT(JIT, "Branch in FPFlag delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; u32 targetAddr = GetCompilerPC() + offset + 4; MIPSOpcode delaySlotOp = GetOffsetInstruction(1); @@ -551,7 +553,7 @@ void Jit::BranchVFPUFlag(MIPSOpcode op, Gen::CCFlags cc, bool likely) WARN_LOG(JIT, "Branch in VFPU delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - int offset = _IMM16 << 2; + int offset = TARGET16; u32 targetAddr = GetCompilerPC() + offset + 4; MIPSOpcode delaySlotOp = GetOffsetInstruction(1); @@ -602,7 +604,7 @@ void Jit::Comp_Jump(MIPSOpcode op) { ERROR_LOG_REPORT(JIT, "Branch in Jump delay slot at %08x in block starting at %08x", GetCompilerPC(), js.blockStart); return; } - u32 off = _IMM26 << 2; + u32 off = TARGET26; u32 targetAddr = (GetCompilerPC() & 0xF0000000) | off; // Might be a stubbed address or something?