corrects gen_sync before trap check, improves illegal_instruction

This commit is contained in:
Eyck-Alexander Jentzsch 2024-07-17 20:25:49 +02:00
parent 1a4465a371
commit 244bf6d2f2
2 changed files with 100 additions and 90 deletions

View File

@ -177,8 +177,8 @@ private:
<%instr.behavior.eachLine{%>${it}
<%}%>
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,${idx});
gen_trap_check(tu);
return returnValue;
}
<%}%>
@ -187,8 +187,13 @@ private:
****************************************************************************/
compile_ret_t illegal_instruction(virt_addr_t &pc, code_word_t instr, tu_builder& tu) {
vm_impl::gen_sync(tu, iss::PRE_SYNC, instr_descr.size());
if(this->disass_enabled){
/* generate console output when executing the command */
tu("print_disass(core_ptr, {:#x}, \"{}\");", pc.val, std::string("illegal_instruction"));
}
pc = pc + ((instr & 3) == 3 ? 4 : 2);
gen_raise_trap(tu, 0, 2); // illegal instruction trap
this->gen_set_tval(tu, instr);
vm_impl::gen_sync(tu, iss::POST_SYNC, instr_descr.size());
vm_impl::gen_trap_check(tu);
return BRANCH;

View File

@ -362,8 +362,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,0);
gen_trap_check(tu);
return returnValue;
}
@ -398,8 +398,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,1);
gen_trap_check(tu);
return returnValue;
}
@ -443,8 +443,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,2);
gen_trap_check(tu);
return returnValue;
}
@ -496,8 +496,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,3);
gen_trap_check(tu);
return returnValue;
}
@ -542,8 +542,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,4);
gen_trap_check(tu);
return returnValue;
}
@ -588,8 +588,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,5);
gen_trap_check(tu);
return returnValue;
}
@ -634,8 +634,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,6);
gen_trap_check(tu);
return returnValue;
}
@ -680,8 +680,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,7);
gen_trap_check(tu);
return returnValue;
}
@ -726,8 +726,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,8);
gen_trap_check(tu);
return returnValue;
}
@ -772,8 +772,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,9);
gen_trap_check(tu);
return returnValue;
}
@ -813,8 +813,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,10);
gen_trap_check(tu);
return returnValue;
}
@ -854,8 +854,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,11);
gen_trap_check(tu);
return returnValue;
}
@ -895,8 +895,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,12);
gen_trap_check(tu);
return returnValue;
}
@ -936,8 +936,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,13);
gen_trap_check(tu);
return returnValue;
}
@ -977,8 +977,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,14);
gen_trap_check(tu);
return returnValue;
}
@ -1014,8 +1014,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,15);
gen_trap_check(tu);
return returnValue;
}
@ -1051,8 +1051,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,16);
gen_trap_check(tu);
return returnValue;
}
@ -1088,8 +1088,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,17);
gen_trap_check(tu);
return returnValue;
}
@ -1127,8 +1127,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,18);
gen_trap_check(tu);
return returnValue;
}
@ -1166,8 +1166,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,19);
gen_trap_check(tu);
return returnValue;
}
@ -1205,8 +1205,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,20);
gen_trap_check(tu);
return returnValue;
}
@ -1244,8 +1244,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,21);
gen_trap_check(tu);
return returnValue;
}
@ -1283,8 +1283,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,22);
gen_trap_check(tu);
return returnValue;
}
@ -1322,8 +1322,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,23);
gen_trap_check(tu);
return returnValue;
}
@ -1361,8 +1361,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,24);
gen_trap_check(tu);
return returnValue;
}
@ -1400,8 +1400,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,25);
gen_trap_check(tu);
return returnValue;
}
@ -1439,8 +1439,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,26);
gen_trap_check(tu);
return returnValue;
}
@ -1478,8 +1478,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,27);
gen_trap_check(tu);
return returnValue;
}
@ -1517,8 +1517,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,28);
gen_trap_check(tu);
return returnValue;
}
@ -1558,8 +1558,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,29);
gen_trap_check(tu);
return returnValue;
}
@ -1597,8 +1597,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,30);
gen_trap_check(tu);
return returnValue;
}
@ -1636,8 +1636,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,31);
gen_trap_check(tu);
return returnValue;
}
@ -1675,8 +1675,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,32);
gen_trap_check(tu);
return returnValue;
}
@ -1716,8 +1716,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,33);
gen_trap_check(tu);
return returnValue;
}
@ -1757,8 +1757,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,34);
gen_trap_check(tu);
return returnValue;
}
@ -1796,8 +1796,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,35);
gen_trap_check(tu);
return returnValue;
}
@ -1835,8 +1835,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,36);
gen_trap_check(tu);
return returnValue;
}
@ -1866,8 +1866,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,37);
gen_trap_check(tu);
return returnValue;
}
@ -1889,8 +1889,8 @@ private:
auto returnValue = std::make_tuple(TRAP);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,38);
gen_trap_check(tu);
return returnValue;
}
@ -1912,8 +1912,8 @@ private:
auto returnValue = std::make_tuple(TRAP);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,39);
gen_trap_check(tu);
return returnValue;
}
@ -1935,8 +1935,8 @@ private:
auto returnValue = std::make_tuple(TRAP);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,40);
gen_trap_check(tu);
return returnValue;
}
@ -1958,8 +1958,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,41);
gen_trap_check(tu);
return returnValue;
}
@ -2000,8 +2000,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,42);
gen_trap_check(tu);
return returnValue;
}
@ -2044,8 +2044,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,43);
gen_trap_check(tu);
return returnValue;
}
@ -2088,8 +2088,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,44);
gen_trap_check(tu);
return returnValue;
}
@ -2127,8 +2127,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,45);
gen_trap_check(tu);
return returnValue;
}
@ -2170,8 +2170,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,46);
gen_trap_check(tu);
return returnValue;
}
@ -2213,8 +2213,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,47);
gen_trap_check(tu);
return returnValue;
}
@ -2242,8 +2242,8 @@ private:
auto returnValue = std::make_tuple(FLUSH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,48);
gen_trap_check(tu);
return returnValue;
}
@ -2282,8 +2282,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,49);
gen_trap_check(tu);
return returnValue;
}
@ -2324,8 +2324,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,50);
gen_trap_check(tu);
return returnValue;
}
@ -2366,8 +2366,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,51);
gen_trap_check(tu);
return returnValue;
}
@ -2408,8 +2408,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,52);
gen_trap_check(tu);
return returnValue;
}
@ -2467,8 +2467,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,53);
gen_trap_check(tu);
return returnValue;
}
@ -2515,8 +2515,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,54);
gen_trap_check(tu);
return returnValue;
}
@ -2577,8 +2577,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,55);
gen_trap_check(tu);
return returnValue;
}
@ -2625,8 +2625,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,56);
gen_trap_check(tu);
return returnValue;
}
@ -2661,8 +2661,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,57);
gen_trap_check(tu);
return returnValue;
}
@ -2694,8 +2694,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,58);
gen_trap_check(tu);
return returnValue;
}
@ -2726,8 +2726,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,59);
gen_trap_check(tu);
return returnValue;
}
@ -2764,8 +2764,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,60);
gen_trap_check(tu);
return returnValue;
}
@ -2787,8 +2787,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,61);
gen_trap_check(tu);
return returnValue;
}
@ -2818,8 +2818,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,62);
gen_trap_check(tu);
return returnValue;
}
@ -2854,8 +2854,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,63);
gen_trap_check(tu);
return returnValue;
}
@ -2888,8 +2888,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,64);
gen_trap_check(tu);
return returnValue;
}
@ -2923,8 +2923,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,65);
gen_trap_check(tu);
return returnValue;
}
@ -2947,8 +2947,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,66);
gen_trap_check(tu);
return returnValue;
}
@ -2978,8 +2978,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,67);
gen_trap_check(tu);
return returnValue;
}
@ -3017,8 +3017,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,68);
gen_trap_check(tu);
return returnValue;
}
@ -3048,8 +3048,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,69);
gen_trap_check(tu);
return returnValue;
}
@ -3079,8 +3079,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,70);
gen_trap_check(tu);
return returnValue;
}
@ -3110,8 +3110,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,71);
gen_trap_check(tu);
return returnValue;
}
@ -3141,8 +3141,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,72);
gen_trap_check(tu);
return returnValue;
}
@ -3172,8 +3172,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,73);
gen_trap_check(tu);
return returnValue;
}
@ -3201,8 +3201,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,74);
gen_trap_check(tu);
return returnValue;
}
@ -3235,8 +3235,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,75);
gen_trap_check(tu);
return returnValue;
}
@ -3269,8 +3269,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,76);
gen_trap_check(tu);
return returnValue;
}
@ -3307,8 +3307,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,77);
gen_trap_check(tu);
return returnValue;
}
@ -3344,8 +3344,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,78);
gen_trap_check(tu);
return returnValue;
}
@ -3380,8 +3380,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,79);
gen_trap_check(tu);
return returnValue;
}
@ -3416,8 +3416,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,80);
gen_trap_check(tu);
return returnValue;
}
@ -3439,8 +3439,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,81);
gen_trap_check(tu);
return returnValue;
}
@ -3477,8 +3477,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,82);
gen_trap_check(tu);
return returnValue;
}
@ -3517,8 +3517,8 @@ private:
auto returnValue = std::make_tuple(BRANCH);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,83);
gen_trap_check(tu);
return returnValue;
}
@ -3540,8 +3540,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,84);
gen_trap_check(tu);
return returnValue;
}
@ -3576,8 +3576,8 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,85);
gen_trap_check(tu);
return returnValue;
}
@ -3599,18 +3599,23 @@ private:
auto returnValue = std::make_tuple(CONT);
tu.close_scope();
gen_trap_check(tu);
vm_base<ARCH>::gen_sync(tu, POST_SYNC,86);
gen_trap_check(tu);
return returnValue;
}
/****************************************************************************
* end opcode definitions
****************************************************************************/
compile_ret_t illegal_intruction(virt_addr_t &pc, code_word_t instr, tu_builder& tu) {
compile_ret_t illegal_instruction(virt_addr_t &pc, code_word_t instr, tu_builder& tu) {
vm_impl::gen_sync(tu, iss::PRE_SYNC, instr_descr.size());
if(this->disass_enabled){
/* generate console output when executing the command */
tu("print_disass(core_ptr, {:#x}, \"{}\");", pc.val, std::string("illegal_instruction"));
}
pc = pc + ((instr & 3) == 3 ? 4 : 2);
gen_raise_trap(tu, 0, 2); // illegal instruction trap
this->gen_set_tval(tu, instr);
vm_impl::gen_sync(tu, iss::POST_SYNC, instr_descr.size());
vm_impl::gen_trap_check(tu);
return BRANCH;
@ -3712,7 +3717,7 @@ vm_impl<ARCH>::gen_single_inst_behavior(virt_addr_t &pc, unsigned int &inst_cnt,
++inst_cnt;
auto f = decode_instr(root, instr);
if (f == nullptr) {
f = &this_class::illegal_intruction;
f = &this_class::illegal_instruction;
}
return (this->*f)(pc, instr, tu);
}