1184610Salfred/* { dg-do run } */ 2184610Salfred/* { dg-require-effective-target avx2 } */ 3184610Salfred/* { dg-options "-O2 -mavx2" } */ 4184610Salfred 5184610Salfred#include <string.h> 6184610Salfred#include "avx2-check.h" 7184610Salfred 8184610Salfredstatic void 9184610Salfredcompute_psrlvd256 (int *s1, int *s2, int *r) 10184610Salfred{ 11184610Salfred int i, count; 12184610Salfred 13184610Salfred for (i = 0; i < 8; ++i) 14184610Salfred { 15184610Salfred count = s2[i]; 16184610Salfred r[i] = ((unsigned) s1[i]) >> count; 17184610Salfred } 18184610Salfred} 19184610Salfred 20184610Salfredvoid static 21184610Salfredavx2_test (void) 22184610Salfred{ 23184610Salfred union256i_d s1, s2, res; 24184610Salfred int res_ref[8]; 25190754Sthompsa int i, j, sign = 1; 26184610Salfred int fail = 0; 27194677Sthompsa 28194677Sthompsa for (i = 0; i < 10; i++) 29194677Sthompsa { 30194677Sthompsa for (j = 0; j < 8; j++) 31194677Sthompsa { 32194677Sthompsa s1.a[j] = j * i * sign; 33194677Sthompsa s2.a[j] = (j + i) >> 2; 34194677Sthompsa sign = -sign; 35194677Sthompsa } 36194677Sthompsa 37194677Sthompsa res.x = _mm256_srlv_epi32 (s1.x, s2.x); 38194677Sthompsa 39194677Sthompsa compute_psrlvd256 (s1.a, s2.a, res_ref); 40194677Sthompsa 41194677Sthompsa fail += check_union256i_d (res, res_ref); 42194677Sthompsa } 43194677Sthompsa 44194677Sthompsa if (fail != 0) 45235480Savg abort (); 46194677Sthompsa} 47188942Sthompsa