Initial attempt at proper cpu detection on RISCV
authorMartin Kroeker <martin@ruby.chemie.uni-freiburg.de>
Wed, 4 May 2022 06:58:56 +0000 (08:58 +0200)
committerGitHub <noreply@github.com>
Wed, 4 May 2022 06:58:56 +0000 (08:58 +0200)
cpuid_riscv64.c

index 2aa4217..1be10cf 100644 (file)
@@ -79,6 +79,29 @@ static char *cpuname[] = {
 };
 
 int detect(void){
+#ifdef __linux
+  FILE *infile;
+  char buffer[512], *p;
+
+  p = (char *)NULL;
+  infile = fopen("/proc/cpuinfo", "r");
+  while (fgets(buffer, sizeof(buffer), infile)){
+    if (!strncmp("isa", buffer, 3)){
+        p = strchr(buffer, '4') + 1; /* the 4 in rv64ima... */
+#if 0
+        fprintf(stderr, "%s\n", p);
+#endif
+        break;
+      }
+  }
+
+  fclose(infile);
+
+  if (strchr(p, 'v')) return CPU_C910V;
+
+  return CPU_GENERIC;
+#endif
+
   return CPU_GENERIC;
 }
 
@@ -91,6 +114,7 @@ void get_architecture(void){
 }
 
 void get_subarchitecture(void){
+  printf("%s",cpuname[detect()]);
 }
 
 void get_subdirname(void){