diff --git a/config/a64fx/bli_cntx_init_a64fx.c b/config/a64fx/bli_cntx_init_a64fx.c index 26a1e3860..328426245 100644 --- a/config/a64fx/bli_cntx_init_a64fx.c +++ b/config/a64fx/bli_cntx_init_a64fx.c @@ -58,9 +58,10 @@ void bli_cntx_init_a64fx( cntx_t* cntx ) // Set SVE-512 packing routine. bli_cntx_set_packm_kers ( - 3, + 2, BLIS_PACKM_10XK_KER, BLIS_DOUBLE, bli_dpackm_armsve512_asm_10xk, - BLIS_PACKM_12XK_KER, BLIS_DOUBLE, bli_dpackm_armsve512_int_12xk, + // 12xk is not used and disabled for GCC 8-9 compatibility. + // BLIS_PACKM_12XK_KER, BLIS_DOUBLE, bli_dpackm_armsve512_int_12xk, BLIS_PACKM_16XK_KER, BLIS_DOUBLE, bli_dpackm_armsve512_asm_16xk, cntx ); diff --git a/config/armsve/bli_cntx_init_armsve.c b/config/armsve/bli_cntx_init_armsve.c index 982b7c26e..8124e8474 100644 --- a/config/armsve/bli_cntx_init_armsve.c +++ b/config/armsve/bli_cntx_init_armsve.c @@ -65,6 +65,8 @@ void bli_cntx_init_armsve( cntx_t* cntx ) ); // Set VL-specific packing routines if applicable. + // NOTE: SVE-Intrinsic kernels are used without checking __has_include(). + // Such is ensured at configuration stage for config: armsve. if (m_r_d==16) bli_cntx_set_packm_kers ( diff --git a/kernels/armsve/1m/bli_dpackm_armsve256_int_8xk.c b/kernels/armsve/1m/bli_dpackm_armsve256_int_8xk.c index 6ca5ade89..b83499369 100644 --- a/kernels/armsve/1m/bli_dpackm_armsve256_int_8xk.c +++ b/kernels/armsve/1m/bli_dpackm_armsve256_int_8xk.c @@ -35,11 +35,8 @@ #include "blis.h" -#ifdef __ARM_FEATURE_SVE +#if __has_include() #include -#else -#error "No Arm SVE intrinsics support in compiler" -#endif // __ARM_FEATURE_SVE // assumption: // SVE vector length = 256 bits. @@ -230,3 +227,5 @@ void bli_dpackm_armsve256_int_8xk ); } } + +#endif // __has_include() diff --git a/kernels/armsve/1m/bli_dpackm_armsve512_int_12xk.c b/kernels/armsve/1m/bli_dpackm_armsve512_int_12xk.c index dc3e90e40..c7313eacd 100644 --- a/kernels/armsve/1m/bli_dpackm_armsve512_int_12xk.c +++ b/kernels/armsve/1m/bli_dpackm_armsve512_int_12xk.c @@ -36,11 +36,8 @@ #include "blis.h" #include -#ifdef __ARM_FEATURE_SVE +#if __has_include() #include -#else -#error "No Arm SVE intrinsics support in compiler" -#endif // __ARM_FEATURE_SVE // assumption: // SVE vector length = 512 bits. @@ -357,3 +354,5 @@ void bli_dpackm_armsve512_int_12xk ); } } + +#endif // __has_include() diff --git a/kernels/armsve/bli_kernels_armsve.h b/kernels/armsve/bli_kernels_armsve.h index d05253899..cfaee2b89 100644 --- a/kernels/armsve/bli_kernels_armsve.h +++ b/kernels/armsve/bli_kernels_armsve.h @@ -39,7 +39,10 @@ GEMMSUP_KER_PROT( double, d, gemmsup_rv_armsve_2vx10_unindexed ) GEMMSUP_KER_PROT( double, d, gemmsup_cv_armsve_2vx10_unindexed ) GEMMSUP_KER_PROT( double, d, gemmsup_rv_armsve_10x2v_unindexed ) +#if __has_include() +// Use SVE intrinsics only when supported. PACKM_KER_PROT( double, d, packm_armsve256_int_8xk ) PACKM_KER_PROT( double, d, packm_armsve512_int_12xk ) +#endif PACKM_KER_PROT( double, d, packm_armsve512_asm_16xk ) PACKM_KER_PROT( double, d, packm_armsve512_asm_10xk )