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