Only use the "avx512vbmi" compiler target when it is actually supported by the compiler.
Signed-off-by: Cian Ferriter <cian.ferri...@intel.com> --- acinclude.m4 | 14 ++++++++++++++ configure.ac | 1 + lib/dpif-netdev-extract-avx512.c | 10 +++++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/acinclude.m4 b/acinclude.m4 index 932ff4693..31033edca 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -100,6 +100,20 @@ AC_DEFUN([OVS_CHECK_AVX512BW_DQ], [ fi ]) +dnl OVS_CHECK_AVX512VBMI +dnl +dnl Checks if compiler supports AVX512VBMI instructions. +AC_DEFUN([OVS_CHECK_AVX512VBMI], [ + OVS_CHECK_CC_OPTION( + [-mavx512vbmi], [ovs_have_cc_mavx512vbmi=yes], + [ovs_have_cc_mavx512vbmi=no]) + AM_CONDITIONAL([HAVE_AVX512VBMI], [test $ovs_have_cc_mavx512vbmi = yes]) + if test "$ovs_have_cc_mavx512vbmi" = yes; then + AC_DEFINE([HAVE_AVX512VBMI], [1], + [Define to 1 if compiler supports AVX512VBMI.]) + fi +]) + dnl OVS_ENABLE_WERROR AC_DEFUN([OVS_ENABLE_WERROR], [AC_ARG_ENABLE( diff --git a/configure.ac b/configure.ac index f849837e0..12b4010e5 100644 --- a/configure.ac +++ b/configure.ac @@ -188,6 +188,7 @@ OVS_CHECK_DPIF_AVX512_DEFAULT OVS_CHECK_MFEX_AUTOVALIDATOR OVS_CHECK_AVX512 OVS_CHECK_AVX512BW_DQ +OVS_CHECK_AVX512VBMI AC_ARG_VAR(KARCH, [Kernel Architecture String]) AC_SUBST(KARCH) diff --git a/lib/dpif-netdev-extract-avx512.c b/lib/dpif-netdev-extract-avx512.c index f36a6eab0..e6807b1f3 100644 --- a/lib/dpif-netdev-extract-avx512.c +++ b/lib/dpif-netdev-extract-avx512.c @@ -110,7 +110,9 @@ _mm512_maskz_permutex2var_epi8_skx(__mmask64 k_mask, /* Wrapper function required to enable ISA. */ static inline __m512i +#if HAVE_AVX512VBMI __attribute__((__target__("avx512vbmi"))) +#endif _mm512_maskz_permutexvar_epi8_wrap(__mmask64 kmask, __m512i idx, __m512i a) { return _mm512_maskz_permutexvar_epi8(kmask, idx, a); @@ -626,10 +628,16 @@ mfex_avx512_process(struct dp_packet_batch *packets, } +#if HAVE_AVX512VBMI +#define VBMI_TARGET __attribute__((__target__("avx512vbmi"))) +#else +#define VBMI_TARGET +#endif + #define DECLARE_MFEX_FUNC(name, profile) \ uint32_t \ __attribute__((__target__("avx512f"))) \ -__attribute__((__target__("avx512vbmi"))) \ +VBMI_TARGET \ mfex_avx512_vbmi_##name(struct dp_packet_batch *packets, \ struct netdev_flow_key *keys, uint32_t keys_size,\ odp_port_t in_port, struct dp_netdev_pmd_thread \ -- 2.25.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev