Compare commits
	
		
			3 Commits
		
	
	
		
			9c8b72693e
			...
			msvc_compa
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| c8679fca85 | |||
| f0ada1ba8c | |||
| 09b01af3fa | 
@@ -6,6 +6,8 @@ project(dbt-rise-tgc VERSION 1.0.0)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
include(GNUInstallDirs)
 | 
					include(GNUInstallDirs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					find_package(elfio)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(WITH_LLVM)
 | 
					if(WITH_LLVM)
 | 
				
			||||||
    if(DEFINED ENV{LLVM_HOME})
 | 
					    if(DEFINED ENV{LLVM_HOME})
 | 
				
			||||||
        find_path (LLVM_DIR LLVM-Config.cmake $ENV{LLVM_HOME}/lib/cmake/llvm)
 | 
					        find_path (LLVM_DIR LLVM-Config.cmake $ENV{LLVM_HOME}/lib/cmake/llvm)
 | 
				
			||||||
@@ -46,16 +48,24 @@ if(WITH_LLVM)
 | 
				
			|||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Define the library
 | 
					# Define the library
 | 
				
			||||||
add_library(${PROJECT_NAME} SHARED ${LIB_SOURCES})
 | 
					add_library(${PROJECT_NAME} ${LIB_SOURCES})
 | 
				
			||||||
# list code gen dependencies
 | 
					# list code gen dependencies
 | 
				
			||||||
if(TARGET ${CORE_NAME}_cpp)
 | 
					if(TARGET ${CORE_NAME}_cpp)
 | 
				
			||||||
    add_dependencies(${PROJECT_NAME} ${CORE_NAME}_cpp)
 | 
					    add_dependencies(${PROJECT_NAME} ${CORE_NAME}_cpp)
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target_compile_options(${PROJECT_NAME} PRIVATE -Wno-shift-count-overflow)
 | 
					if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
 | 
				
			||||||
 | 
					     target_compile_options(${PROJECT_NAME} PRIVATE -Wno-shift-count-overflow)
 | 
				
			||||||
 | 
					elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
 | 
				
			||||||
 | 
					    target_compile_options(${PROJECT_NAME} PRIVATE /wd4293)
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
target_include_directories(${PROJECT_NAME} PUBLIC incl)
 | 
					target_include_directories(${PROJECT_NAME} PUBLIC incl)
 | 
				
			||||||
target_link_libraries(${PROJECT_NAME} PUBLIC softfloat scc-util jsoncpp)
 | 
					target_link_libraries(${PROJECT_NAME} PUBLIC softfloat scc-util jsoncpp)
 | 
				
			||||||
target_link_libraries(${PROJECT_NAME} PUBLIC -Wl,--whole-archive dbt-core -Wl,--no-whole-archive)
 | 
					if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
 | 
				
			||||||
 | 
					    target_link_libraries(${PROJECT_NAME} PUBLIC -Wl,--whole-archive dbt-core -Wl,--no-whole-archive)
 | 
				
			||||||
 | 
					else()
 | 
				
			||||||
 | 
					    target_link_libraries(${PROJECT_NAME} PUBLIC dbt-core)
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
if(TARGET CONAN_PKG::elfio)
 | 
					if(TARGET CONAN_PKG::elfio)
 | 
				
			||||||
    target_link_libraries(${PROJECT_NAME} PUBLIC CONAN_PKG::elfio)
 | 
					    target_link_libraries(${PROJECT_NAME} PUBLIC CONAN_PKG::elfio)
 | 
				
			||||||
elseif(TARGET elfio::elfio)
 | 
					elseif(TARGET elfio::elfio)
 | 
				
			||||||
@@ -96,16 +106,15 @@ if(WITH_LLVM)
 | 
				
			|||||||
    target_link_libraries(${PROJECT_NAME} PUBLIC ${llvm_libs})
 | 
					    target_link_libraries(${PROJECT_NAME} PUBLIC ${llvm_libs})
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
# Links the target exe against the libraries
 | 
					# Links the target exe against the libraries
 | 
				
			||||||
target_link_libraries(${PROJECT_NAME} dbt-rise-tgc)
 | 
					target_link_libraries(${PROJECT_NAME} PUBLIC dbt-rise-tgc)
 | 
				
			||||||
#target_link_libraries(${PROJECT_NAME} jsoncpp)
 | 
					 | 
				
			||||||
if(TARGET Boost::program_options)
 | 
					if(TARGET Boost::program_options)
 | 
				
			||||||
    target_link_libraries(${PROJECT_NAME} Boost::program_options Boost::thread)
 | 
					    target_link_libraries(${PROJECT_NAME} PUBLIC Boost::program_options Boost::thread)
 | 
				
			||||||
else()
 | 
					else()
 | 
				
			||||||
    target_link_libraries(${PROJECT_NAME} ${BOOST_program_options_LIBRARY} ${BOOST_thread_LIBRARY})
 | 
					    target_link_libraries(${PROJECT_NAME} PUBLIC ${BOOST_program_options_LIBRARY} ${BOOST_thread_LIBRARY})
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
target_link_libraries(${PROJECT_NAME} ${CMAKE_DL_LIBS})
 | 
					target_link_libraries(${PROJECT_NAME} PUBLIC ${CMAKE_DL_LIBS})
 | 
				
			||||||
if (Tcmalloc_FOUND)
 | 
					if (Tcmalloc_FOUND)
 | 
				
			||||||
    target_link_libraries(${PROJECT_NAME} ${Tcmalloc_LIBRARIES})
 | 
					    target_link_libraries(${PROJECT_NAME} PUBLIC ${Tcmalloc_LIBRARIES})
 | 
				
			||||||
endif(Tcmalloc_FOUND)
 | 
					endif(Tcmalloc_FOUND)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
install(TARGETS tgc-sim
 | 
					install(TARGETS tgc-sim
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -397,7 +397,7 @@ template <typename BASE> std::pair<uint64_t, bool> riscv_hart_m_p<BASE>::load_fi
 | 
				
			|||||||
                            traits<BASE>::MEM, pseg->get_physical_address(),
 | 
					                            traits<BASE>::MEM, pseg->get_physical_address(),
 | 
				
			||||||
                            fsize, reinterpret_cast<const uint8_t *const>(seg_data));
 | 
					                            fsize, reinterpret_cast<const uint8_t *const>(seg_data));
 | 
				
			||||||
                    if (res != iss::Ok)
 | 
					                    if (res != iss::Ok)
 | 
				
			||||||
                        LOG(ERROR) << "problem writing " << fsize << "bytes to 0x" << std::hex
 | 
					                        LOG(ERR) << "problem writing " << fsize << "bytes to 0x" << std::hex
 | 
				
			||||||
                                   << pseg->get_physical_address();
 | 
					                                   << pseg->get_physical_address();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -541,7 +541,7 @@ iss::status riscv_hart_m_p<BASE>::write(const address_type type, const access_ty
 | 
				
			|||||||
                return iss::Err;
 | 
					                return iss::Err;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                if(length>1 && (addr&(length-1))){
 | 
					                if(!(access && iss::access_type::DEBUG) &&  length>1 && (addr&(length-1))){
 | 
				
			||||||
                    this->reg.trap_state = 1<<31 | 6<<16;
 | 
					                    this->reg.trap_state = 1<<31 | 6<<16;
 | 
				
			||||||
                    fault_data=addr;
 | 
					                    fault_data=addr;
 | 
				
			||||||
                    return iss::Err;
 | 
					                    return iss::Err;
 | 
				
			||||||
@@ -948,7 +948,11 @@ template <typename BASE> uint64_t riscv_hart_m_p<BASE>::enter_trap(uint64_t flag
 | 
				
			|||||||
    this->reg.PRIV = PRIV_M;
 | 
					    this->reg.PRIV = PRIV_M;
 | 
				
			||||||
    this->reg.trap_state = 0;
 | 
					    this->reg.trap_state = 0;
 | 
				
			||||||
    std::array<char, 32> buffer;
 | 
					    std::array<char, 32> buffer;
 | 
				
			||||||
 | 
					#if defined(_MSC_VER)
 | 
				
			||||||
 | 
					    sprintf(buffer.data(), "0x%016llx", addr);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
    sprintf(buffer.data(), "0x%016lx", addr);
 | 
					    sprintf(buffer.data(), "0x%016lx", addr);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    if((flags&0xffffffff) != 0xffffffff)
 | 
					    if((flags&0xffffffff) != 0xffffffff)
 | 
				
			||||||
    CLOG(INFO, disass) << (trap_id ? "Interrupt" : "Trap") << " with cause '"
 | 
					    CLOG(INFO, disass) << (trap_id ? "Interrupt" : "Trap") << " with cause '"
 | 
				
			||||||
                       << (trap_id ? irq_str[cause] : trap_str[cause]) << "' (" << cause << ")"
 | 
					                       << (trap_id ? irq_str[cause] : trap_str[cause]) << "' (" << cause << ")"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,7 +49,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/*----------------------------------------------------------------------------
 | 
					/*----------------------------------------------------------------------------
 | 
				
			||||||
*----------------------------------------------------------------------------*/
 | 
					*----------------------------------------------------------------------------*/
 | 
				
			||||||
 | 
					#ifdef __GNUC__
 | 
				
			||||||
#define SOFTFLOAT_BUILTIN_CLZ 1
 | 
					#define SOFTFLOAT_BUILTIN_CLZ 1
 | 
				
			||||||
#define SOFTFLOAT_INTRINSIC_INT128 1
 | 
					#define SOFTFLOAT_INTRINSIC_INT128 1
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
#include "opts-GCC.h"
 | 
					#include "opts-GCC.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -140,7 +140,7 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
        } else
 | 
					        } else
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            LOG(ERROR) << "Illegal argument value for '--isa': " << clim["isa"].as<std::string>() << std::endl;
 | 
					            LOG(ERR) << "Illegal argument value for '--isa': " << clim["isa"].as<std::string>() << std::endl;
 | 
				
			||||||
            return 127;
 | 
					            return 127;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (clim.count("plugin")) {
 | 
					        if (clim.count("plugin")) {
 | 
				
			||||||
@@ -161,7 +161,7 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
                    vm->register_plugin(*ce_plugin);
 | 
					                    vm->register_plugin(*ce_plugin);
 | 
				
			||||||
                    plugin_list.push_back(ce_plugin);
 | 
					                    plugin_list.push_back(ce_plugin);
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    LOG(ERROR) << "Unknown plugin name: " << plugin_name << ", valid names are 'ce', 'ic'" << std::endl;
 | 
					                    LOG(ERR) << "Unknown plugin name: " << plugin_name << ", valid names are 'ce', 'ic'" << std::endl;
 | 
				
			||||||
                    return 127;
 | 
					                    return 127;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -196,7 +196,7 @@ int main(int argc, char *argv[]) {
 | 
				
			|||||||
        auto cycles = clim["instructions"].as<uint64_t>();
 | 
					        auto cycles = clim["instructions"].as<uint64_t>();
 | 
				
			||||||
        res = vm->start(cycles, dump);
 | 
					        res = vm->start(cycles, dump);
 | 
				
			||||||
    } catch (std::exception &e) {
 | 
					    } catch (std::exception &e) {
 | 
				
			||||||
        LOG(ERROR) << "Unhandled Exception reached the top of main: " << e.what() << ", application will now exit"
 | 
					        LOG(ERR) << "Unhandled Exception reached the top of main: " << e.what() << ", application will now exit"
 | 
				
			||||||
                   << std::endl;
 | 
					                   << std::endl;
 | 
				
			||||||
        res = 2;
 | 
					        res = 2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,10 +47,10 @@ iss::plugin::cycle_estimate::cycle_estimate(std::string config_file_name)
 | 
				
			|||||||
            try {
 | 
					            try {
 | 
				
			||||||
                is >> root;
 | 
					                is >> root;
 | 
				
			||||||
            } catch (Json::RuntimeError &e) {
 | 
					            } catch (Json::RuntimeError &e) {
 | 
				
			||||||
                LOG(ERROR) << "Could not parse input file " << config_file_name << ", reason: " << e.what();
 | 
					                LOG(ERR) << "Could not parse input file " << config_file_name << ", reason: " << e.what();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            LOG(ERROR) << "Could not open input file " << config_file_name;
 | 
					            LOG(ERR) << "Could not open input file " << config_file_name;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -77,7 +77,7 @@ bool iss::plugin::cycle_estimate::registration(const char* const version, vm_if&
 | 
				
			|||||||
    		}
 | 
					    		}
 | 
				
			||||||
    	}
 | 
					    	}
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        LOG(ERROR)<<"plugin cycle_estimate: could not find an entry for "<<core_name<<" in JSON file"<<std::endl;
 | 
					        LOG(ERR)<<"plugin cycle_estimate: could not find an entry for "<<core_name<<" in JSON file"<<std::endl;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -87,6 +87,8 @@ void iss::plugin::cycle_estimate::callback(instr_info_t instr_info, exec_info co
 | 
				
			|||||||
    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 = (arch_instr->get_next_pc()-arch_instr->get_pc()) != (entry.size/8);
 | 
				
			||||||
    uint32_t delay = taken ? entry.taken : entry.not_taken;
 | 
					    if (taken && entry.taken > 1)
 | 
				
			||||||
    if(delay>1) arch_instr->set_curr_instr_cycles(delay);
 | 
					        arch_instr->set_curr_instr_cycles(entry.taken);
 | 
				
			||||||
 | 
					    else if (entry.not_taken > 1)
 | 
				
			||||||
 | 
					        arch_instr->set_curr_instr_cycles(entry.not_taken);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,10 +46,10 @@ iss::plugin::instruction_count::instruction_count(std::string config_file_name)
 | 
				
			|||||||
            try {
 | 
					            try {
 | 
				
			||||||
                is >> root;
 | 
					                is >> root;
 | 
				
			||||||
            } catch (Json::RuntimeError &e) {
 | 
					            } catch (Json::RuntimeError &e) {
 | 
				
			||||||
                LOG(ERROR) << "Could not parse input file " << config_file_name << ", reason: " << e.what();
 | 
					                LOG(ERR) << "Could not parse input file " << config_file_name << ", reason: " << e.what();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            LOG(ERROR) << "Could not open input file " << config_file_name;
 | 
					            LOG(ERR) << "Could not open input file " << config_file_name;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -85,7 +85,7 @@ bool iss::plugin::instruction_count::registration(const char* const version, vm_
 | 
				
			|||||||
    	}
 | 
					    	}
 | 
				
			||||||
    	rep_counts.resize(delays.size());
 | 
					    	rep_counts.resize(delays.size());
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        LOG(ERROR)<<"plugin instruction_count: could not find an entry for "<<core_name<<" in JSON file"<<std::endl;
 | 
					        LOG(ERR)<<"plugin instruction_count: could not find an entry for "<<core_name<<" in JSON file"<<std::endl;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,13 @@
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 *******************************************************************************/
 | 
					 *******************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// clang-format off
 | 
				
			||||||
 | 
					#include "iss/debugger/gdb_session.h"
 | 
				
			||||||
 | 
					#include "iss/debugger/encoderdecoder.h"
 | 
				
			||||||
 | 
					#include "iss/debugger/server.h"
 | 
				
			||||||
 | 
					#include "iss/debugger/target_adapter_if.h"
 | 
				
			||||||
 | 
					#include "iss/iss.h"
 | 
				
			||||||
 | 
					#include "iss/vm_types.h"
 | 
				
			||||||
#include "sysc/core_complex.h"
 | 
					#include "sysc/core_complex.h"
 | 
				
			||||||
#ifdef CORE_TGC_B
 | 
					#ifdef CORE_TGC_B
 | 
				
			||||||
#include "iss/arch/riscv_hart_m_p.h"
 | 
					#include "iss/arch/riscv_hart_m_p.h"
 | 
				
			||||||
@@ -44,16 +51,11 @@ using tgc_c_plat_type = iss::arch::riscv_hart_m_p<iss::arch::tgc_c>;
 | 
				
			|||||||
#include "iss/arch/tgc_d.h"
 | 
					#include "iss/arch/tgc_d.h"
 | 
				
			||||||
using tgc_d_plat_type = iss::arch::riscv_hart_mu_p<iss::arch::tgc_d, iss::arch::FEAT_PMP>;
 | 
					using tgc_d_plat_type = iss::arch::riscv_hart_mu_p<iss::arch::tgc_d, iss::arch::FEAT_PMP>;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#include "iss/debugger/encoderdecoder.h"
 | 
					 | 
				
			||||||
#include "iss/debugger/gdb_session.h"
 | 
					 | 
				
			||||||
#include "iss/debugger/server.h"
 | 
					 | 
				
			||||||
#include "iss/debugger/target_adapter_if.h"
 | 
					 | 
				
			||||||
#include "iss/iss.h"
 | 
					 | 
				
			||||||
#include "iss/vm_types.h"
 | 
					 | 
				
			||||||
#include "scc/report.h"
 | 
					#include "scc/report.h"
 | 
				
			||||||
#include <iostream>
 | 
					#include <iostream>
 | 
				
			||||||
#include <sstream>
 | 
					#include <sstream>
 | 
				
			||||||
#include <array>
 | 
					#include <array>
 | 
				
			||||||
 | 
					// clang-format on
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define STR(X) #X
 | 
					#define STR(X) #X
 | 
				
			||||||
#define CREATE_CORE(CN) \
 | 
					#define CREATE_CORE(CN) \
 | 
				
			||||||
@@ -72,6 +74,12 @@ using namespace scv_tr;
 | 
				
			|||||||
#define GET_PROP_VALUE(P) P.getValue()
 | 
					#define GET_PROP_VALUE(P) P.getValue()
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef _MSC_VER
 | 
				
			||||||
 | 
					// not #if defined(_WIN32) || defined(_WIN64) because we have strncasecmp in mingw
 | 
				
			||||||
 | 
					#define strncasecmp _strnicmp
 | 
				
			||||||
 | 
					#define strcasecmp _stricmp
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace sysc {
 | 
					namespace sysc {
 | 
				
			||||||
namespace tgfs {
 | 
					namespace tgfs {
 | 
				
			||||||
using namespace std;
 | 
					using namespace std;
 | 
				
			||||||
@@ -109,11 +117,11 @@ public:
 | 
				
			|||||||
    sync_type needed_sync() const override { return PRE_SYNC; }
 | 
					    sync_type needed_sync() const override { return PRE_SYNC; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void disass_output(uint64_t pc, const std::string instr) override {
 | 
					    void disass_output(uint64_t pc, const std::string instr) override {
 | 
				
			||||||
        if (!owner->disass_output(pc, instr) && INFO <= Log<Output2FILE<disass>>::reporting_level() && Output2FILE<disass>::stream()) {
 | 
					        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 << "]";
 | 
				
			||||||
            Log<Output2FILE<disass>>().get(INFO, "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();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -287,7 +295,7 @@ public:
 | 
				
			|||||||
        CREATE_CORE(tgc_d)
 | 
					        CREATE_CORE(tgc_d)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            LOG(ERROR) << "Illegal argument value for core type: " << type << std::endl;
 | 
					            LOG(ERR) << "Illegal argument value for core type: " << type << std::endl;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        auto *srv = debugger::server<debugger::gdb_session>::get();
 | 
					        auto *srv = debugger::server<debugger::gdb_session>::get();
 | 
				
			||||||
        if (srv) tgt_adapter = srv->get_target();
 | 
					        if (srv) tgt_adapter = srv->get_target();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,23 +30,21 @@
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 *******************************************************************************/
 | 
					 *******************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../fp_functions.h"
 | 
					// clang-format off
 | 
				
			||||||
#include <iss/arch/tgc_c.h>
 | 
					 | 
				
			||||||
#include <iss/arch/riscv_hart_m_p.h>
 | 
					 | 
				
			||||||
#include <iss/debugger/gdb_session.h>
 | 
					#include <iss/debugger/gdb_session.h>
 | 
				
			||||||
#include <iss/debugger/server.h>
 | 
					#include <iss/debugger/server.h>
 | 
				
			||||||
#include <iss/iss.h>
 | 
					#include <iss/iss.h>
 | 
				
			||||||
 | 
					#include <iss/arch/tgc_c.h>
 | 
				
			||||||
 | 
					#include <iss/arch/riscv_hart_m_p.h>
 | 
				
			||||||
#include <iss/interp/vm_base.h>
 | 
					#include <iss/interp/vm_base.h>
 | 
				
			||||||
 | 
					#include "../fp_functions.h"
 | 
				
			||||||
#include <util/logging.h>
 | 
					#include <util/logging.h>
 | 
				
			||||||
#include <sstream>
 | 
					#include <sstream>
 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef FMT_HEADER_ONLY
 | 
					 | 
				
			||||||
#define FMT_HEADER_ONLY
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#include <fmt/format.h>
 | 
					#include <fmt/format.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <array>
 | 
					#include <array>
 | 
				
			||||||
#include <iss/debugger/riscv_target_adapter.h>
 | 
					#include <iss/debugger/riscv_target_adapter.h>
 | 
				
			||||||
 | 
					// clang-format on
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace iss {
 | 
					namespace iss {
 | 
				
			||||||
namespace interp {
 | 
					namespace interp {
 | 
				
			||||||
@@ -4138,8 +4136,8 @@ typename vm_base<ARCH>::virt_addr_t vm_impl<ARCH>::execute_inst(finish_cond_e co
 | 
				
			|||||||
            this->do_sync(POST_SYNC, std::numeric_limits<unsigned>::max());
 | 
					            this->do_sync(POST_SYNC, std::numeric_limits<unsigned>::max());
 | 
				
			||||||
            pc.val = super::core.enter_trap(std::numeric_limits<uint64_t>::max(), pc.val, 0);
 | 
					            pc.val = super::core.enter_trap(std::numeric_limits<uint64_t>::max(), pc.val, 0);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            if (is_jump_to_self_enabled(cond) &&
 | 
					            if (is_jump_to_self_enabled(cond) && (insn == 0x0000006f || (insn&0xffff)==0xa001))
 | 
				
			||||||
                    (insn == 0x0000006f || (insn&0xffff)==0xa001)) throw simulation_stopped(0); // 'J 0' or 'C.J 0'
 | 
					                throw simulation_stopped(0); // 'J 0' or 'C.J 0'
 | 
				
			||||||
            auto f = decode_inst(insn);
 | 
					            auto f = decode_inst(insn);
 | 
				
			||||||
            pc = (this->*f)(pc, insn);
 | 
					            pc = (this->*f)(pc, insn);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user