Skip to content

Commit bd0afb4

Browse files
authored
[Spike] Fix #2579: Require explicit Zifencei in ISA to enable fence.i instruction. (#2580)
Spike part of fix to CVA6 issue openhwgroup/cva6#2734. Spike code explicitly assumed Zifencei as being present for backward compatibility, cf. the diff on isa_parser.cc. This request changes the original Spike behavior to require the explicit inclusion of Zifencei in the ISA string to enable the fence.i instruction.
1 parent a4ed8a6 commit bd0afb4

File tree

5 files changed

+37
-2
lines changed

5 files changed

+37
-2
lines changed

lib/uvm_agents/uvma_core_cntrl/uvma_core_cntrl_utils.sv

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ function automatic string get_isa_str(st_core_cntrl_cfg cfg);
3636
if (cfg.ext_zcb_supported) rtl_isa_plus = {rtl_isa_plus, "_zcb"};
3737
if (cfg.ext_zicsr_supported) rtl_isa_plus = {rtl_isa_plus, "_zicsr"};
3838
if (cfg.ext_zicntr_supported) rtl_isa_plus = {rtl_isa_plus, "_zicntr"};
39+
if (cfg.ext_zifencei_supported) rtl_isa_plus = {rtl_isa_plus, "_zifencei"};
3940
if (cfg.ext_xcvxif_supported) rtl_isa_plus = {rtl_isa_plus, "_xcvxif"};
4041

4142
return {rtl_isa, rtl_isa_plus};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
diff --git a/vendor/riscv/riscv-isa-sim/disasm/isa_parser.cc b/vendor/riscv/riscv-isa-sim/disasm/isa_parser.cc
2+
index ddb486a61..0449ad0d2 100644
3+
--- a/vendor/riscv/riscv-isa-sim/disasm/isa_parser.cc
4+
+++ b/vendor/riscv/riscv-isa-sim/disasm/isa_parser.cc
5+
@@ -114,8 +114,7 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
6+
// Spike necessarily has Zicsr, because
7+
// Zicsr is implied by the privileged architecture
8+
} else if (ext_str == "zifencei") {
9+
- // For compatibility with version 2.0 of the base ISAs, we
10+
- // unconditionally include FENCE.I, so Zifencei adds nothing more.
11+
+ extension_table[EXT_ZIFENCEI] = true;
12+
} else if (ext_str == "zihintpause") {
13+
// HINTs encoded in base-ISA instructions are always present.
14+
} else if (ext_str == "zihintntl") {
15+
diff --git a/vendor/riscv/riscv-isa-sim/riscv/insns/fence_i.h b/vendor/riscv/riscv-isa-sim/riscv/insns/fence_i.h
16+
index 38dcaf3fc..4c1a903a5 100644
17+
--- a/vendor/riscv/riscv-isa-sim/riscv/insns/fence_i.h
18+
+++ b/vendor/riscv/riscv-isa-sim/riscv/insns/fence_i.h
19+
@@ -1 +1,2 @@
20+
+require_extension(EXT_ZIFENCEI);
21+
MMU.flush_icache();
22+
diff --git a/vendor/riscv/riscv-isa-sim/riscv/isa_parser.h b/vendor/riscv/riscv-isa-sim/riscv/isa_parser.h
23+
index 9effd164d..73547c19e 100644
24+
--- a/vendor/riscv/riscv-isa-sim/riscv/isa_parser.h
25+
+++ b/vendor/riscv/riscv-isa-sim/riscv/isa_parser.h
26+
@@ -56,6 +56,7 @@ typedef enum {
27+
EXT_ZICBOZ,
28+
EXT_ZICNTR,
29+
EXT_ZICOND,
30+
+ EXT_ZIFENCEI,
31+
EXT_ZIHPM,
32+
EXT_XZBP,
33+
EXT_XZBS,

vendor/riscv/riscv-isa-sim/disasm/isa_parser.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,7 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
115115
// Spike necessarily has Zicsr, because
116116
// Zicsr is implied by the privileged architecture
117117
} else if (ext_str == "zifencei") {
118-
// For compatibility with version 2.0 of the base ISAs, we
119-
// unconditionally include FENCE.I, so Zifencei adds nothing more.
118+
extension_table[EXT_ZIFENCEI] = true;
120119
} else if (ext_str == "zihintpause") {
121120
// HINTs encoded in base-ISA instructions are always present.
122121
} else if (ext_str == "zihintntl") {
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
require_extension(EXT_ZIFENCEI);
12
MMU.flush_icache();

vendor/riscv/riscv-isa-sim/riscv/isa_parser.h

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ typedef enum {
5656
EXT_ZICBOZ,
5757
EXT_ZICNTR,
5858
EXT_ZICOND,
59+
EXT_ZIFENCEI,
5960
EXT_ZIHPM,
6061
EXT_XZBP,
6162
EXT_XZBS,

0 commit comments

Comments
 (0)