1 #define SIMDE_TEST_ARM_NEON_INSN cagt
2
3 #include "test-neon.h"
4 #include "../../../simde/arm/neon/cagt.h"
5
6 static int
test_simde_vcagts_f32(SIMDE_MUNIT_TEST_ARGS)7 test_simde_vcagts_f32 (SIMDE_MUNIT_TEST_ARGS) {
8 #if 1
9 static const struct {
10 simde_float32 a;
11 simde_float32 b;
12 uint32_t r;
13 } test_vec[] = {
14 #if !defined(SIMDE_FAST_NANS)
15 { SIMDE_MATH_NANF,
16 SIMDE_FLOAT32_C( 0.52),
17 UINT32_C( 0) },
18 { SIMDE_FLOAT32_C( 705.02),
19 SIMDE_MATH_NANF,
20 UINT32_C( 0) },
21 { SIMDE_MATH_NANF,
22 SIMDE_MATH_NANF,
23 UINT32_C( 0) },
24 #endif
25
26 { SIMDE_FLOAT32_C( 8.79),
27 SIMDE_FLOAT32_C( 792.83),
28 UINT32_C( 0) },
29 { SIMDE_FLOAT32_C( -399.97),
30 SIMDE_FLOAT32_C( -256.84),
31 UINT32_MAX },
32 { SIMDE_FLOAT32_C( 231.75),
33 SIMDE_FLOAT32_C( -411.54),
34 UINT32_C( 0) },
35 { SIMDE_FLOAT32_C( 864.59),
36 SIMDE_FLOAT32_C( -881.95),
37 UINT32_C( 0) },
38 { SIMDE_FLOAT32_C( -814.20),
39 SIMDE_FLOAT32_C( 479.81),
40 UINT32_MAX },
41 { SIMDE_FLOAT32_C( 263.32),
42 SIMDE_FLOAT32_C( -797.51),
43 UINT32_C( 0) },
44 { SIMDE_FLOAT32_C( 321.47),
45 SIMDE_FLOAT32_C( -74.97),
46 UINT32_MAX },
47 { SIMDE_FLOAT32_C( -57.92),
48 SIMDE_FLOAT32_C( 535.57),
49 UINT32_C( 0) }
50 };
51
52 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
53 uint32_t r = simde_vcagts_f32(test_vec[i].a, test_vec[i].b);
54
55 simde_assert_equal_u32(r, test_vec[i].r);
56 }
57
58 return 0;
59 #else
60 fputc('\n', stdout);
61 for (int i = 0 ; i < 8 ; i++) {
62 simde_float32_t a = simde_test_codegen_random_f32(-1000.0f, 1000.0f);
63 simde_float32_t b = simde_test_codegen_random_f32(-1000.0f, 1000.0f);
64 uint32_t r = simde_vcagts_f32(a, b);
65
66 simde_test_codegen_write_f32(2, a, SIMDE_TEST_VEC_POS_FIRST);
67 simde_test_codegen_write_f32(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
68 simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
69 }
70 return 1;
71 #endif
72 }
73
74 static int
test_simde_vcagtd_f64(SIMDE_MUNIT_TEST_ARGS)75 test_simde_vcagtd_f64 (SIMDE_MUNIT_TEST_ARGS) {
76 #if 1
77 static const struct {
78 simde_float64 a;
79 simde_float64 b;
80 uint64_t r;
81 } test_vec[] = {
82 #if !defined(SIMDE_FAST_NANS)
83 { SIMDE_MATH_NAN,
84 SIMDE_FLOAT64_C( 0.52),
85 UINT64_C( 0) },
86 { SIMDE_FLOAT64_C( 705.02),
87 SIMDE_MATH_NAN,
88 UINT64_C( 0) },
89 { SIMDE_MATH_NAN,
90 SIMDE_MATH_NAN,
91 UINT64_C( 0) },
92 #endif
93
94 { SIMDE_FLOAT64_C( -111.66),
95 SIMDE_FLOAT64_C( -149.68),
96 UINT64_C( 0) },
97 { SIMDE_FLOAT64_C( -365.17),
98 SIMDE_FLOAT64_C( -219.70),
99 UINT64_MAX },
100 { SIMDE_FLOAT64_C( -45.32),
101 SIMDE_FLOAT64_C( 606.55),
102 UINT64_C( 0) },
103 { SIMDE_FLOAT64_C( -324.50),
104 SIMDE_FLOAT64_C( -332.43),
105 UINT64_C( 0) },
106 { SIMDE_FLOAT64_C( 611.77),
107 SIMDE_FLOAT64_C( 425.54),
108 UINT64_MAX },
109 { SIMDE_FLOAT64_C( 910.11),
110 SIMDE_FLOAT64_C( 648.44),
111 UINT64_MAX },
112 { SIMDE_FLOAT64_C( 572.56),
113 SIMDE_FLOAT64_C( -409.05),
114 UINT64_MAX },
115 { SIMDE_FLOAT64_C( 265.81),
116 SIMDE_FLOAT64_C( -418.65),
117 UINT64_C( 0) }
118 };
119
120 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
121 uint64_t r = simde_vcagtd_f64(test_vec[i].a, test_vec[i].b);
122
123 simde_assert_equal_u64(r, test_vec[i].r);
124 }
125
126 return 0;
127 #else
128 fputc('\n', stdout);
129 for (int i = 0 ; i < 8 ; i++) {
130 simde_float64_t a = simde_test_codegen_random_f64(-1000.0, 1000.0);
131 simde_float64_t b = simde_test_codegen_random_f64(-1000.0, 1000.0);
132 uint64_t r = simde_vcagtd_f64(a, b);
133
134 simde_test_codegen_write_f64(2, a, SIMDE_TEST_VEC_POS_FIRST);
135 simde_test_codegen_write_f64(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
136 simde_test_codegen_write_u64(2, r, SIMDE_TEST_VEC_POS_LAST);
137 }
138 return 1;
139 #endif
140 }
141
142 static int
test_simde_vcagt_f32(SIMDE_MUNIT_TEST_ARGS)143 test_simde_vcagt_f32 (SIMDE_MUNIT_TEST_ARGS) {
144 struct {
145 simde_float32 a[2];
146 simde_float32 b[2];
147 uint32_t r[2];
148 } test_vec[] = {
149 { { SIMDE_FLOAT32_C( 311.69), SIMDE_FLOAT32_C( -932.68) },
150 { SIMDE_FLOAT32_C( 98.33), SIMDE_FLOAT32_C( -552.98) },
151 { UINT32_MAX, UINT32_MAX } },
152 { { SIMDE_FLOAT32_C( 959.61), SIMDE_FLOAT32_C( 617.75) },
153 { SIMDE_FLOAT32_C( -197.11), SIMDE_FLOAT32_C( 562.98) },
154 { UINT32_MAX, UINT32_MAX } },
155 { { SIMDE_FLOAT32_C( 468.98), SIMDE_FLOAT32_C( -916.49) },
156 { SIMDE_FLOAT32_C( 965.35), SIMDE_FLOAT32_C( 700.25) },
157 { UINT32_C( 0), UINT32_MAX } },
158 { { SIMDE_FLOAT32_C( -647.13), SIMDE_FLOAT32_C( -147.35) },
159 { SIMDE_FLOAT32_C( -117.68), SIMDE_FLOAT32_C( -241.37) },
160 { UINT32_MAX, UINT32_C( 0) } },
161 { { SIMDE_FLOAT32_C( -664.10), SIMDE_FLOAT32_C( -976.12) },
162 { SIMDE_FLOAT32_C( 874.22), SIMDE_FLOAT32_C( -12.94) },
163 { UINT32_C( 0), UINT32_MAX } },
164 { { SIMDE_FLOAT32_C( 25.04), SIMDE_FLOAT32_C( -125.75) },
165 { SIMDE_FLOAT32_C( 212.15), SIMDE_FLOAT32_C( 782.89) },
166 { UINT32_C( 0), UINT32_C( 0) } },
167 { { SIMDE_FLOAT32_C( 561.17), SIMDE_FLOAT32_C( 217.87) },
168 { SIMDE_FLOAT32_C( -238.74), SIMDE_FLOAT32_C( 679.32) },
169 { UINT32_MAX, UINT32_C( 0) } },
170 { { SIMDE_FLOAT32_C( -965.46), SIMDE_FLOAT32_C( -738.96) },
171 { SIMDE_FLOAT32_C( -711.74), SIMDE_FLOAT32_C( 346.23) },
172 { UINT32_MAX, UINT32_MAX } },
173 };
174
175 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
176 simde_float32x2_t a = simde_vld1_f32(test_vec[i].a);
177 simde_float32x2_t b = simde_vld1_f32(test_vec[i].b);
178 simde_uint32x2_t r = simde_vcagt_f32(a, b);
179
180 simde_test_arm_neon_assert_equal_u32x2(r, simde_vld1_u32(test_vec[i].r));
181 }
182
183 return 0;
184 }
185
186 static int
test_simde_vcagt_f64(SIMDE_MUNIT_TEST_ARGS)187 test_simde_vcagt_f64 (SIMDE_MUNIT_TEST_ARGS) {
188 struct {
189 simde_float64 a[1];
190 simde_float64 b[1];
191 uint64_t r[1];
192 } test_vec[] = {
193 { { SIMDE_FLOAT64_C( 85.26) },
194 { SIMDE_FLOAT64_C( 122.65) },
195 { UINT64_C( 0) } },
196 { { SIMDE_FLOAT64_C( -500.89) },
197 { SIMDE_FLOAT64_C( 936.69) },
198 { UINT64_C( 0) } },
199 { { SIMDE_FLOAT64_C( 594.89) },
200 { SIMDE_FLOAT64_C( 788.77) },
201 { UINT64_C( 0) } },
202 { { SIMDE_FLOAT64_C( 543.70) },
203 { SIMDE_FLOAT64_C( -150.09) },
204 { UINT64_MAX } },
205 { { SIMDE_FLOAT64_C( -875.02) },
206 { SIMDE_FLOAT64_C( 442.69) },
207 { UINT64_MAX } },
208 { { SIMDE_FLOAT64_C( 673.76) },
209 { SIMDE_FLOAT64_C( 217.24) },
210 { UINT64_MAX } },
211 { { SIMDE_FLOAT64_C( 789.39) },
212 { SIMDE_FLOAT64_C( 718.78) },
213 { UINT64_MAX } },
214 { { SIMDE_FLOAT64_C( -511.44) },
215 { SIMDE_FLOAT64_C( 752.01) },
216 { UINT64_C( 0) } },
217 };
218
219 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
220 simde_float64x1_t a = simde_vld1_f64(test_vec[i].a);
221 simde_float64x1_t b = simde_vld1_f64(test_vec[i].b);
222 simde_uint64x1_t r = simde_vcagt_f64(a, b);
223
224 simde_test_arm_neon_assert_equal_u64x1(r, simde_vld1_u64(test_vec[i].r));
225 }
226
227 return 0;
228 }
229
230 static int
test_simde_vcagtq_f32(SIMDE_MUNIT_TEST_ARGS)231 test_simde_vcagtq_f32 (SIMDE_MUNIT_TEST_ARGS) {
232 struct {
233 simde_float32 a[4];
234 simde_float32 b[4];
235 uint32_t r[4];
236 } test_vec[] = {
237 { { SIMDE_FLOAT32_C( 880.25), SIMDE_FLOAT32_C( 497.37), SIMDE_FLOAT32_C( 188.18), SIMDE_FLOAT32_C( -214.92) },
238 { SIMDE_FLOAT32_C( -292.63), SIMDE_FLOAT32_C( 165.21), SIMDE_FLOAT32_C( -507.32), SIMDE_FLOAT32_C( -554.07) },
239 { UINT32_MAX, UINT32_MAX, UINT32_C( 0), UINT32_C( 0) } },
240 { { SIMDE_FLOAT32_C( 21.58), SIMDE_FLOAT32_C( -187.66), SIMDE_FLOAT32_C( 52.34), SIMDE_FLOAT32_C( 522.72) },
241 { SIMDE_FLOAT32_C( 805.10), SIMDE_FLOAT32_C( -357.26), SIMDE_FLOAT32_C( 451.59), SIMDE_FLOAT32_C( 744.08) },
242 { UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_C( 0) } },
243 { { SIMDE_FLOAT32_C( 113.67), SIMDE_FLOAT32_C( 334.71), SIMDE_FLOAT32_C( 489.01), SIMDE_FLOAT32_C( 347.72) },
244 { SIMDE_FLOAT32_C( -991.50), SIMDE_FLOAT32_C( -625.74), SIMDE_FLOAT32_C( -356.50), SIMDE_FLOAT32_C( 848.94) },
245 { UINT32_C( 0), UINT32_C( 0), UINT32_MAX, UINT32_C( 0) } },
246 { { SIMDE_FLOAT32_C( 90.46), SIMDE_FLOAT32_C( 858.14), SIMDE_FLOAT32_C( -123.29), SIMDE_FLOAT32_C( -917.86) },
247 { SIMDE_FLOAT32_C( -788.14), SIMDE_FLOAT32_C( 739.22), SIMDE_FLOAT32_C( 572.18), SIMDE_FLOAT32_C( -907.90) },
248 { UINT32_C( 0), UINT32_MAX, UINT32_C( 0), UINT32_MAX } },
249 { { SIMDE_FLOAT32_C( 236.59), SIMDE_FLOAT32_C( -239.64), SIMDE_FLOAT32_C( -122.81), SIMDE_FLOAT32_C( 943.97) },
250 { SIMDE_FLOAT32_C( 925.57), SIMDE_FLOAT32_C( 369.86), SIMDE_FLOAT32_C( -610.11), SIMDE_FLOAT32_C( -52.85) },
251 { UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_MAX } },
252 { { SIMDE_FLOAT32_C( -817.80), SIMDE_FLOAT32_C( 442.23), SIMDE_FLOAT32_C( -530.12), SIMDE_FLOAT32_C( 987.30) },
253 { SIMDE_FLOAT32_C( -915.03), SIMDE_FLOAT32_C( 921.46), SIMDE_FLOAT32_C( 731.38), SIMDE_FLOAT32_C( 198.64) },
254 { UINT32_C( 0), UINT32_C( 0), UINT32_C( 0), UINT32_MAX } },
255 { { SIMDE_FLOAT32_C( 256.18), SIMDE_FLOAT32_C( 220.39), SIMDE_FLOAT32_C( -453.64), SIMDE_FLOAT32_C( 264.67) },
256 { SIMDE_FLOAT32_C( 594.64), SIMDE_FLOAT32_C( 189.87), SIMDE_FLOAT32_C( 113.62), SIMDE_FLOAT32_C( -314.89) },
257 { UINT32_C( 0), UINT32_MAX, UINT32_MAX, UINT32_C( 0) } },
258 { { SIMDE_FLOAT32_C( 48.01), SIMDE_FLOAT32_C( 990.32), SIMDE_FLOAT32_C( -232.76), SIMDE_FLOAT32_C( 259.86) },
259 { SIMDE_FLOAT32_C( 729.55), SIMDE_FLOAT32_C( -660.58), SIMDE_FLOAT32_C( 351.97), SIMDE_FLOAT32_C( -33.86) },
260 { UINT32_C( 0), UINT32_MAX, UINT32_C( 0), UINT32_MAX } },
261 };
262
263 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
264 simde_float32x4_t a = simde_vld1q_f32(test_vec[i].a);
265 simde_float32x4_t b = simde_vld1q_f32(test_vec[i].b);
266 simde_uint32x4_t r = simde_vcagtq_f32(a, b);
267 simde_test_arm_neon_assert_equal_u32x4(r, simde_vld1q_u32(test_vec[i].r));
268 }
269
270 return 0;
271 }
272
273 static int
test_simde_vcagtq_f64(SIMDE_MUNIT_TEST_ARGS)274 test_simde_vcagtq_f64 (SIMDE_MUNIT_TEST_ARGS) {
275 struct {
276 simde_float64 a[2];
277 simde_float64 b[2];
278 uint64_t r[2];
279 } test_vec[] = {
280 { { SIMDE_FLOAT64_C( 230.31), SIMDE_FLOAT64_C( -618.28) },
281 { SIMDE_FLOAT64_C( 180.85), SIMDE_FLOAT64_C( 444.53) },
282 { UINT64_MAX, UINT64_MAX } },
283 { { SIMDE_FLOAT64_C( 217.53), SIMDE_FLOAT64_C( -615.67) },
284 { SIMDE_FLOAT64_C( 629.35), SIMDE_FLOAT64_C( -484.75) },
285 { UINT64_C( 0), UINT64_MAX } },
286 { { SIMDE_FLOAT64_C( 170.44), SIMDE_FLOAT64_C( -454.09) },
287 { SIMDE_FLOAT64_C( 330.58), SIMDE_FLOAT64_C( 520.13) },
288 { UINT64_C( 0), UINT64_C( 0) } },
289 { { SIMDE_FLOAT64_C( -764.76), SIMDE_FLOAT64_C( -650.22) },
290 { SIMDE_FLOAT64_C( -78.50), SIMDE_FLOAT64_C( 683.38) },
291 { UINT64_MAX, UINT64_C( 0) } },
292 { { SIMDE_FLOAT64_C( -812.10), SIMDE_FLOAT64_C( 401.95) },
293 { SIMDE_FLOAT64_C( -416.07), SIMDE_FLOAT64_C( 983.29) },
294 { UINT64_MAX, UINT64_C( 0) } },
295 { { SIMDE_FLOAT64_C( -496.16), SIMDE_FLOAT64_C( 249.85) },
296 { SIMDE_FLOAT64_C( 57.13), SIMDE_FLOAT64_C( -909.73) },
297 { UINT64_MAX, UINT64_C( 0) } },
298 { { SIMDE_FLOAT64_C( -537.53), SIMDE_FLOAT64_C( 707.06) },
299 { SIMDE_FLOAT64_C( -45.84), SIMDE_FLOAT64_C( -807.07) },
300 { UINT64_MAX, UINT64_C( 0) } },
301 { { SIMDE_FLOAT64_C( -27.41), SIMDE_FLOAT64_C( 231.88) },
302 { SIMDE_FLOAT64_C( -442.67), SIMDE_FLOAT64_C( -797.10) },
303 { UINT64_C( 0), UINT64_C( 0) } },
304 };
305
306 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
307 simde_float64x2_t a = simde_vld1q_f64(test_vec[i].a);
308 simde_float64x2_t b = simde_vld1q_f64(test_vec[i].b);
309 simde_uint64x2_t r = simde_vcagtq_f64(a, b);
310
311 simde_test_arm_neon_assert_equal_u64x2(r, simde_vld1q_u64(test_vec[i].r));
312 }
313
314 return 0;
315 }
316
317 SIMDE_TEST_FUNC_LIST_BEGIN
318 SIMDE_TEST_FUNC_LIST_ENTRY(vcagts_f32)
319 SIMDE_TEST_FUNC_LIST_ENTRY(vcagtd_f64)
320
321 SIMDE_TEST_FUNC_LIST_ENTRY(vcagt_f32)
322 SIMDE_TEST_FUNC_LIST_ENTRY(vcagt_f64)
323
324 SIMDE_TEST_FUNC_LIST_ENTRY(vcagtq_f32)
325 SIMDE_TEST_FUNC_LIST_ENTRY(vcagtq_f64)
326 SIMDE_TEST_FUNC_LIST_END
327
328 #include "test-neon-footer.h"
329