@@ -485,7 +485,7 @@ bool bli_cpuid_is_bulldozer
485
485
return TRUE;
486
486
}
487
487
488
- #elif defined(__aarch64__ ) || defined(__arm__ ) || defined(_M_ARM )
488
+ #elif defined(__aarch64__ ) || defined(__arm__ ) || defined(_M_ARM ) || defined( _ARCH_PPC )
489
489
490
490
arch_t bli_cpuid_query_id ( void )
491
491
{
@@ -530,9 +530,14 @@ arch_t bli_cpuid_query_id( void )
530
530
return BLIS_ARCH_GENERIC ;
531
531
}
532
532
}
533
- else if ( vendor == VENDOR_UNKNOWN )
533
+ else if ( vendor == VENDOR_IBM )
534
534
{
535
- return BLIS_ARCH_GENERIC ;
535
+ if ( model == MODEL_POWER7 )
536
+ return BLIS_ARCH_POWER7 ;
537
+ else if ( model == MODEL_POWER9 )
538
+ return BLIS_ARCH_POWER9 ;
539
+ else if ( model == MODEL_POWER10 )
540
+ return BLIS_ARCH_POWER10 ;
536
541
}
537
542
538
543
return BLIS_ARCH_GENERIC ;
@@ -1203,7 +1208,7 @@ uint32_t bli_cpuid_query
1203
1208
return VENDOR_ARM ;
1204
1209
}
1205
1210
1206
- #elif defined(__arm__ ) || defined(_M_ARM )
1211
+ #elif defined(__arm__ ) || defined(_M_ARM ) || defined( _ARCH_PPC )
1207
1212
1208
1213
/*
1209
1214
I can't easily find documentation to do this as for aarch64, though
@@ -1240,6 +1245,20 @@ uint32_t bli_cpuid_query
1240
1245
char feat_str [ TEMP_BUFFER_SIZE ];
1241
1246
char * r_val ;
1242
1247
1248
+ #ifdef _ARCH_PPC
1249
+ r_val = find_string_in ( "cpu" , proc_str , TEMP_BUFFER_SIZE , pci_str );
1250
+ if ( r_val == NULL ) return VENDOR_IBM ;
1251
+
1252
+ if ( strstr ( proc_str , "POWER7" ) != NULL )
1253
+ * model = MODEL_POWER7 ;
1254
+ else if ( strstr ( proc_str , "POWER9" ) != NULL )
1255
+ * model = MODEL_POWER9 ;
1256
+ else if ( strstr ( proc_str , "POWER10" ) != NULL )
1257
+ * model = MODEL_POWER10 ;
1258
+
1259
+ return VENDOR_IBM ;
1260
+ #endif
1261
+
1243
1262
//printf( "bli_cpuid_query(): beginning search\n" );
1244
1263
1245
1264
// Search /proc/cpuinfo for the 'Processor' entry.
0 commit comments