diff options
author | liweiwei90 <34847211+liweiwei90@users.noreply.github.com> | 2022-07-14 09:39:30 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-13 18:39:30 -0700 |
commit | 5eada616d48e1e0f1f9f5add53dfca76dc29de68 (patch) | |
tree | 118114681ac9fd9fe733a54e697823d87d9cc445 | |
parent | 0ad0d9733b41e666172ff55ee946253c6dbdd080 (diff) | |
download | riscv-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.cc | 2 | ||||
-rw-r--r-- | riscv/isa_parser.cc | 3 |
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"); } |