summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorTilka <tilkax@gmail.com>2020-08-08 19:08:24 +0100
committerGitHub <noreply@github.com>2020-08-08 19:08:24 +0100
commit340c08a88d4e86de820afd07d9da5050be8740ee (patch)
tree1dc40abe4be130e16ef96c971c5f0ca1698f9732 /Source
parent320194420888ea732c5521f893ed29cae1581270 (diff)
parent363f3f82bbedd05701a1c4cda6c440f833ef7f12 (diff)
Merge pull request #9008 from Sintendo/dspjitlea
DSPJit: Various minor improvements
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Core/DSP/Jit/x64/DSPJitBranch.cpp6
-rw-r--r--Source/Core/Core/DSP/Jit/x64/DSPJitMultiplier.cpp7
-rw-r--r--Source/Core/Core/DSP/Jit/x64/DSPJitRegCache.cpp9
3 files changed, 7 insertions, 15 deletions
diff --git a/Source/Core/Core/DSP/Jit/x64/DSPJitBranch.cpp b/Source/Core/Core/DSP/Jit/x64/DSPJitBranch.cpp
index e08a6ac57e..339d81b4e3 100644
--- a/Source/Core/Core/DSP/Jit/x64/DSPJitBranch.cpp
+++ b/Source/Core/Core/DSP/Jit/x64/DSPJitBranch.cpp
@@ -38,7 +38,7 @@ void DSPEmitter::ReJitConditional(const UDSPInstruction opc,
case 0x3: // LE - Less Equal
LEA(16, EDX, MScaled(EAX, SCALE_4, 0));
XOR(16, R(EAX), R(EDX));
- LEA(16, EAX, MScaled(EAX, SCALE_2, 0));
+ ADD(16, R(EAX), R(EAX));
OR(16, R(EAX), R(EDX));
TEST(16, R(EAX), Imm16(0x10));
break;
@@ -56,9 +56,9 @@ void DSPEmitter::ReJitConditional(const UDSPInstruction opc,
break;
case 0xa: // ?
case 0xb: // ?
- LEA(16, EDX, MScaled(EAX, SCALE_2, 0));
+ LEA(16, EDX, MRegSum(EAX, EAX));
OR(16, R(EAX), R(EDX));
- LEA(16, EDX, MScaled(EDX, SCALE_8, 0));
+ SHL(16, R(EDX), Imm8(3));
NOT(16, R(EAX));
OR(16, R(EAX), R(EDX));
TEST(16, R(EAX), Imm16(0x20));
diff --git a/Source/Core/Core/DSP/Jit/x64/DSPJitMultiplier.cpp b/Source/Core/Core/DSP/Jit/x64/DSPJitMultiplier.cpp
index 79e6252f12..5e102ab25f 100644
--- a/Source/Core/Core/DSP/Jit/x64/DSPJitMultiplier.cpp
+++ b/Source/Core/Core/DSP/Jit/x64/DSPJitMultiplier.cpp
@@ -30,7 +30,7 @@ void DSPEmitter::multiply()
TEST(16, sr_reg, Imm16(SR_MUL_MODIFY));
FixupBranch noMult2 = J_CC(CC_NZ);
// prod <<= 1;
- LEA(64, RAX, MRegSum(RAX, RAX));
+ ADD(64, R(RAX), R(RAX));
SetJumpTarget(noMult2);
m_gpr.PutReg(DSP_REG_SR, false);
// return prod;
@@ -130,7 +130,7 @@ void DSPEmitter::multiply_mulx(u8 axh0, u8 axh1)
TEST(16, sr_reg, Imm16(SR_MUL_MODIFY));
FixupBranch noMult2 = J_CC(CC_NZ);
// prod <<= 1;
- LEA(64, RAX, MRegSum(RAX, RAX));
+ ADD(64, R(RAX), R(RAX));
SetJumpTarget(noMult2);
m_gpr.PutReg(DSP_REG_SR, false);
// return prod;
@@ -252,8 +252,7 @@ void DSPEmitter::addpaxz(const UDSPInstruction opc)
get_long_acx(sreg, tmp1);
MOV(64, R(RDX), R(tmp1));
// s64 res = prod + (ax & ~0xffff);
- MOV(64, R(RAX), Imm64(~0xffff));
- AND(64, R(RDX), R(RAX));
+ AND(64, R(RDX), Imm32(~0xffff));
// s64 prod = dsp_get_long_prod_round_prodl();
get_long_prod_round_prodl();
ADD(64, R(RAX), R(RDX));
diff --git a/Source/Core/Core/DSP/Jit/x64/DSPJitRegCache.cpp b/Source/Core/Core/DSP/Jit/x64/DSPJitRegCache.cpp
index ed8af72355..2b2850fe36 100644
--- a/Source/Core/Core/DSP/Jit/x64/DSPJitRegCache.cpp
+++ b/Source/Core/Core/DSP/Jit/x64/DSPJitRegCache.cpp
@@ -835,14 +835,7 @@ void DSPJitRegCache::WriteReg(int dreg, OpArg arg)
m_emitter.MOV(32, reg, Imm32(arg.Imm32()));
break;
case 8:
- if ((u32)arg.Imm64() == arg.Imm64())
- {
- m_emitter.MOV(64, reg, Imm32((u32)arg.Imm64()));
- }
- else
- {
- m_emitter.MOV(64, reg, Imm64(arg.Imm64()));
- }
+ m_emitter.MOV(64, reg, Imm64(arg.Imm64()));
break;
default:
ASSERT_MSG(DSPLLE, 0, "unsupported memory size");