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 0x5 9 10static void 11compute_punpckhwd256 (int *s1, int *s2, int *r) 12{ 13 int i; 14 15 for (i = 0; i < 2; i++) 16 { 17 r[2 * i] = s1[i + 2]; 18 r[2 * i + 1] = s2[i + 2]; 19 20 r[2 * i + 4] = s1[i + 2 + 4]; 21 r[2 * i + 4 + 1] = s2[i + 2 + 4]; 22 } 23} 24 25void static 26avx2_test (void) 27{ 28 union256i_d s1, s2, res; 29 int res_ref[8]; 30 int i, j; 31 int fail = 0; 32 33 for (i = 0; i < 10; i++) 34 { 35 for (j = 0; j < 8; j++) 36 { 37 s1.a[j] = j * i; 38 s2.a[j] = j + 20; 39 } 40 41 res.x = _mm256_unpackhi_epi32 (s1.x, s2.x); 42 43 compute_punpckhwd256 (s1.a, s2.a, res_ref); 44 45 fail += check_union256i_d (res, res_ref); 46 } 47 48 if (fail != 0) 49 abort (); 50} 51