1/* { dg-do run } */
2/* { dg-require-effective-target avx2 } */
3/* { dg-options "-O2 -mavx2" } */
4
5#include "ssse3-vals.h"
6#include "avx2-check.h"
7
8/* Routine to manually compute the results */
9static void
10compute_pabs256 (int *i1, short *r)
11{
12  short *b1 = (short *) i1;
13  int i;
14
15  for (i = 0; i < 16; i++)
16    if (b1[i] < 0)
17      r[i] = -b1[i];
18    else
19      r[i] = b1[i];
20}
21
22static void
23avx2_test (void)
24{
25  int i;
26  short ck[16];
27  int fail = 0;
28
29  union256i_w s, d;
30
31  for (i = 0; i < 256; ++i)
32    {
33      /* Using only first 2 bytes of int */
34      /* Recompute the results for 256-bits */
35      compute_pabs256 (&vals[i], ck);
36
37      s.x = _mm256_loadu_si256 ((__m256i *) & vals[i]);
38
39      /* Run the 256-bit tests */
40      d.x = _mm256_abs_epi16 (s.x);
41
42      fail += check_union256i_w (d, ck);
43    }
44
45  if (fail != 0)
46    abort ();
47}
48