56
56
#define CPUTYPE_CELL 6
57
57
#define CPUTYPE_PPCG4 7
58
58
#define CPUTYPE_POWER8 8
59
+ #define CPUTYPE_POWER9 9
59
60
60
61
char * cpuname [] = {
61
62
"UNKNOWN" ,
@@ -66,7 +67,8 @@ char *cpuname[] = {
66
67
"POWER6" ,
67
68
"CELL" ,
68
69
"PPCG4" ,
69
- "POWER8"
70
+ "POWER8" ,
71
+ "POWER9"
70
72
};
71
73
72
74
char * lowercpuname [] = {
@@ -78,7 +80,8 @@ char *lowercpuname[] = {
78
80
"power6" ,
79
81
"cell" ,
80
82
"ppcg4" ,
81
- "power8"
83
+ "power8" ,
84
+ "power9"
82
85
};
83
86
84
87
char * corename [] = {
@@ -90,7 +93,8 @@ char *corename[] = {
90
93
"POWER6" ,
91
94
"CELL" ,
92
95
"PPCG4" ,
93
- "POWER8"
96
+ "POWER8" ,
97
+ "POWER8"
94
98
};
95
99
96
100
int detect (void ){
@@ -120,13 +124,41 @@ int detect(void){
120
124
if (!strncasecmp (p , "POWER6" , 6 )) return CPUTYPE_POWER6 ;
121
125
if (!strncasecmp (p , "POWER7" , 6 )) return CPUTYPE_POWER6 ;
122
126
if (!strncasecmp (p , "POWER8" , 6 )) return CPUTYPE_POWER8 ;
127
+ if (!strncasecmp (p , "POWER9" , 6 )) return CPUTYPE_POWER8 ;
123
128
if (!strncasecmp (p , "Cell" , 4 )) return CPUTYPE_CELL ;
124
129
if (!strncasecmp (p , "7447" , 4 )) return CPUTYPE_PPCG4 ;
125
130
126
131
return CPUTYPE_UNKNOWN ;
127
132
#endif
128
133
129
134
#ifdef _AIX
135
+ FILE * infile ;
136
+ char buffer [512 ], * p ;
137
+
138
+ p = (char * )NULL ;
139
+ infile = popen ("prtconf|grep 'Processor Type'" );
140
+ while (fgets (buffer , sizeof (buffer ), infile )){
141
+ if (!strncmp ("Pro" , buffer , 3 )){
142
+ p = strchr (buffer , ':' ) + 2 ;
143
+ #if 0
144
+ fprintf (stderr , "%s\n" , p );
145
+ #endif
146
+ break ;
147
+ }
148
+ }
149
+
150
+ pclose (infile );
151
+
152
+ if (!strncasecmp (p , "POWER3" , 6 )) return CPUTYPE_POWER3 ;
153
+ if (!strncasecmp (p , "POWER4" , 6 )) return CPUTYPE_POWER4 ;
154
+ if (!strncasecmp (p , "PPC970" , 6 )) return CPUTYPE_PPC970 ;
155
+ if (!strncasecmp (p , "POWER5" , 6 )) return CPUTYPE_POWER5 ;
156
+ if (!strncasecmp (p , "POWER6" , 6 )) return CPUTYPE_POWER6 ;
157
+ if (!strncasecmp (p , "POWER7" , 6 )) return CPUTYPE_POWER6 ;
158
+ if (!strncasecmp (p , "POWER8" , 6 )) return CPUTYPE_POWER8 ;
159
+ if (!strncasecmp (p , "POWER9" , 6 )) return CPUTYPE_POWER8 ;
160
+ if (!strncasecmp (p , "Cell" , 4 )) return CPUTYPE_CELL ;
161
+ if (!strncasecmp (p , "7447" , 4 )) return CPUTYPE_PPCG4 ;
130
162
return CPUTYPE_POWER5 ;
131
163
#endif
132
164
@@ -148,7 +180,7 @@ int id;
148
180
id = __asm __volatile ("mfpvr %0" : "=r" (id ));
149
181
switch ( id >> 16 ) {
150
182
case 0x4e : // POWER9
151
- return return CPUTYPE_POWER8 ;
183
+ return CPUTYPE_POWER8 ;
152
184
break ;
153
185
case 0x4d :
154
186
case 0x4b : // POWER8/8E
0 commit comments