From: Michel Normand Subject: openblas ppc64be up2 p8 Date: Wed, 03 Feb 2021 15:39:25 +0100 openblas ppc64be up2 p8 because: * openblas build failed for ppc64 (BE) in openSUSE since version 0.3.12 * ppc64 (BE) not supported by IBM after P8. Signed-off-by: Michel Normand --- Makefile.system | 10 +++++++--- driver/others/dynamic_power.c | 11 +++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) Index: OpenBLAS-0.3.14/driver/others/dynamic_power.c =================================================================== --- OpenBLAS-0.3.14.orig/driver/others/dynamic_power.c +++ OpenBLAS-0.3.14/driver/others/dynamic_power.c @@ -3,6 +3,7 @@ extern gotoblas_t gotoblas_POWER6; extern gotoblas_t gotoblas_POWER8; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ #if (!defined __GNUC__) || ( __GNUC__ >= 6) extern gotoblas_t gotoblas_POWER9; #endif @@ -13,6 +14,7 @@ extern gotoblas_t gotoblas_POWER9; #ifdef HAVE_P10_SUPPORT extern gotoblas_t gotoblas_POWER10; #endif +#endif extern void openblas_warning(int verbose, const char *msg); @@ -31,12 +33,14 @@ char *gotoblas_corename(void) { if (gotoblas == &gotoblas_POWER6) return corename[1]; #endif if (gotoblas == &gotoblas_POWER8) return corename[2]; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ #if (!defined __GNUC__) || ( __GNUC__ >= 6) if (gotoblas == &gotoblas_POWER9) return corename[3]; #endif #ifdef HAVE_P10_SUPPORT if (gotoblas == &gotoblas_POWER10) return corename[4]; #endif +#endif return corename[0]; } @@ -200,6 +204,10 @@ static gotoblas_t *get_coretype(void) { #endif if (__builtin_cpu_is("power8")) return &gotoblas_POWER8; + /* Fall back to the POWER8 implementation for big endian */ +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + return &gotoblas_POWER8; +#else #if (!defined __GNUC__) || ( __GNUC__ >= 6) if (__builtin_cpu_is("power9")) return &gotoblas_POWER9; @@ -213,6 +221,7 @@ static gotoblas_t *get_coretype(void) { if (__builtin_cpu_is("power10")) return &gotoblas_POWER9; #endif +#endif return NULL; } @@ -237,12 +246,14 @@ static gotoblas_t *force_coretype(char * case 1: return (&gotoblas_POWER6); #endif case 2: return (&gotoblas_POWER8); +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ #if (!defined __GNUC__) || ( __GNUC__ >= 6) case 3: return (&gotoblas_POWER9); #endif #ifdef HAVE_P10_SUPPORT case 4: return (&gotoblas_POWER10); #endif +#endif default: return NULL; } snprintf(message, 128, "Core not found: %s\n", coretype); Index: OpenBLAS-0.3.14/Makefile.system =================================================================== --- OpenBLAS-0.3.14.orig/Makefile.system +++ OpenBLAS-0.3.14/Makefile.system @@ -673,6 +673,9 @@ ifeq ($(ARCH), power) ifneq ($(C_COMPILER), PGI) DYNAMIC_CORE = POWER6 DYNAMIC_CORE += POWER8 +ifeq ($(__BYTE_ORDER__),__ORDER_BIG_ENDIAN__) +$(info, OpenBLAS: for big endian limit to POWER8 kernels.) +else ifneq ($(C_COMPILER), GCC) DYNAMIC_CORE += POWER9 DYNAMIC_CORE += POWER10 @@ -697,11 +700,12 @@ else $(info, OpenBLAS: Your gcc version is too old to build the POWER10 kernels.) endif endif -else +endif # __ORDER_BIG_ENDIAN__ +else # C_COMPILER PGI DYNAMIC_CORE = POWER8 DYNAMIC_CORE += POWER9 -endif -endif +endif # C_COMPILER PGI +endif # ARCH power # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty ifndef DYNAMIC_CORE