diff options
| author | 2009-11-18 06:12:50 +0000 | |
|---|---|---|
| committer | 2009-11-18 06:12:50 +0000 | |
| commit | 693024974ea3f2ab695ac20f694f72dff17becdd (patch) | |
| tree | a721ec51ef2258856e86ed706bd1fb5d7a5c0664 /src | |
| parent | f9a9cbe81b7ce0e4b9b449dc514462999bca1a7c (diff) | |
Fix assertion in DRC.
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/cpu/drcumlsh.h | 1 | ||||
| -rw-r--r-- | src/emu/cpu/mips/mips3drc.c | 5 |
2 files changed, 4 insertions, 2 deletions
diff --git a/src/emu/cpu/drcumlsh.h b/src/emu/cpu/drcumlsh.h index 7a546aa13eb..89c29beb676 100644 --- a/src/emu/cpu/drcumlsh.h +++ b/src/emu/cpu/drcumlsh.h @@ -121,7 +121,6 @@ #define UML_ROLAND(block, dst, src, shift, mask) do { drcuml_block_append_4(block, DRCUML_OP_ROLAND, 4, IF_ALWAYS, dst, src, shift, mask); } while (0) #define UML_ROLINS(block, dst, src, shift, mask) do { drcuml_block_append_4(block, DRCUML_OP_ROLINS, 4, IF_ALWAYS, dst, src, shift, mask); } while (0) #define UML_ADD(block, dst, src1, src2) do { drcuml_block_append_3(block, DRCUML_OP_ADD, 4, IF_ALWAYS, dst, src1, src2); } while (0) -#define UML_ADDc(block, cond, dst, src1, src2) do { drcuml_block_append_3(block, DRCUML_OP_ADD, 4, cond, dst, src1, src2); } while (0) #define UML_ADDC(block, dst, src1, src2) do { drcuml_block_append_3(block, DRCUML_OP_ADDC, 4, IF_ALWAYS, dst, src1, src2); } while (0) #define UML_SUB(block, dst, src1, src2) do { drcuml_block_append_3(block, DRCUML_OP_SUB, 4, IF_ALWAYS, dst, src1, src2); } while (0) #define UML_SUBB(block, dst, src1, src2) do { drcuml_block_append_3(block, DRCUML_OP_SUBB, 4, IF_ALWAYS, dst, src1, src2); } while (0) diff --git a/src/emu/cpu/mips/mips3drc.c b/src/emu/cpu/mips/mips3drc.c index e5af943f03c..ead8034f962 100644 --- a/src/emu/cpu/mips/mips3drc.c +++ b/src/emu/cpu/mips/mips3drc.c @@ -1125,6 +1125,7 @@ static void static_generate_exception(mips3_state *mips3, UINT8 exception, int r drcuml_state *drcuml = mips3->impstate->drcuml; UINT32 offset = 0x180; drcuml_codelabel next = 1; + drcuml_codelabel skip = 2; drcuml_block *block; jmp_buf errorbuf; @@ -1203,7 +1204,9 @@ static void static_generate_exception(mips3_state *mips3, UINT8 exception, int r /* choose our target PC */ UML_ADD(block, IREG(0), IREG(3), IMM(0xbfc00200)); // add i0,i3,0xbfc00200 UML_TEST(block, IREG(1), IMM(SR_BEV)); // test i1,SR_BEV - UML_ADDc(block, IF_Z, IREG(0), IREG(3), IMM(0x80000000)); // add i0,i3,0x80000000,z + UML_JMPc(block, IF_NZ, skip); // jnz <skip> + UML_ADD(block, IREG(0), IREG(3), IMM(0x80000000)); // add i0,i3,0x80000000,z + UML_LABEL(block, skip); // <skip>: /* adjust cycles */ UML_SUB(block, MEM(&mips3->icount), MEM(&mips3->icount), IREG(1)); // sub icount,icount,cycles,S |
