summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/i386/avx512f-helper.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.target/i386/avx512f-helper.h')
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-helper.h47
1 files changed, 42 insertions, 5 deletions
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-helper.h b/gcc/testsuite/gcc.target/i386/avx512f-helper.h
index 9beabdf5e43..04a1a89da51 100644
--- a/gcc/testsuite/gcc.target/i386/avx512f-helper.h
+++ b/gcc/testsuite/gcc.target/i386/avx512f-helper.h
@@ -1,16 +1,25 @@
/* This file is used to reduce a number of runtime tests for AVX512F
- instructions. Idea is to create one file per instruction -
+ and AVX512VL instructions. Idea is to create one file per instruction -
avx512f-insn-2.c - using defines from this file instead of intrinsic
name, vector length etc. Then dg-options are set with appropriate
-Dwhatever options in that .c file producing tests for specific
length. */
-#if defined (AVX512F)
+#ifndef AVX512F_HELPER_INCLUDED
+#define AVX512F_HELPER_INCLUDED
+
+#if defined (AVX512F) && !defined (AVX512VL)
#include "avx512f-check.h"
#elif defined (AVX512ER)
#include "avx512er-check.h"
#elif defined (AVX512CD)
#include "avx512cd-check.h"
+#elif defined (AVX512DQ)
+#include "avx512dq-check.h"
+#elif defined (AVX512BW)
+#include "avx512bw-check.h"
+#elif defined (AVX512VL)
+#include "avx512vl-check.h"
#endif
/* Macros expansion. */
@@ -73,8 +82,7 @@ MAKE_MASK_ZERO(i_uq, unsigned long long)
#define MASK_ZERO(TYPE) zero_masking_##TYPE
-/* Intrinsic being tested. */
-#define INTRINSIC(NAME) EVAL(_mm, AVX512F_LEN, NAME)
+
/* Unions used for testing (for example union512d, union256d etc.). */
#define UNION_TYPE(SIZE, NAME) EVAL(union, SIZE, NAME)
/* Corresponding union check. */
@@ -89,12 +97,17 @@ MAKE_MASK_ZERO(i_uq, unsigned long long)
/* Function which calculates result. */
#define CALC EVAL(calc_, AVX512F_LEN,)
+#ifndef AVX512VL
#define AVX512F_LEN 512
#define AVX512F_LEN_HALF 256
+void test_512 ();
+#endif
void test_512 ();
+void test_256 ();
+void test_128 ();
-#if defined (AVX512F)
+#if defined (AVX512F) && !defined (AVX512VL)
void
avx512f_test (void) { test_512 (); }
#elif defined (AVX512CD)
@@ -103,4 +116,28 @@ avx512cd_test (void) { test_512 (); }
#elif defined (AVX512ER)
void
avx512er_test (void) { test_512 (); }
+#elif defined (AVX512DQ)
+void
+avx512dq_test (void) { test_512 (); }
+#elif defined (AVX512BW)
+void
+avx512bw_test (void) { test_512 (); }
+#elif defined (AVX512VL)
+void
+avx512vl_test (void) { test_256 (); test_128 (); }
+#endif
+
+#endif /* AVX512F_HELPER_INCLUDED */
+
+/* Intrinsic being tested. It has different deffinitions,
+ depending on AVX512F_LEN, so it's outside include guards
+ and in undefed away to silence warnings. */
+#if defined INTRINSIC
+#undef INTRINSIC
+#endif
+
+#if AVX512F_LEN != 128
+#define INTRINSIC(NAME) EVAL(_mm, AVX512F_LEN, NAME)
+#else
+#define INTRINSIC(NAME) _mm ## NAME
#endif