1/* { dg-do run } */ 2/* { dg-require-effective-target avx2 } */ 3/* { dg-options "-O2 -mavx2" } */ 4 5#include <string.h> 6#include "avx2-check.h" 7 8#define N 0xec 9 10static void 11compute_pshuflw256 (short *s1, unsigned char imm, short *r) 12{ 13 int i; 14 15 for (i = 0; i < 4; i++) 16 { 17 r[i] = s1[(imm >> (2 * i)) & 3]; 18 r[i + 8] = s1[((imm >> (2 * i)) & 3) + 8]; 19 } 20 21 for (i = 4; i < 8; i++) 22 { 23 r[i] = s1[i]; 24 r[i + 8] = s1[i + 8]; 25 } 26} 27 28void static 29avx2_test (void) 30{ 31 union256i_w s1, res; 32 short res_ref[16]; 33 int i, j, sign = 1; 34 int fail = 0; 35 36 for (i = 1; i < 10; i++) 37 { 38 for (j = 0; j < 16; j++) 39 { 40 s1.a[j] = j * i * sign; 41 sign = -sign; 42 } 43 44 res.x = _mm256_shufflelo_epi16 (s1.x, N); 45 compute_pshuflw256 (s1.a, N, res_ref); 46 47 fail += check_union256i_w (res, res_ref); 48 } 49 50 if (fail != 0) 51 abort (); 52} 53