1/* { dg-do run } */ 2/* { dg-require-effective-target avx } */ 3/* { dg-options "-O2 -mavx" } */ 4 5#include "avx-check.h" 6 7static __m256 8__attribute__((noinline)) 9foo (float x, int i) 10{ 11 switch (i) 12 { 13 case 7: 14 return _mm256_set_ps (x, 0, 0, 0, 0, 0, 0, 0); 15 case 6: 16 return _mm256_set_ps (0, x, 0, 0, 0, 0, 0, 0); 17 case 5: 18 return _mm256_set_ps (0, 0, x, 0, 0, 0, 0, 0); 19 case 4: 20 return _mm256_set_ps (0, 0, 0, x, 0, 0, 0, 0); 21 case 3: 22 return _mm256_set_ps (0, 0, 0, 0, x, 0, 0, 0); 23 case 2: 24 return _mm256_set_ps (0, 0, 0, 0, 0, x, 0, 0); 25 case 1: 26 return _mm256_set_ps (0, 0, 0, 0, 0, 0, x, 0); 27 case 0: 28 return _mm256_set_ps (0, 0, 0, 0, 0, 0, 0, x); 29 default: 30 abort (); 31 } 32} 33 34static void 35avx_test (void) 36{ 37 float e = -3.234; 38 float v[8]; 39 union256 u; 40 int i, j; 41 42 for (i = 0; i < ARRAY_SIZE (v); i++) 43 { 44 for (j = 0; j < ARRAY_SIZE (v); j++) 45 v[j] = 0; 46 v[i] = e; 47 u.x = foo (e, i); 48 if (check_union256 (u, v)) 49 abort (); 50 } 51} 52