152
|
1 /* { dg-do compile } */
|
|
2 /* { dg-require-effective-target int128 } */
|
|
3 /* { dg-options "-mdejagnu-cpu=future" } */
|
|
4
|
|
5 #include <altivec.h>
|
|
6
|
|
7 extern void abort (void);
|
|
8
|
|
9 #define NumSamples 4
|
|
10
|
|
11 /* vec_all_eq not yet supported for arguments of type
|
|
12 vector unsigned __int128. */
|
|
13 int
|
|
14 vector_equal (vector unsigned __int128 a, vector unsigned __int128 b)
|
|
15 {
|
|
16 return a[0] == b[0];
|
|
17 }
|
|
18
|
|
19 void
|
|
20 doTests00000001 (vector unsigned __int128 a_sources [],
|
|
21 vector unsigned __int128 b_sources [],
|
|
22 vector unsigned __int128 c_sources []) {
|
|
23 for (int i = 0; i < NumSamples; i++)
|
|
24 for (int j = 0; j < NumSamples; j++)
|
|
25 for (int k = 0; k < NumSamples; k++)
|
|
26 {
|
|
27 vector unsigned __int128 a = a_sources [i];
|
|
28 vector unsigned __int128 b = b_sources [j];
|
|
29 vector unsigned __int128 c = c_sources [k];
|
|
30 vector unsigned __int128 result;
|
|
31 result = vec_ternarylogic (a, b, c, 0xfff); /* { dg-error "8-bit unsigned literal" } */
|
|
32 vector unsigned __int128 intended = (a & b & c);
|
|
33 if (!vector_equal (result, intended))
|
|
34 abort ();
|
|
35 }
|
|
36 }
|
|
37
|
|
38 void
|
|
39 doTests11100101 (vector unsigned __int128 a_sources [],
|
|
40 vector unsigned __int128 b_sources [],
|
|
41 vector unsigned __int128 c_sources []) {
|
|
42 for (int i = 0; i < NumSamples; i++)
|
|
43 for (int j = 0; j < NumSamples; j++)
|
|
44 for (int k = 0; k < NumSamples; k++)
|
|
45 {
|
|
46 vector unsigned __int128 a = a_sources [i];
|
|
47 vector unsigned __int128 b = b_sources [j];
|
|
48 vector unsigned __int128 c = c_sources [k];
|
|
49 vector unsigned __int128 result;
|
|
50 result = vec_ternarylogic (a, b, c, -1); /* { dg-error "8-bit unsigned literal" } */
|
|
51 vector unsigned __int128 intended = { 0 };
|
|
52 // Supposed to be a ? c: nand (b,c)
|
|
53 for (int l = 0; l < 1; l++)
|
|
54 {
|
|
55 for (int m = 0; m < 128; m++)
|
|
56 {
|
|
57 unsigned __int128 bit_selector = 0x01;
|
|
58 bit_selector = bit_selector << m;
|
|
59
|
|
60 if (a[l] & bit_selector)
|
|
61 intended [l] |= c [l] & bit_selector;
|
|
62 else if ((b [l] & c [l] & bit_selector) == 0)
|
|
63 intended [l] |= bit_selector;
|
|
64 }
|
|
65 }
|
|
66 if (!vector_equal (result, intended))
|
|
67 abort ();
|
|
68 }
|
|
69 }
|
|
70
|
|
71 void
|
|
72 doTests11110011 (vector unsigned __int128 a_sources [],
|
|
73 vector unsigned __int128 b_sources [],
|
|
74 vector unsigned __int128 c_sources []) {
|
|
75 for (int i = 0; i < NumSamples; i++)
|
|
76 for (int j = 0; j < NumSamples; j++)
|
|
77 for (int k = 0; k < NumSamples; k++)
|
|
78 {
|
|
79 vector unsigned __int128 a = a_sources [i];
|
|
80 vector unsigned __int128 b = b_sources [j];
|
|
81 vector unsigned __int128 c = c_sources [k];
|
|
82 vector unsigned __int128 result;
|
|
83 result = vec_ternarylogic (a, b, c, i); /* { dg-error "8-bit unsigned literal" } */
|
|
84 vector unsigned __int128 intended = { 0 };
|
|
85 for (int i = 0; i < 1; i++)
|
|
86 intended [i] = b [i] | ~(a [i] & c [i]);
|
|
87 if (!vector_equal (result, intended))
|
|
88 abort ();
|
|
89 }
|
|
90 }
|
|
91
|
|
92 int main (int argc, int *argv [])
|
|
93 {
|
|
94 vector unsigned __int128 a_sources [NumSamples];
|
|
95 vector unsigned __int128 b_sources [NumSamples];
|
|
96 vector unsigned __int128 c_sources [NumSamples];
|
|
97
|
|
98 a_sources [0][0] = 0x0123456789abcdefull;
|
|
99 a_sources [0][0] = a_sources [0][0] << 64 | 0x123456789abcdef0ull;
|
|
100 a_sources [1][0] = 0x5555555555555555ull;
|
|
101 a_sources [1][0] = a_sources [1][0] << 64 | 0xffffffffffffffffull;
|
|
102 a_sources [2][0] = 0xcccccccc55555555ull;
|
|
103 a_sources [2][0] = a_sources [2][0] << 64 | 0x0000000000000000ull;
|
|
104 a_sources [3][0] = 0xe7e7e7e7e7e7e7e7ull;
|
|
105 a_sources [3][0] = a_sources [3][0] << 64 | 0x6969696969696969ull;
|
|
106
|
|
107 b_sources [0][0] = 0x0123456789abcdefull;
|
|
108 b_sources [0][0] = b_sources [0][0] << 64 | 0x123456789abcdef0ull;
|
|
109 b_sources [1][0] = 0x5555555555555555ull;
|
|
110 b_sources [1][0] = b_sources [1][0] << 64 | 0xffffffffffffffffull;
|
|
111 b_sources [2][0] = 0xcccccccc55555555ull;
|
|
112 b_sources [2][0] = b_sources [2][0] << 64 | 0x0000000000000000ull;
|
|
113 b_sources [3][0] = 0xe7e7e7e7e7e7e7e7ull;
|
|
114 b_sources [3][0] = b_sources [3][0] << 64 | 0x6969696969696969ull;
|
|
115
|
|
116 c_sources [0][0] = 0x0123456789abcdefull;
|
|
117 c_sources [0][0] = c_sources [0][0] << 64 | 0x123456789abcdef0ull;
|
|
118 c_sources [1][0] = 0x5555555555555555ull;
|
|
119 c_sources [1][0] = c_sources [1][0] << 64 | 0xffffffffffffffffull;
|
|
120 c_sources [2][0] = 0xcccccccc55555555ull;
|
|
121 c_sources [2][0] = c_sources [2][0] << 64 | 0x0000000000000000ull;
|
|
122 c_sources [3][0] = 0xe7e7e7e7e7e7e7e7ull;
|
|
123 c_sources [3][0] = c_sources [3][0] << 64 | 0x6969696969696969ull;
|
|
124
|
|
125 doTests00000001 (a_sources, b_sources, c_sources);
|
|
126 doTests11100101 (a_sources, b_sources, c_sources);
|
|
127 doTests11110011 (a_sources, b_sources, c_sources);
|
|
128
|
|
129 return 0;
|
|
130 }
|