1/* { dg-do run } */ 2/* { dg-options "-O2 -mavx512f" } */ 3/* { dg-require-effective-target avx512f } */ 4 5#define AVX512F 6 7#include "avx512f-helper.h" 8 9#define SIZE (AVX512F_LEN / 32) 10#include "avx512f-mask-type.h" 11 12void 13TEST (void) 14{ 15 UNION_TYPE (AVX512F_LEN_HALF, i_w) val; 16 UNION_TYPE (AVX512F_LEN,) res1,res2,res3; 17 MASK_TYPE mask = MASK_VALUE; 18 float exp[SIZE]; 19 int i; 20 21 for (i = 0; i < SIZE; i++) 22 { 23 res1.a[i] = DEFAULT_VALUE; 24 res2.a[i] = DEFAULT_VALUE; 25 res3.a[i] = DEFAULT_VALUE; 26 } 27 28 exp[0] = 1; 29 exp[1] = 2; 30 exp[2] = 4; 31 exp[3] = 8; 32#if AVX512F_LEN > 128 33 exp[4] = -1; 34 exp[5] = -2; 35 exp[6] = -4; 36 exp[7] = -8; 37#endif 38#if AVX512F_LEN > 256 39 exp[8] = 1; 40 exp[9] = 2; 41 exp[10] = 4; 42 exp[11] = 8; 43 exp[12] = -1; 44 exp[13] = -2; 45 exp[14] = -4; 46 exp[15] = -8; 47#endif 48 49 val.a[0] = 0x3c00; 50 val.a[1] = 0x4000; 51 val.a[2] = 0x4400; 52 val.a[3] = 0x4800; 53#if AVX512F_LEN > 128 54 val.a[4] = 0xbc00; 55 val.a[5] = 0xc000; 56 val.a[6] = 0xc400; 57 val.a[7] = 0xc800; 58#endif 59#if AVX512F_LEN > 256 60 val.a[8] = 0x3c00; 61 val.a[9] = 0x4000; 62 val.a[10] = 0x4400; 63 val.a[11] = 0x4800; 64 val.a[12] = 0xbc00; 65 val.a[13] = 0xc000; 66 val.a[14] = 0xc400; 67 val.a[15] = 0xc800; 68#endif 69 70 res1.x = INTRINSIC (_cvtph_ps) (val.x); 71 res2.x = INTRINSIC (_mask_cvtph_ps) (res2.x, mask, val.x); 72 res3.x = INTRINSIC (_maskz_cvtph_ps) (mask, val.x); 73 74 if (UNION_CHECK (AVX512F_LEN,) (res1, exp)) 75 abort (); 76 77 MASK_MERGE () (exp, mask, SIZE); 78 if (UNION_CHECK (AVX512F_LEN,) (res2, exp)) 79 abort (); 80 81 MASK_ZERO () (exp, mask, SIZE); 82 if (UNION_CHECK (AVX512F_LEN,) (res3, exp)) 83 abort (); 84} 85