1 #define SIMDE_TEST_ARM_NEON_INSN get_lane
2
3 #include "test-neon.h"
4 #include "../../../simde/arm/neon/get_lane.h"
5
6 HEDLEY_DIAGNOSTIC_PUSH
7 SIMDE_DIAGNOSTIC_DISABLE_UNREACHABLE_
8
9 static int
test_simde_vget_lane_f32(SIMDE_MUNIT_TEST_ARGS)10 test_simde_vget_lane_f32 (SIMDE_MUNIT_TEST_ARGS) {
11 struct {
12 simde_float32 a[2];
13 int b;
14 simde_float32 r;
15 } test_vec[] = {
16 { { SIMDE_FLOAT32_C( 410.64), SIMDE_FLOAT32_C( 344.10) },
17 INT8_C( 1),
18 SIMDE_FLOAT32_C( 344.10) },
19 { { SIMDE_FLOAT32_C( -838.05), SIMDE_FLOAT32_C( -800.70) },
20 INT8_C( 1),
21 SIMDE_FLOAT32_C( -800.70) },
22 { { SIMDE_FLOAT32_C( 546.78), SIMDE_FLOAT32_C( 198.96) },
23 INT8_C( 0),
24 SIMDE_FLOAT32_C( 546.78) },
25 { { SIMDE_FLOAT32_C( -101.20), SIMDE_FLOAT32_C( -135.04) },
26 INT8_C( 1),
27 SIMDE_FLOAT32_C( -135.04) },
28 { { SIMDE_FLOAT32_C( -61.99), SIMDE_FLOAT32_C( 998.55) },
29 INT8_C( 1),
30 SIMDE_FLOAT32_C( 998.55) },
31 { { SIMDE_FLOAT32_C( -663.21), SIMDE_FLOAT32_C( -581.66) },
32 INT8_C( 0),
33 SIMDE_FLOAT32_C( -663.21) },
34 { { SIMDE_FLOAT32_C( -515.64), SIMDE_FLOAT32_C( -101.75) },
35 INT8_C( 1),
36 SIMDE_FLOAT32_C( -101.75) },
37 { { SIMDE_FLOAT32_C( 909.95), SIMDE_FLOAT32_C( -480.35) },
38 INT8_C( 0),
39 SIMDE_FLOAT32_C( 909.95) },
40
41 };
42
43 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
44
45 simde_float32x2_t a = simde_vld1_f32(test_vec[i].a);
46 int b = test_vec[i].b;
47 simde_float32 r;
48 SIMDE_CONSTIFY_2_(simde_vget_lane_f32, r, (HEDLEY_UNREACHABLE(), SIMDE_FLOAT32_C(0.0)), b, a);
49
50 simde_assert_equal_f32(r, test_vec[i].r, 1);
51 }
52
53 return 0;
54 }
55
56 static int
test_simde_vget_lane_f64(SIMDE_MUNIT_TEST_ARGS)57 test_simde_vget_lane_f64 (SIMDE_MUNIT_TEST_ARGS) {
58 struct {
59 simde_float64 a[1];
60 simde_float64 r;
61 } test_vec[] = {
62 { { SIMDE_FLOAT64_C( -475.46) },
63 SIMDE_FLOAT64_C( -475.46) },
64 { { SIMDE_FLOAT64_C( 40.13) },
65 SIMDE_FLOAT64_C( 40.13) },
66 { { SIMDE_FLOAT64_C( 577.68) },
67 SIMDE_FLOAT64_C( 577.68) },
68 { { SIMDE_FLOAT64_C( -438.44) },
69 SIMDE_FLOAT64_C( -438.44) },
70 { { SIMDE_FLOAT64_C( 564.06) },
71 SIMDE_FLOAT64_C( 564.06) },
72 { { SIMDE_FLOAT64_C( -519.34) },
73 SIMDE_FLOAT64_C( -519.34) },
74 { { SIMDE_FLOAT64_C( -449.22) },
75 SIMDE_FLOAT64_C( -449.22) },
76 { { SIMDE_FLOAT64_C( -456.94) },
77 SIMDE_FLOAT64_C( -456.94) },
78
79 };
80
81 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
82 simde_float64x1_t a = simde_vld1_f64(test_vec[i].a);
83 simde_float64 r = simde_vget_lane_f64(a, 0);
84
85 simde_assert_equal_f64(r, test_vec[i].r, 1);
86 }
87
88 return 0;
89 }
90
91 static int
test_simde_vget_lane_s8(SIMDE_MUNIT_TEST_ARGS)92 test_simde_vget_lane_s8 (SIMDE_MUNIT_TEST_ARGS) {
93 struct {
94 int8_t a[8];
95 int b;
96 int8_t r;
97 } test_vec[] = {
98 { { INT8_C( 79), INT8_C( 68), -INT8_C( 36), INT8_C( 47), INT8_C( 87), -INT8_C( 22), -INT8_C( 44), -INT8_C( 111) },
99 INT8_C( 2),
100 -INT8_C( 36) },
101 { { -INT8_C( 78), INT8_C( 75), -INT8_C( 106), INT8_C( 111), -INT8_C( 55), INT8_C( 39), -INT8_C( 69), -INT8_C( 110) },
102 INT8_C( 4),
103 -INT8_C( 55) },
104 { { INT8_C( 72), -INT8_C( 120), -INT8_C( 122), -INT8_C( 86), INT8_C( 90), -INT8_C( 24), -INT8_C( 60), -INT8_C( 104) },
105 INT8_C( 1),
106 -INT8_C( 120) },
107 { { INT8_C( 116), INT8_C( 37), -INT8_C( 99), -INT8_C( 48), INT8_C( 117), -INT8_C( 31), -INT8_C( 84), -INT8_C( 92) },
108 INT8_C( 0),
109 INT8_C( 116) },
110 { { -INT8_C( 106), INT8_C( 120), -INT8_C( 54), -INT8_C( 64), INT8_C( 42), INT8_C( 21), INT8_C( 87), -INT8_C( 103) },
111 INT8_C( 6),
112 INT8_C( 87) },
113 { { INT8_C( 126), INT8_C( 84), INT8_C( 112), INT8_C( 98), -INT8_C( 100), -INT8_C( 7), -INT8_C( 23), INT8_C( 70) },
114 INT8_C( 3),
115 INT8_C( 98) },
116 { { -INT8_C( 47), INT8_C( 11), -INT8_C( 21), INT8_C( 10), INT8_MAX, INT8_C( 17), -INT8_C( 89), INT8_C( 79) },
117 INT8_C( 6),
118 -INT8_C( 89) },
119 { { -INT8_C( 120), -INT8_C( 5), INT8_C( 42), -INT8_C( 64), -INT8_C( 110), -INT8_C( 94), -INT8_C( 118), INT8_C( 82) },
120 INT8_C( 4),
121 -INT8_C( 110) },
122
123 };
124
125 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
126 simde_int8x8_t a = simde_vld1_s8(test_vec[i].a);
127 int b = test_vec[i].b;
128 int8_t r;
129 SIMDE_CONSTIFY_8_(simde_vget_lane_s8, r, (HEDLEY_UNREACHABLE(), 0), b, a);
130
131 simde_assert_equal_i8(r, test_vec[i].r);
132 }
133
134 return 0;
135 }
136
137 static int
test_simde_vget_lane_s16(SIMDE_MUNIT_TEST_ARGS)138 test_simde_vget_lane_s16 (SIMDE_MUNIT_TEST_ARGS) {
139 struct {
140 int16_t a[4];
141 int b;
142 int16_t r;
143 } test_vec[] = {
144 { { INT16_C( 13913), -INT16_C( 7828), -INT16_C( 14489), -INT16_C( 26057) },
145 INT8_C( 0),
146 INT16_C( 13913) },
147 { { INT16_C( 13818), INT16_C( 18664), -INT16_C( 10245), INT16_C( 6383) },
148 INT8_C( 0),
149 INT16_C( 13818) },
150 { { -INT16_C( 9771), -INT16_C( 25769), INT16_C( 2933), -INT16_C( 2011) },
151 INT8_C( 2),
152 INT16_C( 2933) },
153 { { -INT16_C( 14019), -INT16_C( 15785), -INT16_C( 29150), INT16_C( 814) },
154 INT8_C( 1),
155 -INT16_C( 15785) },
156 { { INT16_C( 15094), INT16_C( 3728), -INT16_C( 15051), INT16_C( 32246) },
157 INT8_C( 1),
158 INT16_C( 3728) },
159 { { INT16_C( 28109), INT16_C( 18137), -INT16_C( 19902), -INT16_C( 8803) },
160 INT8_C( 0),
161 INT16_C( 28109) },
162 { { INT16_C( 680), INT16_C( 27168), -INT16_C( 5569), INT16_C( 705) },
163 INT8_C( 0),
164 INT16_C( 680) },
165 { { INT16_C( 12367), INT16_C( 17680), INT16_C( 18982), INT16_C( 13525) },
166 INT8_C( 3),
167 INT16_C( 13525) },
168
169 };
170
171 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
172 simde_int16x4_t a = simde_vld1_s16(test_vec[i].a);
173 int b = test_vec[i].b;
174 int16_t r;
175 SIMDE_CONSTIFY_4_(simde_vget_lane_s16, r, (HEDLEY_UNREACHABLE(), 0), b, a);
176
177 simde_assert_equal_i16(r, test_vec[i].r);
178 }
179
180 return 0;
181 }
182
183 static int
test_simde_vget_lane_s32(SIMDE_MUNIT_TEST_ARGS)184 test_simde_vget_lane_s32 (SIMDE_MUNIT_TEST_ARGS) {
185 struct {
186 int32_t a[2];
187 int b;
188 int32_t r;
189 } test_vec[] = {
190 { { INT32_C( 451851400), -INT32_C( 530446795) },
191 INT8_C( 0),
192 INT32_C( 451851400) },
193 { { -INT32_C( 497636127), -INT32_C( 338817732) },
194 INT8_C( 1),
195 -INT32_C( 338817732) },
196 { { INT32_C( 212911362), -INT32_C( 643488292) },
197 INT8_C( 1),
198 -INT32_C( 643488292) },
199 { { -INT32_C( 1592001450), -INT32_C( 1634742396) },
200 INT8_C( 0),
201 -INT32_C( 1592001450) },
202 { { -INT32_C( 941293163), -INT32_C( 1004629534) },
203 INT8_C( 1),
204 -INT32_C( 1004629534) },
205 { { INT32_C( 1941475883), -INT32_C( 1608286828) },
206 INT8_C( 0),
207 INT32_C( 1941475883) },
208 { { -INT32_C( 30194103), INT32_C( 1025060764) },
209 INT8_C( 1),
210 INT32_C( 1025060764) },
211 { { -INT32_C( 330117656), INT32_C( 718361442) },
212 INT8_C( 1),
213 INT32_C( 718361442) },
214
215 };
216
217 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
218 simde_int32x2_t a = simde_vld1_s32(test_vec[i].a);
219 int b = test_vec[i].b;
220 int32_t r;
221 SIMDE_CONSTIFY_2_(simde_vget_lane_s32, r, (HEDLEY_UNREACHABLE(), 0), b, a);
222
223 simde_assert_equal_i32(r, test_vec[i].r);
224 }
225
226 return 0;
227 }
228
229 static int
test_simde_vget_lane_s64(SIMDE_MUNIT_TEST_ARGS)230 test_simde_vget_lane_s64 (SIMDE_MUNIT_TEST_ARGS) {
231 struct {
232 int64_t a[1];
233 int64_t r;
234 } test_vec[] = {
235 { { INT64_C( 7593315202386255056) },
236 INT64_C( 7593315202386255056) },
237 { { -INT64_C( 3283523923862515318) },
238 -INT64_C( 3283523923862515318) },
239 { { INT64_C( 4591998433815169493) },
240 INT64_C( 4591998433815169493) },
241 { { INT64_C( 3515554461116684124) },
242 INT64_C( 3515554461116684124) },
243 { { INT64_C( 8463300658565386409) },
244 INT64_C( 8463300658565386409) },
245 { { -INT64_C( 5169869895816060153) },
246 -INT64_C( 5169869895816060153) },
247 { { -INT64_C( 3838821912131374513) },
248 -INT64_C( 3838821912131374513) },
249 { { INT64_C( 166258511252788092) },
250 INT64_C( 166258511252788092) },
251
252 };
253
254 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
255 simde_int64x1_t a = simde_vld1_s64(test_vec[i].a);
256 int64_t r = simde_vget_lane_s64(a, 0);
257
258 simde_assert_equal_i64(r, test_vec[i].r);
259 }
260
261 return 0;
262 }
263
264 static int
test_simde_vget_lane_u8(SIMDE_MUNIT_TEST_ARGS)265 test_simde_vget_lane_u8 (SIMDE_MUNIT_TEST_ARGS) {
266 struct {
267 uint8_t a[16];
268 int b;
269 uint8_t r;
270 } test_vec[] = {
271 { { UINT8_C(145), UINT8_C( 15), UINT8_C(109), UINT8_C( 38), UINT8_C(127), UINT8_C( 69), UINT8_C(163), UINT8_C(231) },
272 INT8_C( 3),
273 UINT8_C( 38) },
274 { { UINT8_C( 26), UINT8_C( 62), UINT8_C(190), UINT8_C(237), UINT8_C(178), UINT8_C(209), UINT8_C( 61), UINT8_C( 4) },
275 INT8_C( 4),
276 UINT8_C(178) },
277 { { UINT8_C( 55), UINT8_C(139), UINT8_C( 83), UINT8_C( 28), UINT8_C( 77), UINT8_C( 73), UINT8_C(209), UINT8_C( 70) },
278 INT8_C( 0),
279 UINT8_C( 55) },
280 { { UINT8_C( 62), UINT8_C(144), UINT8_C( 10), UINT8_C(169), UINT8_C( 34), UINT8_C( 25), UINT8_C( 23), UINT8_C( 72) },
281 INT8_C( 0),
282 UINT8_C( 62) },
283 { { UINT8_C( 92), UINT8_C(235), UINT8_C(127), UINT8_C( 0), UINT8_C( 6), UINT8_C(189), UINT8_C(190), UINT8_C(243) },
284 INT8_C( 7),
285 UINT8_C(243) },
286 { { UINT8_C(143), UINT8_C( 49), UINT8_C(115), UINT8_C(147), UINT8_C(104), UINT8_C(254), UINT8_C(231), UINT8_C(132) },
287 INT8_C( 4),
288 UINT8_C(104) },
289 { { UINT8_C( 48), UINT8_C( 86), UINT8_C(146), UINT8_C(200), UINT8_C(148), UINT8_C( 34), UINT8_C(210), UINT8_C( 61) },
290 INT8_C( 4),
291 UINT8_C(148) },
292 { { UINT8_C(235), UINT8_C( 84), UINT8_C(141), UINT8_C(131), UINT8_C(177), UINT8_C(120), UINT8_C( 2), UINT8_C(177) },
293 INT8_C( 6),
294 UINT8_C( 2) },
295
296 };
297
298 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
299 simde_uint8x8_t a = simde_vld1_u8(test_vec[i].a);
300 int b = test_vec[i].b;
301 uint8_t r;
302 SIMDE_CONSTIFY_8_(simde_vget_lane_u8, r, (HEDLEY_UNREACHABLE(), 0), b, a);
303
304 simde_assert_equal_u8(r, test_vec[i].r);
305 }
306
307 return 0;
308 }
309
310 static int
test_simde_vget_lane_u16(SIMDE_MUNIT_TEST_ARGS)311 test_simde_vget_lane_u16 (SIMDE_MUNIT_TEST_ARGS) {
312 struct {
313 uint16_t a[4];
314 int b;
315 uint16_t r;
316 } test_vec[] = {
317 { { UINT16_C(12419), UINT16_C(50038), UINT16_C(38877), UINT16_C(17206) },
318 INT8_C( 2),
319 UINT16_C(38877) },
320 { { UINT16_C(48224), UINT16_C(21652), UINT16_C(15709), UINT16_C(31006) },
321 INT8_C( 3),
322 UINT16_C(31006) },
323 { { UINT16_C(39237), UINT16_C(11133), UINT16_C(17423), UINT16_C(50851) },
324 INT8_C( 2),
325 UINT16_C(17423) },
326 { { UINT16_C(48821), UINT16_C(47484), UINT16_C(44097), UINT16_C( 1071) },
327 INT8_C( 2),
328 UINT16_C(44097) },
329 { { UINT16_C(15302), UINT16_C(28877), UINT16_C(35227), UINT16_C(61189) },
330 INT8_C( 3),
331 UINT16_C(61189) },
332 { { UINT16_C( 3394), UINT16_C(19808), UINT16_C(63826), UINT16_C(32458) },
333 INT8_C( 0),
334 UINT16_C( 3394) },
335 { { UINT16_C( 8462), UINT16_C(23759), UINT16_C(36311), UINT16_C(37080) },
336 INT8_C( 2),
337 UINT16_C(36311) },
338 { { UINT16_C(49029), UINT16_C( 4051), UINT16_C( 3717), UINT16_C(63196) },
339 INT8_C( 1),
340 UINT16_C( 4051) },
341
342 };
343
344 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
345 simde_uint16x4_t a = simde_vld1_u16(test_vec[i].a);
346 int b = test_vec[i].b;
347 uint16_t r;
348 SIMDE_CONSTIFY_4_(simde_vget_lane_u16, r, (HEDLEY_UNREACHABLE(), 0), b, a);
349 simde_assert_equal_u16(r, test_vec[i].r);
350 }
351
352 return 0;
353 }
354
355 static int
test_simde_vget_lane_u32(SIMDE_MUNIT_TEST_ARGS)356 test_simde_vget_lane_u32 (SIMDE_MUNIT_TEST_ARGS) {
357 struct {
358 uint32_t a[2];
359 int b;
360 uint32_t r;
361 } test_vec[] = {
362 { { UINT32_C(3007867267), UINT32_C(2989705603) },
363 INT8_C( 0),
364 UINT32_C(3007867267) },
365 { { UINT32_C(1366545288), UINT32_C(3281825408) },
366 INT8_C( 1),
367 UINT32_C(3281825408) },
368 { { UINT32_C( 661651758), UINT32_C(3582788621) },
369 INT8_C( 1),
370 UINT32_C(3582788621) },
371 { { UINT32_C( 203852593), UINT32_C(3260321551) },
372 INT8_C( 1),
373 UINT32_C(3260321551) },
374 { { UINT32_C( 96859549), UINT32_C(3464009853) },
375 INT8_C( 0),
376 UINT32_C( 96859549) },
377 { { UINT32_C(3990579750), UINT32_C(3210599832) },
378 INT8_C( 0),
379 UINT32_C(3990579750) },
380 { { UINT32_C( 197152098), UINT32_C(2318486398) },
381 INT8_C( 0),
382 UINT32_C( 197152098) },
383 { { UINT32_C(3541884608), UINT32_C(2174226811) },
384 INT8_C( 0),
385 UINT32_C(3541884608) },
386
387 };
388
389 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
390 simde_uint32x2_t a = simde_vld1_u32(test_vec[i].a);
391 int b = test_vec[i].b;
392 uint32_t r;
393 SIMDE_CONSTIFY_2_(simde_vget_lane_u32, r, (HEDLEY_UNREACHABLE(), 0), b, a);
394 simde_assert_equal_u32(r, test_vec[i].r);
395 }
396
397 return 0;
398 }
399
400 static int
test_simde_vget_lane_u64(SIMDE_MUNIT_TEST_ARGS)401 test_simde_vget_lane_u64 (SIMDE_MUNIT_TEST_ARGS) {
402 struct {
403 uint64_t a[1];
404 uint64_t r;
405 } test_vec[] = {
406 { { UINT64_C( 8474713643211531917) },
407 UINT64_C( 8474713643211531917) },
408 { { UINT64_C( 4718805824424333625) },
409 UINT64_C( 4718805824424333625) },
410 { { UINT64_C( 2901443443683120557) },
411 UINT64_C( 2901443443683120557) },
412 { { UINT64_C(16896600451596749021) },
413 UINT64_C(16896600451596749021) },
414 { { UINT64_C( 2355020594457970359) },
415 UINT64_C( 2355020594457970359) },
416 { { UINT64_C(14871504216242625854) },
417 UINT64_C(14871504216242625854) },
418 { { UINT64_C(11884950968574087521) },
419 UINT64_C(11884950968574087521) },
420 { { UINT64_C(12253690780921831607) },
421 UINT64_C(12253690780921831607) },
422
423 };
424
425 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
426 simde_uint64x1_t a = simde_vld1_u64(test_vec[i].a);
427 uint64_t r = simde_vget_lane_u64(a, 0);
428 simde_assert_equal_u64(r, test_vec[i].r);
429 }
430
431 return 0;
432 }
433
434 static int
test_simde_vgetq_lane_f32(SIMDE_MUNIT_TEST_ARGS)435 test_simde_vgetq_lane_f32 (SIMDE_MUNIT_TEST_ARGS) {
436 struct {
437 simde_float32 a[4];
438 int b;
439 simde_float32 r;
440 } test_vec[] = {
441 { { SIMDE_FLOAT32_C( 273.12), SIMDE_FLOAT32_C( 753.68), SIMDE_FLOAT32_C( -47.15), SIMDE_FLOAT32_C( 832.55) },
442 INT8_C( 1),
443 SIMDE_FLOAT32_C( 753.68) },
444 { { SIMDE_FLOAT32_C( -32.75), SIMDE_FLOAT32_C( 69.02), SIMDE_FLOAT32_C( 834.09), SIMDE_FLOAT32_C( 613.18) },
445 INT8_C( 3),
446 SIMDE_FLOAT32_C( 613.18) },
447 { { SIMDE_FLOAT32_C( -409.75), SIMDE_FLOAT32_C( -293.91), SIMDE_FLOAT32_C( -958.18), SIMDE_FLOAT32_C( -184.72) },
448 INT8_C( 3),
449 SIMDE_FLOAT32_C( -184.72) },
450 { { SIMDE_FLOAT32_C( -957.69), SIMDE_FLOAT32_C( 993.98), SIMDE_FLOAT32_C( 264.51), SIMDE_FLOAT32_C( -192.93) },
451 INT8_C( 3),
452 SIMDE_FLOAT32_C( -192.93) },
453 { { SIMDE_FLOAT32_C( 970.45), SIMDE_FLOAT32_C( 778.50), SIMDE_FLOAT32_C( 196.11), SIMDE_FLOAT32_C( 650.20) },
454 INT8_C( 1),
455 SIMDE_FLOAT32_C( 778.50) },
456 { { SIMDE_FLOAT32_C( -845.53), SIMDE_FLOAT32_C( -889.17), SIMDE_FLOAT32_C( -363.16), SIMDE_FLOAT32_C( 770.16) },
457 INT8_C( 3),
458 SIMDE_FLOAT32_C( 770.16) },
459 { { SIMDE_FLOAT32_C( 532.17), SIMDE_FLOAT32_C( 43.28), SIMDE_FLOAT32_C( 39.43), SIMDE_FLOAT32_C( -514.98) },
460 INT8_C( 1),
461 SIMDE_FLOAT32_C( 43.28) },
462 { { SIMDE_FLOAT32_C( 35.67), SIMDE_FLOAT32_C( 452.27), SIMDE_FLOAT32_C( 944.85), SIMDE_FLOAT32_C( -130.24) },
463 INT8_C( 3),
464 SIMDE_FLOAT32_C( -130.24) },
465
466 };
467
468 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
469 simde_float32x4_t a = simde_vld1q_f32(test_vec[i].a);
470 int b = test_vec[i].b;
471 simde_float32 r;
472 SIMDE_CONSTIFY_4_(simde_vgetq_lane_f32, r, (HEDLEY_UNREACHABLE(), SIMDE_FLOAT32_C(0.0)), b, a);
473
474 simde_assert_equal_f32(r, test_vec[i].r, 1);
475 }
476
477 return 0;
478 }
479
480 static int
test_simde_vgetq_lane_f64(SIMDE_MUNIT_TEST_ARGS)481 test_simde_vgetq_lane_f64 (SIMDE_MUNIT_TEST_ARGS) {
482 struct {
483 simde_float64 a[2];
484 int b;
485 simde_float64 r;
486 } test_vec[] = {
487 { { SIMDE_FLOAT64_C( 629.36), SIMDE_FLOAT64_C( -547.88) },
488 INT8_C( 1),
489 SIMDE_FLOAT64_C( -547.88) },
490 { { SIMDE_FLOAT64_C( -917.95), SIMDE_FLOAT64_C( -153.86) },
491 INT8_C( 1),
492 SIMDE_FLOAT64_C( -153.86) },
493 { { SIMDE_FLOAT64_C( 233.05), SIMDE_FLOAT64_C( -687.76) },
494 INT8_C( 1),
495 SIMDE_FLOAT64_C( -687.76) },
496 { { SIMDE_FLOAT64_C( 358.76), SIMDE_FLOAT64_C( -20.52) },
497 INT8_C( 1),
498 SIMDE_FLOAT64_C( -20.52) },
499 { { SIMDE_FLOAT64_C( 501.06), SIMDE_FLOAT64_C( -830.23) },
500 INT8_C( 1),
501 SIMDE_FLOAT64_C( -830.23) },
502 { { SIMDE_FLOAT64_C( -204.70), SIMDE_FLOAT64_C( -481.76) },
503 INT8_C( 1),
504 SIMDE_FLOAT64_C( -481.76) },
505 { { SIMDE_FLOAT64_C( -746.83), SIMDE_FLOAT64_C( -28.88) },
506 INT8_C( 1),
507 SIMDE_FLOAT64_C( -28.88) },
508 { { SIMDE_FLOAT64_C( 935.21), SIMDE_FLOAT64_C( -696.96) },
509 INT8_C( 1),
510 SIMDE_FLOAT64_C( -696.96) },
511
512 };
513
514 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
515 simde_float64x2_t a = simde_vld1q_f64(test_vec[i].a);
516 int b = test_vec[i].b;
517 simde_float64 r;
518 SIMDE_CONSTIFY_2_(simde_vgetq_lane_f64, r, (HEDLEY_UNREACHABLE(), SIMDE_FLOAT64_C(0.0)), b, a);
519
520 simde_assert_equal_f64(r, test_vec[i].r, 1);
521 }
522
523 return 0;
524 }
525
526 static int
test_simde_vgetq_lane_s8(SIMDE_MUNIT_TEST_ARGS)527 test_simde_vgetq_lane_s8 (SIMDE_MUNIT_TEST_ARGS) {
528 struct {
529 int8_t a[16];
530 int b;
531 int8_t r;
532 } test_vec[] = {
533 { { INT8_C( 62), INT8_C( 17), INT8_C( 52), INT8_C( 30), -INT8_C( 59), -INT8_C( 118), -INT8_C( 42), INT8_C( 25),
534 -INT8_C( 15), -INT8_C( 48), -INT8_C( 40), -INT8_C( 27), INT8_C( 102), INT8_C( 24), -INT8_C( 127), -INT8_C( 50) },
535 INT8_C( 4),
536 -INT8_C( 59) },
537 { { -INT8_C( 121), -INT8_C( 43), -INT8_C( 86), INT8_C( 63), INT8_C( 7), INT8_C( 83), INT8_C( 53), INT8_C( 61),
538 -INT8_C( 4), INT8_C( 81), INT8_C( 2), INT8_C( 47), -INT8_C( 19), -INT8_C( 112), INT8_C( 109), -INT8_C( 2) },
539 INT8_C( 4),
540 INT8_C( 7) },
541 { { -INT8_C( 117), -INT8_C( 61), INT8_C( 78), INT8_C( 97), -INT8_C( 36), INT8_C( 63), INT8_C( 50), -INT8_C( 76),
542 INT8_C( 36), -INT8_C( 104), -INT8_C( 51), -INT8_C( 90), INT8_C( 102), INT8_C( 81), INT8_C( 45), INT8_C( 59) },
543 INT8_C( 11),
544 -INT8_C( 90) },
545 { { INT8_C( 108), INT8_C( 66), INT8_C( 78), -INT8_C( 94), INT8_MIN, INT8_C( 74), -INT8_C( 13), -INT8_C( 126),
546 INT8_C( 121), -INT8_C( 32), INT8_C( 18), -INT8_C( 25), -INT8_C( 34), -INT8_C( 41), INT8_C( 114), -INT8_C( 94) },
547 INT8_C( 5),
548 INT8_C( 74) },
549 { { -INT8_C( 44), INT8_C( 126), INT8_C( 101), INT8_C( 6), INT8_C( 51), -INT8_C( 119), -INT8_C( 98), INT8_C( 0),
550 INT8_C( 47), INT8_C( 4), INT8_C( 81), INT8_C( 93), INT8_C( 64), INT8_C( 77), -INT8_C( 55), -INT8_C( 126) },
551 INT8_C( 11),
552 INT8_C( 93) },
553 { { INT8_C( 107), INT8_C( 2), -INT8_C( 26), INT8_C( 95), -INT8_C( 124), INT8_C( 95), INT8_C( 63), -INT8_C( 105),
554 INT8_C( 70), INT8_C( 30), INT8_C( 110), -INT8_C( 71), -INT8_C( 64), -INT8_C( 109), -INT8_C( 115), INT8_C( 62) },
555 INT8_C( 8),
556 INT8_C( 70) },
557 { { -INT8_C( 109), INT8_C( 113), -INT8_C( 126), INT8_C( 49), INT8_C( 113), -INT8_C( 79), INT8_C( 53), -INT8_C( 61),
558 INT8_C( 14), INT8_C( 117), INT8_C( 16), -INT8_C( 40), -INT8_C( 8), -INT8_C( 85), INT8_C( 67), -INT8_C( 6) },
559 INT8_C( 1),
560 INT8_C( 113) },
561 { { -INT8_C( 94), INT8_MAX, -INT8_C( 15), -INT8_C( 30), INT8_C( 22), INT8_C( 55), INT8_C( 0), -INT8_C( 124),
562 -INT8_C( 16), -INT8_C( 64), INT8_C( 23), INT8_C( 125), -INT8_C( 2), INT8_C( 16), INT8_C( 16), INT8_C( 112) },
563 INT8_C( 2),
564 -INT8_C( 15) },
565
566 };
567
568 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
569 simde_int8x16_t a = simde_vld1q_s8(test_vec[i].a);
570 int b = test_vec[i].b;
571 int8_t r;
572 SIMDE_CONSTIFY_16_(simde_vgetq_lane_s8, r, (HEDLEY_UNREACHABLE(), 0), b, a);
573
574 simde_assert_equal_i8(r, test_vec[i].r);
575 }
576
577 return 0;
578 }
579
580 static int
test_simde_vgetq_lane_s16(SIMDE_MUNIT_TEST_ARGS)581 test_simde_vgetq_lane_s16 (SIMDE_MUNIT_TEST_ARGS) {
582 struct {
583 int16_t a[8];
584 int b;
585 int16_t r;
586 } test_vec[] = {
587 { { INT16_C( 16940), -INT16_C( 29603), -INT16_C( 16153), -INT16_C( 3490), -INT16_C( 19383), INT16_C( 28817), INT16_C( 5341), INT16_C( 6146) },
588 INT8_C( 4),
589 -INT16_C( 19383) },
590 { { -INT16_C( 22867), INT16_C( 27147), INT16_C( 18990), INT16_C( 5131), INT16_C( 18178), -INT16_C( 29906), -INT16_C( 10956), INT16_C( 30392) },
591 INT8_C( 2),
592 INT16_C( 18990) },
593 { { INT16_C( 23876), -INT16_C( 23822), INT16_C( 15439), -INT16_C( 8105), INT16_C( 13484), -INT16_C( 20748), -INT16_C( 10164), -INT16_C( 3493) },
594 INT8_C( 3),
595 -INT16_C( 8105) },
596 { { INT16_C( 8645), -INT16_C( 12242), INT16_C( 12341), INT16_C( 25623), INT16_C( 19644), INT16_C( 29753), INT16_C( 27586), INT16_C( 8376) },
597 INT8_C( 6),
598 INT16_C( 27586) },
599 { { INT16_C( 28507), -INT16_C( 19814), INT16_C( 18000), INT16_C( 17638), INT16_C( 13044), INT16_C( 20253), INT16_C( 37), INT16_C( 17940) },
600 INT8_C( 6),
601 INT16_C( 37) },
602 { { INT16_C( 31717), -INT16_C( 929), INT16_C( 7135), INT16_C( 6216), INT16_C( 2959), INT16_C( 18308), -INT16_C( 7637), -INT16_C( 25950) },
603 INT8_C( 4),
604 INT16_C( 2959) },
605 { { -INT16_C( 5548), INT16_C( 15042), -INT16_C( 18897), INT16_C( 19565), -INT16_C( 28155), INT16_C( 6476), INT16_C( 31704), INT16_C( 21502) },
606 INT8_C( 2),
607 -INT16_C( 18897) },
608 { { INT16_C( 13307), INT16_C( 17397), -INT16_C( 31669), -INT16_C( 12466), INT16_C( 31179), INT16_C( 28337), INT16_C( 11540), -INT16_C( 318) },
609 INT8_C( 7),
610 -INT16_C( 318) },
611
612 };
613
614 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
615 simde_int16x8_t a = simde_vld1q_s16(test_vec[i].a);
616 int b = test_vec[i].b;
617 int16_t r;
618 SIMDE_CONSTIFY_8_(simde_vgetq_lane_s16, r, (HEDLEY_UNREACHABLE(), 0), b, a);
619
620 simde_assert_equal_i16(r, test_vec[i].r);
621 }
622
623 return 0;
624 }
625
626 static int
test_simde_vgetq_lane_s32(SIMDE_MUNIT_TEST_ARGS)627 test_simde_vgetq_lane_s32 (SIMDE_MUNIT_TEST_ARGS) {
628 struct {
629 int32_t a[4];
630 int b;
631 int32_t r;
632 } test_vec[] = {
633 { { -INT32_C( 382002186), INT32_C( 1860295962), INT32_C( 860430686), -INT32_C( 1104420096) },
634 INT8_C( 1),
635 INT32_C( 1860295962) },
636 { { -INT32_C( 1513067068), -INT32_C( 120501551), -INT32_C( 1300405244), INT32_C( 262707700) },
637 INT8_C( 0),
638 -INT32_C( 1513067068) },
639 { { INT32_C( 1941055890), -INT32_C( 510390121), INT32_C( 1875153987), -INT32_C( 1070336685) },
640 INT8_C( 2),
641 INT32_C( 1875153987) },
642 { { -INT32_C( 1458531880), INT32_C( 101520521), INT32_C( 1872691654), INT32_C( 956396304) },
643 INT8_C( 1),
644 INT32_C( 101520521) },
645 { { INT32_C( 137744756), INT32_C( 1990031794), INT32_C( 460058856), INT32_C( 1106522544) },
646 INT8_C( 1),
647 INT32_C( 1990031794) },
648 { { -INT32_C( 1420375395), INT32_C( 1873550544), -INT32_C( 1931297397), -INT32_C( 956299018) },
649 INT8_C( 1),
650 INT32_C( 1873550544) },
651 { { -INT32_C( 1497990903), INT32_C( 1536597743), -INT32_C( 1366538566), INT32_C( 1363922567) },
652 INT8_C( 0),
653 -INT32_C( 1497990903) },
654 { { -INT32_C( 1556078090), INT32_C( 1918946448), INT32_C( 1501189720), -INT32_C( 1755138018) },
655 INT8_C( 2),
656 INT32_C( 1501189720) },
657
658 };
659
660 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
661 simde_int32x4_t a = simde_vld1q_s32(test_vec[i].a);
662 int b = test_vec[i].b;
663 int32_t r;
664 SIMDE_CONSTIFY_4_(simde_vgetq_lane_s32, r, (HEDLEY_UNREACHABLE(), 0), b, a);
665 simde_assert_equal_i32(r, test_vec[i].r);
666 }
667
668 return 0;
669 }
670
671 static int
test_simde_vgetq_lane_s64(SIMDE_MUNIT_TEST_ARGS)672 test_simde_vgetq_lane_s64 (SIMDE_MUNIT_TEST_ARGS) {
673 struct {
674 int64_t a[2];
675 int b;
676 int64_t r;
677 } test_vec[] = {
678 { { INT64_C( 3728751874968948413), INT64_C( 5321062654944271890) },
679 INT8_C( 1),
680 INT64_C( 5321062654944271890) },
681 { { -INT64_C( 6526973102782903603), INT64_C( 4086456640948673758) },
682 INT8_C( 0),
683 -INT64_C( 6526973102782903603) },
684 { { INT64_C( 821728255052303305), -INT64_C( 8871372210728488644) },
685 INT8_C( 1),
686 -INT64_C( 8871372210728488644) },
687 { { INT64_C( 9063507124988743488), -INT64_C( 755308779427368444) },
688 INT8_C( 1),
689 -INT64_C( 755308779427368444) },
690 { { -INT64_C( 4601413837701090548), -INT64_C( 5568997109630427501) },
691 INT8_C( 1),
692 -INT64_C( 5568997109630427501) },
693 { { INT64_C( 7249722157166126946), -INT64_C( 5802075325525506327) },
694 INT8_C( 1),
695 -INT64_C( 5802075325525506327) },
696 { { INT64_C( 4192912744441392621), -INT64_C( 1385899749073431636) },
697 INT8_C( 0),
698 INT64_C( 4192912744441392621) },
699 { { INT64_C( 3662145803337978095), -INT64_C( 1557336465030705668) },
700 INT8_C( 0),
701 INT64_C( 3662145803337978095) },
702
703 };
704
705 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
706 simde_int64x2_t a = simde_vld1q_s64(test_vec[i].a);
707 int b = test_vec[i].b;
708 int64_t r;
709 SIMDE_CONSTIFY_2_(simde_vgetq_lane_s64, r, (HEDLEY_UNREACHABLE(), 0), b, a);
710 simde_assert_equal_i64(r, test_vec[i].r);
711 }
712
713 return 0;
714 }
715
716 static int
test_simde_vgetq_lane_u8(SIMDE_MUNIT_TEST_ARGS)717 test_simde_vgetq_lane_u8 (SIMDE_MUNIT_TEST_ARGS) {
718 struct {
719 uint8_t a[16];
720 int b;
721 uint8_t r;
722 } test_vec[] = {
723 { { UINT8_C(217), UINT8_C( 95), UINT8_C(111), UINT8_C(104), UINT8_C( 19), UINT8_C(112), UINT8_C(195), UINT8_C( 29),
724 UINT8_C(167), UINT8_C(167), UINT8_C( 53), UINT8_C(250), UINT8_C(196), UINT8_C(115), UINT8_C( 22), UINT8_C(127) },
725 INT8_C( 14),
726 UINT8_C( 22) },
727 { { UINT8_C(166), UINT8_C(247), UINT8_C( 43), UINT8_C( 33), UINT8_C(246), UINT8_C(230), UINT8_C(120), UINT8_C(202),
728 UINT8_C(208), UINT8_C(134), UINT8_C(111), UINT8_C(125), UINT8_C( 17), UINT8_C( 54), UINT8_C( 86), UINT8_C(112) },
729 INT8_C( 6),
730 UINT8_C(120) },
731 { { UINT8_C(191), UINT8_C(132), UINT8_C( 22), UINT8_C(130), UINT8_C(161), UINT8_C(189), UINT8_C( 41), UINT8_C(214),
732 UINT8_C(184), UINT8_C(237), UINT8_C( 73), UINT8_C(206), UINT8_C(108), UINT8_C(103), UINT8_C(117), UINT8_C( 99) },
733 INT8_C( 2),
734 UINT8_C( 22) },
735 { { UINT8_C(150), UINT8_C( 89), UINT8_C(120), UINT8_C( 14), UINT8_C( 36), UINT8_C( 72), UINT8_C(148), UINT8_C(147),
736 UINT8_C(197), UINT8_C(166), UINT8_C(201), UINT8_C( 28), UINT8_C( 22), UINT8_C(111), UINT8_C(219), UINT8_C(154) },
737 INT8_C( 6),
738 UINT8_C(148) },
739 { { UINT8_C( 93), UINT8_C( 59), UINT8_C( 67), UINT8_C(134), UINT8_C( 17), UINT8_C(251), UINT8_C(115), UINT8_C( 91),
740 UINT8_C(202), UINT8_C(223), UINT8_C(194), UINT8_C( 63), UINT8_C( 66), UINT8_C( 85), UINT8_C(213), UINT8_C(156) },
741 INT8_C( 13),
742 UINT8_C( 85) },
743 { { UINT8_C(227), UINT8_C(192), UINT8_C( 22), UINT8_C(120), UINT8_C( 83), UINT8_C(219), UINT8_C( 30), UINT8_C( 28),
744 UINT8_C(247), UINT8_C( 52), UINT8_C(140), UINT8_C(210), UINT8_C(207), UINT8_C( 18), UINT8_C( 47), UINT8_C( 10) },
745 INT8_C( 5),
746 UINT8_C(219) },
747 { { UINT8_C(181), UINT8_C( 28), UINT8_C( 81), UINT8_C( 40), UINT8_C(119), UINT8_C( 27), UINT8_C( 7), UINT8_C( 57),
748 UINT8_C( 90), UINT8_C( 74), UINT8_C(142), UINT8_C( 47), UINT8_C(230), UINT8_C( 92), UINT8_C( 18), UINT8_C(166) },
749 INT8_C( 2),
750 UINT8_C( 81) },
751 { { UINT8_C(138), UINT8_C(249), UINT8_C( 77), UINT8_C(168), UINT8_C( 21), UINT8_C( 69), UINT8_C(221), UINT8_C(161),
752 UINT8_C( 23), UINT8_C(172), UINT8_C(179), UINT8_C( 71), UINT8_C(182), UINT8_C( 9), UINT8_C(252), UINT8_C(210) },
753 INT8_C( 10),
754 UINT8_C(179) },
755
756 };
757
758 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
759 simde_uint8x16_t a = simde_vld1q_u8(test_vec[i].a);
760 int b = test_vec[i].b;
761 uint8_t r;
762 SIMDE_CONSTIFY_16_(simde_vgetq_lane_u8, r, (HEDLEY_UNREACHABLE(), 0), b, a);
763
764 simde_assert_equal_u8(r, test_vec[i].r);
765 }
766
767 return 0;
768 }
769
770 static int
test_simde_vgetq_lane_u16(SIMDE_MUNIT_TEST_ARGS)771 test_simde_vgetq_lane_u16 (SIMDE_MUNIT_TEST_ARGS) {
772 struct {
773 uint16_t a[8];
774 int b;
775 uint16_t r;
776 } test_vec[] = {
777 { { UINT16_C(61091), UINT16_C(53658), UINT16_C(16697), UINT16_C( 5906), UINT16_C( 8437), UINT16_C(24513), UINT16_C(37350), UINT16_C(20655) },
778 INT8_C( 0),
779 UINT16_C(61091) },
780 { { UINT16_C(42027), UINT16_C(57525), UINT16_C(55191), UINT16_C(45942), UINT16_C( 7418), UINT16_C( 8850), UINT16_C(38827), UINT16_C(39366) },
781 INT8_C( 1),
782 UINT16_C(57525) },
783 { { UINT16_C(53911), UINT16_C(43634), UINT16_C(26601), UINT16_C(43978), UINT16_C(45510), UINT16_C(30268), UINT16_C(29697), UINT16_C(42401) },
784 INT8_C( 1),
785 UINT16_C(43634) },
786 { { UINT16_C(15490), UINT16_C(63489), UINT16_C(64495), UINT16_C(33044), UINT16_C(48926), UINT16_C(58393), UINT16_C(19032), UINT16_C(10875) },
787 INT8_C( 5),
788 UINT16_C(58393) },
789 { { UINT16_C( 5157), UINT16_C(61476), UINT16_C(60351), UINT16_C(64417), UINT16_C(41569), UINT16_C( 623), UINT16_C(38983), UINT16_C(33668) },
790 INT8_C( 1),
791 UINT16_C(61476) },
792 { { UINT16_C(29308), UINT16_C(37269), UINT16_C(46068), UINT16_C( 3408), UINT16_C(43415), UINT16_C( 4695), UINT16_C( 5331), UINT16_C(59192) },
793 INT8_C( 1),
794 UINT16_C(37269) },
795 { { UINT16_C(42536), UINT16_C(51492), UINT16_C(34209), UINT16_C( 4203), UINT16_C(45703), UINT16_C( 3241), UINT16_C(16949), UINT16_C(42888) },
796 INT8_C( 7),
797 UINT16_C(42888) },
798 { { UINT16_C(39705), UINT16_C(27274), UINT16_C( 8616), UINT16_C( 19), UINT16_C(58932), UINT16_C(27668), UINT16_C(19918), UINT16_C(29844) },
799 INT8_C( 1),
800 UINT16_C(27274) },
801
802 };
803
804 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
805 simde_uint16x8_t a = simde_vld1q_u16(test_vec[i].a);
806 int b = test_vec[i].b;
807 uint16_t r;
808 SIMDE_CONSTIFY_8_(simde_vgetq_lane_u16, r, (HEDLEY_UNREACHABLE(), 0), b, a);
809 simde_assert_equal_u16(r, test_vec[i].r);
810 }
811
812 return 0;
813 }
814
815 static int
test_simde_vgetq_lane_u32(SIMDE_MUNIT_TEST_ARGS)816 test_simde_vgetq_lane_u32 (SIMDE_MUNIT_TEST_ARGS) {
817 struct {
818 uint32_t a[4];
819 int b;
820 uint32_t r;
821 } test_vec[] = {
822 { { UINT32_C( 212833295), UINT32_C(2425004302), UINT32_C( 474038220), UINT32_C(2853920187) },
823 INT8_C( 0),
824 UINT32_C( 212833295) },
825 { { UINT32_C(2233196758), UINT32_C(2390980779), UINT32_C(2474222548), UINT32_C(1419939520) },
826 INT8_C( 1),
827 UINT32_C(2390980779) },
828 { { UINT32_C( 970875823), UINT32_C( 880388851), UINT32_C(3784455366), UINT32_C(3199696606) },
829 INT8_C( 1),
830 UINT32_C( 880388851) },
831 { { UINT32_C(3222366780), UINT32_C(1919149560), UINT32_C( 452993912), UINT32_C(3670687095) },
832 INT8_C( 3),
833 UINT32_C(3670687095) },
834 { { UINT32_C(2093338115), UINT32_C(2494598146), UINT32_C( 621973357), UINT32_C(3076631373) },
835 INT8_C( 0),
836 UINT32_C(2093338115) },
837 { { UINT32_C(2225188897), UINT32_C( 581376546), UINT32_C(4284423989), UINT32_C(3338828537) },
838 INT8_C( 3),
839 UINT32_C(3338828537) },
840 { { UINT32_C( 801884799), UINT32_C(1908291934), UINT32_C(3206286430), UINT32_C(1944181187) },
841 INT8_C( 2),
842 UINT32_C(3206286430) },
843 { { UINT32_C( 227841381), UINT32_C( 372033975), UINT32_C(3415221704), UINT32_C(3075133677) },
844 INT8_C( 3),
845 UINT32_C(3075133677) },
846
847 };
848
849 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
850 simde_uint32x4_t a = simde_vld1q_u32(test_vec[i].a);
851 int b = test_vec[i].b;
852 uint32_t r;
853 SIMDE_CONSTIFY_4_(simde_vgetq_lane_u32, r, (HEDLEY_UNREACHABLE(), 0), b, a);
854
855 simde_assert_equal_u32(r, test_vec[i].r);
856 }
857
858 return 0;
859 }
860
861 static int
test_simde_vgetq_lane_u64(SIMDE_MUNIT_TEST_ARGS)862 test_simde_vgetq_lane_u64 (SIMDE_MUNIT_TEST_ARGS) {
863 struct {
864 uint64_t a[2];
865 int b;
866 uint64_t r;
867 } test_vec[] = {
868 { { UINT64_C( 3092081787328485317), UINT64_C( 7985414882938276043) },
869 INT8_C( 1),
870 UINT64_C( 7985414882938276043) },
871 { { UINT64_C( 7025058213030416194), UINT64_C( 6780364979241558092) },
872 INT8_C( 1),
873 UINT64_C( 6780364979241558092) },
874 { { UINT64_C( 3391474989674094302), UINT64_C( 6056589457741813753) },
875 INT8_C( 0),
876 UINT64_C( 3391474989674094302) },
877 { { UINT64_C( 2242727670204370304), UINT64_C(16289431355216962840) },
878 INT8_C( 0),
879 UINT64_C( 2242727670204370304) },
880 { { UINT64_C(12501920663126502103), UINT64_C( 7356476994223244425) },
881 INT8_C( 0),
882 UINT64_C(12501920663126502103) },
883 { { UINT64_C( 5069585831496340757), UINT64_C( 3089409691725716985) },
884 INT8_C( 0),
885 UINT64_C( 5069585831496340757) },
886 { { UINT64_C( 8343717041656415431), UINT64_C( 6889051721661195117) },
887 INT8_C( 1),
888 UINT64_C( 6889051721661195117) },
889 { { UINT64_C( 1010574439278891982), UINT64_C(12967946829539362128) },
890 INT8_C( 1),
891 UINT64_C(12967946829539362128) },
892
893 };
894
895 for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
896 simde_uint64x2_t a = simde_vld1q_u64(test_vec[i].a);
897 int b = test_vec[i].b;
898 uint64_t r;
899 SIMDE_CONSTIFY_2_(simde_vgetq_lane_u64, r, (HEDLEY_UNREACHABLE(), 0), b, a);
900 simde_assert_equal_u64(r, test_vec[i].r);
901 }
902
903 return 0;
904 }
905
906 HEDLEY_DIAGNOSTIC_POP
907
908 SIMDE_TEST_FUNC_LIST_BEGIN
909 SIMDE_TEST_FUNC_LIST_ENTRY(vget_lane_f32)
910 SIMDE_TEST_FUNC_LIST_ENTRY(vget_lane_f64)
911 SIMDE_TEST_FUNC_LIST_ENTRY(vget_lane_s8)
912 SIMDE_TEST_FUNC_LIST_ENTRY(vget_lane_s16)
913 SIMDE_TEST_FUNC_LIST_ENTRY(vget_lane_s32)
914 SIMDE_TEST_FUNC_LIST_ENTRY(vget_lane_s64)
915 SIMDE_TEST_FUNC_LIST_ENTRY(vget_lane_u8)
916 SIMDE_TEST_FUNC_LIST_ENTRY(vget_lane_u16)
917 SIMDE_TEST_FUNC_LIST_ENTRY(vget_lane_u32)
918 SIMDE_TEST_FUNC_LIST_ENTRY(vget_lane_u64)
919
920 SIMDE_TEST_FUNC_LIST_ENTRY(vgetq_lane_f32)
921 SIMDE_TEST_FUNC_LIST_ENTRY(vgetq_lane_f64)
922 SIMDE_TEST_FUNC_LIST_ENTRY(vgetq_lane_s8)
923 SIMDE_TEST_FUNC_LIST_ENTRY(vgetq_lane_s16)
924 SIMDE_TEST_FUNC_LIST_ENTRY(vgetq_lane_s32)
925 SIMDE_TEST_FUNC_LIST_ENTRY(vgetq_lane_s64)
926 SIMDE_TEST_FUNC_LIST_ENTRY(vgetq_lane_u8)
927 SIMDE_TEST_FUNC_LIST_ENTRY(vgetq_lane_u16)
928 SIMDE_TEST_FUNC_LIST_ENTRY(vgetq_lane_u32)
929 SIMDE_TEST_FUNC_LIST_ENTRY(vgetq_lane_u64)
930 SIMDE_TEST_FUNC_LIST_END
931
932 #include "test-neon-footer.h"
933