summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2009-11-18 06:12:50 +0000
committer Aaron Giles <aaron@aarongiles.com>2009-11-18 06:12:50 +0000
commit693024974ea3f2ab695ac20f694f72dff17becdd (patch)
treea721ec51ef2258856e86ed706bd1fb5d7a5c0664 /src
parentf9a9cbe81b7ce0e4b9b449dc514462999bca1a7c (diff)
Fix assertion in DRC.
Diffstat (limited to 'src')
-rw-r--r--src/emu/cpu/drcumlsh.h1
-rw-r--r--src/emu/cpu/mips/mips3drc.c5
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