diff options
| author | Mai <mai.iam2048@gmail.com> | 2023-11-28 21:30:30 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-28 21:30:30 +0100 |
| commit | e99ead0a6830ad234aef1a0598cbb2ee4be08f7f (patch) | |
| tree | 9eb999a4423299629da7d6caa9f031928cfce42c | |
| parent | b53ecd73fb64a43e4c6e420f81d4663ca73fb7b1 (diff) | |
| parent | d34d3bd513bd7f4147541482741403ab1de2b6af (diff) | |
Merge pull request #12124 from JosJuice/jitarm64-mfsrin-mtsrin-addr
JitArm64: Optimize mfsrin/mtsrin address calculations
| -rw-r--r-- | Source/Core/Core/PowerPC/JitArm64/JitArm64_SystemRegisters.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_SystemRegisters.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_SystemRegisters.cpp index 9ed2af8c86..b6b23d6652 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_SystemRegisters.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_SystemRegisters.cpp @@ -184,13 +184,14 @@ void JitArm64::mfsrin(UGeckoInstruction inst) u32 b = inst.RB, d = inst.RD; gpr.BindToRegister(d, d == b); - ARM64Reg index = gpr.GetReg(); - ARM64Reg index64 = EncodeRegTo64(index); ARM64Reg RB = gpr.R(b); + ARM64Reg RD = gpr.R(d); + ARM64Reg index = gpr.GetReg(); + ARM64Reg addr = EncodeRegTo64(RD); UBFM(index, RB, 28, 31); - ADD(index64, PPC_REG, index64, ArithOption(index64, ShiftType::LSL, 2)); - LDR(IndexType::Unsigned, gpr.R(d), index64, PPCSTATE_OFF_SR(0)); + ADDI2R(addr, PPC_REG, PPCSTATE_OFF_SR(0), addr); + LDR(RD, addr, ArithOption(EncodeRegTo64(index), true)); gpr.Unlock(index); } @@ -203,15 +204,16 @@ void JitArm64::mtsrin(UGeckoInstruction inst) u32 b = inst.RB, d = inst.RD; gpr.BindToRegister(d, d == b); - ARM64Reg index = gpr.GetReg(); - ARM64Reg index64 = EncodeRegTo64(index); ARM64Reg RB = gpr.R(b); + ARM64Reg RD = gpr.R(d); + ARM64Reg index = gpr.GetReg(); + ARM64Reg addr = gpr.GetReg(); UBFM(index, RB, 28, 31); - ADD(index64, PPC_REG, index64, ArithOption(index64, ShiftType::LSL, 2)); - STR(IndexType::Unsigned, gpr.R(d), index64, PPCSTATE_OFF_SR(0)); + ADDI2R(addr, PPC_REG, PPCSTATE_OFF_SR(0), addr); + STR(RD, addr, ArithOption(EncodeRegTo64(index), true)); - gpr.Unlock(index); + gpr.Unlock(index, addr); } void JitArm64::twx(UGeckoInstruction inst) |
