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;
|
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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue