1/* { dg-do run } */ 2/* { dg-options "-O2 -mavx512f" } */ 3/* { dg-require-effective-target avx512f } */ 4 5#include "avx512f-check.h" 6 7static __m512d 8__attribute__ ((noinline)) 9foo (double x, int i) 10{ 11 switch (i) 12 { 13 case 7: 14 return _mm512_set_pd (x, 1, 1, 1, 1, 1, 1, 1); 15 case 6: 16 return _mm512_set_pd (1, x, 1, 1, 1, 1, 1, 1); 17 case 5: 18 return _mm512_set_pd (1, 1, x, 1, 1, 1, 1, 1); 19 case 4: 20 return _mm512_set_pd (1, 1, 1, x, 1, 1, 1, 1); 21 case 3: 22 return _mm512_set_pd (1, 1, 1, 1, x, 1, 1, 1); 23 case 2: 24 return _mm512_set_pd (1, 1, 1, 1, 1, x, 1, 1); 25 case 1: 26 return _mm512_set_pd (1, 1, 1, 1, 1, 1, x, 1); 27 case 0: 28 return _mm512_set_pd (1, 1, 1, 1, 1, 1, 1, x); 29 default: 30 abort (); 31 } 32} 33 34static __m512d 35__attribute__ ((noinline)) 36foo_r (double x, int i) 37{ 38 switch (i) 39 { 40 case 0: 41 return _mm512_setr_pd (x, 1, 1, 1, 1, 1, 1, 1); 42 case 1: 43 return _mm512_setr_pd (1, x, 1, 1, 1, 1, 1, 1); 44 case 2: 45 return _mm512_setr_pd (1, 1, x, 1, 1, 1, 1, 1); 46 case 3: 47 return _mm512_setr_pd (1, 1, 1, x, 1, 1, 1, 1); 48 case 4: 49 return _mm512_setr_pd (1, 1, 1, 1, x, 1, 1, 1); 50 case 5: 51 return _mm512_setr_pd (1, 1, 1, 1, 1, x, 1, 1); 52 case 6: 53 return _mm512_setr_pd (1, 1, 1, 1, 1, 1, x, 1); 54 case 7: 55 return _mm512_setr_pd (1, 1, 1, 1, 1, 1, 1, x); 56 default: 57 abort (); 58 } 59} 60 61static void 62avx512f_test (void) 63{ 64 double e = -3.234; 65 double v[8]; 66 union512d res; 67 int i, j; 68 69 for (i = 0; i < 8; i++) 70 { 71 for (j = 0; j < 8; j++) 72 v[j] = 1; 73 v[i] = e; 74 75 res.x = foo (e, i); 76 77 if (check_union512d (res, v)) 78 abort (); 79 80 res.x = _mm512_setzero_pd (); 81 82 res.x = foo_r (e, i); 83 84 if (check_union512d (res, v)) 85 abort (); 86 } 87} 88