Search
lxdream.org :: lxdream/src/sh4/sh4x86.in :: diff
lxdream 0.9.1
released Jun 29
Download Now
filename src/sh4/sh4x86.in
changeset 956:4c1ed9e03985
prev953:f4a156508ad1
next974:16b079ed11bb
author nkeynes
date Wed Jan 14 00:09:44 2009 +0000 (11 years ago)
permissions -rw-r--r--
last change Exit immediately on an unconditional exception - makes those blocks a little simpler and shorter
file annotate diff log raw
1.1 --- a/src/sh4/sh4x86.in Tue Jan 13 11:56:28 2009 +0000
1.2 +++ b/src/sh4/sh4x86.in Wed Jan 14 00:09:44 2009 +0000
1.3 @@ -241,10 +241,11 @@
1.4 #define check_priv( ) \
1.5 if( (sh4r.xlat_sh4_mode & SR_MD) == 0 ) { \
1.6 if( sh4_x86.in_delay_slot ) { \
1.7 - JMP_exc(EXC_SLOT_ILLEGAL); \
1.8 + exit_block_exc(EXC_SLOT_ILLEGAL, (pc-2) ); \
1.9 } else { \
1.10 - JMP_exc(EXC_ILLEGAL ); \
1.11 + exit_block_exc(EXC_ILLEGAL, pc); \
1.12 } \
1.13 + sh4_x86.branch_taken = TRUE; \
1.14 sh4_x86.in_delay_slot = DELAY_NONE; \
1.15 return 2; \
1.16 }
1.17 @@ -313,7 +314,7 @@
1.18 #define MEM_WRITE_LONG( addr_reg, value_reg ) decode_address(addr_reg); _CALL_WRITE(addr_reg, value_reg, write_long)
1.19 #define MEM_PREFETCH( addr_reg ) decode_address(addr_reg); _CALL_READ(addr_reg, prefetch)
1.20
1.21 -#define SLOTILLEGAL() JMP_exc(EXC_SLOT_ILLEGAL); sh4_x86.in_delay_slot = DELAY_NONE; return 2;
1.22 +#define SLOTILLEGAL() exit_block_exc(EXC_SLOT_ILLEGAL, pc-2); sh4_x86.in_delay_slot = DELAY_NONE; return 2;
1.23
1.24 /****** Import appropriate calling conventions ******/
1.25 #if SIZEOF_VOID_P == 8
1.26 @@ -1743,9 +1744,9 @@
1.27 UNDEF {:
1.28 COUNT_INST(I_UNDEF);
1.29 if( sh4_x86.in_delay_slot ) {
1.30 - SLOTILLEGAL();
1.31 + exit_block_exc(EXC_SLOT_ILLEGAL, pc-2);
1.32 } else {
1.33 - JMP_exc(EXC_ILLEGAL);
1.34 + exit_block_exc(EXC_ILLEGAL, pc);
1.35 return 2;
1.36 }
1.37 :}
.