Update concepts branch to revision 131834
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / sse4_1-ptest-2.c
blob5343dd242388fbeebea8850b22bf067d92fe4612
1 /* { dg-do run } */
2 /* { dg-require-effective-target sse4 } */
3 /* { dg-options "-O2 -msse4.1" } */
5 #include "sse4_1-check.h"
7 #include <smmintrin.h>
9 static int
10 make_ptestnzc (__m128i m, __m128i v)
12 union
14 __m128i x;
15 unsigned char c[16];
16 } val, mask;
17 int i, z, c;
19 mask.x = m;
20 val.x = v;
22 z = c = 1;
23 for (i = 0; i < 16; i++)
25 if ((mask.c[i] & val.c[i]))
26 z = 0;
27 if ((~mask.c[i] & val.c[i]))
28 c = 0;
31 return (z == 0 && c == 0) ? 1 : 0;
34 static void
35 sse4_1_test (void)
37 union
39 __m128i x;
40 unsigned int i[4];
41 } val[4];
42 int i, j, l;
43 int res[32];
45 val[0].i[0] = 0x11111111;
46 val[0].i[1] = 0x00000000;
47 val[0].i[2] = 0x00000000;
48 val[0].i[3] = 0x11111111;
50 val[1].i[0] = 0x00000000;
51 val[1].i[1] = 0x11111111;
52 val[1].i[2] = 0x11111111;
53 val[1].i[3] = 0x00000000;
55 val[2].i[0] = 0;
56 val[2].i[1] = 0;
57 val[2].i[2] = 0;
58 val[2].i[3] = 0;
60 val[3].i[0] = 0xffffffff;
61 val[3].i[1] = 0xffffffff;
62 val[3].i[2] = 0xffffffff;
63 val[3].i[3] = 0xffffffff;
65 l = 0;
66 for(i = 0; i < 4; i++)
67 for(j = 0; j < 4; j++)
69 res[l++] = _mm_testnzc_si128 (val[j].x, val[i].x);
70 res[l++] = _mm_testnzc_si128 (val[j].x, val[i].x);
73 l = 0;
74 for(i = 0; i < 4; i++)
75 for(j = 0; j < 4; j++)
77 if (res[l++] != make_ptestnzc (val[j].x, val[i].x))
78 abort ();
79 if (res[l++] != make_ptestnzc (val[j].x, val[i].x))
80 abort ();
83 if (res[2] != _mm_testnzc_si128 (val[1].x, val[0].x))
84 abort ();
86 if (res[3] != _mm_testnzc_si128 (val[1].x, val[0].x))
87 abort ();