DSP/Jit: Some small optimizations to lsrn emitter
This commit is contained in:
parent
6873443a9a
commit
9c1d18a14c
|
@ -1570,16 +1570,17 @@ void DSPEmitter::lsrn(const UDSPInstruction opc)
|
||||||
// acc <<= -shift;
|
// acc <<= -shift;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
CMP(64, R(RDX), Imm8(0));
|
CMP(64, R(RDX), Imm8(0));//is this actually worth the branch cost?
|
||||||
FixupBranch zero = J_CC(CC_E);
|
FixupBranch zero = J_CC(CC_E);
|
||||||
TEST(16, R(RAX), Imm16(0x3f));
|
TEST(16, R(RAX), Imm16(0x3f));//is this actually worth the branch cost?
|
||||||
FixupBranch noShift = J_CC(CC_Z);
|
FixupBranch noShift = J_CC(CC_Z);
|
||||||
MOVZX(64, 16, RCX, R(RAX));
|
//CL gets automatically masked with 0x3f on IA32/AMD64
|
||||||
AND(16, R(RCX), Imm16(0x3f));
|
//MOVZX(64, 16, RCX, R(RAX));
|
||||||
|
//AND(16, R(RCX), Imm16(0x3f));
|
||||||
TEST(16, R(RAX), Imm16(0x40));
|
TEST(16, R(RAX), Imm16(0x40));
|
||||||
FixupBranch shiftLeft = J_CC(CC_Z);
|
FixupBranch shiftLeft = J_CC(CC_Z);
|
||||||
NEG(16, R(RCX));
|
NEG(16, R(RCX));
|
||||||
ADD(16, R(RCX), Imm16(0x40));
|
//ADD(16, R(RCX), Imm16(0x40));
|
||||||
SHL(64, R(RDX), R(RCX));
|
SHL(64, R(RDX), R(RCX));
|
||||||
FixupBranch exit = J();
|
FixupBranch exit = J();
|
||||||
SetJumpTarget(shiftLeft);
|
SetJumpTarget(shiftLeft);
|
||||||
|
|
Loading…
Reference in New Issue