@@ -459,7 +459,7 @@ bool bli_cpuid_is_bulldozer
459459 return TRUE;
460460}
461461
462- #elif defined(__aarch64__ ) || defined(__arm__ ) || defined(_M_ARM )
462+ #elif defined(__aarch64__ ) || defined(__arm__ ) || defined(_M_ARM ) || defined( _ARCH_PPC )
463463
464464arch_t bli_cpuid_query_id ( void )
465465{
@@ -514,9 +514,14 @@ arch_t bli_cpuid_query_id( void )
514514 return BLIS_ARCH_GENERIC ;
515515 }
516516 }
517- else if ( vendor == VENDOR_UNKNOWN )
517+ else if ( vendor == VENDOR_IBM )
518518 {
519- return BLIS_ARCH_GENERIC ;
519+ if ( model == MODEL_POWER7 )
520+ return BLIS_ARCH_POWER7 ;
521+ else if ( model == MODEL_POWER9 )
522+ return BLIS_ARCH_POWER9 ;
523+ else if ( model == MODEL_POWER10 )
524+ return BLIS_ARCH_POWER10 ;
520525 }
521526
522527 return BLIS_ARCH_GENERIC ;
@@ -1015,7 +1020,7 @@ int vpu_count( void )
10151020 }
10161021}
10171022
1018- #elif defined(__aarch64__ ) || defined(__arm__ ) || defined(_M_ARM )
1023+ #elif defined(__aarch64__ ) || defined(__arm__ ) || defined(_M_ARM ) || defined( _ARCH_PPC )
10191024
10201025#define TEMP_BUFFER_SIZE 200
10211026
@@ -1037,6 +1042,20 @@ uint32_t bli_cpuid_query
10371042 char feat_str [ TEMP_BUFFER_SIZE ];
10381043 char * r_val ;
10391044
1045+ #ifdef _ARCH_PPC
1046+ r_val = find_string_in ( "cpu" , proc_str , TEMP_BUFFER_SIZE , pci_str );
1047+ if ( r_val == NULL ) return VENDOR_IBM ;
1048+
1049+ if ( strstr ( proc_str , "POWER7" ) != NULL )
1050+ * model = MODEL_POWER7 ;
1051+ else if ( strstr ( proc_str , "POWER9" ) != NULL )
1052+ * model = MODEL_POWER9 ;
1053+ else if ( strstr ( proc_str , "POWER10" ) != NULL )
1054+ * model = MODEL_POWER10 ;
1055+
1056+ return VENDOR_IBM ;
1057+ #endif
1058+
10401059 //printf( "bli_cpuid_query(): beginning search\n" );
10411060
10421061 // Search /proc/cpuinfo for the 'Processor' entry.
0 commit comments