Browse Source

Add isa string support for Zfbfmin/Zvfbfmin/Zvfbfwma

pull/1321/head
Weiwei Li 3 years ago
parent
commit
fecdad2b62
  1. 14
      riscv/isa_parser.cc
  2. 3
      riscv/isa_parser.h

14
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)

3
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,

Loading…
Cancel
Save