fix unaligned instr fetch behavior

This commit is contained in:
Eyck Jentzsch 2021-09-30 19:27:46 +02:00
parent d78fcc48e5
commit 2f15d9676e
3 changed files with 1 additions and 94 deletions

View File

@ -65,8 +65,6 @@ public:
using reg_t = typename traits::reg_t; using reg_t = typename traits::reg_t;
using mem_type_e = typename traits::mem_type_e; using mem_type_e = typename traits::mem_type_e;
const bool has_compressed = traits::MISA_VAL & 0b100;
vm_impl(); vm_impl();
vm_impl(ARCH &core, unsigned core_id = 0, unsigned cluster_id = 0); vm_impl(ARCH &core, unsigned core_id = 0, unsigned cluster_id = 0);
@ -212,7 +210,6 @@ private:
<%instr.behavior.eachLine{%>${it} <%instr.behavior.eachLine{%>${it}
<%}%>} catch(...){} <%}%>} catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, ${idx}); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, ${idx});
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){

View File

@ -53,7 +53,7 @@ template <> struct traits<tgc_c> {
static constexpr std::array<const char*, 35> reg_aliases{ static constexpr std::array<const char*, 35> reg_aliases{
{"ZERO", "RA", "SP", "GP", "TP", "T0", "T1", "T2", "S0", "S1", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "S10", "S11", "T3", "T4", "T5", "T6", "PC", "NEXT_PC", "PRIV"}}; {"ZERO", "RA", "SP", "GP", "TP", "T0", "T1", "T2", "S0", "S1", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "S10", "S11", "T3", "T4", "T5", "T6", "PC", "NEXT_PC", "PRIV"}};
enum constants {MISA_VAL=0b01000000000000000001000100000100, XLEN=32, CSR_SIZE=4096, INSTR_ALIGNMENT=2, fence=0, fencei=1, fencevmal=2, fencevmau=3, MUL_LEN=64}; enum constants {MISA_VAL=0b01000000000000000001000100000100, MARCHID_VAL=0x80000003, XLEN=32, CSR_SIZE=4096, INSTR_ALIGNMENT=2, fence=0, fencei=1, fencevmal=2, fencevmau=3, MUL_LEN=64};
constexpr static unsigned FP_REGS_SIZE = 0; constexpr static unsigned FP_REGS_SIZE = 0;

View File

@ -65,8 +65,6 @@ public:
using reg_t = typename traits::reg_t; using reg_t = typename traits::reg_t;
using mem_type_e = typename traits::mem_type_e; using mem_type_e = typename traits::mem_type_e;
const bool has_compressed = traits::MISA_VAL & 0b100;
vm_impl(); vm_impl();
vm_impl(ARCH &core, unsigned core_id = 0, unsigned cluster_id = 0); vm_impl(ARCH &core, unsigned core_id = 0, unsigned cluster_id = 0);
@ -387,7 +385,6 @@ private:
if(rd != 0) *(X+rd) = (int32_t)imm; if(rd != 0) *(X+rd) = (int32_t)imm;
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 0); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 0);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -428,7 +425,6 @@ private:
if(rd != 0) *(X+rd) = *PC + (int32_t)imm; if(rd != 0) *(X+rd) = *PC + (int32_t)imm;
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 1); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 1);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -477,7 +473,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 2); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 2);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -528,7 +523,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 3); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 3);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -575,7 +569,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 4); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 4);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -622,7 +615,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 5); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 5);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -669,7 +661,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 6); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 6);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -716,7 +707,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 7); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 7);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -763,7 +753,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 8); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 8);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -810,7 +799,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 9); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 9);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -855,7 +843,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 10); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 10);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -901,7 +888,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 11); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 11);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -947,7 +933,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 12); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 12);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -992,7 +977,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 13); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 13);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1038,7 +1022,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 14); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 14);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1080,7 +1063,6 @@ private:
writeSpace1(traits::MEM, *(X+rs1) + (int16_t)sext<12>(imm), (int8_t)*(X+rs2)); writeSpace1(traits::MEM, *(X+rs1) + (int16_t)sext<12>(imm), (int8_t)*(X+rs2));
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 15); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 15);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1125,7 +1107,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 16); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 16);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1170,7 +1151,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 17); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 17);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1212,7 +1192,6 @@ private:
if(rd != 0) *(X+rd) = *(X+rs1) + (int16_t)sext<12>(imm); if(rd != 0) *(X+rd) = *(X+rs1) + (int16_t)sext<12>(imm);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 18); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 18);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1254,7 +1233,6 @@ private:
if(rd != 0) *(X+rd) = (int32_t)*(X+rs1) < (int16_t)sext<12>(imm)? 1 : 0; if(rd != 0) *(X+rd) = (int32_t)*(X+rs1) < (int16_t)sext<12>(imm)? 1 : 0;
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 19); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 19);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1296,7 +1274,6 @@ private:
if(rd != 0) *(X+rd) = (*(X+rs1) < (uint32_t)((int16_t)sext<12>(imm)))? 1 : 0; if(rd != 0) *(X+rd) = (*(X+rs1) < (uint32_t)((int16_t)sext<12>(imm)))? 1 : 0;
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 20); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 20);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1338,7 +1315,6 @@ private:
if(rd != 0) *(X+rd) = *(X+rs1) ^ (int16_t)sext<12>(imm); if(rd != 0) *(X+rd) = *(X+rs1) ^ (int16_t)sext<12>(imm);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 21); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 21);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1380,7 +1356,6 @@ private:
if(rd != 0) *(X+rd) = *(X+rs1) | (int16_t)sext<12>(imm); if(rd != 0) *(X+rd) = *(X+rs1) | (int16_t)sext<12>(imm);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 22); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 22);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1422,7 +1397,6 @@ private:
if(rd != 0) *(X+rd) = *(X+rs1) & (int16_t)sext<12>(imm); if(rd != 0) *(X+rd) = *(X+rs1) & (int16_t)sext<12>(imm);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 23); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 23);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1469,7 +1443,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 24); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 24);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1516,7 +1489,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 25); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 25);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1563,7 +1535,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 26); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 26);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1605,7 +1576,6 @@ private:
if(rd != 0) *(X+rd) = *(X+rs1) + *(X+rs2); if(rd != 0) *(X+rd) = *(X+rs1) + *(X+rs2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 27); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 27);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1647,7 +1617,6 @@ private:
if(rd != 0) *(X+rd) = *(X+rs1) - *(X+rs2); if(rd != 0) *(X+rd) = *(X+rs1) - *(X+rs2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 28); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 28);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1689,7 +1658,6 @@ private:
if(rd != 0) *(X+rd) = *(X+rs1) << (*(X+rs2) & (traits::XLEN - 1)); if(rd != 0) *(X+rd) = *(X+rs1) << (*(X+rs2) & (traits::XLEN - 1));
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 29); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 29);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1731,7 +1699,6 @@ private:
if(rd != 0) *(X+rd) = (int32_t)*(X+rs1) < (int32_t)*(X+rs2)? 1 : 0; if(rd != 0) *(X+rd) = (int32_t)*(X+rs1) < (int32_t)*(X+rs2)? 1 : 0;
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 30); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 30);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1773,7 +1740,6 @@ private:
if(rd != 0) *(X+rd) = (uint32_t)*(X+rs1) < (uint32_t)*(X+rs2)? 1 : 0; if(rd != 0) *(X+rd) = (uint32_t)*(X+rs1) < (uint32_t)*(X+rs2)? 1 : 0;
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 31); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 31);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1815,7 +1781,6 @@ private:
if(rd != 0) *(X+rd) = *(X+rs1) ^ *(X+rs2); if(rd != 0) *(X+rd) = *(X+rs1) ^ *(X+rs2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 32); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 32);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1857,7 +1822,6 @@ private:
if(rd != 0) *(X+rd) = *(X+rs1) >> (*(X+rs2) & (traits::XLEN - 1)); if(rd != 0) *(X+rd) = *(X+rs1) >> (*(X+rs2) & (traits::XLEN - 1));
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 33); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 33);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1899,7 +1863,6 @@ private:
if(rd != 0) *(X+rd) = (int32_t)*(X+rs1) >> (*(X+rs2) & (traits::XLEN - 1)); if(rd != 0) *(X+rd) = (int32_t)*(X+rs1) >> (*(X+rs2) & (traits::XLEN - 1));
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 34); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 34);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1941,7 +1904,6 @@ private:
if(rd != 0) *(X+rd) = *(X+rs1) | *(X+rs2); if(rd != 0) *(X+rd) = *(X+rs1) | *(X+rs2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 35); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 35);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -1983,7 +1945,6 @@ private:
if(rd != 0) *(X+rd) = *(X+rs1) & *(X+rs2); if(rd != 0) *(X+rd) = *(X+rs1) & *(X+rs2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 36); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 36);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2026,7 +1987,6 @@ private:
writeSpace1(traits::FENCE, traits::fence, pred << 4 | succ); writeSpace1(traits::FENCE, traits::fence, pred << 4 | succ);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 37); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 37);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2061,7 +2021,6 @@ private:
raise(0, 11); raise(0, 11);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 38); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 38);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2096,7 +2055,6 @@ private:
raise(0, 3); raise(0, 3);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 39); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 39);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2131,7 +2089,6 @@ private:
leave(0); leave(0);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 40); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 40);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2166,7 +2123,6 @@ private:
leave(1); leave(1);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 41); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 41);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2201,7 +2157,6 @@ private:
leave(3); leave(3);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 42); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 42);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2236,7 +2191,6 @@ private:
wait(1); wait(1);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 43); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 43);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2288,7 +2242,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 44); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 44);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2335,7 +2288,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 45); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 45);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2382,7 +2334,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 46); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 46);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2428,7 +2379,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 47); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 47);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2474,7 +2424,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 48); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 48);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2520,7 +2469,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 49); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 49);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2567,7 +2515,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 50); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 50);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2614,7 +2561,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 51); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 51);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2661,7 +2607,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 52); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 52);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2708,7 +2653,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 53); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 53);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2759,7 +2703,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 54); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 54);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2806,7 +2749,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 55); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 55);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2857,7 +2799,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 56); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 56);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2904,7 +2845,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 57); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 57);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2946,7 +2886,6 @@ private:
else raise(0, 2); else raise(0, 2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 58); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 58);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -2991,7 +2930,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 59); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 59);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3036,7 +2974,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 60); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 60);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3077,7 +3014,6 @@ private:
*(X+rs1) = *(X+rs1) + (int8_t)sext<6>(imm); *(X+rs1) = *(X+rs1) + (int8_t)sext<6>(imm);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 61); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 61);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3114,7 +3050,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 62); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 62);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3157,7 +3092,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 63); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 63);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3200,7 +3134,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 64); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 64);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3244,7 +3177,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 65); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 65);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3285,7 +3217,6 @@ private:
else raise(0, 2); else raise(0, 2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 66); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 66);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3321,7 +3252,6 @@ private:
raise(0, 2); raise(0, 2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 67); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 67);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3365,7 +3295,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 68); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 68);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3413,7 +3342,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 69); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 69);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3457,7 +3385,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 70); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 70);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3501,7 +3428,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 71); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 71);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3545,7 +3471,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 72); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 72);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3589,7 +3514,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 73); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 73);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3633,7 +3557,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 74); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 74);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3672,7 +3595,6 @@ private:
pc_assign(*NEXT_PC) = *PC + (int16_t)sext<12>(imm); pc_assign(*NEXT_PC) = *PC + (int16_t)sext<12>(imm);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 75); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 75);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3713,7 +3635,6 @@ private:
if(*(X+(rs1 + 8)) == 0) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<9>(imm); if(*(X+(rs1 + 8)) == 0) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<9>(imm);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 76); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 76);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3754,7 +3675,6 @@ private:
if(*(X+(rs1 + 8)) != 0) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<9>(imm); if(*(X+(rs1 + 8)) != 0) pc_assign(*NEXT_PC) = *PC + (int16_t)sext<9>(imm);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 77); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 77);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3795,7 +3715,6 @@ private:
if(nzuimm) *(X+rs1) = *(X+rs1) << nzuimm; if(nzuimm) *(X+rs1) = *(X+rs1) << nzuimm;
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 78); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 78);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3840,7 +3759,6 @@ private:
else raise(0, 2); else raise(0, 2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 79); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 79);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3881,7 +3799,6 @@ private:
if(rd != 0) *(X+rd) = *(X+rs2); if(rd != 0) *(X+rd) = *(X+rs2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 80); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 80);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3922,7 +3839,6 @@ private:
else raise(0, 2); else raise(0, 2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 81); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 81);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3957,7 +3873,6 @@ private:
raise(0, 2); raise(0, 2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 82); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 82);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -3998,7 +3913,6 @@ private:
if(rd != 0) *(X+rd) = *(X+rd) + *(X+rs2); if(rd != 0) *(X+rd) = *(X+rd) + *(X+rs2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 83); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 83);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -4042,7 +3956,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 84); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 84);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -4077,7 +3990,6 @@ private:
raise(0, 3); raise(0, 3);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 85); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 85);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -4121,7 +4033,6 @@ private:
} }
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 86); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 86);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){
@ -4156,7 +4067,6 @@ private:
raise(0, 2); raise(0, 2);
} catch(...){} } catch(...){}
// post execution stuff // post execution stuff
if(!has_compressed && (*NEXT_PC&0x3)!=0) raise(0, 0);
if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 87); if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 87);
// trap check // trap check
if(*trap_state!=0){ if(*trap_state!=0){