hwprobe only arrived in Linux 6.4, so on an older kernel the syscall fails
and -march=native has nothing to say.  /proc/cpuinfo has carried an ISA
string for far longer, so read that instead when the syscall is unavailable.

GCC_CPUINFO names a file to read instead of /proc/cpuinfo, and
GCC_CPUINFO_CPU the processor to look for in it, as on aarch64.  Both
exist so that the parser can be tested on a machine unlike the one the
file describes.

The test input other than info_1 are /proc/cpuinfo output collected from
real machines:

  info_0  SpacemiT X100 and A100, one block of each, from a machine
          whose cores are not all alike
  info_2  SiFive U74-MC, from a StarFive VisionFive 2
  info_3  SpacemiT X60, from a Banana Pi BPI-F3
  info_4  SiFive P870-D

info_1 is made up, naming extensions no compiler knows, so that
dropping them can be tested.

gcc/ChangeLog:

        * common/config/riscv/riscv-common.cc (standard_extensions_p):
        Rename to...
        (riscv_ext_is_known_p): ...this, and export.
        (riscv_subset_list::parse_single_std_ext): Update the callers.
        (riscv_subset_list::parse_single_multiletter_ext): Likewise.
        * config/riscv/riscv-subset.h (riscv_ext_is_known_p): Declare.
        * config/riscv/driver-riscv.cc: Include riscv-subset.h.
        (riscv_native_arch): Split the hwprobe half out into...
        (riscv_arch_from_hwprobe): ...this new function.
        (struct riscv_cpuinfo): New.
        (riscv_cpuinfo_file, riscv_cpuinfo_forced, riscv_cpuinfo_cpu)
        (riscv_cpuinfo_field, riscv_read_cpuinfo, riscv_cpuinfo)
        (riscv_filter_isa, riscv_arch_from_cpuinfo): New functions.
        * config/riscv/x-riscv: Update the dependencies.

gcc/testsuite/ChangeLog:

        * gcc.target/riscv/cpunative/riscv-cpunative.exp: New file.
        * gcc.target/riscv/cpunative/info_0: New file.
        * gcc.target/riscv/cpunative/info_1: New file.
        * gcc.target/riscv/cpunative/info_2: New file.
        * gcc.target/riscv/cpunative/info_3: New file.
        * gcc.target/riscv/cpunative/info_4: New file.
        * gcc.target/riscv/cpunative/native_cpu_0.c: New test.
        * gcc.target/riscv/cpunative/native_cpu_1.c: New test.
        * gcc.target/riscv/cpunative/native_cpu_2.c: New test.
        * gcc.target/riscv/cpunative/native_cpu_3.c: New test.
        * gcc.target/riscv/cpunative/native_cpu_4.c: New test.
        * gcc.target/riscv/cpunative/native_cpu_5.c: New test.
        * gcc.target/riscv/cpunative/native_cpu_6.c: New test.
---
 gcc/common/config/riscv/riscv-common.cc       |  15 +-
 gcc/common/config/riscv/riscv-hwprobe.h       |   3 +
 gcc/config/riscv/driver-riscv.cc              | 220 +++++++++++++-
 gcc/config/riscv/riscv-subset.h               |   1 +
 gcc/config/riscv/x-riscv                      |   1 +
 .../gcc.target/riscv/cpunative/info_0         |  20 ++
 .../gcc.target/riscv/cpunative/info_1         |  10 +
 .../gcc.target/riscv/cpunative/info_2         |  39 +++
 .../gcc.target/riscv/cpunative/info_3         |  71 +++++
 .../gcc.target/riscv/cpunative/info_4         | 287 ++++++++++++++++++
 .../gcc.target/riscv/cpunative/native_cpu_0.c |  17 ++
 .../gcc.target/riscv/cpunative/native_cpu_1.c |  17 ++
 .../gcc.target/riscv/cpunative/native_cpu_2.c |  14 +
 .../gcc.target/riscv/cpunative/native_cpu_3.c |  18 ++
 .../gcc.target/riscv/cpunative/native_cpu_4.c |  17 ++
 .../gcc.target/riscv/cpunative/native_cpu_5.c |  16 +
 .../gcc.target/riscv/cpunative/native_cpu_6.c |  22 ++
 .../riscv/cpunative/riscv-cpunative.exp       |  35 +++
 18 files changed, 814 insertions(+), 9 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/riscv/cpunative/info_0
 create mode 100644 gcc/testsuite/gcc.target/riscv/cpunative/info_1
 create mode 100644 gcc/testsuite/gcc.target/riscv/cpunative/info_2
 create mode 100644 gcc/testsuite/gcc.target/riscv/cpunative/info_3
 create mode 100644 gcc/testsuite/gcc.target/riscv/cpunative/info_4
 create mode 100644 gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_0.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_1.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_2.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_3.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_4.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_5.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_6.c
 create mode 100644 gcc/testsuite/gcc.target/riscv/cpunative/riscv-cpunative.exp

