1 /* { dg-do run } */
2 /* { dg-require-effective-target ppc_float128_sw } */
3 /* { dg-require-effective-target p9vector_hw } */
4 /* { dg-options "-O2 -mdejagnu-cpu=power9 " } */
5 
6 #define NAN_Q __builtin_nanq ("")
7 #define SNAN_Q __builtin_nansq ("")
8 #define NAN __builtin_nan ("")
9 #define SNAN __builtin_nans ("")
10 
11 #ifdef DEBUG
12 #include <stdio.h>
13 #endif
14 
15 void abort (void);
16 
main(void)17 int main(void)
18 {
19   int result;
20   double a_dble, b_dble;
21   __ieee128 a_ieee128, b_ieee128;
22 
23   a_dble = 3.10;
24   b_dble = 3.10;
25 
26   if (__builtin_vec_scalar_cmp_exp_eq(a_dble, b_dble))
27 #ifdef DEBUG
28     printf("Double EQ result is true, expecting true\n");
29 #else
30     ;
31 #endif
32   else
33 #ifdef DEBUG
34     printf("ERROR: Double EQ result is false, expecting true\n");
35 #else
36     abort();
37 #endif
38 
39   a_dble = 3.10;
40   b_dble = 31.0;
41 
42   if (__builtin_vec_scalar_cmp_exp_eq(a_dble, b_dble))
43 #ifdef DEBUG
44     printf("ERROR: Double EQ result is true, expecting false\n");
45 #else
46     abort();
47 #endif
48   else
49 #ifdef DEBUG
50     printf("Double EQ result is false, expecting false\n");
51 #else
52     ;
53 #endif
54 
55   a_dble = 3.10;
56   b_dble = 3.10;
57 
58   if (__builtin_vec_scalar_cmp_exp_lt(a_dble, b_dble))
59 #ifdef DEBUG
60     printf("ERROR: Double LT result is true, expecting false\n");
61 #else
62     abort();
63 #endif
64   else
65 #ifdef DEBUG
66     printf("Double LT result is false, expecting false\n");
67 #else
68     ;
69 #endif
70 
71   a_dble = 0.31;
72   b_dble = 3.10;
73 
74   if (__builtin_vec_scalar_cmp_exp_lt(a_dble, b_dble))
75 #ifdef DEBUG
76     printf("Double LT result is true, expecting true\n");
77 #else
78     ;
79 #endif
80   else
81 #ifdef DEBUG
82     printf("ERROR: Double LT result is false, expecting true\n");
83 #else
84     abort();
85 #endif
86 
87   a_dble = 0.31;
88   b_dble = 3.10;
89 
90   if (__builtin_vec_scalar_cmp_exp_gt(a_dble, b_dble))
91 #ifdef DEBUG
92     printf("ERROR: Double GT result is true, expecting false\n");
93 #else
94     abort();
95 #endif
96   else
97 #ifdef DEBUG
98     printf("Double GT result is false, expecting false\n");
99 #else
100     ;
101 #endif
102 
103   a_dble = 3.10;
104   b_dble = 0.31;
105 
106   if (__builtin_vec_scalar_cmp_exp_gt(a_dble, b_dble))
107 #ifdef DEBUG
108     printf("Double GT result is true, expecting true\n");
109 #else
110     ;
111 #endif
112   else
113 #ifdef DEBUG
114     printf("ERROR: Double GT result is false, expecting true\n");
115 #else
116     abort();
117 #endif
118 
119   a_dble = NAN;
120   b_dble = NAN;
121 
122   if (__builtin_vec_scalar_cmp_exp_unordered(a_dble, b_dble))
123 #ifdef DEBUG
124     printf("Double unordered result is true, expecting true\n");
125 #else
126     ;
127 #endif
128   else
129 #ifdef DEBUG
130     printf("ERROR: Double unordered result is false, expecting true\n");
131 #else
132     abort();
133 #endif
134 
135   a_dble = 3.10;
136   b_dble = 3.10;
137 
138   if (__builtin_vec_scalar_cmp_exp_unordered(a_dble, b_dble))
139 #ifdef DEBUG
140     printf("ERROR: Double unordered result is true, expecting false\n");
141 #else
142     abort();
143 #endif
144   else
145 #ifdef DEBUG
146     printf("Double unordered result is false, expecting false\n");
147 #else
148     ;
149 #endif
150 
151   /* IEEE 128 */
152   a_ieee128 = 3.10;
153   b_ieee128 = 3.10;
154 
155   if (__builtin_vec_scalar_cmp_exp_eq(a_ieee128, b_ieee128))
156 #ifdef DEBUG
157     printf("IEEE 128 EQ result is true, expecting true\n");
158 #else
159     ;
160 #endif
161   else
162 #ifdef DEBUG
163     printf("ERROR: IEEE 128 EQ result is false, expecting true\n");
164 #else
165     abort();
166 #endif
167 
168   a_ieee128 = 3.10;
169   b_ieee128 = 31.0;
170 
171   if (__builtin_vec_scalar_cmp_exp_eq(a_ieee128, b_ieee128))
172 #ifdef DEBUG
173     printf("ERROR: IEEE 128 EQ result is true, expecting false\n");
174 #else
175     abort();
176 #endif
177   else
178 #ifdef DEBUG
179     printf("IEEE 128 EQ result is false, expecting false\n");
180 #else
181     ;
182 #endif
183 
184   a_ieee128 = 3.10;
185   b_ieee128 = 3.10;
186 
187   if (__builtin_vec_scalar_cmp_exp_lt(a_ieee128, b_ieee128))
188 #ifdef DEBUG
189     printf("ERROR: IEEE 128 LT result is true, expecting false\n");
190 #else
191     abort();
192 #endif
193   else
194 #ifdef DEBUG
195     printf("IEEE 128 LT result is false, expecting false\n");
196 #else
197     ;
198 #endif
199 
200   a_ieee128 = 0.31;
201   b_ieee128 = 3.10;
202 
203   if (__builtin_vec_scalar_cmp_exp_lt(a_ieee128, b_ieee128))
204 #ifdef DEBUG
205     printf("IEEE 128 LT result is true, expecting true\n");
206 #else
207     ;
208 #endif
209   else
210 #ifdef DEBUG
211     printf("ERROR: IEEE 128 LT result is false, expecting true\n");
212 #else
213     abort();
214 #endif
215 
216   a_ieee128 = 0.31;
217   b_ieee128 = 3.10;
218 
219   if (__builtin_vec_scalar_cmp_exp_gt(a_ieee128, b_ieee128))
220 #ifdef DEBUG
221     printf("ERROR: IEEE 128 GT result is true, expecting false\n");
222 #else
223     abort();
224 #endif
225   else
226 #ifdef DEBUG
227     printf("IEEE 128 GT result is false, expecting false\n");
228 #else
229     ;
230 #endif
231 
232   a_ieee128 = 3.10;
233   b_ieee128 = 0.31;
234 
235   if (__builtin_vec_scalar_cmp_exp_gt(a_ieee128, b_ieee128))
236 #ifdef DEBUG
237     printf("IEEE 128 GT result is true, expecting true\n");
238 #else
239     ;
240 #endif
241   else
242 #ifdef DEBUG
243     printf("ERROR: IEEE 128 GT result is false, expecting true\n");
244 #else
245     abort();
246 #endif
247 
248   a_ieee128 = NAN_Q;
249   b_ieee128 = NAN_Q;
250 
251   if (__builtin_vec_scalar_cmp_exp_unordered(a_ieee128, b_ieee128))
252 #ifdef DEBUG
253     printf("IEEE unordered result is true, expecting true\n");
254 #else
255     ;
256 #endif
257   else
258 #ifdef DEBUG
259     printf("ERROR: IEEE unordered result is false, expecting true\n");
260 #else
261     abort();
262 #endif
263 
264   a_ieee128 = 3.10;
265   b_ieee128 = 3.10;
266 
267   if (__builtin_vec_scalar_cmp_exp_unordered(a_ieee128, b_ieee128))
268 #ifdef DEBUG
269     printf("ERROR: IEEE unordered result is true, expecting false\n");
270 #else
271     abort();
272 #endif
273   else
274 #ifdef DEBUG
275     printf("IEEE unordered result is false, expecting false\n");
276 #else
277     ;
278 #endif
279 }
280