diff --git a/CMakeLists.txt b/CMakeLists.txt index 0858362..db64576 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,7 @@ include(flink) find_package(elfio QUIET) find_package(jsoncpp) find_package(Boost COMPONENTS coroutine REQUIRED) +find_package(absl REQUIRED) add_subdirectory(softfloat) @@ -104,7 +105,7 @@ if(NOT(DBT_CORE_DEFS STREQUAL DBT_CORE_DEFS-NOTFOUND)) target_compile_definitions(${PROJECT_NAME} INTERFACE ${DBT_CORE_DEFS}) endif() -target_link_libraries(${PROJECT_NAME} PUBLIC elfio::elfio softfloat scc-util Boost::coroutine) +target_link_libraries(${PROJECT_NAME} PUBLIC elfio::elfio softfloat scc-util Boost::coroutine abseil::abseil) if(TARGET yaml-cpp::yaml-cpp) target_compile_definitions(${PROJECT_NAME} PUBLIC WITH_PLUGINS) diff --git a/src/iss/arch/riscv_hart_common.h b/src/iss/arch/riscv_hart_common.h index d85a562..e10a647 100644 --- a/src/iss/arch/riscv_hart_common.h +++ b/src/iss/arch/riscv_hart_common.h @@ -37,6 +37,7 @@ #include "mstatus.h" #include "util/delegate.h" +#include #include #include #include @@ -259,8 +260,8 @@ template struct priv_if { std::function write_csr; std::function exec_htif; std::function raise_trap; // trap_id, cause, fault_data - std::unordered_map& csr_rd_cb; - std::unordered_map& csr_wr_cb; + absl::flat_hash_map& csr_rd_cb; + absl::flat_hash_map& csr_wr_cb; hart_state& state; uint8_t& PRIV; WORD_TYPE& PC; @@ -775,7 +776,7 @@ template struct riscv_hart_co this->fault_data = fault_data; }, .csr_rd_cb{this->csr_rd_cb}, - .csr_wr_cb{csr_wr_cb}, + .csr_wr_cb{this->csr_wr_cb}, .state{this->state}, .PRIV{this->reg.PRIV}, .PC{this->reg.PC}, @@ -893,8 +894,8 @@ protected: using csr_page_type = typename csr_type::page_type; csr_type csr; - std::unordered_map csr_rd_cb; - std::unordered_map csr_wr_cb; + absl::flat_hash_map csr_rd_cb; + absl::flat_hash_map csr_wr_cb; reg_t mhartid_reg{0x0}; uint64_t mcycle_csr{0}; diff --git a/src/iss/arch/riscv_hart_m_p.h b/src/iss/arch/riscv_hart_m_p.h index 8873390..95298bc 100644 --- a/src/iss/arch/riscv_hart_m_p.h +++ b/src/iss/arch/riscv_hart_m_p.h @@ -134,7 +134,7 @@ protected: hart_state state; - std::unordered_map atomic_reservation; + absl::flat_hash_map atomic_reservation; iss::status read_status(unsigned addr, reg_t& val); iss::status write_status(unsigned addr, reg_t val); diff --git a/src/iss/arch/riscv_hart_msu_vp.h b/src/iss/arch/riscv_hart_msu_vp.h index 1c226c5..ddfe1cb 100644 --- a/src/iss/arch/riscv_hart_msu_vp.h +++ b/src/iss/arch/riscv_hart_msu_vp.h @@ -48,9 +48,9 @@ #ifndef FMT_HEADER_ONLY #define FMT_HEADER_ONLY #endif +#include #include #include -#include #include #include @@ -150,7 +150,7 @@ protected: hart_state state; - std::unordered_map atomic_reservation; + absl::flat_hash_map atomic_reservation; iss::status read_status(unsigned addr, reg_t& val); iss::status write_status(unsigned addr, reg_t val); diff --git a/src/iss/arch/riscv_hart_mu_p.h b/src/iss/arch/riscv_hart_mu_p.h index 6fe9ed7..6166a58 100644 --- a/src/iss/arch/riscv_hart_mu_p.h +++ b/src/iss/arch/riscv_hart_mu_p.h @@ -160,7 +160,7 @@ protected: hart_state state; - std::unordered_map atomic_reservation; + absl::flat_hash_map atomic_reservation; iss::status read_status(unsigned addr, reg_t& val); iss::status write_status(unsigned addr, reg_t val); diff --git a/src/iss/mem/mmu.h b/src/iss/mem/mmu.h index aedb0a7..60fea1f 100644 --- a/src/iss/mem/mmu.h +++ b/src/iss/mem/mmu.h @@ -32,9 +32,9 @@ * eyck@minres.com - initial implementation ******************************************************************************/ -#include "memory_if.h" #include "iss/arch/riscv_hart_common.h" #include "iss/vm_types.h" +#include "memory_if.h" #include namespace iss { @@ -238,7 +238,7 @@ private: protected: reg_t satp; - std::unordered_map ptw; + absl::flat_hash_map ptw; std::array vmt; std::array addr_mode; diff --git a/src/vm/interp/vm_tgc5c.cpp b/src/vm/interp/vm_tgc5c.cpp index a27706e..a5155e2 100644 --- a/src/vm/interp/vm_tgc5c.cpp +++ b/src/vm/interp/vm_tgc5c.cpp @@ -48,7 +48,7 @@ #include #include #include - +#include #ifndef FMT_HEADER_ONLY #define FMT_HEADER_ONLY @@ -262,7 +262,7 @@ private: struct translation_buffer { std::vector> entries; } tb; - std::unordered_map tb_lut; + absl::flat_hash_map tb_lut; }; template void debug_fn(CODE_WORD insn) {