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:
j4ck.fr0st 2010-04-11 12:27:27 +00:00
parent 7c35138435
commit 800595980e
3 changed files with 9 additions and 5 deletions

View File

@ -368,7 +368,7 @@ FixupBranch XEmitter::J_CC(CCFlags conditionCode, bool force5bytes)
{ {
FixupBranch branch; FixupBranch branch;
branch.type = force5bytes ? 1 : 0; branch.type = force5bytes ? 1 : 0;
branch.ptr = code + (force5bytes ? 5 : 2); branch.ptr = code + (force5bytes ? 6 : 2);
if (!force5bytes) if (!force5bytes)
{ {
//8 bits will do //8 bits will do

View File

@ -125,6 +125,8 @@ void DSPEmitter::increase_addr_reg(int reg)
XOR(32, R(ESI), R(ESI)); // i = 0 XOR(32, R(ESI), R(ESI)); // i = 0
// if (value > 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 end = J_CC(CC_Z, true);
FixupBranch negValue = J_CC(CC_L); FixupBranch negValue = J_CC(CC_L);

View File

@ -47,19 +47,21 @@ void nx_ir()
void nx_nr() void nx_nr()
{ {
SDSP test_dsp; 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_wr0 = 0; input_wr0 < 10; input_wr0++)
for (u16 input_ix0 = 0; input_ix0 < 10; input_ix0++)
{ {
memset(&test_dsp, 0, sizeof(SDSP)); 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[DSP_REG_WR0] = input_wr0;
test_dsp.r[0] = input_reg; test_dsp.r[0] = input_reg;
if (!tester.Test(test_dsp)) 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(), tester.GetInstructionName(),
input_reg, input_wr0, input_reg, input_wr0, input_ix0,
tester.GetLastInterpreterDSP().r[0], tester.GetLastJitDSP().r[0]); tester.GetLastInterpreterDSP().r[0], tester.GetLastJitDSP().r[0]);
} }
} }