diff options
Diffstat (limited to 'gcc/testsuite/gcc.target/i386/avx512f-helper.h')
-rw-r--r-- | gcc/testsuite/gcc.target/i386/avx512f-helper.h | 47 |
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 |