From 5cf8c829d2033c5132158b59860fea8d6c06a94d Mon Sep 17 00:00:00 2001 From: mslijepc Date: Wed, 24 Dec 2025 11:51:58 +0100 Subject: [PATCH 1/2] added support for zicclsm --- disasm/isa_parser.cc | 2 ++ riscv/isa_parser.h | 1 + riscv/mmu.h | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/disasm/isa_parser.cc b/disasm/isa_parser.cc index 930ef476..104a4dc9 100644 --- a/disasm/isa_parser.cc +++ b/disasm/isa_parser.cc @@ -278,6 +278,8 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv) } else if (ext_str == "zicboz") { extension_table[EXT_ZICBOZ] = true; } else if (ext_str == "zicbop") { + } else if (ext_str == "zicclsm") { + extension_table[EXT_ZICCLSM] = true; } else if (ext_str == "zicntr") { extension_table[EXT_ZICNTR] = true; } else if (ext_str == "zicond") { diff --git a/riscv/isa_parser.h b/riscv/isa_parser.h index ff2867a6..101ce810 100644 --- a/riscv/isa_parser.h +++ b/riscv/isa_parser.h @@ -60,6 +60,7 @@ typedef enum { EXT_ZICCID, EXT_ZICBOM, EXT_ZICBOZ, + EXT_ZICCLSM, EXT_ZICNTR, EXT_ZICOND, EXT_ZIHPM, diff --git a/riscv/mmu.h b/riscv/mmu.h index bd8bfd31..ceb9c7db 100644 --- a/riscv/mmu.h +++ b/riscv/mmu.h @@ -351,7 +351,7 @@ public: int is_misaligned_enabled() { - return proc && proc->get_cfg().misaligned; + return proc && (proc->extension_enabled(EXT_ZICCLSM) || proc->get_cfg().misaligned); } bool is_target_big_endian() From d6a5e90c40ed962f30cdf1a6acac78bedd0b0c85 Mon Sep 17 00:00:00 2001 From: mslijepc Date: Mon, 29 Dec 2025 13:03:59 +0100 Subject: [PATCH 2/2] removed cfg.misaligned option --- riscv/cfg.cc | 1 - riscv/cfg.h | 1 - riscv/mmu.h | 2 +- spike_main/spike.cc | 2 -- 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/riscv/cfg.cc b/riscv/cfg.cc index cc39a54e..794e9555 100644 --- a/riscv/cfg.cc +++ b/riscv/cfg.cc @@ -38,7 +38,6 @@ cfg_t::cfg_t() bootargs = nullptr; isa = DEFAULT_ISA; priv = DEFAULT_PRIV; - misaligned = false; endianness = endianness_little; pmpregions = 16; pmpgranularity = (1 << PMP_SHIFT); diff --git a/riscv/cfg.h b/riscv/cfg.h index 8032856a..779634e9 100644 --- a/riscv/cfg.h +++ b/riscv/cfg.h @@ -68,7 +68,6 @@ public: const char * bootargs; const char * isa; const char * priv; - bool misaligned; endianness_t endianness; reg_t pmpregions; reg_t pmpgranularity; diff --git a/riscv/mmu.h b/riscv/mmu.h index ceb9c7db..c14dc137 100644 --- a/riscv/mmu.h +++ b/riscv/mmu.h @@ -351,7 +351,7 @@ public: int is_misaligned_enabled() { - return proc && (proc->extension_enabled(EXT_ZICCLSM) || proc->get_cfg().misaligned); + return proc && proc->extension_enabled(EXT_ZICCLSM); } bool is_target_big_endian() diff --git a/spike_main/spike.cc b/spike_main/spike.cc index 5617a825..2502dcb2 100644 --- a/spike_main/spike.cc +++ b/spike_main/spike.cc @@ -51,7 +51,6 @@ static void help(int exit_code = 1) fprintf(stderr, " --dc=:: W ways, and B-byte blocks (with S and\n"); fprintf(stderr, " --l2=:: B both powers of 2).\n"); fprintf(stderr, " --big-endian Use a big-endian memory system.\n"); - fprintf(stderr, " --misaligned Support misaligned memory accesses\n"); fprintf(stderr, " --device= Attach MMIO plugin device from an --extlib library,\n"); fprintf(stderr, " specify --device=, to pass down extra args.\n"); fprintf(stderr, " --log-cache-miss Generate a log of cache miss\n"); @@ -390,7 +389,6 @@ int main(int argc, char** argv) parser.option(0, "dc", 1, [&](const char* s){dc.reset(new dcache_sim_t(s));}); parser.option(0, "l2", 1, [&](const char* s){l2.reset(cache_sim_t::construct(s, "L2$"));}); parser.option(0, "big-endian", 0, [&](const char UNUSED *s){cfg.endianness = endianness_big;}); - parser.option(0, "misaligned", 0, [&](const char UNUSED *s){cfg.misaligned = true;}); parser.option(0, "log-cache-miss", 0, [&](const char UNUSED *s){log_cache = true;}); parser.option(0, "isa", 1, [&](const char* s){cfg.isa = s;}); parser.option(0, "pmpregions", 1, [&](const char* s){cfg.pmpregions = atoul_safe(s);});