Use prtconf to determine CPU type on AIX
authorMartin Kroeker <martin@ruby.chemie.uni-freiburg.de>
Mon, 12 Nov 2018 17:52:29 +0000 (18:52 +0100)
committerGitHub <noreply@github.com>
Mon, 12 Nov 2018 17:52:29 +0000 (18:52 +0100)
for #1803

cpuid_power.c

index 6c7baef..ebd9e15 100644 (file)
@@ -127,6 +127,33 @@ int detect(void){
 #endif
 
 #ifdef _AIX
+  FILE *infile;
+  char buffer[512], *p;
+
+  p = (char *)NULL;
+  infile = popen("prtconf|grep 'Processor Type'");
+  while (fgets(buffer, sizeof(buffer), infile)){
+    if (!strncmp("Pro", buffer, 3)){
+       p = strchr(buffer, ':') + 2;
+#if 0
+       fprintf(stderr, "%s\n", p);
+#endif
+       break;
+      }
+  }
+
+  pclose(infile);
+
+  if (!strncasecmp(p, "POWER3", 6)) return CPUTYPE_POWER3;
+  if (!strncasecmp(p, "POWER4", 6)) return CPUTYPE_POWER4;
+  if (!strncasecmp(p, "PPC970", 6)) return CPUTYPE_PPC970;
+  if (!strncasecmp(p, "POWER5", 6)) return CPUTYPE_POWER5;
+  if (!strncasecmp(p, "POWER6", 6)) return CPUTYPE_POWER6;
+  if (!strncasecmp(p, "POWER7", 6)) return CPUTYPE_POWER6;
+  if (!strncasecmp(p, "POWER8", 6)) return CPUTYPE_POWER8;
+  if (!strncasecmp(p, "Cell",   4)) return CPUTYPE_CELL;
+  if (!strncasecmp(p, "7447",   4)) return CPUTYPE_PPCG4;
+
   return CPUTYPE_POWER5;
 #endif