| @@ -137,6 +137,8 @@ extern gotoblas_t gotoblas_CORTEXA55; | |||||
| #endif | #endif | ||||
| extern void openblas_warning(int verbose, const char * msg); | extern void openblas_warning(int verbose, const char * msg); | ||||
| #define FALLBACK_VERBOSE 1 | |||||
| #define NEOVERSEN1_FALLBACK "OpenBLAS : Your OS does not support SVE instructions. OpenBLAS is using Neoverse N1 kernels as a fallback, which may give poorer performance.\n" | |||||
| #define NUM_CORETYPES 13 | #define NUM_CORETYPES 13 | ||||
| @@ -284,14 +286,16 @@ static gotoblas_t *get_coretype(void) { | |||||
| return &gotoblas_NEOVERSEN1; | return &gotoblas_NEOVERSEN1; | ||||
| #ifndef NO_SVE | #ifndef NO_SVE | ||||
| case 0xd49: | case 0xd49: | ||||
| if (!(getauxval(AT_HWCAP) & HWCAP_SVE)) | |||||
| if (!(getauxval(AT_HWCAP) & HWCAP_SVE)) { | |||||
| openblas_warning(FALLBACK_VERBOSE, NEOVERSEN1_FALLBACK); | |||||
| return &gotoblas_NEOVERSEN1; | return &gotoblas_NEOVERSEN1; | ||||
| else | |||||
| } else | |||||
| return &gotoblas_NEOVERSEN2; | return &gotoblas_NEOVERSEN2; | ||||
| case 0xd40: | case 0xd40: | ||||
| if (!(getauxval(AT_HWCAP) & HWCAP_SVE)) | |||||
| if (!(getauxval(AT_HWCAP) & HWCAP_SVE)) { | |||||
| openblas_warning(FALLBACK_VERBOSE, NEOVERSEN1_FALLBACK); | |||||
| return &gotoblas_NEOVERSEN1; | return &gotoblas_NEOVERSEN1; | ||||
| else | |||||
| }else | |||||
| return &gotoblas_NEOVERSEV1; | return &gotoblas_NEOVERSEV1; | ||||
| #endif | #endif | ||||
| case 0xd05: // Cortex A55 | case 0xd05: // Cortex A55 | ||||