replaces unordered_map with flat_hash_map

This commit is contained in:
Eyck Jentzsch 2025-05-13 08:22:16 +02:00
parent dd937710a7
commit 071cb4fdac
7 changed files with 16 additions and 14 deletions

View File

@ -12,6 +12,7 @@ include(flink)
find_package(elfio QUIET) find_package(elfio QUIET)
find_package(jsoncpp) find_package(jsoncpp)
find_package(Boost COMPONENTS coroutine REQUIRED) find_package(Boost COMPONENTS coroutine REQUIRED)
find_package(absl REQUIRED)
add_subdirectory(softfloat) 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}) target_compile_definitions(${PROJECT_NAME} INTERFACE ${DBT_CORE_DEFS})
endif() 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) if(TARGET yaml-cpp::yaml-cpp)
target_compile_definitions(${PROJECT_NAME} PUBLIC WITH_PLUGINS) target_compile_definitions(${PROJECT_NAME} PUBLIC WITH_PLUGINS)

View File

@ -37,6 +37,7 @@
#include "mstatus.h" #include "mstatus.h"
#include "util/delegate.h" #include "util/delegate.h"
#include <absl/container/flat_hash_map.h>
#include <array> #include <array>
#include <cstdint> #include <cstdint>
#include <elfio/elfio.hpp> #include <elfio/elfio.hpp>
@ -259,8 +260,8 @@ template <typename WORD_TYPE> struct priv_if {
std::function<iss::status(unsigned, WORD_TYPE)> write_csr; std::function<iss::status(unsigned, WORD_TYPE)> write_csr;
std::function<iss::status(uint8_t const*)> exec_htif; std::function<iss::status(uint8_t const*)> exec_htif;
std::function<void(uint16_t, uint16_t, WORD_TYPE)> raise_trap; // trap_id, cause, fault_data std::function<void(uint16_t, uint16_t, WORD_TYPE)> raise_trap; // trap_id, cause, fault_data
std::unordered_map<unsigned, rd_csr_f>& csr_rd_cb; absl::flat_hash_map<unsigned, rd_csr_f>& csr_rd_cb;
std::unordered_map<unsigned, wr_csr_f>& csr_wr_cb; absl::flat_hash_map<unsigned, wr_csr_f>& csr_wr_cb;
hart_state<WORD_TYPE>& state; hart_state<WORD_TYPE>& state;
uint8_t& PRIV; uint8_t& PRIV;
WORD_TYPE& PC; WORD_TYPE& PC;
@ -775,7 +776,7 @@ template <typename BASE, typename LOGCAT = logging::disass> struct riscv_hart_co
this->fault_data = fault_data; this->fault_data = fault_data;
}, },
.csr_rd_cb{this->csr_rd_cb}, .csr_rd_cb{this->csr_rd_cb},
.csr_wr_cb{csr_wr_cb}, .csr_wr_cb{this->csr_wr_cb},
.state{this->state}, .state{this->state},
.PRIV{this->reg.PRIV}, .PRIV{this->reg.PRIV},
.PC{this->reg.PC}, .PC{this->reg.PC},
@ -893,8 +894,8 @@ protected:
using csr_page_type = typename csr_type::page_type; using csr_page_type = typename csr_type::page_type;
csr_type csr; csr_type csr;
std::unordered_map<unsigned, rd_csr_f> csr_rd_cb; absl::flat_hash_map<unsigned, rd_csr_f> csr_rd_cb;
std::unordered_map<unsigned, wr_csr_f> csr_wr_cb; absl::flat_hash_map<unsigned, wr_csr_f> csr_wr_cb;
reg_t mhartid_reg{0x0}; reg_t mhartid_reg{0x0};
uint64_t mcycle_csr{0}; uint64_t mcycle_csr{0};

View File

@ -134,7 +134,7 @@ protected:
hart_state<reg_t> state; hart_state<reg_t> state;
std::unordered_map<uint64_t, uint8_t> atomic_reservation; absl::flat_hash_map<uint64_t, uint8_t> atomic_reservation;
iss::status read_status(unsigned addr, reg_t& val); iss::status read_status(unsigned addr, reg_t& val);
iss::status write_status(unsigned addr, reg_t val); iss::status write_status(unsigned addr, reg_t val);

View File

@ -48,9 +48,9 @@
#ifndef FMT_HEADER_ONLY #ifndef FMT_HEADER_ONLY
#define FMT_HEADER_ONLY #define FMT_HEADER_ONLY
#endif #endif
#include <fmt/format.h>
#include <iss/mem/memory_with_htif.h> #include <iss/mem/memory_with_htif.h>
#include <iss/mem/mmu.h> #include <iss/mem/mmu.h>
#include <fmt/format.h>
#include <type_traits> #include <type_traits>
#include <unordered_map> #include <unordered_map>
@ -150,7 +150,7 @@ protected:
hart_state<reg_t> state; hart_state<reg_t> state;
std::unordered_map<uint64_t, uint8_t> atomic_reservation; absl::flat_hash_map<uint64_t, uint8_t> atomic_reservation;
iss::status read_status(unsigned addr, reg_t& val); iss::status read_status(unsigned addr, reg_t& val);
iss::status write_status(unsigned addr, reg_t val); iss::status write_status(unsigned addr, reg_t val);

View File

@ -160,7 +160,7 @@ protected:
hart_state<reg_t> state; hart_state<reg_t> state;
std::unordered_map<uint64_t, uint8_t> atomic_reservation; absl::flat_hash_map<uint64_t, uint8_t> atomic_reservation;
iss::status read_status(unsigned addr, reg_t& val); iss::status read_status(unsigned addr, reg_t& val);
iss::status write_status(unsigned addr, reg_t val); iss::status write_status(unsigned addr, reg_t val);

View File

@ -32,9 +32,9 @@
* eyck@minres.com - initial implementation * eyck@minres.com - initial implementation
******************************************************************************/ ******************************************************************************/
#include "memory_if.h"
#include "iss/arch/riscv_hart_common.h" #include "iss/arch/riscv_hart_common.h"
#include "iss/vm_types.h" #include "iss/vm_types.h"
#include "memory_if.h"
#include <util/logging.h> #include <util/logging.h>
namespace iss { namespace iss {
@ -238,7 +238,7 @@ private:
protected: protected:
reg_t satp; reg_t satp;
std::unordered_map<reg_t, uint64_t> ptw; absl::flat_hash_map<reg_t, uint64_t> ptw;
std::array<vm_info, 2> vmt; std::array<vm_info, 2> vmt;
std::array<address_type, 4> addr_mode; std::array<address_type, 4> addr_mode;

View File

@ -48,7 +48,7 @@
#include <vector> #include <vector>
#include <sstream> #include <sstream>
#include <iss/instruction_decoder.h> #include <iss/instruction_decoder.h>
#include <absl/container/flat_hash_map.h>
#ifndef FMT_HEADER_ONLY #ifndef FMT_HEADER_ONLY
#define FMT_HEADER_ONLY #define FMT_HEADER_ONLY
@ -262,7 +262,7 @@ private:
struct translation_buffer { struct translation_buffer {
std::vector<std::tuple<opcode_e, uint64_t, uint32_t>> entries; std::vector<std::tuple<opcode_e, uint64_t, uint32_t>> entries;
} tb; } tb;
std::unordered_map<uint64_t, translation_buffer> tb_lut; absl::flat_hash_map<uint64_t, translation_buffer> tb_lut;
}; };
template <typename CODE_WORD> void debug_fn(CODE_WORD insn) { template <typename CODE_WORD> void debug_fn(CODE_WORD insn) {