Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #10199 from Sintendo/jit64divwxnits
Jit64: divwx - One more micro-optimization
  • Loading branch information
lioncash committed Nov 3, 2021
2 parents db02b50 + dfb3204 commit 39ccdc1
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp
Expand Up @@ -1494,22 +1494,28 @@ void Jit64::divwx(UGeckoInstruction inst)
else if (divisor == 2 || divisor == -2)
{
X64Reg tmp = RSCRATCH;
X64Reg sign = tmp;

if (!Ra.IsSimpleReg())
{
// Load dividend from memory
MOV(32, R(tmp), Ra);
MOV(32, Rd, R(tmp));
}
else if (d == a)
{
// Make a copy of the dividend
MOV(32, R(tmp), Ra);
}
else
{
// Copy dividend directly into destination
MOV(32, Rd, Ra);
tmp = Ra.GetSimpleReg();
sign = Rd;
}

SHR(32, Rd, Imm8(31));
SHR(32, R(sign), Imm8(31));
ADD(32, Rd, R(tmp));
SAR(32, Rd, Imm8(1));

Expand Down Expand Up @@ -1538,11 +1544,11 @@ void Jit64::divwx(UGeckoInstruction inst)
else if (d == a)
{
// Rd holds the dividend, while RSCRATCH holds the sum
// This is opposite of the other cases
// This is the reverse of the other cases
dividend = Rd;
sum = RSCRATCH;
src = RSCRATCH;
// Negate condition to compensate the swapped values
// Negate condition to compensate for the swapped values
cond = CC_S;
}
else
Expand Down

0 comments on commit 39ccdc1

Please sign in to comment.