@@ -516,7 +516,7 @@ bool bli_cpuid_is_avx_supported( void )
516516 return is_avx_supported ;
517517}
518518
519- #elif defined(__aarch64__ ) || defined(__arm__ ) || defined(_M_ARM )
519+ #elif defined(__aarch64__ ) || defined(__arm__ ) || defined(_M_ARM ) || defined( _ARCH_PPC )
520520
521521arch_t bli_cpuid_query_id ( void )
522522{
@@ -571,9 +571,14 @@ arch_t bli_cpuid_query_id( void )
571571 return BLIS_ARCH_GENERIC ;
572572 }
573573 }
574- else if ( vendor == VENDOR_UNKNOWN )
574+ else if ( vendor == VENDOR_IBM )
575575 {
576- return BLIS_ARCH_GENERIC ;
576+ if ( model == MODEL_POWER7 )
577+ return BLIS_ARCH_POWER7 ;
578+ else if ( model == MODEL_POWER9 )
579+ return BLIS_ARCH_POWER9 ;
580+ else if ( model == MODEL_POWER10 )
581+ return BLIS_ARCH_POWER10 ;
577582 }
578583
579584 return BLIS_ARCH_GENERIC ;
@@ -1072,7 +1077,7 @@ int vpu_count( void )
10721077 }
10731078}
10741079
1075- #elif defined(__aarch64__ ) || defined(__arm__ ) || defined(_M_ARM )
1080+ #elif defined(__aarch64__ ) || defined(__arm__ ) || defined(_M_ARM ) || defined( _ARCH_PPC )
10761081
10771082#define TEMP_BUFFER_SIZE 200
10781083
@@ -1094,6 +1099,20 @@ uint32_t bli_cpuid_query
10941099 char feat_str [ TEMP_BUFFER_SIZE ];
10951100 char * r_val ;
10961101
1102+ #ifdef _ARCH_PPC
1103+ r_val = find_string_in ( "cpu" , proc_str , TEMP_BUFFER_SIZE , pci_str );
1104+ if ( r_val == NULL ) return VENDOR_IBM ;
1105+
1106+ if ( strstr ( proc_str , "POWER7" ) != NULL )
1107+ * model = MODEL_POWER7 ;
1108+ else if ( strstr ( proc_str , "POWER9" ) != NULL )
1109+ * model = MODEL_POWER9 ;
1110+ else if ( strstr ( proc_str , "POWER10" ) != NULL )
1111+ * model = MODEL_POWER10 ;
1112+
1113+ return VENDOR_IBM ;
1114+ #endif
1115+
10971116 //printf( "bli_cpuid_query(): beginning search\n" );
10981117
10991118 // Search /proc/cpuinfo for the 'Processor' entry.
0 commit comments