1/* { dg-do run } */ 2/* { dg-require-effective-target avx } */ 3/* { dg-options "-O2 -mavx" } */ 4 5#include "avx-check.h" 6 7#ifndef MASK 8#define MASK 203 9#endif 10 11float select4(const float *src, unsigned int control) 12{ 13 switch(control) { 14 case 0: 15 return src[0]; 16 case 1: 17 return src[1]; 18 case 2: 19 return src[2]; 20 case 3: 21 return src[3]; 22 } 23 return -1; 24} 25 26 27void static 28avx_test (void) 29{ 30 union256 u, s1, s2; 31 float e [8]; 32 33 s1.x = _mm256_set_ps (1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8); 34 s2.x = _mm256_set_ps (2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8); 35 u.x = _mm256_shuffle_ps (s1.x, s2.x, MASK); 36 37 38 e[0] = select4(s1.a, (MASK >> 0) & 0x3); 39 e[1] = select4(s1.a, (MASK >> 2) & 0x3); 40 e[2] = select4(s2.a, (MASK >> 4) & 0x3); 41 e[3] = select4(s2.a, (MASK >> 6) & 0x3); 42 e[4] = select4(s1.a+4, (MASK >> 0) & 0x3); 43 e[5] = select4(s1.a+4, (MASK >> 2) & 0x3); 44 e[6] = select4(s2.a+4, (MASK >> 4) & 0x3); 45 e[7] = select4(s2.a+4, (MASK >> 6) & 0x3); 46 47 if (check_union256 (u, e)) 48 abort (); 49} 50