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