This commit drops the riscv_ext_version_table and instead uses the
riscv_ext_info_t data structure to provide the version information
for RISC-V extensions.

gcc/ChangeLog:

        * common/config/riscv/riscv-common.cc (riscv_ext_version_table):
        Remove.
        (standard_extensions_p): Use riscv_ext_info_t.
        (get_default_version): Use riscv_ext_info_t.
        (riscv_arch_help): Ditto.
---
 gcc/common/config/riscv/riscv-common.cc | 262 ++----------------------
 1 file changed, 22 insertions(+), 240 deletions(-)

diff --git a/gcc/common/config/riscv/riscv-common.cc 
b/gcc/common/config/riscv/riscv-common.cc
index faec954e0c15..e6620600f3d6 100644
--- a/gcc/common/config/riscv/riscv-common.cc
+++ b/gcc/common/config/riscv/riscv-common.cc
@@ -263,215 +263,6 @@ struct riscv_ext_version
   int minor_version;
 };
 
-/* All standard extensions defined in all supported ISA spec.  */
-static const struct riscv_ext_version riscv_ext_version_table[] =
-{
-  /* name, ISA spec, major version, minor_version.  */
-  {"e", ISA_SPEC_CLASS_20191213, 2, 0},
-  {"e", ISA_SPEC_CLASS_20190608, 2, 0},
-  {"e", ISA_SPEC_CLASS_2P2,      2, 0},
-
-  {"i", ISA_SPEC_CLASS_20191213, 2, 1},
-  {"i", ISA_SPEC_CLASS_20190608, 2, 1},
-  {"i", ISA_SPEC_CLASS_2P2,      2, 0},
-
-  {"m", ISA_SPEC_CLASS_20191213, 2, 0},
-  {"m", ISA_SPEC_CLASS_20190608, 2, 0},
-  {"m", ISA_SPEC_CLASS_2P2,      2, 0},
-
-  {"a", ISA_SPEC_CLASS_20191213, 2, 1},
-  {"a", ISA_SPEC_CLASS_20190608, 2, 0},
-  {"a", ISA_SPEC_CLASS_2P2,      2, 0},
-
-  {"f", ISA_SPEC_CLASS_20191213, 2, 2},
-  {"f", ISA_SPEC_CLASS_20190608, 2, 2},
-  {"f", ISA_SPEC_CLASS_2P2,      2, 0},
-
-  {"d", ISA_SPEC_CLASS_20191213, 2, 2},
-  {"d", ISA_SPEC_CLASS_20190608, 2, 2},
-  {"d", ISA_SPEC_CLASS_2P2,      2, 0},
-
-  {"c", ISA_SPEC_CLASS_20191213, 2, 0},
-  {"c", ISA_SPEC_CLASS_20190608, 2, 0},
-  {"c", ISA_SPEC_CLASS_2P2,      2, 0},
-
-  {"b",       ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"h",       ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"v",       ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zicsr", ISA_SPEC_CLASS_20191213, 2, 0},
-  {"zicsr", ISA_SPEC_CLASS_20190608, 2, 0},
-
-  {"zifencei", ISA_SPEC_CLASS_20191213, 2, 0},
-  {"zifencei", ISA_SPEC_CLASS_20190608, 2, 0},
-
-  {"zicond", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"za64rs",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"za128rs", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zawrs", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zaamo", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zalrsc", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zabha", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zacas", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zama16b", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zba", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zbb", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zbc", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zbs", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zfinx", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zdinx", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zhinx", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zhinxmin", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zbkb",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zbkc",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zbkx",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zkne",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zknd",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zknh",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zkr",   ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zksed", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zksh",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zkt",   ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zihintntl", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zihintpause", ISA_SPEC_CLASS_NONE, 2, 0},
-
-  {"zicboz",ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zicbom",ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zicbop",ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zic64b",   ISA_SPEC_CLASS_NONE, 1, 0},
-  {"ziccamoa", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"ziccif",   ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zicclsm",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"ziccrse",  ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zicfiss", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zicfilp", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zimop", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zcmop", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zicntr", ISA_SPEC_CLASS_NONE, 2, 0},
-  {"zihpm",  ISA_SPEC_CLASS_NONE, 2, 0},
-
-  {"zk",    ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zkn",   ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zks",   ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"ztso",  ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zve32x", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zve32f", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zve64x", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zve64f", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zve64d", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zvbb", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvbc", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvkb", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvkg", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvkned", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvknha", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvknhb", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvksed", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvksh", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvkn", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvknc", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvkng", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvks", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvksc", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvksg", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvkt", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zvl32b", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvl64b", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvl128b", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvl256b", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvl512b", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvl1024b", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvl2048b", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvl4096b", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvl8192b", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvl16384b", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvl32768b", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvl65536b", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zfbfmin",   ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zfh",       ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zfhmin",    ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvfbfmin",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvfbfwma",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvfhmin",   ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zvfh",      ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zfa",     ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zmmul", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"zca",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zcb",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zce",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zcf",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zcd",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zcmp", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"zcmt", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"sdtrig",  ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"smaia",     ISA_SPEC_CLASS_NONE, 1, 0},
-  {"smepmp",    ISA_SPEC_CLASS_NONE, 1, 0},
-  {"smstateen", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"ssaia",     ISA_SPEC_CLASS_NONE, 1, 0},
-  {"sscofpmf",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"ssstateen", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"sstc",      ISA_SPEC_CLASS_NONE, 1, 0},
-  {"ssstrict",  ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"svade",   ISA_SPEC_CLASS_NONE, 1, 0},
-  {"svadu",   ISA_SPEC_CLASS_NONE, 1, 0},
-  {"svinval", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"svnapot", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"svpbmt",  ISA_SPEC_CLASS_NONE, 1, 0},
-  {"svvptc",  ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"xcvmac", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xcvalu", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xcvelw", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xcvsimd", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xcvbi", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"xtheadba", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xtheadbb", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xtheadbs", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xtheadcmo", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xtheadcondmov", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xtheadfmemidx", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xtheadfmv", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xtheadint", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xtheadmac", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xtheadmemidx", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xtheadmempair", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xtheadsync", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xtheadvector", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"xventanacondops", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  {"xsfvcp",   ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xsfcease", ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xsfvqmaccqoq",    ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xsfvqmaccdod",    ISA_SPEC_CLASS_NONE, 1, 0},
-  {"xsfvfnrclipxfqf", ISA_SPEC_CLASS_NONE, 1, 0},
-
-  /* Terminate the list.  */
-  {NULL, ISA_SPEC_CLASS_NONE, 0, 0}
-};
 
 static const riscv_cpu_info riscv_cpu_tables[] =
 {
@@ -706,11 +497,8 @@ subset_cmp (const std::string &a, const std::string &b)
 static bool
 standard_extensions_p (const char *ext)
 {
-  const riscv_ext_version *ext_ver;
-  for (ext_ver = &riscv_ext_version_table[0]; ext_ver->name != NULL; ++ext_ver)
-    if (strcmp (ext, ext_ver->name) == 0)
-      return true;
-  return false;
+  auto itr = riscv_ext_infos.find (ext);
+  return itr != riscv_ext_infos.end ();
 }
 
 /* Add new subset to list.  */
@@ -840,24 +628,19 @@ get_default_version (const char *ext,
                     unsigned int *major_version,
                     unsigned int *minor_version)
 {
-  const riscv_ext_version *ext_ver;
-  for (ext_ver = &riscv_ext_version_table[0];
-       ext_ver->name != NULL;
-       ++ext_ver)
-    if (strcmp (ext, ext_ver->name) == 0)
-      {
-       if ((ext_ver->isa_spec_class == riscv_isa_spec) ||
-           (ext_ver->isa_spec_class == ISA_SPEC_CLASS_NONE))
-         {
-           *major_version = ext_ver->major_version;
-           *minor_version = ext_ver->minor_version;
-           return;
-         }
-      }
+  auto itr = riscv_ext_infos.find (ext);
+  if (itr == riscv_ext_infos.end ())
+    {
+      /* Not found version info.  */
+      *major_version = 0;
+      *minor_version = 0;
+      return;
+    }
 
-  /* Not found version info.  */
-  *major_version = 0;
-  *minor_version = 0;
+  riscv_version_t ver = itr->second.default_version ();
+  /* Get the version info from riscv_ext_infos.  */
+  *major_version = ver.major_version;
+  *minor_version = ver.minor_version;
 }
 
 /* Add new subset to list, but using default version from ISA spec version.  */
@@ -2461,16 +2244,15 @@ riscv_arch_help (int, const char **)
     }
   };
   std::map<std::string, std::set<unsigned>, extension_comparator> all_exts;
-  for (const riscv_ext_version &ext : riscv_ext_version_table)
+  for (const auto &[ext_name, ext_info] : riscv_ext_infos)
     {
-      if (!ext.name)
-       break;
-      if (ext.name[0] == 'g')
-       continue;
-      unsigned version_value = (ext.major_version * RISCV_MAJOR_VERSION_BASE)
-                               + (ext.minor_version
-                                  * RISCV_MINOR_VERSION_BASE);
-      all_exts[ext.name].insert(version_value);
+      for (auto &supported_version : ext_info.supported_versions ())
+       {
+         unsigned version_value
+           = (supported_version.major_version * RISCV_MAJOR_VERSION_BASE)
+             + (supported_version.minor_version * RISCV_MINOR_VERSION_BASE);
+         all_exts[ext_name].insert (version_value);
+       }
     }
 
   printf("All available -march extensions for RISC-V:\n");
-- 
2.34.1

Reply via email to