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