Support 'G' in ISA strings
authorAndrew Waterman <waterman@cs.berkeley.edu>
Fri, 11 Sep 2015 22:13:08 +0000 (15:13 -0700)
committerAndrew Waterman <waterman@cs.berkeley.edu>
Fri, 11 Sep 2015 22:13:08 +0000 (15:13 -0700)
It's the same as IMAFD.

riscv/processor.cc

index d1e7ce3f97d5a69337006c75bae317701d8ed166..e14859e773894839c59d9b64adad9e47e84dbc81 100644 (file)
@@ -59,6 +59,7 @@ void processor_t::parse_isa_string(const char* isa)
 {
   const char* p = isa;
   const char* all_subsets = "IMAFDC";
+  std::string tmp;
 
   max_xlen = 64;
   cpuid = reg_t(2) << 62;
@@ -70,12 +71,16 @@ void processor_t::parse_isa_string(const char* isa)
   else if (strncmp(p, "RV", 2) == 0)
     p += 2;
 
-  cpuid |= 1L << ('S' - 'A'); // advertise support for supervisor mode
-
-  if (!*p)
+  if (!*p) {
     p = all_subsets;
-  else if (*p != 'I')
+  } else if (*p == 'G') { // treat "G" as "IMAFD"
+    tmp = std::string("IMAFD") + (p+1);
+    p = &tmp[0];
+  } else if (*p != 'I') {
     bad_isa_string(isa);
+  }
+
+  cpuid |= 1L << ('S' - 'A'); // advertise support for supervisor mode
 
   while (*p) {
     cpuid |= 1L << (*p - 'A');