Fixed a small bug in J_CC when emitting jumps that exceed 0x80 in range (only used by DSP NR yet).
Add back a CMP nakee missed in his last commit git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5328 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
7c35138435
commit
800595980e
|
@ -368,7 +368,7 @@ FixupBranch XEmitter::J_CC(CCFlags conditionCode, bool force5bytes)
|
|||
{
|
||||
FixupBranch branch;
|
||||
branch.type = force5bytes ? 1 : 0;
|
||||
branch.ptr = code + (force5bytes ? 5 : 2);
|
||||
branch.ptr = code + (force5bytes ? 6 : 2);
|
||||
if (!force5bytes)
|
||||
{
|
||||
//8 bits will do
|
||||
|
|
|
@ -125,6 +125,8 @@ void DSPEmitter::increase_addr_reg(int reg)
|
|||
XOR(32, R(ESI), R(ESI)); // i = 0
|
||||
|
||||
// if (value > 0)
|
||||
CMP(16, R(EDX), Imm16(0));
|
||||
//end is further away than 0x7f, needs a 6-byte jz
|
||||
FixupBranch end = J_CC(CC_Z, true);
|
||||
FixupBranch negValue = J_CC(CC_L);
|
||||
|
||||
|
|
|
@ -47,19 +47,21 @@ void nx_ir()
|
|||
void nx_nr()
|
||||
{
|
||||
SDSP test_dsp;
|
||||
DSPJitTester tester(0x40, 0x0c);
|
||||
DSPJitTester tester(0x40, 0x0c, true);
|
||||
|
||||
for (u16 input_reg = 0; input_reg < 50; input_reg++)
|
||||
for (u16 input_reg = 0; input_reg < 10; input_reg++)
|
||||
for (u16 input_wr0 = 0; input_wr0 < 10; input_wr0++)
|
||||
for (u16 input_ix0 = 0; input_ix0 < 10; input_ix0++)
|
||||
{
|
||||
memset(&test_dsp, 0, sizeof(SDSP));
|
||||
test_dsp.r[DSP_REG_IX0] = input_ix0;
|
||||
test_dsp.r[DSP_REG_WR0] = input_wr0;
|
||||
test_dsp.r[0] = input_reg;
|
||||
if (!tester.Test(test_dsp))
|
||||
{
|
||||
printf("%s Test failed: in = 0x%04x, wr0 = 0x%04x > int = 0x%04x, jit = 0x%04x\n",
|
||||
printf("%s Test failed: in = 0x%04x, wr0 = 0x%04x, ix0 = 0x%04x > int = 0x%04x, jit = 0x%04x\n",
|
||||
tester.GetInstructionName(),
|
||||
input_reg, input_wr0,
|
||||
input_reg, input_wr0, input_ix0,
|
||||
tester.GetLastInterpreterDSP().r[0], tester.GetLastJitDSP().r[0]);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue