1 #include "avx2-check.h"
2 
3 #define SIZE 256
4 
5 TYPE a[SIZE];
6 TYPE b[SIZE];
7 TYPE c[SIZE];
8 volatile TYPE c_ref[SIZE];
9 extern int memcmp (const void *, const void *, size_t);
10 
11 __attribute__ ((__noinline__))
12 void
gen_pop()13 gen_pop ()
14 {
15   int i;
16   for (i = 0; i < SIZE; ++i)
17 #ifdef BIN_OP
18     c[i] = BIN_OP (a[i], b[i]);
19 #else /*  Must be UN_OP */
20     c[i] = UN_OP (a[i]);
21 #endif /*  BIN_OP */
22 }
23 
24 void
check_pop()25 check_pop ()
26 {
27   int i;
28   for (i = 0; i < SIZE; ++i)
29 #ifdef BIN_OP
30     c_ref[i] = BIN_OP (a[i], b[i]);
31 #else /*  Must be UN_OP */
32     c_ref[i] = UN_OP (a[i]);
33 #endif /*  BIN_OP */
34 }
35 
36 void static
avx2_test(void)37 avx2_test (void)
38 {
39   int i, j;
40   for (i = 0; i < 4; ++i )
41     {
42       for ( j = 0; j < SIZE; ++j )
43 	{
44 	  a[i] = i * i + i;
45 	  b[i] = i * i * i;
46 	}
47 
48       gen_pop ();
49       check_pop ();
50 
51       /* We need to cast away volatility from c_ref here in order to eliminate
52 	 warning if libc version of memcpy is used here.  */
53       if (memcmp (c, (void *) c_ref, SIZE * sizeof (TYPE)))
54 	abort();
55     }
56 }
57