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.25/driver/others/dynamic_power.c =================================================================== --- OpenBLAS-0.3.25.orig/driver/others/dynamic_power.c +++ OpenBLAS-0.3.25/driver/others/dynamic_power.c @@ -3,12 +3,14 @@ extern gotoblas_t gotoblas_POWER6; extern gotoblas_t gotoblas_POWER8; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ #if ((!defined __GNUC__) || ( __GNUC__ >= 6)) || defined(__clang__) extern gotoblas_t gotoblas_POWER9; #endif #ifdef HAVE_P10_SUPPORT extern gotoblas_t gotoblas_POWER10; #endif +#endif extern void openblas_warning(int verbose, const char *msg); @@ -28,11 +30,13 @@ char *gotoblas_corename(void) { #endif if (gotoblas == &gotoblas_POWER8) return corename[2]; #if ((!defined __GNUC__) || ( __GNUC__ >= 6)) || defined(__clang__) +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ if (gotoblas == &gotoblas_POWER9) return corename[3]; #endif #ifdef HAVE_P10_SUPPORT if (gotoblas == &gotoblas_POWER10) return corename[4]; #endif +#endif return corename[0]; } @@ -243,6 +247,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)) || defined(__clang__) if (__builtin_cpu_is("power9")) return &gotoblas_POWER9; @@ -260,6 +268,7 @@ static gotoblas_t *get_coretype(void) { if (__builtin_cpu_is("power10")) return &gotoblas_POWER9; #endif +#endif return NULL; } @@ -284,12 +293,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)) || defined(__clang__) 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.25/Makefile.system =================================================================== --- OpenBLAS-0.3.25.orig/Makefile.system +++ OpenBLAS-0.3.25/Makefile.system @@ -748,6 +748,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 @@ -776,11 +779,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