c++: normalizing ttp constraints [PR115656]
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / sse4_1-ptest-1.c
blobe4c85beec13d199545844b86f8e267ab36a83832
1 /* { dg-do run } */
2 /* { dg-require-effective-target p8vector_hw } */
3 /* { dg-options "-O2 -mvsx -Wno-psabi" } */
4 /* { dg-additional-options "-mdejagnu-cpu=power8" { target { ! has_arch_pwr8 } } } */
6 #ifndef CHECK_H
7 #define CHECK_H "sse4_1-check.h"
8 #endif
10 #ifndef TEST
11 #define TEST sse4_1_test
12 #endif
14 #include CHECK_H
16 #include <smmintrin.h>
18 static int
19 make_ptestz (__m128i m, __m128i v)
21 union
23 __m128i x;
24 unsigned char c[16];
25 } val, mask;
26 int i, z;
28 mask.x = m;
29 val.x = v;
31 z = 1;
32 for (i = 0; i < 16; i++)
33 if ((mask.c[i] & val.c[i]))
35 z = 0;
36 break;
38 return z;
41 static int
42 make_ptestc (__m128i m, __m128i v)
44 union
46 __m128i x;
47 unsigned char c[16];
48 } val, mask;
49 int i, c;
51 mask.x = m;
52 val.x = v;
54 c = 1;
55 for (i = 0; i < 16; i++)
56 if ((val.c[i] & ~mask.c[i]))
58 c = 0;
59 break;
61 return c;
64 static void
65 TEST (void)
67 union
69 __m128i x;
70 unsigned int i[4];
71 } val[4];
72 int i, j, l;
73 int res[32];
75 val[0].i[0] = 0x11111111;
76 val[0].i[1] = 0x00000000;
77 val[0].i[2] = 0x00000000;
78 val[0].i[3] = 0x11111111;
80 val[1].i[0] = 0x00000000;
81 val[1].i[1] = 0x11111111;
82 val[1].i[2] = 0x11111111;
83 val[1].i[3] = 0x00000000;
85 val[2].i[0] = 0;
86 val[2].i[1] = 0;
87 val[2].i[2] = 0;
88 val[2].i[3] = 0;
90 val[3].i[0] = 0xffffffff;
91 val[3].i[1] = 0xffffffff;
92 val[3].i[2] = 0xffffffff;
93 val[3].i[3] = 0xffffffff;
95 l = 0;
96 for(i = 0; i < 4; i++)
97 for(j = 0; j < 4; j++)
99 res[l++] = _mm_testz_si128 (val[j].x, val[i].x);
100 res[l++] = _mm_testc_si128 (val[j].x, val[i].x);
103 l = 0;
104 for(i = 0; i < 4; i++)
105 for(j = 0; j < 4; j++)
107 if (res[l++] != make_ptestz (val[j].x, val[i].x))
108 abort ();
109 if (res[l++] != make_ptestc (val[j].x, val[i].x))
110 abort ();
113 if (res[2] != _mm_testz_si128 (val[1].x, val[0].x))
114 abort ();
116 if (res[3] != _mm_testc_si128 (val[1].x, val[0].x))
117 abort ();