diff options
-rw-r--r-- | riscv/isa_parser.cc | 14 | ||||
-rw-r--r-- | riscv/isa_parser.h | 3 |
2 files changed, 17 insertions, 0 deletions
diff --git a/riscv/isa_parser.cc b/riscv/isa_parser.cc index 7335a14..be5e51b 100644 --- a/riscv/isa_parser.cc +++ b/riscv/isa_parser.cc @@ -139,6 +139,8 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv) } else if (ext_str == "zdinx") { extension_table[EXT_ZFINX] = true; extension_table[EXT_ZDINX] = true; + } else if (ext_str == "zfbfmin") { + extension_table[EXT_ZFBFMIN] = true; } else if (ext_str == "zfinx") { extension_table[EXT_ZFINX] = true; } else if (ext_str == "zhinx") { @@ -232,6 +234,10 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv) extension_table[EXT_ZICOND] = true; } else if (ext_str == "zihpm") { extension_table[EXT_ZIHPM] = true; + } else if (ext_str == "zvfbfmin") { + extension_table[EXT_ZVFBFMIN] = true; + } else if (ext_str == "zvfbfwma") { + extension_table[EXT_ZVFBFWMA] = true; } else if (ext_str == "sstc") { extension_table[EXT_SSTC] = true; } else if (ext_str[0] == 'x') { @@ -279,6 +285,14 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv) bad_isa_string(str, ("can't parse: " + std::string(p)).c_str()); } + if (extension_table[EXT_ZFBFMIN] && !extension_table['F']) { + bad_isa_string(str, "'Zfbfmin' extension requires 'F' extension"); + } + + if ((extension_table[EXT_ZVFBFMIN] || extension_table[EXT_ZVFBFWMA]) && !extension_table['V']) { + bad_isa_string(str, "'Zvfbfmin/Zvfbfwma' extension requires 'V' extension"); + } + if (extension_table['C']) { extension_table[EXT_ZCA] = true; if (extension_table['F'] && max_xlen == 32) diff --git a/riscv/isa_parser.h b/riscv/isa_parser.h index 9effd16..04859b6 100644 --- a/riscv/isa_parser.h +++ b/riscv/isa_parser.h @@ -49,6 +49,7 @@ typedef enum { EXT_SVINVAL, EXT_ZDINX, EXT_ZFA, + EXT_ZFBFMIN, EXT_ZFINX, EXT_ZHINX, EXT_ZHINXMIN, @@ -57,6 +58,8 @@ typedef enum { EXT_ZICNTR, EXT_ZICOND, EXT_ZIHPM, + EXT_ZVFBFMIN, + EXT_ZVFBFWMA, EXT_XZBP, EXT_XZBS, EXT_XZBE, |