diff options
Diffstat (limited to 'riscv/processor.cc')
-rw-r--r-- | riscv/processor.cc | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/riscv/processor.cc b/riscv/processor.cc index 6734c02..af4f35b 100644 --- a/riscv/processor.cc +++ b/riscv/processor.cc @@ -221,7 +221,7 @@ void processor_t::parse_isa_string(const char* str) char error_msg[256]; const char* p = lowercase.c_str(); - const char* all_subsets = "imafdqckhp" + const char* all_subsets = "imafdqchp" #ifdef __SIZEOF_INT128__ "v" #endif @@ -290,6 +290,38 @@ void processor_t::parse_isa_string(const char* str) extension_table[EXT_ZBC] = true; } else if (ext_str == "zbs") { extension_table[EXT_ZBS] = true; + } else if (ext_str == "zbkb") { + extension_table[EXT_ZBKB] = true; + } else if (ext_str == "zbkc") { + extension_table[EXT_ZBKC] = true; + } else if (ext_str == "zbkx") { + extension_table[EXT_ZBKX] = true; + } else if (ext_str == "zkn") { + extension_table[EXT_ZBKB] = true; + extension_table[EXT_ZBKC] = true; + extension_table[EXT_ZBKX] = true; + extension_table[EXT_ZKND] = true; + extension_table[EXT_ZKNE] = true; + extension_table[EXT_ZKNH] = true; + } else if (ext_str == "zknd") { + extension_table[EXT_ZKND] = true; + } else if (ext_str == "zkne") { + extension_table[EXT_ZKNE] = true; + } else if (ext_str == "zknh") { + extension_table[EXT_ZKNH] = true; + } else if (ext_str == "zks") { + extension_table[EXT_ZBKB] = true; + extension_table[EXT_ZBKC] = true; + extension_table[EXT_ZBKX] = true; + extension_table[EXT_ZKSED] = true; + extension_table[EXT_ZKSH] = true; + } else if (ext_str == "zksed") { + extension_table[EXT_ZKSED] = true; + } else if (ext_str == "zksh") { + extension_table[EXT_ZKSH] = true; + } else if (ext_str == "zkr") { + extension_table[EXT_ZKR] = true; + } else if (ext_str == "zkt") { } else if (ext_str == "SVNAPOT") { extension_table[EXT_SVNAPOT] = true; } else if (ext_str == "SVPBMT") { @@ -1170,7 +1202,7 @@ reg_t processor_t::get_csr(int which, insn_t insn, bool write, bool peek) switch (which) { case CSR_SENTROPY: - if (!extension_enabled('K')) + if (!extension_enabled(EXT_ZKR)) break; /* Read-only access disallowed due to wipe-on-read side effect */ if (!write) |