Compare commits
	
		
			4 Commits
		
	
	
		
			ef2a4df925
			...
			68b5697c8f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 68b5697c8f | |||
| 09b0f0d0c8 | |||
| 98b418ff43 | |||
| 059bd0d371 | 
| @@ -35,12 +35,14 @@ FILE(GLOB TGC_VM_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/vm/interp/vm_*.cpp) | |||||||
| set(LIB_SOURCES  | set(LIB_SOURCES  | ||||||
|     src/vm/fp_functions.cpp |     src/vm/fp_functions.cpp | ||||||
|     src/plugin/instruction_count.cpp |     src/plugin/instruction_count.cpp | ||||||
|     src/plugin/cycle_estimate.cpp |  | ||||||
|     src/plugin/cov.cpp |     src/plugin/cov.cpp | ||||||
|      |      | ||||||
|     ${TGC_SOURCES} |     ${TGC_SOURCES} | ||||||
|     ${TGC_VM_SOURCES} |     ${TGC_VM_SOURCES} | ||||||
| ) | ) | ||||||
|  | if(TARGET RapidJSON) | ||||||
|  |     list(APPEND LIB_SOURCES src/plugin/cycle_estimate.cpp) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| if(WITH_LLVM) | if(WITH_LLVM) | ||||||
| 	FILE(GLOB TGC_LLVM_SOURCES | 	FILE(GLOB TGC_LLVM_SOURCES | ||||||
| @@ -82,6 +84,10 @@ elseif(TARGET elfio::elfio) | |||||||
| else() | else() | ||||||
|     message(FATAL_ERROR "No elfio library found, maybe a find_package() call is missing") |     message(FATAL_ERROR "No elfio library found, maybe a find_package() call is missing") | ||||||
| endif() | endif() | ||||||
|  | if(TARGET RapidJSON) | ||||||
|  |     target_link_libraries(${PROJECT_NAME} PUBLIC RapidJSON) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  |  | ||||||
| set_target_properties(${PROJECT_NAME} PROPERTIES | set_target_properties(${PROJECT_NAME} PROPERTIES | ||||||
|   VERSION ${PROJECT_VERSION} |   VERSION ${PROJECT_VERSION} | ||||||
|   | |||||||
| @@ -1,9 +1,12 @@ | |||||||
| { | { | ||||||
| 	"${coreDef.name}" : [<%instructions.eachWithIndex{instr,index -> %>${index==0?"":","} | 	"${coreDef.name}" : [<%instructions.eachWithIndex{instr,index -> %>${index==0?"":","} | ||||||
| 		{ | 		{ | ||||||
| 			"name"  : "${instr.name}", | 			"name"  :   "${instr.name}", | ||||||
| 			"size"  : ${instr.length}, | 			"size"  :   ${instr.length}, | ||||||
| 			"delay" : ${instr.isConditional?"[1,1]":"1"} | 			"encoding": "${instr.encoding}", | ||||||
|  |             "mask":     "${instr.mask}", | ||||||
|  | 			"branch":   ${instr.modifiesPC}, | ||||||
|  | 			"delay" :   ${instr.isConditional?"[1,1]":"1"} | ||||||
| 		}<%}%> | 		}<%}%> | ||||||
| 	] | 	] | ||||||
| } | } | ||||||
| @@ -201,7 +201,7 @@ public: | |||||||
|  |  | ||||||
|     void disass_output(uint64_t pc, const std::string instr) override { |     void disass_output(uint64_t pc, const std::string instr) override { | ||||||
|         CLOG(INFO, disass) << fmt::format("0x{:016x}    {:40} [s:0x{:x};c:{}]", |         CLOG(INFO, disass) << fmt::format("0x{:016x}    {:40} [s:0x{:x};c:{}]", | ||||||
|                 pc, instr, (reg_t)state.mstatus, this->reg.icount); |                 pc, instr, (reg_t)state.mstatus, this->reg.icount + cycle_offset); | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     iss::instrumentation_if *get_instrumentation_if() override { return &instr_if; } |     iss::instrumentation_if *get_instrumentation_if() override { return &instr_if; } | ||||||
|   | |||||||
| @@ -307,7 +307,7 @@ public: | |||||||
|  |  | ||||||
|     void disass_output(uint64_t pc, const std::string instr) override { |     void disass_output(uint64_t pc, const std::string instr) override { | ||||||
|         CLOG(INFO, disass) << fmt::format("0x{:016x}    {:40} [p:{};s:0x{:x};c:{}]", |         CLOG(INFO, disass) << fmt::format("0x{:016x}    {:40} [p:{};s:0x{:x};c:{}]", | ||||||
|                 pc, instr, lvl[this->reg.PRIV], (reg_t)state.mstatus, this->reg.ccount); |                 pc, instr, lvl[this->reg.PRIV], (reg_t)state.mstatus, this->reg.ccount + cycle_offset); | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     iss::instrumentation_if *get_instrumentation_if() override { return &instr_if; } |     iss::instrumentation_if *get_instrumentation_if() override { return &instr_if; } | ||||||
|   | |||||||
| @@ -216,7 +216,7 @@ public: | |||||||
|  |  | ||||||
|     void disass_output(uint64_t pc, const std::string instr) override { |     void disass_output(uint64_t pc, const std::string instr) override { | ||||||
|         CLOG(INFO, disass) << fmt::format("0x{:016x}    {:40} [p:{};s:0x{:x};c:{}]", |         CLOG(INFO, disass) << fmt::format("0x{:016x}    {:40} [p:{};s:0x{:x};c:{}]", | ||||||
|                 pc, instr, lvl[this->reg.PRIV], (reg_t)state.mstatus, this->reg.icount); |                 pc, instr, lvl[this->reg.PRIV], (reg_t)state.mstatus, this->reg.icount + cycle_offset); | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     iss::instrumentation_if *get_instrumentation_if() override { return &instr_if; } |     iss::instrumentation_if *get_instrumentation_if() override { return &instr_if; } | ||||||
|   | |||||||
| @@ -37,9 +37,9 @@ | |||||||
|  |  | ||||||
| #include "iss/instrumentation_if.h" | #include "iss/instrumentation_if.h" | ||||||
| #include "iss/vm_plugin.h" | #include "iss/vm_plugin.h" | ||||||
| #include <json/json.h> |  | ||||||
| #include <string> | #include <string> | ||||||
| #include <unordered_map> | #include <unordered_map> | ||||||
|  | #include <vector> | ||||||
|  |  | ||||||
| namespace iss { | namespace iss { | ||||||
|  |  | ||||||
| @@ -49,11 +49,13 @@ class cycle_estimate: public iss::vm_plugin { | |||||||
| 	BEGIN_BF_DECL(instr_desc, uint32_t) | 	BEGIN_BF_DECL(instr_desc, uint32_t) | ||||||
| 		BF_FIELD(taken, 24, 8) | 		BF_FIELD(taken, 24, 8) | ||||||
| 		BF_FIELD(not_taken, 16, 8) | 		BF_FIELD(not_taken, 16, 8) | ||||||
| 		BF_FIELD(size, 0, 16) |         BF_FIELD(is_branch, 8, 8) | ||||||
| 		instr_desc(uint32_t size, uint32_t taken, uint32_t not_taken): instr_desc() { |         BF_FIELD(size, 0, 8) | ||||||
|  | 		instr_desc(uint32_t size, uint32_t taken, uint32_t not_taken, bool branch): instr_desc() { | ||||||
| 			this->size=size; | 			this->size=size; | ||||||
| 			this->taken=taken; | 			this->taken=taken; | ||||||
| 			this->not_taken=not_taken; | 			this->not_taken=not_taken; | ||||||
|  | 			this->is_branch=branch; | ||||||
| 		} | 		} | ||||||
| 	END_BF_DECL(); | 	END_BF_DECL(); | ||||||
|  |  | ||||||
| @@ -64,7 +66,7 @@ public: | |||||||
|  |  | ||||||
|     cycle_estimate(const cycle_estimate &&) = delete; |     cycle_estimate(const cycle_estimate &&) = delete; | ||||||
|  |  | ||||||
|     cycle_estimate(std::string config_file_name); |     cycle_estimate(std::string const& config_file_name); | ||||||
|  |  | ||||||
|     virtual ~cycle_estimate(); |     virtual ~cycle_estimate(); | ||||||
|  |  | ||||||
| @@ -88,7 +90,7 @@ private: | |||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
|     std::unordered_map<std::pair<uint64_t, uint64_t>, uint64_t, pair_hash> blocks; |     std::unordered_map<std::pair<uint64_t, uint64_t>, uint64_t, pair_hash> blocks; | ||||||
|     Json::Value root; |     std::string config_file_name; | ||||||
| }; | }; | ||||||
| } | } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -36,58 +36,82 @@ | |||||||
|  |  | ||||||
| #include <iss/arch_if.h> | #include <iss/arch_if.h> | ||||||
| #include <util/logging.h> | #include <util/logging.h> | ||||||
|  | #include <rapidjson/document.h> | ||||||
|  | #include <rapidjson/istreamwrapper.h> | ||||||
|  | #include "rapidjson/writer.h" | ||||||
|  | #include "rapidjson/stringbuffer.h" | ||||||
|  | #include <rapidjson/ostreamwrapper.h> | ||||||
|  | #include <rapidjson/error/en.h> | ||||||
| #include <fstream> | #include <fstream> | ||||||
|  |  | ||||||
| iss::plugin::cycle_estimate::cycle_estimate(std::string config_file_name) | using namespace rapidjson; | ||||||
|  | using namespace std; | ||||||
|  |  | ||||||
|  | iss::plugin::cycle_estimate::cycle_estimate(string const& config_file_name) | ||||||
| : arch_instr(nullptr) | : arch_instr(nullptr) | ||||||
|  | , config_file_name(config_file_name) | ||||||
| { | { | ||||||
|     if (config_file_name.length() > 0) { |  | ||||||
|         std::ifstream is(config_file_name); |  | ||||||
|         if (is.is_open()) { |  | ||||||
|             try { |  | ||||||
|                 is >> root; |  | ||||||
|             } catch (Json::RuntimeError &e) { |  | ||||||
|                 LOG(ERR) << "Could not parse input file " << config_file_name << ", reason: " << e.what(); |  | ||||||
|             } |  | ||||||
|         } else { |  | ||||||
|             LOG(ERR) << "Could not open input file " << config_file_name; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } | } | ||||||
|  |  | ||||||
| iss::plugin::cycle_estimate::~cycle_estimate() { | iss::plugin::cycle_estimate::~cycle_estimate() { | ||||||
| } | } | ||||||
|  |  | ||||||
| bool iss::plugin::cycle_estimate::registration(const char* const version, vm_if& vm) { | bool iss::plugin::cycle_estimate::registration(const char* const version, vm_if& vm) { | ||||||
| 	arch_instr = vm.get_arch()->get_instrumentation_if(); |     arch_instr = vm.get_arch()->get_instrumentation_if(); | ||||||
| 	if(!arch_instr) return false; |     if(!arch_instr) return false; | ||||||
| 	const std::string  core_name = arch_instr->core_type_name(); |     const string  core_name = arch_instr->core_type_name(); | ||||||
|     Json::Value &val = root[core_name]; |     if (config_file_name.length() > 0) { | ||||||
|     if(!val.isNull() && val.isArray()){ |         ifstream is(config_file_name); | ||||||
|     	delays.reserve(val.size()); |         if (is.is_open()) { | ||||||
|     	for(auto it:val){ |             try { | ||||||
|     		auto name = it["name"]; |                 IStreamWrapper isw(is); | ||||||
|     		auto size = it["size"]; |                 Document d; | ||||||
|     		auto delay = it["delay"]; |                 ParseResult ok = d.ParseStream(isw); | ||||||
|     		if(!name.isString() || !size.isUInt() || !(delay.isUInt() || delay.isArray())) throw std::runtime_error("JSON parse error"); |                 if(ok) { | ||||||
|     		if(delay.isUInt()){ |                     Value& val = d[core_name.c_str()]; | ||||||
| 				delays.push_back(instr_desc{size.asUInt(), delay.asUInt(), 0}); |                     if(val.IsArray()){ | ||||||
|     		} else { |                         delays.reserve(val.Size()); | ||||||
| 				delays.push_back(instr_desc{size.asUInt(), delay[0].asUInt(), delay[1].asUInt()}); |                         for (auto it = val.Begin(); it != val.End(); ++it) { | ||||||
|     		} |                             auto& name = (*it)["name"]; | ||||||
|     	} |                             auto& size = (*it)["size"]; | ||||||
|     } else { |                             auto& delay = (*it)["delay"]; | ||||||
|         LOG(ERR)<<"plugin cycle_estimate: could not find an entry for "<<core_name<<" in JSON file"<<std::endl; |                             auto& branch = (*it)["branch"]; | ||||||
|  |                             if(delay.IsArray()) { | ||||||
|  |                                 auto dt = delay[0].Get<unsigned>(); | ||||||
|  |                                 auto dnt = delay[1].Get<unsigned>(); | ||||||
|  |                                 delays.push_back(instr_desc{size.Get<unsigned>(), dt, dnt, branch.Get<bool>()}); | ||||||
|  |                             } else if(delay.Is<unsigned>()) { | ||||||
|  |                                 auto d = delay.Get<unsigned>(); | ||||||
|  |                                 delays.push_back(instr_desc{size.Get<unsigned>(), d, d, branch.Get<bool>()}); | ||||||
|  |                             } else | ||||||
|  |                                 throw runtime_error("JSON parse error"); | ||||||
|  |                         } | ||||||
|  |                     } else { | ||||||
|  |                         LOG(ERR)<<"plugin cycle_estimate: could not find an entry for "<<core_name<<" in JSON file"<<endl; | ||||||
|  |                         return false; | ||||||
|  |                    } | ||||||
|  |                 } else { | ||||||
|  |                     LOG(ERR)<<"plugin cycle_estimate: could not parse in JSON file at "<< ok.Offset()<<": "<<GetParseError_En(ok.Code())<<endl; | ||||||
|  |                     return false; | ||||||
|  |                } | ||||||
|  |             } catch (runtime_error &e) { | ||||||
|  |                 LOG(ERR) << "Could not parse input file " << config_file_name << ", reason: " << e.what(); | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  |         } else { | ||||||
|  |             LOG(ERR) << "Could not open input file " << config_file_name; | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 	return true; |     return true; | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void iss::plugin::cycle_estimate::callback(instr_info_t instr_info, exec_info const&) { | void iss::plugin::cycle_estimate::callback(instr_info_t instr_info, exec_info const& exc_info) { | ||||||
|     assert(arch_instr && "No instrumentation interface available but callback executed"); |     assert(arch_instr && "No instrumentation interface available but callback executed"); | ||||||
| 	auto entry = delays[instr_info.instr_id]; |     auto entry = delays[instr_info.instr_id]; | ||||||
| 	bool taken = (arch_instr->get_next_pc()-arch_instr->get_pc()) != (entry.size/8); |     bool taken = exc_info.branch_taken; | ||||||
|     if (taken && entry.taken > 1) |     if (exc_info.branch_taken && entry.taken > 1) | ||||||
|         arch_instr->set_curr_instr_cycles(entry.taken); |         arch_instr->set_curr_instr_cycles(entry.taken); | ||||||
|     else if (entry.not_taken > 1) |     else if (entry.not_taken > 1) | ||||||
|         arch_instr->set_curr_instr_cycles(entry.not_taken); |         arch_instr->set_curr_instr_cycles(entry.not_taken); | ||||||
|   | |||||||
| @@ -136,7 +136,8 @@ public: | |||||||
|         if (!owner->disass_output(pc, instr)) { |         if (!owner->disass_output(pc, instr)) { | ||||||
|             std::stringstream s; |             std::stringstream s; | ||||||
|             s << "[p:" << lvl[this->reg.PRIV] << ";s:0x" << std::hex << std::setfill('0') |             s << "[p:" << lvl[this->reg.PRIV] << ";s:0x" << std::hex << std::setfill('0') | ||||||
|               << std::setw(sizeof(reg_t) * 2) << (reg_t)this->state.mstatus << std::dec << ";c:" << this->reg.icount << "]"; |               << std::setw(sizeof(reg_t) * 2) << (reg_t)this->state.mstatus << std::dec << ";c:" | ||||||
|  |               << this->reg.icount + this->cycle_offset << "]"; | ||||||
|             SCCDEBUG(owner->name())<<"disass: " |             SCCDEBUG(owner->name())<<"disass: " | ||||||
|                 << "0x" << std::setw(16) << std::right << std::setfill('0') << std::hex << pc << "\t\t" << std::setw(40) |                 << "0x" << std::setw(16) << std::right << std::setfill('0') << std::hex << pc << "\t\t" << std::setw(40) | ||||||
|                 << std::setfill(' ') << std::left << instr << s.str(); |                 << std::setfill(' ') << std::left << instr << s.str(); | ||||||
|   | |||||||
| @@ -176,6 +176,15 @@ protected: | |||||||
|         return (from & mask) | ((from & sign_mask) ? ~mask : 0); |         return (from & mask) | ((from & sign_mask) ? ~mask : 0); | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |     inline void process_spawn_blocks() { | ||||||
|  |         for(auto it = std::begin(spawn_blocks); it!=std::end(spawn_blocks);) | ||||||
|  |              if(*it){ | ||||||
|  |                  (*it)(); | ||||||
|  |                  ++it; | ||||||
|  |              } else | ||||||
|  |                  spawn_blocks.erase(it); | ||||||
|  |     } | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     /**************************************************************************** |     /**************************************************************************** | ||||||
|      * start opcode definitions |      * start opcode definitions | ||||||
| @@ -397,7 +406,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -436,7 +445,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -483,7 +492,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -532,7 +541,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -579,7 +588,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -626,7 +635,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -673,7 +682,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -720,7 +729,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -767,7 +776,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -814,7 +823,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -857,7 +866,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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 +910,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -945,7 +954,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -988,7 +997,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1032,7 +1041,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1072,7 +1081,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1115,7 +1124,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1158,7 +1167,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1198,7 +1207,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1238,7 +1247,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1278,7 +1287,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1318,7 +1327,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1358,7 +1367,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1398,7 +1407,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1443,7 +1452,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1488,7 +1497,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1533,7 +1542,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1573,7 +1582,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1613,7 +1622,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1653,7 +1662,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1693,7 +1702,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1733,7 +1742,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1773,7 +1782,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1813,7 +1822,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1853,7 +1862,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1893,7 +1902,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1933,7 +1942,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -1974,7 +1983,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2007,7 +2016,7 @@ private: | |||||||
|         raise(0,  11); |         raise(0,  11); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2040,7 +2049,7 @@ private: | |||||||
|         raise(0,  3); |         raise(0,  3); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2073,7 +2082,7 @@ private: | |||||||
|         leave(0); |         leave(0); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2106,7 +2115,7 @@ private: | |||||||
|         leave(1); |         leave(1); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2139,7 +2148,7 @@ private: | |||||||
|         leave(3); |         leave(3); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2172,7 +2181,7 @@ private: | |||||||
|         wait(1); |         wait(1); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2215,7 +2224,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2265,7 +2274,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2310,7 +2319,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2355,7 +2364,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2399,7 +2408,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2443,7 +2452,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2487,7 +2496,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2526,7 +2535,7 @@ private: | |||||||
|         writeSpace2(traits::FENCE, traits::fencei, imm); |         writeSpace2(traits::FENCE, traits::fencei, imm); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2571,7 +2580,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2616,7 +2625,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2661,7 +2670,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2706,7 +2715,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2755,7 +2764,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2800,7 +2809,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2849,7 +2858,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2894,7 +2903,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2934,7 +2943,7 @@ private: | |||||||
|         else raise(0,  2); |         else raise(0,  2); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -2977,7 +2986,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3020,7 +3029,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3059,7 +3068,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3094,7 +3103,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3135,7 +3144,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3176,7 +3185,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3218,7 +3227,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3257,7 +3266,7 @@ private: | |||||||
|         else raise(0,  2); |         else raise(0,  2); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3291,7 +3300,7 @@ private: | |||||||
|         raise(0,  2); |         raise(0,  2); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3333,7 +3342,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3379,7 +3388,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3421,7 +3430,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3463,7 +3472,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3505,7 +3514,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3547,7 +3556,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3589,7 +3598,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3626,7 +3635,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3665,7 +3674,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3704,7 +3713,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3743,7 +3752,7 @@ private: | |||||||
|         if(nzuimm) *(X+rs1) = *(X+rs1) << nzuimm;  |         if(nzuimm) *(X+rs1) = *(X+rs1) << nzuimm;  | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3786,7 +3795,7 @@ private: | |||||||
|         else raise(0, 2); |         else raise(0, 2); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3825,7 +3834,7 @@ private: | |||||||
|         if(rd != 0) *(X+rd) = *(X+rs2);  |         if(rd != 0) *(X+rd) = *(X+rs2);  | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3864,7 +3873,7 @@ private: | |||||||
|         else raise(0, 2); |         else raise(0, 2); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3897,7 +3906,7 @@ private: | |||||||
|         raise(0, 2); |         raise(0, 2); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3936,7 +3945,7 @@ 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 | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -3978,7 +3987,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -4011,7 +4020,7 @@ private: | |||||||
|         raise(0,  3); |         raise(0,  3); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         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){ | ||||||
| @@ -4053,7 +4062,7 @@ private: | |||||||
|         } |         } | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 88); |         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 88); | ||||||
|         // trap check |         // trap check | ||||||
|         if(*trap_state!=0){ |         if(*trap_state!=0){ | ||||||
| @@ -4086,7 +4095,7 @@ private: | |||||||
|         raise(0,  2); |         raise(0,  2); | ||||||
|         } catch(...){} |         } catch(...){} | ||||||
|         // post execution stuff |         // post execution stuff | ||||||
|         for(auto& spawn_block:spawn_blocks) spawn_block(); |         process_spawn_blocks(); | ||||||
|         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 89); |         if(this->sync_exec && POST_SYNC) this->do_sync(POST_SYNC, 89); | ||||||
|         // trap check |         // trap check | ||||||
|         if(*trap_state!=0){ |         if(*trap_state!=0){ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user