| @@ -99,6 +99,11 @@ extern gotoblas_t gotoblas_NEOVERSEN1; | |||||
| #else | #else | ||||
| #define gotoblas_NEOVERSEN1 gotoblas_ARMV8 | #define gotoblas_NEOVERSEN1 gotoblas_ARMV8 | ||||
| #endif | #endif | ||||
| #ifdef DYN_CORTEX_A55 | |||||
| extern gotoblas_t gotoblas_CORTEXA55; | |||||
| #else | |||||
| #define gotoblas_NEOVERSEN1 gotoblas_ARMV8 | |||||
| #endif | |||||
| #else | #else | ||||
| extern gotoblas_t gotoblas_CORTEXA53; | extern gotoblas_t gotoblas_CORTEXA53; | ||||
| extern gotoblas_t gotoblas_CORTEXA57; | extern gotoblas_t gotoblas_CORTEXA57; | ||||
| @@ -111,11 +116,12 @@ extern gotoblas_t gotoblas_TSV110; | |||||
| extern gotoblas_t gotoblas_EMAG8180; | extern gotoblas_t gotoblas_EMAG8180; | ||||
| extern gotoblas_t gotoblas_NEOVERSEN1; | extern gotoblas_t gotoblas_NEOVERSEN1; | ||||
| extern gotoblas_t gotoblas_THUNDERX3T110; | extern gotoblas_t gotoblas_THUNDERX3T110; | ||||
| 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 NUM_CORETYPES 12 | |||||
| #define NUM_CORETYPES 13 | |||||
| /* | /* | ||||
| * In case asm/hwcap.h is outdated on the build system, make sure | * In case asm/hwcap.h is outdated on the build system, make sure | ||||
| @@ -142,6 +148,7 @@ static char *corename[] = { | |||||
| "emag8180", | "emag8180", | ||||
| "neoversen1", | "neoversen1", | ||||
| "thunderx3t110", | "thunderx3t110", | ||||
| "cortexa55", | |||||
| "unknown" | "unknown" | ||||
| }; | }; | ||||
| @@ -158,6 +165,7 @@ char *gotoblas_corename(void) { | |||||
| if (gotoblas == &gotoblas_EMAG8180) return corename[ 9]; | if (gotoblas == &gotoblas_EMAG8180) return corename[ 9]; | ||||
| if (gotoblas == &gotoblas_NEOVERSEN1) return corename[10]; | if (gotoblas == &gotoblas_NEOVERSEN1) return corename[10]; | ||||
| if (gotoblas == &gotoblas_THUNDERX3T110) return corename[11]; | if (gotoblas == &gotoblas_THUNDERX3T110) return corename[11]; | ||||
| if (gotoblas == &gotoblas_CORTEXA55) return corename[12]; | |||||
| return corename[NUM_CORETYPES]; | return corename[NUM_CORETYPES]; | ||||
| } | } | ||||
| @@ -189,6 +197,7 @@ static gotoblas_t *force_coretype(char *coretype) { | |||||
| case 9: return (&gotoblas_EMAG8180); | case 9: return (&gotoblas_EMAG8180); | ||||
| case 10: return (&gotoblas_NEOVERSEN1); | case 10: return (&gotoblas_NEOVERSEN1); | ||||
| case 11: return (&gotoblas_THUNDERX3T110); | case 11: return (&gotoblas_THUNDERX3T110); | ||||
| case 12: return (&gotoblas_CORTEXA55); | |||||
| } | } | ||||
| snprintf(message, 128, "Core not found: %s\n", coretype); | snprintf(message, 128, "Core not found: %s\n", coretype); | ||||
| openblas_warning(1, message); | openblas_warning(1, message); | ||||
| @@ -247,6 +256,8 @@ static gotoblas_t *get_coretype(void) { | |||||
| return &gotoblas_CORTEXA73; | return &gotoblas_CORTEXA73; | ||||
| case 0xd0c: // Neoverse N1 | case 0xd0c: // Neoverse N1 | ||||
| return &gotoblas_NEOVERSEN1; | return &gotoblas_NEOVERSEN1; | ||||
| case 0xd05: // Cortex A55 | |||||
| return &gotoblas_CORTEXA55; | |||||
| } | } | ||||
| break; | break; | ||||
| case 0x42: // Broadcom | case 0x42: // Broadcom | ||||