diff --git a/gcc/common/config/riscv/riscv-common.cc 
b/gcc/common/config/riscv/riscv-common.cc
index 6bbbacab8df..0252a600287 100644
--- a/gcc/common/config/riscv/riscv-common.cc
+++ b/gcc/common/config/riscv/riscv-common.cc
@@ -522,10 +522,11 @@ subset_cmp (const std::string &a, const std::string &b)
     }
 }
 
-/* Return true if EXT is a standard extension.  */
+/* Return true if EXT names an extension this compiler knows about, whether
+   standard or vendor defined.  */
 
-static bool
-standard_extensions_p (const char *ext)
+bool
+riscv_ext_is_known_p (const char *ext)
 {
   auto itr = riscv_ext_infos.find (ext);
   return itr != riscv_ext_infos.end ();
@@ -562,7 +563,7 @@ riscv_subset_list::add (const char *subset, int 
major_version,
        }
       return;
     }
-  else if (strlen (subset) == 1 && !standard_extensions_p (subset))
+  else if (strlen (subset) == 1 && !riscv_ext_is_known_p (subset))
     {
       if (m_loc)
        error_at (*m_loc,
@@ -571,7 +572,7 @@ riscv_subset_list::add (const char *subset, int 
major_version,
                  m_arch, subset);
       return;
     }
-  else if (subset[0] == 'z' && !standard_extensions_p (subset))
+  else if (subset[0] == 'z' && !riscv_ext_is_known_p (subset))
     {
       if (m_loc)
        error_at (*m_loc,
@@ -580,7 +581,7 @@ riscv_subset_list::add (const char *subset, int 
major_version,
                  m_arch, subset);
       return;
     }
-  else if (subset[0] == 's' && !standard_extensions_p (subset))
+  else if (subset[0] == 's' && !riscv_ext_is_known_p (subset))
     {
       if (m_loc)
        error_at (*m_loc,
@@ -589,7 +590,7 @@ riscv_subset_list::add (const char *subset, int 
major_version,
                  m_arch, subset);
       return;
     }
-  else if (subset[0] == 'x' && !standard_extensions_p (subset))
+  else if (subset[0] == 'x' && !riscv_ext_is_known_p (subset))
     {
       if (m_loc)
        error_at (*m_loc,
diff --git a/gcc/common/config/riscv/riscv-hwprobe.h 
b/gcc/common/config/riscv/riscv-hwprobe.h
index ba989b99d2f..9b66364427c 100644
--- a/gcc/common/config/riscv/riscv-hwprobe.h
+++ b/gcc/common/config/riscv/riscv-hwprobe.h
@@ -29,6 +29,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If 
not, see
 #ifndef __NR_riscv_hwprobe
 #define __NR_riscv_hwprobe 258
 #endif
+#ifndef __NR_getcpu
+#define __NR_getcpu 168
+#endif
 
 enum {
 #define RISCV_HWPROBE_KEY(NAME, VALUE) RISCV_HWPROBE_KEY_##NAME = VALUE,
diff --git a/gcc/config/riscv/driver-riscv.cc b/gcc/config/riscv/driver-riscv.cc
index 2997c5c2fe9..535ee49267c 100644
--- a/gcc/config/riscv/driver-riscv.cc
+++ b/gcc/config/riscv/driver-riscv.cc
@@ -24,6 +24,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
+#include "riscv-subset.h"
 
 #ifdef __linux__
 #include "common/config/riscv/riscv-hwprobe.h"
@@ -44,6 +45,20 @@ static const struct riscv_hwprobe_ext riscv_hwprobe_exts[] = 
{
 #include "common/config/riscv/riscv-hwprobe.def"
 };
 
+/* Return the number of the CPU this process is currently running on, or -1
+   if it cannot be determined.  */
+
+static int
+riscv_current_cpu (void)
+{
+  unsigned int cpu = 0;
+
+  if (syscall_5_args (__NR_getcpu, (long) &cpu, 0, 0, 0, 0) != 0)
+    return -1;
+
+  return (int) cpu;
+}
+
 /* Append the Zvl extension for this machine's vector register width,
    which only the vlenb CSR reports.  */
 
@@ -111,6 +126,205 @@ riscv_arch_from_hwprobe (std::string &isa, bool *vector_p)
   return true;
 }
 
+/* What the /proc/cpuinfo fallback managed to read out of one processor
+   block.  */
+
+struct riscv_cpuinfo
+{
+  std::string isa;
+};
+
+/* GCC_CPUINFO names a file to read instead of /proc/cpuinfo, and
+   GCC_CPUINFO_CPU the processor to look for in it.  Both are for
+   testing.  */
+
+static const char *
+riscv_cpuinfo_file (void)
+{
+  const char *path = getenv ("GCC_CPUINFO");
+
+  return path != NULL ? path : "/proc/cpuinfo";
+}
+
+static bool
+riscv_cpuinfo_forced (void)
+{
+  return getenv ("GCC_CPUINFO") != NULL;
+}
+
+static int
+riscv_cpuinfo_cpu (void)
+{
+  const char *forced = getenv ("GCC_CPUINFO_CPU");
+
+  return forced != NULL ? atoi (forced) : riscv_current_cpu ();
+}
+
+/* Split LINE, which /proc/cpuinfo writes as "name\t: value", putting the
+   name in NAME and returning the value.  Both are stripped of surrounding
+   whitespace.  Return NULL if LINE is not of that shape.  */
+
+static const char *
+riscv_cpuinfo_field (char *line, std::string &name)
+{
+  char *colon = strchr (line, ':');
+  char *end;
+
+  if (colon == NULL)
+    return NULL;
+
+  end = colon;
+  while (end > line && ISSPACE (end[-1]))
+    end--;
+  name.assign (line, end - line);
+
+  colon++;
+  while (ISSPACE (*colon))
+    colon++;
+
+  end = colon + strlen (colon);
+  while (end > colon && ISSPACE (end[-1]))
+    end--;
+  *end = '\0';
+
+  return colon;
+}
+
+/* Read the /proc/cpuinfo block describing processor WANT into OUT, or the
+   first block in the file if WANT is negative.  The processor field holds
+   the number sched_getcpu would return, not the hart id.  Return false if
+   there is no such block, or if it says nothing about the ISA.  */
+
+static bool
+riscv_read_cpuinfo (int want, struct riscv_cpuinfo *out)
+{
+  FILE *f = fopen (riscv_cpuinfo_file (), "r");
+  char line[1024];
+  bool in_block = false;
+  bool hart_isa_p = false;
+
+  if (f == NULL)
+    return false;
+
+  out->isa.clear ();
+
+  while (fgets (line, sizeof (line), f) != NULL)
+    {
+      std::string name;
+      const char *value = riscv_cpuinfo_field (line, name);
+
+      if (value == NULL)
+       continue;
+
+      if (name == "processor")
+       {
+         if (in_block)
+           break;
+         in_block = want < 0 || atoi (value) == want;
+         continue;
+       }
+
+      if (!in_block)
+       continue;
+
+      /* "hart isa" describes this core alone and is the one to go by, but
+        the kernels this fallback exists for are older than that line and
+        offer only the machine-wide "isa".  */
+      if (name == "hart isa")
+       {
+         out->isa = value;
+         hart_isa_p = true;
+       }
+      else if (name == "isa" && !hart_isa_p)
+       out->isa = value;
+    }
+
+  fclose (f);
+
+  return !out->isa.empty ();
+}
+
+/* Read the block for the current CPU, or the first one if it has none.  */
+
+static bool
+riscv_cpuinfo (struct riscv_cpuinfo *out)
+{
+  return (riscv_read_cpuinfo (riscv_cpuinfo_cpu (), out)
+         || riscv_read_cpuinfo (-1, out));
+}
+
+/* Copy KERNEL_ISA into ISA, dropping every extension this compiler does
+   not know: one unrecognised name would make -march= fail outright.  Set
+   *VECTOR_P if what is left has vectors.  Return false if KERNEL_ISA is
+   not an ISA string at all.  */
+
+static bool
+riscv_filter_isa (const char *kernel_isa, std::string &isa, bool *vector_p)
+{
+  const char *base = __riscv_xlen == 32 ? "rv32" : "rv64";
+  const char *p = kernel_isa;
+
+  if (strncmp (p, base, 4) != 0)
+    return false;
+  p += 4;
+
+  if (*p != 'i' && *p != 'e' && *p != 'g')
+    return false;
+
+  isa = base;
+  isa += *p++;
+
+  /* The single-letter extensions run together up to the first underscore.  */
+  for (; *p != '\0' && *p != '_'; p++)
+    {
+      const char name[2] = { *p, '\0' };
+
+      if (!riscv_ext_is_known_p (name))
+       continue;
+
+      isa += '_';
+      isa += *p;
+      if (*p == 'v')
+       *vector_p = true;
+    }
+
+  /* The multi-letter ones are separated by underscores.  */
+  while (*p == '_')
+    {
+      const char *end = ++p;
+
+      while (*end != '\0' && *end != '_')
+       end++;
+
+      std::string name (p, end - p);
+      p = end;
+
+      if (name.empty () || !riscv_ext_is_known_p (name.c_str ()))
+       continue;
+
+      isa += '_';
+      isa += name;
+      if (name.compare (0, 3, "zve") == 0)
+       *vector_p = true;
+    }
+
+  return true;
+}
+
+/* Build the ISA string from /proc/cpuinfo, for kernels that are too old to
+   have hwprobe.  */
+
+static bool
+riscv_arch_from_cpuinfo (std::string &isa, bool *vector_p)
+{
+  struct riscv_cpuinfo info;
+
+  if (!riscv_cpuinfo (&info))
+    return false;
+
+  return riscv_filter_isa (info.isa.c_str (), isa, vector_p);
+}
+
 /* Return the ISA string describing this machine, or NULL if it cannot be
    determined.  */
 
@@ -119,11 +333,13 @@ riscv_native_arch (void)
 {
   std::string isa;
   bool vector_p = false;
+  bool forced = riscv_cpuinfo_forced ();
 
-  if (!riscv_arch_from_hwprobe (isa, &vector_p))
+  if ((forced || !riscv_arch_from_hwprobe (isa, &vector_p))
+      && !riscv_arch_from_cpuinfo (isa, &vector_p))
     return NULL;
 
-  if (vector_p)
+  if (vector_p && !forced)
     riscv_add_vlen (isa);
 
   return xstrdup (isa.c_str ());
diff --git a/gcc/config/riscv/riscv-subset.h b/gcc/config/riscv/riscv-subset.h
index 2f7d943613f..19ccb0a4fdb 100644
--- a/gcc/config/riscv/riscv-subset.h
+++ b/gcc/config/riscv/riscv-subset.h
@@ -178,6 +178,7 @@ public:
   const_iterator end() const   { return const_iterator(nullptr); }
 };
 
+extern bool riscv_ext_is_known_p (const char *);
 extern const riscv_subset_list *riscv_cmdline_subset_list (void);
 extern void
 riscv_set_arch_by_subset_list (riscv_subset_list *, struct gcc_options *);
diff --git a/gcc/config/riscv/x-riscv b/gcc/config/riscv/x-riscv
index 55f32d7dd1c..d1c59ba50e0 100644
--- a/gcc/config/riscv/x-riscv
+++ b/gcc/config/riscv/x-riscv
@@ -1,5 +1,6 @@
 driver-riscv.o: $(srcdir)/config/riscv/driver-riscv.cc \
   $(CONFIG_H) $(SYSTEM_H) $(TM_H) $(CORETYPES_H) \
+  $(srcdir)/config/riscv/riscv-subset.h \
   $(srcdir)/common/config/riscv/riscv-hwprobe.h \
   $(srcdir)/common/config/riscv/riscv-hwprobe.def
        $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
diff --git a/gcc/testsuite/gcc.target/riscv/cpunative/info_0 
b/gcc/testsuite/gcc.target/riscv/cpunative/info_0
new file mode 100644
index 00000000000..d86dc23aee5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/cpunative/info_0
@@ -0,0 +1,20 @@
+processor      : 0
+hart           : 0
+model name     : Spacemit(R) X100
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfh_zfhmin_zca_zcb_zcd_zcmop_zba_zbb_zbc_zbs_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkb_zvkg_zvkned_zvknha_zvknhb_zvksed_zvksh_zvkt_smaia_smstateen_ssaia_sscofpmf_sstc_svinval_svnapot_svpbmt_sdtrig
+mmu            : sv39
+mvendorid      : 0x710
+marchid                : 0x8000000058000002
+mimpid         : 0x33d8a600
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfh_zfhmin_zca_zcb_zcd_zcmop_zba_zbb_zbc_zbs_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkb_zvkg_zvkned_zvknha_zvknhb_zvksed_zvksh_zvkt_smaia_smstateen_ssaia_sscofpmf_sstc_svinval_svnapot_svpbmt_sdtrig
+
+processor      : 8
+hart           : 8
+model name     : Spacemit(R) A100
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfh_zfhmin_zca_zcb_zcd_zcmop_zba_zbb_zbc_zbs_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkb_zvkg_zvkned_zvknha_zvknhb_zvksed_zvksh_zvkt_smaia_smstateen_ssaia_sscofpmf_sstc_svinval_svnapot_svpbmt_sdtrig
+mmu            : sv39
+mvendorid      : 0x710
+marchid                : 0x8000000041000002
+mimpid         : 0x10000000d5686200
+hart isa       : 
rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfh_zfhmin_zca_zcb_zcd_zcmop_zba_zbb_zbc_zbs_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkb_zvkg_zvkned_zvknha_zvknhb_zvksed_zvksh_zvkt_smaia_smstateen_ssaia_sscofpmf_sstc_svinval_svnapot_svpbmt_sdtrig
+
diff --git a/gcc/testsuite/gcc.target/riscv/cpunative/info_1 
b/gcc/testsuite/gcc.target/riscv/cpunative/info_1
new file mode 100644
index 00000000000..6a3709c5456
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/cpunative/info_1
@@ -0,0 +1,10 @@
+processor      : 0
+hart           : 0
+model name     : Nonesuch
+isa            : rv64imafdc_znosuchext_zba_xmadeup_zbb
+mmu            : sv39
+mvendorid      : 0xdead
+marchid                : 0xbeef
+mimpid         : 0x1
+hart isa       : rv64imafdc_znosuchext_zba_xmadeup_zbb
+
diff --git a/gcc/testsuite/gcc.target/riscv/cpunative/info_2 
b/gcc/testsuite/gcc.target/riscv/cpunative/info_2
new file mode 100644
index 00000000000..500ad48d420
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/cpunative/info_2
@@ -0,0 +1,39 @@
+processor      : 0
+hart           : 2
+isa            : rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+mmu            : sv39
+uarch          : sifive,u74-mc
+mvendorid      : 0x489
+marchid                : 0x8000000000000007
+mimpid         : 0x4210427
+hart isa       : rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+
+processor      : 1
+hart           : 1
+isa            : rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+mmu            : sv39
+uarch          : sifive,u74-mc
+mvendorid      : 0x489
+marchid                : 0x8000000000000007
+mimpid         : 0x4210427
+hart isa       : rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+
+processor      : 2
+hart           : 3
+isa            : rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+mmu            : sv39
+uarch          : sifive,u74-mc
+mvendorid      : 0x489
+marchid                : 0x8000000000000007
+mimpid         : 0x4210427
+hart isa       : rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+
+processor      : 3
+hart           : 4
+isa            : rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
+mmu            : sv39
+uarch          : sifive,u74-mc
+mvendorid      : 0x489
+marchid                : 0x8000000000000007
+mimpid         : 0x4210427
+hart isa       : rv64imafdc_zicntr_zicsr_zifencei_zihpm_zca_zcd_zba_zbb
diff --git a/gcc/testsuite/gcc.target/riscv/cpunative/info_3 
b/gcc/testsuite/gcc.target/riscv/cpunative/info_3
new file mode 100644
index 00000000000..ff24857b4a3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/cpunative/info_3
@@ -0,0 +1,71 @@
+processor      : 0
+hart           : 0
+model name     : Spacemit(R) X60
+isa            : 
rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+mmu            : sv39
+mvendorid      : 0x710
+marchid                : 0x8000000058000001
+mimpid         : 0x1000000049772200
+
+processor      : 1
+hart           : 1
+model name     : Spacemit(R) X60
+isa            : 
rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+mmu            : sv39
+mvendorid      : 0x710
+marchid                : 0x8000000058000001
+mimpid         : 0x1000000049772200
+
+processor      : 2
+hart           : 2
+model name     : Spacemit(R) X60
+isa            : 
rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+mmu            : sv39
+mvendorid      : 0x710
+marchid                : 0x8000000058000001
+mimpid         : 0x1000000049772200
+
+processor      : 3
+hart           : 3
+model name     : Spacemit(R) X60
+isa            : 
rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+mmu            : sv39
+mvendorid      : 0x710
+marchid                : 0x8000000058000001
+mimpid         : 0x1000000049772200
+
+processor      : 4
+hart           : 4
+model name     : Spacemit(R) X60
+isa            : 
rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+mmu            : sv39
+mvendorid      : 0x710
+marchid                : 0x8000000058000001
+mimpid         : 0x1000000049772200
+
+processor      : 5
+hart           : 5
+model name     : Spacemit(R) X60
+isa            : 
rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+mmu            : sv39
+mvendorid      : 0x710
+marchid                : 0x8000000058000001
+mimpid         : 0x1000000049772200
+
+processor      : 6
+hart           : 6
+model name     : Spacemit(R) X60
+isa            : 
rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+mmu            : sv39
+mvendorid      : 0x710
+marchid                : 0x8000000058000001
+mimpid         : 0x1000000049772200
+
+processor      : 7
+hart           : 7
+model name     : Spacemit(R) X60
+isa            : 
rv64imafdcv_zicbom_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zfhmin_zca_zcd_zba_zbb_zbc_zbs_zkt_zve32f_zve32x_zve64d_zve64f_zve64x_zvfh_zvfhmin_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt
+mmu            : sv39
+mvendorid      : 0x710
+marchid                : 0x8000000058000001
+mimpid         : 0x1000000049772200
diff --git a/gcc/testsuite/gcc.target/riscv/cpunative/info_4 
b/gcc/testsuite/gcc.target/riscv/cpunative/info_4
new file mode 100644
index 00000000000..3082d576e6c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/cpunative/info_4
@@ -0,0 +1,287 @@
+processor      : 0
+hart           : 0
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 1
+hart           : 1
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 2
+hart           : 2
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 3
+hart           : 3
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 4
+hart           : 4
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 5
+hart           : 5
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 6
+hart           : 6
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 7
+hart           : 7
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 8
+hart           : 8
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 9
+hart           : 9
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 10
+hart           : 10
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 11
+hart           : 11
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 12
+hart           : 12
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 13
+hart           : 13
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 14
+hart           : 14
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 15
+hart           : 15
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 16
+hart           : 16
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 17
+hart           : 17
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 18
+hart           : 18
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 19
+hart           : 19
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 20
+hart           : 20
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 21
+hart           : 21
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 22
+hart           : 22
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 23
+hart           : 23
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 24
+hart           : 24
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 25
+hart           : 25
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 26
+hart           : 26
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 27
+hart           : 27
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 28
+hart           : 28
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 29
+hart           : 29
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 30
+hart           : 30
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+
+processor      : 31
+hart           : 31
+isa            : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
+mmu            : sv48
+mvendorid      : 0x489
+marchid                : 0x8000000000000109
+mimpid         : 0x14250606
+hart isa       : 
rv64imafdcvh_zicbom_zicbop_zicboz_ziccrse_zicntr_zicond_zicsr_zifencei_zihintntl_zihintpause_zihpm_zimop_zaamo_zalrsc_zawrs_zfa_zfbfmin_zfh_zca_zcb_zcd_zcmop_zba_zbb_zbs_zkr_zkt_zvbb_zvbc_zve32f_zve32x_zve64d_zve64f_zve64x_zvfbfmin_zvfbfwma_zvfh_zvkb_zvkg_zvkned_zvknhb_zvksed_zvksh_zvkt_smaia_smmpm_smnpm_smstateen_ssaia_sscofpmf_ssnpm_sstc_svade_svinval_svnapot_svpbmt
diff --git a/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_0.c 
b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_0.c
new file mode 100644
index 00000000000..bdac433d381
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_0.c
@@ -0,0 +1,17 @@
+/* The X100 half of a heterogeneous machine.  Its hart implements H, and
+   the compiler is told it is running on that core.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target riscv_native_cpu_detect } */
+/* { dg-require-effective-target rv64 } */
+/* { dg-set-compiler-env-var GCC_CPUINFO 
"$srcdir/gcc.target/riscv/cpunative/info_0" } */
+/* { dg-set-compiler-env-var GCC_CPUINFO_CPU "0" } */
+/* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+
+int
+main (void)
+{
+  return 0;
+}
+
+/* { dg-final { scan-assembler {\.attribute arch, "rv64i2p1[^"]*_h1p0_} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_1.c 
b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_1.c
new file mode 100644
index 00000000000..a958e8c541a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_1.c
@@ -0,0 +1,17 @@
+/* Real /proc/cpuinfo from a spacemit K3.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target riscv_native_cpu_detect } */
+/* { dg-require-effective-target rv64 } */
+/* { dg-set-compiler-env-var GCC_CPUINFO 
"$srcdir/gcc.target/riscv/cpunative/info_0" } */
+/* { dg-set-compiler-env-var GCC_CPUINFO_CPU "8" } */
+/* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+
+int
+main (void)
+{
+  return 0;
+}
+
+/* { dg-final { scan-assembler {\.attribute arch, "rv64i2p1[^"]*_v1p0_} } } */
+/* { dg-final { scan-assembler-not {\.attribute arch, "[^"]*_h1p0_} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_2.c 
b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_2.c
new file mode 100644
index 00000000000..adccb7ea7cd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_2.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target riscv_native_cpu_detect } */
+/* { dg-require-effective-target rv64 } */
+/* { dg-set-compiler-env-var GCC_CPUINFO 
"$srcdir/gcc.target/riscv/cpunative/info_0" } */
+/* { dg-set-compiler-env-var GCC_CPUINFO_CPU "99" } */
+/* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+
+int
+main (void)
+{
+  return 0;
+}
+
+/* { dg-final { scan-assembler {\.attribute arch, "rv64i2p1[^"]*_h1p0_} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_3.c 
b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_3.c
new file mode 100644
index 00000000000..8fbcb75b187
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_3.c
@@ -0,0 +1,18 @@
+/* Testcase with unknown ext in /proc/cpuinfo.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target riscv_native_cpu_detect } */
+/* { dg-require-effective-target rv64 } */
+/* { dg-set-compiler-env-var GCC_CPUINFO 
"$srcdir/gcc.target/riscv/cpunative/info_1" } */
+/* { dg-set-compiler-env-var GCC_CPUINFO_CPU "0" } */
+/* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+
+int
+main (void)
+{
+  return 0;
+}
+
+/* { dg-final { scan-assembler {\.attribute arch, 
"rv64i2p1[^"]*_zba1p0_zbb1p0} } } */
+/* { dg-final { scan-assembler-not {znosuchext} } } */
+/* { dg-final { scan-assembler-not {xmadeup} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_4.c 
b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_4.c
new file mode 100644
index 00000000000..58bb4aeef9f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_4.c
@@ -0,0 +1,17 @@
+/* A real /proc/cpuinfo from StarFive VisionFive 2.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target riscv_native_cpu_detect } */
+/* { dg-require-effective-target rv64 } */
+/* { dg-set-compiler-env-var GCC_CPUINFO 
"$srcdir/gcc.target/riscv/cpunative/info_2" } */
+/* { dg-set-compiler-env-var GCC_CPUINFO_CPU "2" } */
+/* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+
+int
+main (void)
+{
+  return 0;
+}
+
+/* { dg-final { scan-assembler {\.attribute arch, 
"rv64i2p1[^"]*_zba1p0_zbb1p0"} } } */
+/* { dg-final { scan-assembler-not {\.attribute arch, "[^"]*_v1p0_} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_5.c 
b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_5.c
new file mode 100644
index 00000000000..656b44f011e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_5.c
@@ -0,0 +1,16 @@
+/* Real /proc/cpuinfo from a Banana Pi BPI-F3.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target riscv_native_cpu_detect } */
+/* { dg-require-effective-target rv64 } */
+/* { dg-set-compiler-env-var GCC_CPUINFO 
"$srcdir/gcc.target/riscv/cpunative/info_3" } */
+/* { dg-set-compiler-env-var GCC_CPUINFO_CPU "0" } */
+/* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+
+int
+main (void)
+{
+  return 0;
+}
+
+/* { dg-final { scan-assembler {\.attribute arch, 
"rv64i2p1[^"]*_v1p0_[^"]*_zvfh1p0_} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_6.c 
b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_6.c
new file mode 100644
index 00000000000..823fcd79b54
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/cpunative/native_cpu_6.c
@@ -0,0 +1,22 @@
+/* A real /proc/cpuinfo, from a SiFive P870-D.  It is the last of the
+   thirty-two blocks that are asked for here, and the ISA string is the
+   longest and the most recent of any file in this directory, carrying
+   names -- zfbfmin, zvfbfwma, smmpm, ssnpm, svade -- that the others
+   do not.  */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target riscv_native_cpu_detect } */
+/* { dg-require-effective-target rv64 } */
+/* { dg-set-compiler-env-var GCC_CPUINFO 
"$srcdir/gcc.target/riscv/cpunative/info_4" } */
+/* { dg-set-compiler-env-var GCC_CPUINFO_CPU "31" } */
+/* { dg-additional-options "-march=native -mabi=lp64d -fverbose-asm" } */
+
+int
+main (void)
+{
+  return 0;
+}
+
+/* { dg-final { scan-assembler {\.attribute arch, "rv64i2p1[^"]*_zfbfmin1p0_} 
} } */
+/* { dg-final { scan-assembler {\.attribute arch, "[^"]*_zvfbfwma1p0_} } } */
+/* { dg-final { scan-assembler {\.attribute arch, "[^"]*_svade1p0_} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/cpunative/riscv-cpunative.exp 
b/gcc/testsuite/gcc.target/riscv/cpunative/riscv-cpunative.exp
new file mode 100644
index 00000000000..21353ea0593
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/cpunative/riscv-cpunative.exp
@@ -0,0 +1,35 @@
+# Copyright (C) 2026 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Exit immediately if this isn't a RISC-V target.
+if ![istarget riscv*-*-*] then {
+  return
+}
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cCS\]]] \
+       "" ""
+
+# All done.
+dg-finish
-- 
2.53.0

Reply via email to