aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliweiwei90 <34847211+liweiwei90@users.noreply.github.com>2022-07-14 09:39:30 +0800
committerGitHub <noreply@github.com>2022-07-13 18:39:30 -0700
commit5eada616d48e1e0f1f9f5add53dfca76dc29de68 (patch)
tree118114681ac9fd9fe733a54e697823d87d9cc445
parent0ad0d9733b41e666172ff55ee946253c6dbdd080 (diff)
downloadriscv-isa-sim-5eada616d48e1e0f1f9f5add53dfca76dc29de68.zip
riscv-isa-sim-5eada616d48e1e0f1f9f5add53dfca76dc29de68.tar.gz
riscv-isa-sim-5eada616d48e1e0f1f9f5add53dfca76dc29de68.tar.bz2
add check for H extension requires S mode (#1042)
-rw-r--r--riscv/csrs.cc2
-rw-r--r--riscv/isa_parser.cc3
2 files changed, 4 insertions, 1 deletions
diff --git a/riscv/csrs.cc b/riscv/csrs.cc
index ab6b4bb..83906cc 100644
--- a/riscv/csrs.cc
+++ b/riscv/csrs.cc
@@ -474,7 +474,7 @@ mstatus_csr_t::mstatus_csr_t(processor_t* const proc, const reg_t addr):
}
bool mstatus_csr_t::unlogged_write(const reg_t val) noexcept {
- const bool has_mpv = proc->extension_enabled('S') && proc->extension_enabled('H');
+ const bool has_mpv = proc->extension_enabled('H');
const bool has_gva = has_mpv;
const reg_t mask = sstatus_write_mask
diff --git a/riscv/isa_parser.cc b/riscv/isa_parser.cc
index 0f9eb06..720f373 100644
--- a/riscv/isa_parser.cc
+++ b/riscv/isa_parser.cc
@@ -246,4 +246,7 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
max_isa |= reg_t(supervisor) << ('s' - 'a');
extension_table['S'] = true;
}
+
+ if (((max_isa >> ('h' - 'a')) & 1) && !supervisor)
+ bad_isa_string(str, "'H' extension requires S mode");
}