| @@ -147,6 +147,9 @@ extern void openblas_warning(int verbose, const char * msg); | |||||
| #ifndef HWCAP_CPUID | #ifndef HWCAP_CPUID | ||||
| #define HWCAP_CPUID (1 << 11) | #define HWCAP_CPUID (1 << 11) | ||||
| #endif | #endif | ||||
| #ifndef HWCAP_SVE | |||||
| #define HWCAP_SVE (1 << 22) | |||||
| #endif | |||||
| #define get_cpu_ftr(id, var) ({ \ | #define get_cpu_ftr(id, var) ({ \ | ||||
| __asm__ __volatile__ ("mrs %0, "#id : "=r" (var)); \ | __asm__ __volatile__ ("mrs %0, "#id : "=r" (var)); \ | ||||
| @@ -281,9 +284,15 @@ static gotoblas_t *get_coretype(void) { | |||||
| return &gotoblas_NEOVERSEN1; | return &gotoblas_NEOVERSEN1; | ||||
| #ifndef NO_SVE | #ifndef NO_SVE | ||||
| case 0xd49: | case 0xd49: | ||||
| return &gotoblas_NEOVERSEN2; | |||||
| if (!(getauxval(AT_HWCAP) & HWCAP_SVE)) | |||||
| return &gotoblas_NEOVERSEN1; | |||||
| else | |||||
| return &gotoblas_NEOVERSEN2; | |||||
| case 0xd40: | case 0xd40: | ||||
| return &gotoblas_NEOVERSEV1; | |||||
| if (!(getauxval(AT_HWCAP) & HWCAP_SVE)) | |||||
| return &gotoblas_NEOVERSEN1; | |||||
| else | |||||
| return &gotoblas_NEOVERSEV1; | |||||
| #endif | #endif | ||||
| case 0xd05: // Cortex A55 | case 0xd05: // Cortex A55 | ||||
| return &gotoblas_CORTEXA55; | return &gotoblas_CORTEXA55; | ||||