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