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

Reply via email to