Repository navigation
Expand file tree
/
Copy pathsse.c
More file actions
5764 lines (5285 loc) · 329 KB
/
Copy pathsse.c
File metadata and controls
5764 lines (5285 loc) · 329 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/* Copyright (c) 2017, 2019 Evan Nemerson <evan@nemerson.com>
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#define SIMDE_TESTS_CURRENT_ISAX sse
#include <simde/x86/sse2.h>
#include <test/x86/test-sse2.h>
#if defined(HEDLEY_MSVC_VERSION)
# pragma warning(disable:4223)
#endif
#if defined(HEDLEY_MSVC_VERSION)
# pragma warning(disable:4324)
#endif
static int
test_simde_mm_set_ps(SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_float32 a[sizeof(simde__m128) / sizeof(simde_float32)];
simde_float32 r[sizeof(simde__m128) / sizeof(simde_float32)];
} test_vec[8] = {
{ { SIMDE_FLOAT32_C( -97.93), SIMDE_FLOAT32_C( 487.12), SIMDE_FLOAT32_C( 843.18), SIMDE_FLOAT32_C( 237.66) },
{ SIMDE_FLOAT32_C( -97.93), SIMDE_FLOAT32_C( 487.12), SIMDE_FLOAT32_C( 843.18), SIMDE_FLOAT32_C( 237.66) } },
{ { SIMDE_FLOAT32_C( 627.94), SIMDE_FLOAT32_C( -96.43), SIMDE_FLOAT32_C( 561.80), SIMDE_FLOAT32_C( 279.44) },
{ SIMDE_FLOAT32_C( 627.94), SIMDE_FLOAT32_C( -96.43), SIMDE_FLOAT32_C( 561.80), SIMDE_FLOAT32_C( 279.44) } },
{ { SIMDE_FLOAT32_C( 624.69), SIMDE_FLOAT32_C( 44.07), SIMDE_FLOAT32_C( 250.52), SIMDE_FLOAT32_C( 5.41) },
{ SIMDE_FLOAT32_C( 624.69), SIMDE_FLOAT32_C( 44.07), SIMDE_FLOAT32_C( 250.52), SIMDE_FLOAT32_C( 5.41) } },
{ { SIMDE_FLOAT32_C( 782.09), SIMDE_FLOAT32_C( 437.78), SIMDE_FLOAT32_C( 640.50), SIMDE_FLOAT32_C( -79.45) },
{ SIMDE_FLOAT32_C( 782.09), SIMDE_FLOAT32_C( 437.78), SIMDE_FLOAT32_C( 640.50), SIMDE_FLOAT32_C( -79.45) } },
{ { SIMDE_FLOAT32_C( 962.63), SIMDE_FLOAT32_C( -46.96), SIMDE_FLOAT32_C( 706.41), SIMDE_FLOAT32_C( 465.51) },
{ SIMDE_FLOAT32_C( 962.63), SIMDE_FLOAT32_C( -46.96), SIMDE_FLOAT32_C( 706.41), SIMDE_FLOAT32_C( 465.51) } },
{ { SIMDE_FLOAT32_C( 701.40), SIMDE_FLOAT32_C( 189.03), SIMDE_FLOAT32_C( 149.80), SIMDE_FLOAT32_C( 519.08) },
{ SIMDE_FLOAT32_C( 701.40), SIMDE_FLOAT32_C( 189.03), SIMDE_FLOAT32_C( 149.80), SIMDE_FLOAT32_C( 519.08) } },
{ { SIMDE_FLOAT32_C( 706.01), SIMDE_FLOAT32_C( 918.36), SIMDE_FLOAT32_C( 149.95), SIMDE_FLOAT32_C( 205.77) },
{ SIMDE_FLOAT32_C( 706.01), SIMDE_FLOAT32_C( 918.36), SIMDE_FLOAT32_C( 149.95), SIMDE_FLOAT32_C( 205.77) } },
{ { SIMDE_FLOAT32_C( -61.28), SIMDE_FLOAT32_C( 87.71), SIMDE_FLOAT32_C( 709.93), SIMDE_FLOAT32_C( -59.21) },
{ SIMDE_FLOAT32_C( -61.28), SIMDE_FLOAT32_C( 87.71), SIMDE_FLOAT32_C( 709.93), SIMDE_FLOAT32_C( -59.21) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float32* a = test_vec[i].a;
simde__m128 r = simde_mm_set_ps(a[3], a[2], a[1], a[0]);
simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
}
return 0;
}
static int
test_simde_mm_set_ps1(SIMDE_MUNIT_TEST_ARGS) {
const struct {
float a;
simde__m128 r;
} test_vec[8] = {
{ 0.29f,
simde_mm_set_ps(SIMDE_FLOAT32_C( 0.29), SIMDE_FLOAT32_C( 0.29), SIMDE_FLOAT32_C( 0.29), SIMDE_FLOAT32_C( 0.29)) },
{ 0.14f,
simde_mm_set_ps(SIMDE_FLOAT32_C( 0.14), SIMDE_FLOAT32_C( 0.14), SIMDE_FLOAT32_C( 0.14), SIMDE_FLOAT32_C( 0.14)) },
{ 0.98f,
simde_mm_set_ps(SIMDE_FLOAT32_C( 0.98), SIMDE_FLOAT32_C( 0.98), SIMDE_FLOAT32_C( 0.98), SIMDE_FLOAT32_C( 0.98)) },
{ 0.88f,
simde_mm_set_ps(SIMDE_FLOAT32_C( 0.88), SIMDE_FLOAT32_C( 0.88), SIMDE_FLOAT32_C( 0.88), SIMDE_FLOAT32_C( 0.88)) },
{ 0.92f,
simde_mm_set_ps(SIMDE_FLOAT32_C( 0.92), SIMDE_FLOAT32_C( 0.92), SIMDE_FLOAT32_C( 0.92), SIMDE_FLOAT32_C( 0.92)) },
{ 0.07f,
simde_mm_set_ps(SIMDE_FLOAT32_C( 0.07), SIMDE_FLOAT32_C( 0.07), SIMDE_FLOAT32_C( 0.07), SIMDE_FLOAT32_C( 0.07)) },
{ 0.66f,
simde_mm_set_ps(SIMDE_FLOAT32_C( 0.66), SIMDE_FLOAT32_C( 0.66), SIMDE_FLOAT32_C( 0.66), SIMDE_FLOAT32_C( 0.66)) },
{ 0.47f,
simde_mm_set_ps(SIMDE_FLOAT32_C( 0.47), SIMDE_FLOAT32_C( 0.47), SIMDE_FLOAT32_C( 0.47), SIMDE_FLOAT32_C( 0.47)) },
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
simde__m128 r = simde_mm_set_ps1(test_vec[i].a);
simde_test_x86_assert_equal_f32x4(r, test_vec[i].r, 1);
}
return 0;
}
static int
test_simde_mm_set_ss(SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_float32 a;
simde_float32 r[sizeof(simde__m128) / sizeof(simde_float32)];
} test_vec[8] = {
{ SIMDE_FLOAT32_C(-521.61),
{ SIMDE_FLOAT32_C( -521.61), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) } },
{ SIMDE_FLOAT32_C(992.45),
{ SIMDE_FLOAT32_C( 992.45), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) } },
{ SIMDE_FLOAT32_C(274.16),
{ SIMDE_FLOAT32_C( 274.16), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) } },
{ SIMDE_FLOAT32_C(897.70),
{ SIMDE_FLOAT32_C( 897.70), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) } },
{ SIMDE_FLOAT32_C(-80.03),
{ SIMDE_FLOAT32_C( -80.03), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) } },
{ SIMDE_FLOAT32_C(-294.04),
{ SIMDE_FLOAT32_C( -294.04), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) } },
{ SIMDE_FLOAT32_C(421.54),
{ SIMDE_FLOAT32_C( 421.54), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) } },
{ SIMDE_FLOAT32_C(458.33),
{ SIMDE_FLOAT32_C( 458.33), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00), SIMDE_FLOAT32_C( 0.00) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128 r = simde_mm_set_ss(test_vec[i].a);
simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
}
return 0;
}
static int
test_simde_mm_set1_ps(SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_float32 a;
simde_float32 r[sizeof(simde__m128) / sizeof(simde_float32)];
} test_vec[8] = {
{ SIMDE_FLOAT32_C(968.47),
{ SIMDE_FLOAT32_C( 968.47), SIMDE_FLOAT32_C( 968.47), SIMDE_FLOAT32_C( 968.47), SIMDE_FLOAT32_C( 968.47) } },
{ SIMDE_FLOAT32_C(560.37),
{ SIMDE_FLOAT32_C( 560.37), SIMDE_FLOAT32_C( 560.37), SIMDE_FLOAT32_C( 560.37), SIMDE_FLOAT32_C( 560.37) } },
{ SIMDE_FLOAT32_C(509.11),
{ SIMDE_FLOAT32_C( 509.11), SIMDE_FLOAT32_C( 509.11), SIMDE_FLOAT32_C( 509.11), SIMDE_FLOAT32_C( 509.11) } },
{ SIMDE_FLOAT32_C(34.32),
{ SIMDE_FLOAT32_C( 34.32), SIMDE_FLOAT32_C( 34.32), SIMDE_FLOAT32_C( 34.32), SIMDE_FLOAT32_C( 34.32) } },
{ SIMDE_FLOAT32_C(-34.10),
{ SIMDE_FLOAT32_C( -34.10), SIMDE_FLOAT32_C( -34.10), SIMDE_FLOAT32_C( -34.10), SIMDE_FLOAT32_C( -34.10) } },
{ SIMDE_FLOAT32_C(357.28),
{ SIMDE_FLOAT32_C( 357.28), SIMDE_FLOAT32_C( 357.28), SIMDE_FLOAT32_C( 357.28), SIMDE_FLOAT32_C( 357.28) } },
{ SIMDE_FLOAT32_C(-650.83),
{ SIMDE_FLOAT32_C( -650.83), SIMDE_FLOAT32_C( -650.83), SIMDE_FLOAT32_C( -650.83), SIMDE_FLOAT32_C( -650.83) } },
{ SIMDE_FLOAT32_C(429.31),
{ SIMDE_FLOAT32_C( 429.31), SIMDE_FLOAT32_C( 429.31), SIMDE_FLOAT32_C( 429.31), SIMDE_FLOAT32_C( 429.31) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128 r = simde_mm_set1_ps(test_vec[i].a);
simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
}
return 0;
}
static int
test_simde_mm_setr_ps(SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_float32 a[sizeof(simde__m128) / sizeof(simde_float32)];
simde_float32 r[sizeof(simde__m128) / sizeof(simde_float32)];
} test_vec[8] = {
{ { SIMDE_FLOAT32_C( 955.73), SIMDE_FLOAT32_C( 396.29), SIMDE_FLOAT32_C( 305.27), SIMDE_FLOAT32_C( 896.93) },
{ SIMDE_FLOAT32_C( 896.93), SIMDE_FLOAT32_C( 305.27), SIMDE_FLOAT32_C( 396.29), SIMDE_FLOAT32_C( 955.73) } },
{ { SIMDE_FLOAT32_C( 982.30), SIMDE_FLOAT32_C( 209.24), SIMDE_FLOAT32_C( -25.84), SIMDE_FLOAT32_C( 23.25) },
{ SIMDE_FLOAT32_C( 23.25), SIMDE_FLOAT32_C( -25.84), SIMDE_FLOAT32_C( 209.24), SIMDE_FLOAT32_C( 982.30) } },
{ { SIMDE_FLOAT32_C( 860.95), SIMDE_FLOAT32_C( -26.58), SIMDE_FLOAT32_C( 238.44), SIMDE_FLOAT32_C( 340.72) },
{ SIMDE_FLOAT32_C( 340.72), SIMDE_FLOAT32_C( 238.44), SIMDE_FLOAT32_C( -26.58), SIMDE_FLOAT32_C( 860.95) } },
{ { SIMDE_FLOAT32_C( -48.15), SIMDE_FLOAT32_C( 640.42), SIMDE_FLOAT32_C( 675.86), SIMDE_FLOAT32_C( 647.82) },
{ SIMDE_FLOAT32_C( 647.82), SIMDE_FLOAT32_C( 675.86), SIMDE_FLOAT32_C( 640.42), SIMDE_FLOAT32_C( -48.15) } },
{ { SIMDE_FLOAT32_C( 453.33), SIMDE_FLOAT32_C( 576.55), SIMDE_FLOAT32_C( 828.03), SIMDE_FLOAT32_C( 770.37) },
{ SIMDE_FLOAT32_C( 770.37), SIMDE_FLOAT32_C( 828.03), SIMDE_FLOAT32_C( 576.55), SIMDE_FLOAT32_C( 453.33) } },
{ { SIMDE_FLOAT32_C( 438.60), SIMDE_FLOAT32_C( 313.90), SIMDE_FLOAT32_C( 397.19), SIMDE_FLOAT32_C( 64.15) },
{ SIMDE_FLOAT32_C( 64.15), SIMDE_FLOAT32_C( 397.19), SIMDE_FLOAT32_C( 313.90), SIMDE_FLOAT32_C( 438.60) } },
{ { SIMDE_FLOAT32_C( 430.55), SIMDE_FLOAT32_C( 275.82), SIMDE_FLOAT32_C( 482.54), SIMDE_FLOAT32_C( 85.82) },
{ SIMDE_FLOAT32_C( 85.82), SIMDE_FLOAT32_C( 482.54), SIMDE_FLOAT32_C( 275.82), SIMDE_FLOAT32_C( 430.55) } },
{ { SIMDE_FLOAT32_C( 486.66), SIMDE_FLOAT32_C( 277.28), SIMDE_FLOAT32_C( 62.44), SIMDE_FLOAT32_C( 442.39) },
{ SIMDE_FLOAT32_C( 442.39), SIMDE_FLOAT32_C( 62.44), SIMDE_FLOAT32_C( 277.28), SIMDE_FLOAT32_C( 486.66) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde_float32* a = test_vec[i].a;
simde__m128 r = simde_mm_setr_ps(a[3], a[2], a[1], a[0]);
simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
}
return 0;
}
static int
test_simde_mm_setzero_ps(SIMDE_MUNIT_TEST_ARGS) {
simde_test_x86_assert_equal_f32x4(simde_mm_setzero_ps(), simde_mm_set1_ps(0.0f), 1);
return 0;
}
static int
test_simde_x_mm_setone_ps(SIMDE_MUNIT_TEST_ARGS) {
simde__m128 r = simde_x_mm_setone_ps();
simde_test_x86_assert_equal_u32x4(simde_mm_castps_si128(r), simde_mm_set1_epi32(~INT32_C(0)));
return 0;
}
static int
test_simde_x_mm_abs_ps (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
const simde_float32 a[4];
const simde_float32 r[4];
} test_vec[] = {
{ { SIMDE_FLOAT32_C( -421.46), SIMDE_FLOAT32_C( -889.21), SIMDE_FLOAT32_C( -223.16), SIMDE_FLOAT32_C( 165.23) },
{ SIMDE_FLOAT32_C( 421.46), SIMDE_FLOAT32_C( 889.21), SIMDE_FLOAT32_C( 223.16), SIMDE_FLOAT32_C( 165.23) } },
{ { SIMDE_FLOAT32_C( -519.69), SIMDE_FLOAT32_C( 704.36), SIMDE_FLOAT32_C( 72.76), SIMDE_FLOAT32_C( 522.49) },
{ SIMDE_FLOAT32_C( 519.69), SIMDE_FLOAT32_C( 704.36), SIMDE_FLOAT32_C( 72.76), SIMDE_FLOAT32_C( 522.49) } },
{ { SIMDE_FLOAT32_C( 870.86), SIMDE_FLOAT32_C( -918.56), SIMDE_FLOAT32_C( 997.87), SIMDE_FLOAT32_C( 143.92) },
{ SIMDE_FLOAT32_C( 870.86), SIMDE_FLOAT32_C( 918.56), SIMDE_FLOAT32_C( 997.87), SIMDE_FLOAT32_C( 143.92) } },
{ { SIMDE_FLOAT32_C( 368.61), SIMDE_FLOAT32_C( 537.92), SIMDE_FLOAT32_C( 637.07), SIMDE_FLOAT32_C( -512.16) },
{ SIMDE_FLOAT32_C( 368.61), SIMDE_FLOAT32_C( 537.92), SIMDE_FLOAT32_C( 637.07), SIMDE_FLOAT32_C( 512.16) } },
{ { SIMDE_FLOAT32_C( 125.42), SIMDE_FLOAT32_C( 861.61), SIMDE_FLOAT32_C( -914.90), SIMDE_FLOAT32_C( -887.65) },
{ SIMDE_FLOAT32_C( 125.42), SIMDE_FLOAT32_C( 861.61), SIMDE_FLOAT32_C( 914.90), SIMDE_FLOAT32_C( 887.65) } },
{ { SIMDE_FLOAT32_C( -429.10), SIMDE_FLOAT32_C( 351.84), SIMDE_FLOAT32_C( 840.63), SIMDE_FLOAT32_C( -928.69) },
{ SIMDE_FLOAT32_C( 429.10), SIMDE_FLOAT32_C( 351.84), SIMDE_FLOAT32_C( 840.63), SIMDE_FLOAT32_C( 928.69) } },
{ { SIMDE_FLOAT32_C( -715.59), SIMDE_FLOAT32_C( 906.22), SIMDE_FLOAT32_C( -64.85), SIMDE_FLOAT32_C( 686.85) },
{ SIMDE_FLOAT32_C( 715.59), SIMDE_FLOAT32_C( 906.22), SIMDE_FLOAT32_C( 64.85), SIMDE_FLOAT32_C( 686.85) } },
{ { SIMDE_FLOAT32_C( 445.44), SIMDE_FLOAT32_C( 794.89), SIMDE_FLOAT32_C( 44.90), SIMDE_FLOAT32_C( -976.02) },
{ SIMDE_FLOAT32_C( 445.44), SIMDE_FLOAT32_C( 794.89), SIMDE_FLOAT32_C( 44.90), SIMDE_FLOAT32_C( 976.02) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128 a = simde_mm_loadu_ps(test_vec[i].a);
simde__m128 r = simde_x_mm_abs_ps(a);
simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
}
return 0;
}
static int
test_simde_mm_add_ps (SIMDE_MUNIT_TEST_ARGS) {
struct {
simde_float32 a[4];
simde_float32 b[4];
simde_float32 r[4];
} test_vec[] = {
{ { SIMDE_FLOAT32_C( 83.02), SIMDE_FLOAT32_C( 389.11), SIMDE_FLOAT32_C( -551.93), SIMDE_FLOAT32_C( 499.43) },
{ SIMDE_FLOAT32_C( 438.42), SIMDE_FLOAT32_C( 399.55), SIMDE_FLOAT32_C( -203.56), SIMDE_FLOAT32_C( 299.49) },
{ SIMDE_FLOAT32_C( 521.44), SIMDE_FLOAT32_C( 788.66), SIMDE_FLOAT32_C( -755.49), SIMDE_FLOAT32_C( 798.92) } },
{ { SIMDE_FLOAT32_C( -379.62), SIMDE_FLOAT32_C( 462.50), SIMDE_FLOAT32_C( -825.60), SIMDE_FLOAT32_C( 38.74) },
{ SIMDE_FLOAT32_C( 149.18), SIMDE_FLOAT32_C( 29.45), SIMDE_FLOAT32_C( 149.99), SIMDE_FLOAT32_C( 766.00) },
{ SIMDE_FLOAT32_C( -230.44), SIMDE_FLOAT32_C( 491.94), SIMDE_FLOAT32_C( -675.61), SIMDE_FLOAT32_C( 804.74) } },
{ { SIMDE_FLOAT32_C( 856.05), SIMDE_FLOAT32_C( 987.49), SIMDE_FLOAT32_C( -70.35), SIMDE_FLOAT32_C( -659.83) },
{ SIMDE_FLOAT32_C( -940.54), SIMDE_FLOAT32_C( 739.82), SIMDE_FLOAT32_C( 922.41), SIMDE_FLOAT32_C( -908.67) },
{ SIMDE_FLOAT32_C( -84.49), SIMDE_FLOAT32_C( 1727.30), SIMDE_FLOAT32_C( 852.06), SIMDE_FLOAT32_C( -1568.50) } },
{ { SIMDE_FLOAT32_C( -590.79), SIMDE_FLOAT32_C( -852.37), SIMDE_FLOAT32_C( -630.57), SIMDE_FLOAT32_C( -823.06) },
{ SIMDE_FLOAT32_C( -434.22), SIMDE_FLOAT32_C( -548.87), SIMDE_FLOAT32_C( 5.97), SIMDE_FLOAT32_C( 648.80) },
{ SIMDE_FLOAT32_C( -1025.02), SIMDE_FLOAT32_C( -1401.25), SIMDE_FLOAT32_C( -624.60), SIMDE_FLOAT32_C( -174.26) } },
{ { SIMDE_FLOAT32_C( 840.24), SIMDE_FLOAT32_C( 454.04), SIMDE_FLOAT32_C( 148.23), SIMDE_FLOAT32_C( 278.66) },
{ SIMDE_FLOAT32_C( -146.41), SIMDE_FLOAT32_C( 944.67), SIMDE_FLOAT32_C( -421.85), SIMDE_FLOAT32_C( 473.97) },
{ SIMDE_FLOAT32_C( 693.83), SIMDE_FLOAT32_C( 1398.71), SIMDE_FLOAT32_C( -273.62), SIMDE_FLOAT32_C( 752.63) } },
{ { SIMDE_FLOAT32_C( 407.16), SIMDE_FLOAT32_C( -247.45), SIMDE_FLOAT32_C( -487.29), SIMDE_FLOAT32_C( -443.65) },
{ SIMDE_FLOAT32_C( 781.99), SIMDE_FLOAT32_C( 662.70), SIMDE_FLOAT32_C( -677.65), SIMDE_FLOAT32_C( 638.04) },
{ SIMDE_FLOAT32_C( 1189.16), SIMDE_FLOAT32_C( 415.25), SIMDE_FLOAT32_C( -1164.94), SIMDE_FLOAT32_C( 194.39) } },
{ { SIMDE_FLOAT32_C( 650.19), SIMDE_FLOAT32_C( 252.00), SIMDE_FLOAT32_C( 978.21), SIMDE_FLOAT32_C( 709.65) },
{ SIMDE_FLOAT32_C( -8.18), SIMDE_FLOAT32_C( 900.62), SIMDE_FLOAT32_C( 800.98), SIMDE_FLOAT32_C( 401.02) },
{ SIMDE_FLOAT32_C( 642.00), SIMDE_FLOAT32_C( 1152.62), SIMDE_FLOAT32_C( 1779.19), SIMDE_FLOAT32_C( 1110.67) } },
{ { SIMDE_FLOAT32_C( -951.75), SIMDE_FLOAT32_C( -829.59), SIMDE_FLOAT32_C( 577.96), SIMDE_FLOAT32_C( -385.97) },
{ SIMDE_FLOAT32_C( -378.46), SIMDE_FLOAT32_C( -416.07), SIMDE_FLOAT32_C( -737.17), SIMDE_FLOAT32_C( -538.23) },
{ SIMDE_FLOAT32_C( -1330.21), SIMDE_FLOAT32_C( -1245.67), SIMDE_FLOAT32_C( -159.21), SIMDE_FLOAT32_C( -924.20) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128 a = simde_mm_loadu_ps(test_vec[i].a);
simde__m128 b = simde_mm_loadu_ps(test_vec[i].b);
simde__m128 r = simde_mm_add_ps(a, b);
simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
}
return 0;
}
static int
test_simde_mm_add_ss(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m128 a;
simde__m128 b;
simde__m128 r;
} test_vec[8] = {
{ simde_mm_set_ps(SIMDE_FLOAT32_C( 807.64), SIMDE_FLOAT32_C( 618.52), SIMDE_FLOAT32_C( -396.84), SIMDE_FLOAT32_C( -297.31)),
simde_mm_set_ps(SIMDE_FLOAT32_C( -471.66), SIMDE_FLOAT32_C( 713.91), SIMDE_FLOAT32_C( 549.43), SIMDE_FLOAT32_C( -169.45)),
simde_mm_set_ps(SIMDE_FLOAT32_C( 807.64), SIMDE_FLOAT32_C( 618.52), SIMDE_FLOAT32_C( -396.84), SIMDE_FLOAT32_C( -466.76)) },
{ simde_mm_set_ps(SIMDE_FLOAT32_C( 544.68), SIMDE_FLOAT32_C( 42.73), SIMDE_FLOAT32_C( -460.22), SIMDE_FLOAT32_C( -292.61)),
simde_mm_set_ps(SIMDE_FLOAT32_C( 187.56), SIMDE_FLOAT32_C( -798.97), SIMDE_FLOAT32_C( 272.51), SIMDE_FLOAT32_C( 51.52)),
simde_mm_set_ps(SIMDE_FLOAT32_C( 544.68), SIMDE_FLOAT32_C( 42.73), SIMDE_FLOAT32_C( -460.22), SIMDE_FLOAT32_C( -241.09)) },
{ simde_mm_set_ps(SIMDE_FLOAT32_C( -110.27), SIMDE_FLOAT32_C( 680.50), SIMDE_FLOAT32_C( 761.66), SIMDE_FLOAT32_C( 277.48)),
simde_mm_set_ps(SIMDE_FLOAT32_C( -67.06), SIMDE_FLOAT32_C( 934.00), SIMDE_FLOAT32_C( 502.27), SIMDE_FLOAT32_C( 358.64)),
simde_mm_set_ps(SIMDE_FLOAT32_C( -110.27), SIMDE_FLOAT32_C( 680.50), SIMDE_FLOAT32_C( 761.66), SIMDE_FLOAT32_C( 636.12)) },
{ simde_mm_set_ps(SIMDE_FLOAT32_C( 434.09), SIMDE_FLOAT32_C( 948.98), SIMDE_FLOAT32_C( -323.81), SIMDE_FLOAT32_C( -338.37)),
simde_mm_set_ps(SIMDE_FLOAT32_C( -221.66), SIMDE_FLOAT32_C( -861.25), SIMDE_FLOAT32_C( 78.84), SIMDE_FLOAT32_C( -873.32)),
simde_mm_set_ps(SIMDE_FLOAT32_C( 434.09), SIMDE_FLOAT32_C( 948.98), SIMDE_FLOAT32_C( -323.81), SIMDE_FLOAT32_C(-1211.69)) },
{ simde_mm_set_ps(SIMDE_FLOAT32_C( -878.90), SIMDE_FLOAT32_C( -860.71), SIMDE_FLOAT32_C( 840.94), SIMDE_FLOAT32_C( 25.49)),
simde_mm_set_ps(SIMDE_FLOAT32_C( 571.90), SIMDE_FLOAT32_C( -703.66), SIMDE_FLOAT32_C( -53.73), SIMDE_FLOAT32_C( -560.77)),
simde_mm_set_ps(SIMDE_FLOAT32_C( -878.90), SIMDE_FLOAT32_C( -860.71), SIMDE_FLOAT32_C( 840.94), SIMDE_FLOAT32_C( -535.28)) },
{ simde_mm_set_ps(SIMDE_FLOAT32_C( 496.95), SIMDE_FLOAT32_C( -413.78), SIMDE_FLOAT32_C( -24.10), SIMDE_FLOAT32_C( 918.19)),
simde_mm_set_ps(SIMDE_FLOAT32_C( -8.88), SIMDE_FLOAT32_C( 751.51), SIMDE_FLOAT32_C( 315.02), SIMDE_FLOAT32_C( 734.82)),
simde_mm_set_ps(SIMDE_FLOAT32_C( 496.95), SIMDE_FLOAT32_C( -413.78), SIMDE_FLOAT32_C( -24.10), SIMDE_FLOAT32_C( 1653.01)) },
{ simde_mm_set_ps(SIMDE_FLOAT32_C( 101.05), SIMDE_FLOAT32_C( -424.85), SIMDE_FLOAT32_C( -158.08), SIMDE_FLOAT32_C( 354.83)),
simde_mm_set_ps(SIMDE_FLOAT32_C( 568.62), SIMDE_FLOAT32_C( -525.68), SIMDE_FLOAT32_C( 73.90), SIMDE_FLOAT32_C( -463.92)),
simde_mm_set_ps(SIMDE_FLOAT32_C( 101.05), SIMDE_FLOAT32_C( -424.85), SIMDE_FLOAT32_C( -158.08), SIMDE_FLOAT32_C( -109.09)) },
{ simde_mm_set_ps(SIMDE_FLOAT32_C( -477.51), SIMDE_FLOAT32_C( 986.65), SIMDE_FLOAT32_C( -44.77), SIMDE_FLOAT32_C( 993.26)),
simde_mm_set_ps(SIMDE_FLOAT32_C( 591.07), SIMDE_FLOAT32_C( 806.35), SIMDE_FLOAT32_C( -137.78), SIMDE_FLOAT32_C( -899.14)),
simde_mm_set_ps(SIMDE_FLOAT32_C( -477.51), SIMDE_FLOAT32_C( 986.65), SIMDE_FLOAT32_C( -44.77), SIMDE_FLOAT32_C( 94.12)) }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
simde__m128 r = simde_mm_add_ss(test_vec[i].a, test_vec[i].b);
simde_test_x86_assert_equal_f32x4(r, test_vec[i].r, 1);
}
return 0;
}
static int
test_simde_mm_and_ps(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m128i a;
simde__m128i b;
simde__m128i r;
} test_vec[8] = {
{ simde_mm_set_epi32(INT32_C( 230308132), INT32_C( -227837326), INT32_C( 2068647778), INT32_C( 339280616)),
simde_mm_set_epi32(INT32_C(-2005788472), INT32_C( 635603096), INT32_C( 1918425762), INT32_C( -674479342)),
simde_mm_set_epi32(INT32_C( 137500672), INT32_C( 543295504), INT32_C( 1917323810), INT32_C( 336069120)) },
{ simde_mm_set_epi32(INT32_C( -291660154), INT32_C( 1180299090), INT32_C( 1302245871), INT32_C(-2053540867)),
simde_mm_set_epi32(INT32_C( -87778126), INT32_C( -288172017), INT32_C( 1641035711), INT32_C( -987206598)),
simde_mm_set_epi32(INT32_C( -360407934), INT32_C( 1179699202), INT32_C( 1099968943), INT32_C(-2063048648)) },
{ simde_mm_set_epi32(INT32_C( 1329542878), INT32_C( 1207699188), INT32_C( 24647547), INT32_C( -417192016)),
simde_mm_set_epi32(INT32_C(-1903170010), INT32_C( 1636014785), INT32_C(-1789298238), INT32_C( 431363012)),
simde_mm_set_epi32(INT32_C( 235873798), INT32_C( 1098908352), INT32_C( 22548802), INT32_C( 19006336)) },
{ simde_mm_set_epi32(INT32_C( 1291921239), INT32_C(-2088318277), INT32_C( 293687175), INT32_C( -70855120)),
simde_mm_set_epi32(INT32_C( -181527647), INT32_C( 1885539289), INT32_C( 1200729803), INT32_C(-1998296563)),
simde_mm_set_epi32(INT32_C( 1157628673), INT32_C( 133785), INT32_C( 25235075), INT32_C(-2000403968)) },
{ simde_mm_set_epi32(INT32_C( -352637975), INT32_C( 1914022535), INT32_C( -883801519), INT32_C(-2099443995)),
simde_mm_set_epi32(INT32_C( 82894436), INT32_C( 345641451), INT32_C(-1766434082), INT32_C( 545403119)),
simde_mm_set_epi32(INT32_C( 15731296), INT32_C( 269484163), INT32_C(-2112732592), INT32_C( 8388837)) },
{ simde_mm_set_epi32(INT32_C(-1731787377), INT32_C( -251709819), INT32_C( 707964452), INT32_C( 1634791391)),
simde_mm_set_epi32(INT32_C( -198581371), INT32_C( 1425724652), INT32_C( -85534714), INT32_C( 593903546)),
simde_mm_set_epi32(INT32_C(-1878982267), INT32_C( 1358566532), INT32_C( 706906116), INT32_C( 559951770)) },
{ simde_mm_set_epi32(INT32_C( 1475548270), INT32_C( 196183104), INT32_C( 1788414168), INT32_C( -339387422)),
simde_mm_set_epi32(INT32_C( 372209195), INT32_C( 2023049541), INT32_C( 537336467), INT32_C(-1542274771)),
simde_mm_set_epi32(INT32_C( 371397674), INT32_C( 143720512), INT32_C( 536938640), INT32_C(-1610596064)) },
{ simde_mm_set_epi32(INT32_C( 1365641873), INT32_C(-1596735940), INT32_C( 1148782984), INT32_C( -513375328)),
simde_mm_set_epi32(INT32_C(-1663652637), INT32_C(-1297596491), INT32_C(-1521550159), INT32_C(-2063966090)),
simde_mm_set_epi32(INT32_C( 273025153), INT32_C(-1602208204), INT32_C( 71829632), INT32_C(-2141061088)) }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
simde__m128i r = simde_mm_castps_si128(simde_mm_and_ps(simde_mm_castsi128_ps(test_vec[i].a), simde_mm_castsi128_ps(test_vec[i].b)));
simde_test_x86_assert_equal_i32x4(test_vec[i].r, r);
}
return 0;
}
static int
test_simde_mm_andnot_ps(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m128i a;
simde__m128i b;
simde__m128i r;
} test_vec[8] = {
{ simde_mm_set_epi32(INT32_C( 1177189245), INT32_C( 1897888048), INT32_C(-1445410189), INT32_C(-2027773136)),
simde_mm_set_epi32(INT32_C(-1799619754), INT32_C( 1146608002), INT32_C( -118138295), INT32_C( -396850997)),
simde_mm_set_epi32(INT32_C(-1869512702), INT32_C( 71336066), INT32_C( 1344606216), INT32_C( 1750599883)) },
{ simde_mm_set_epi32(INT32_C( 207339929), INT32_C(-1653197317), INT32_C( 1742328793), INT32_C(-1943741545)),
simde_mm_set_epi32(INT32_C( 1475927203), INT32_C(-1393438167), INT32_C( -244601726), INT32_C(-1116772072)),
simde_mm_set_epi32(INT32_C( 1403001890), INT32_C( 545374720), INT32_C(-1876808702), INT32_C( 827006984)) },
{ simde_mm_set_epi32(INT32_C( 280787508), INT32_C( -476758383), INT32_C( -690500493), INT32_C( 1730225777)),
simde_mm_set_epi32(INT32_C( 455229920), INT32_C( 254808493), INT32_C( -318322364), INT32_C( -744606195)),
simde_mm_set_epi32(INT32_C( 184680896), INT32_C( 203424044), INT32_C( 687866116), INT32_C(-1868689396)) },
{ simde_mm_set_epi32(INT32_C( 1314224819), INT32_C( -883715485), INT32_C( 1830060352), INT32_C( 484123993)),
simde_mm_set_epi32(INT32_C(-1600415403), INT32_C( 1247040590), INT32_C( -903138997), INT32_C( 1339483582)),
simde_mm_set_epi32(INT32_C(-1601535676), INT32_C( 279564), INT32_C(-2111098869), INT32_C( 1124384934)) },
{ simde_mm_set_epi32(INT32_C( 491653802), INT32_C( 1332021673), INT32_C(-1558543881), INT32_C( 1668194718)),
simde_mm_set_epi32(INT32_C( 1904424558), INT32_C(-1115627084), INT32_C(-1533509640), INT32_C( 1120379446)),
simde_mm_set_epi32(INT32_C( 1619080260), INT32_C(-1333731308), INT32_C( 75529736), INT32_C( 8454688)) },
{ simde_mm_set_epi32(INT32_C( 1894428518), INT32_C( 1907474957), INT32_C( -645595730), INT32_C( -336066790)),
simde_mm_set_epi32(INT32_C( -923650038), INT32_C(-1468609389), INT32_C(-1710432847), INT32_C(-1709785329)),
simde_mm_set_epi32(INT32_C(-2012213240), INT32_C(-2008675182), INT32_C( 34078737), INT32_C( 268875781)) },
{ simde_mm_set_epi32(INT32_C( 194114005), INT32_C( 123455954), INT32_C(-1857684581), INT32_C( -281966329)),
simde_mm_set_epi32(INT32_C( -794388211), INT32_C(-1374144398), INT32_C( 1808738256), INT32_C( -8964047)),
simde_mm_set_epi32(INT32_C( -802813944), INT32_C(-1476382688), INT32_C( 1787429952), INT32_C( 273035312)) },
{ simde_mm_set_epi32(INT32_C(-1545262354), INT32_C( 905989253), INT32_C( -414577725), INT32_C( 1431039599)),
simde_mm_set_epi32(INT32_C( 1566256833), INT32_C(-1518668169), INT32_C(-1754223695), INT32_C( 1280260013)),
simde_mm_set_epi32(INT32_C( 1545208833), INT32_C(-2122665358), INT32_C( 271622192), INT32_C( 134484352)) }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
simde__m128i r = simde_mm_castps_si128(
simde_mm_andnot_ps(
simde_mm_castsi128_ps(test_vec[i].a),
simde_mm_castsi128_ps(test_vec[i].b)));
simde_test_x86_assert_equal_i32x4(r, test_vec[i].r);
}
return 0;
}
static int
test_simde_x_mm_not_ps (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
const int32_t a[4];
const int32_t r[4];
} test_vec[] = {
{ { -INT32_C( 1059535058), INT32_C( 2048808202), INT32_C( 683407848), INT32_C( 1249446257) },
{ INT32_C( 1059535057), -INT32_C( 2048808203), -INT32_C( 683407849), -INT32_C( 1249446258) } },
{ { -INT32_C( 1990686684), INT32_C( 961619650), INT32_C( 1292910096), INT32_C( 1808415805) },
{ INT32_C( 1990686683), -INT32_C( 961619651), -INT32_C( 1292910097), -INT32_C( 1808415806) } },
{ { INT32_C( 237740548), -INT32_C( 544650761), -INT32_C( 1274592190), INT32_C( 1912504653) },
{ -INT32_C( 237740549), INT32_C( 544650760), INT32_C( 1274592189), -INT32_C( 1912504654) } },
{ { -INT32_C( 872786423), -INT32_C( 1929098372), -INT32_C( 958786423), INT32_C( 1429382225) },
{ INT32_C( 872786422), INT32_C( 1929098371), INT32_C( 958786422), -INT32_C( 1429382226) } },
{ { INT32_C( 1029922118), -INT32_C( 383980377), INT32_C( 2107450160), -INT32_C( 1376871260) },
{ -INT32_C( 1029922119), INT32_C( 383980376), -INT32_C( 2107450161), INT32_C( 1376871259) } },
{ { INT32_C( 1870194930), -INT32_C( 1107526349), -INT32_C( 494676335), -INT32_C( 1070090886) },
{ -INT32_C( 1870194931), INT32_C( 1107526348), INT32_C( 494676334), INT32_C( 1070090885) } },
{ { -INT32_C( 1157784813), -INT32_C( 1197270649), -INT32_C( 516603588), -INT32_C( 812768035) },
{ INT32_C( 1157784812), INT32_C( 1197270648), INT32_C( 516603587), INT32_C( 812768034) } },
{ { INT32_C( 1077806860), INT32_C( 368917124), -INT32_C( 1963425776), INT32_C( 1229598518) },
{ -INT32_C( 1077806861), -INT32_C( 368917125), INT32_C( 1963425775), -INT32_C( 1229598519) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128i a = simde_x_mm_loadu_epi32(test_vec[i].a);
simde__m128i r = simde_mm_castps_si128(simde_x_mm_not_ps(simde_mm_castsi128_ps(a)));
simde_test_x86_assert_equal_i32x4(r, simde_x_mm_loadu_epi32(test_vec[i].r));
}
return 0;
}
static int
test_simde_x_mm_select_ps (SIMDE_MUNIT_TEST_ARGS) {
static const struct {
const simde_float32 a[4];
const simde_float32 b[4];
const simde_float32 r[4];
} test_vec[] = {
{ { SIMDE_FLOAT32_C( 689.01), SIMDE_FLOAT32_C( -11.14), SIMDE_FLOAT32_C( 334.10), SIMDE_FLOAT32_C( 442.90) },
{ SIMDE_FLOAT32_C( -212.34), SIMDE_FLOAT32_C( -259.33), SIMDE_FLOAT32_C( 883.69), SIMDE_FLOAT32_C( 488.72) },
{ SIMDE_FLOAT32_C( -212.34), SIMDE_FLOAT32_C( -259.33), SIMDE_FLOAT32_C( 334.10), SIMDE_FLOAT32_C( 442.90) } },
{ { SIMDE_FLOAT32_C( -26.63), SIMDE_FLOAT32_C( -842.74), SIMDE_FLOAT32_C( -183.46), SIMDE_FLOAT32_C( -506.27) },
{ SIMDE_FLOAT32_C( 624.94), SIMDE_FLOAT32_C( -269.87), SIMDE_FLOAT32_C( -399.29), SIMDE_FLOAT32_C( 452.04) },
{ SIMDE_FLOAT32_C( -26.63), SIMDE_FLOAT32_C( -842.74), SIMDE_FLOAT32_C( -399.29), SIMDE_FLOAT32_C( -506.27) } },
{ { SIMDE_FLOAT32_C( -903.49), SIMDE_FLOAT32_C( -810.21), SIMDE_FLOAT32_C( 457.27), SIMDE_FLOAT32_C( -144.98) },
{ SIMDE_FLOAT32_C( -658.80), SIMDE_FLOAT32_C( -235.68), SIMDE_FLOAT32_C( 453.63), SIMDE_FLOAT32_C( -772.14) },
{ SIMDE_FLOAT32_C( -903.49), SIMDE_FLOAT32_C( -810.21), SIMDE_FLOAT32_C( 453.63), SIMDE_FLOAT32_C( -772.14) } },
{ { SIMDE_FLOAT32_C( 598.69), SIMDE_FLOAT32_C( 276.57), SIMDE_FLOAT32_C( 406.80), SIMDE_FLOAT32_C( 699.05) },
{ SIMDE_FLOAT32_C( -976.76), SIMDE_FLOAT32_C( -581.80), SIMDE_FLOAT32_C( 38.73), SIMDE_FLOAT32_C( 712.25) },
{ SIMDE_FLOAT32_C( -976.76), SIMDE_FLOAT32_C( -581.80), SIMDE_FLOAT32_C( 38.73), SIMDE_FLOAT32_C( 699.05) } },
{ { SIMDE_FLOAT32_C( 407.06), SIMDE_FLOAT32_C( -627.17), SIMDE_FLOAT32_C( 155.16), SIMDE_FLOAT32_C( -805.28) },
{ SIMDE_FLOAT32_C( 113.51), SIMDE_FLOAT32_C( 38.85), SIMDE_FLOAT32_C( 683.44), SIMDE_FLOAT32_C( -913.12) },
{ SIMDE_FLOAT32_C( 113.51), SIMDE_FLOAT32_C( -627.17), SIMDE_FLOAT32_C( 155.16), SIMDE_FLOAT32_C( -913.12) } },
{ { SIMDE_FLOAT32_C( 196.11), SIMDE_FLOAT32_C( -500.01), SIMDE_FLOAT32_C( -419.39), SIMDE_FLOAT32_C( -178.96) },
{ SIMDE_FLOAT32_C( 230.12), SIMDE_FLOAT32_C( 181.32), SIMDE_FLOAT32_C( -726.92), SIMDE_FLOAT32_C( 326.63) },
{ SIMDE_FLOAT32_C( 196.11), SIMDE_FLOAT32_C( -500.01), SIMDE_FLOAT32_C( -726.92), SIMDE_FLOAT32_C( -178.96) } },
{ { SIMDE_FLOAT32_C( 371.12), SIMDE_FLOAT32_C( 730.35), SIMDE_FLOAT32_C( -818.35), SIMDE_FLOAT32_C( 712.32) },
{ SIMDE_FLOAT32_C( -505.33), SIMDE_FLOAT32_C( 635.28), SIMDE_FLOAT32_C( 940.19), SIMDE_FLOAT32_C( -906.64) },
{ SIMDE_FLOAT32_C( -505.33), SIMDE_FLOAT32_C( 635.28), SIMDE_FLOAT32_C( -818.35), SIMDE_FLOAT32_C( -906.64) } },
{ { SIMDE_FLOAT32_C( -88.15), SIMDE_FLOAT32_C( 346.99), SIMDE_FLOAT32_C( 792.41), SIMDE_FLOAT32_C( -64.91) },
{ SIMDE_FLOAT32_C( 765.19), SIMDE_FLOAT32_C( -168.85), SIMDE_FLOAT32_C( -352.65), SIMDE_FLOAT32_C( 172.25) },
{ SIMDE_FLOAT32_C( -88.15), SIMDE_FLOAT32_C( -168.85), SIMDE_FLOAT32_C( -352.65), SIMDE_FLOAT32_C( -64.91) } }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
simde__m128 a = simde_mm_loadu_ps(test_vec[i].a);
simde__m128 b = simde_mm_loadu_ps(test_vec[i].b);
simde__m128 r = simde_x_mm_select_ps(b, a, simde_mm_cmplt_ps(a, b));
simde_test_x86_assert_equal_f32x4(r, simde_mm_loadu_ps(test_vec[i].r), 1);
}
return 0;
}
static int
test_simde_mm_avg_pu16(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m64 a;
simde__m64 b;
simde__m64 r;
} test_vec[8] = {
{ simde_x_mm_set_pu16(UINT16_C( 984), UINT16_C(30280), UINT16_C(42568), UINT16_C(40084)),
simde_x_mm_set_pu16(UINT16_C(27500), UINT16_C(27572), UINT16_C(25285), UINT16_C(55528)),
simde_x_mm_set_pu16(UINT16_C(14242), UINT16_C(28926), UINT16_C(33927), UINT16_C(47806)) },
{ simde_x_mm_set_pu16(UINT16_C(16799), UINT16_C(60083), UINT16_C(41622), UINT16_C(59771)),
simde_x_mm_set_pu16(UINT16_C(44269), UINT16_C(15826), UINT16_C(52483), UINT16_C(45725)),
simde_x_mm_set_pu16(UINT16_C(30534), UINT16_C(37955), UINT16_C(47053), UINT16_C(52748)) },
{ simde_x_mm_set_pu16(UINT16_C(41380), UINT16_C(64067), UINT16_C(33526), UINT16_C(10279)),
simde_x_mm_set_pu16(UINT16_C(34327), UINT16_C(29328), UINT16_C( 8579), UINT16_C( 1111)),
simde_x_mm_set_pu16(UINT16_C(37854), UINT16_C(46698), UINT16_C(21053), UINT16_C( 5695)) },
{ simde_x_mm_set_pu16(UINT16_C(18628), UINT16_C(48112), UINT16_C( 3068), UINT16_C(50432)),
simde_x_mm_set_pu16(UINT16_C( 746), UINT16_C(22132), UINT16_C(21846), UINT16_C(48900)),
simde_x_mm_set_pu16(UINT16_C( 9687), UINT16_C(35122), UINT16_C(12457), UINT16_C(49666)) },
{ simde_x_mm_set_pu16(UINT16_C(10018), UINT16_C( 4381), UINT16_C(59604), UINT16_C( 6897)),
simde_x_mm_set_pu16(UINT16_C(44395), UINT16_C(45261), UINT16_C(45129), UINT16_C(12723)),
simde_x_mm_set_pu16(UINT16_C(27207), UINT16_C(24821), UINT16_C(52367), UINT16_C( 9810)) },
{ simde_x_mm_set_pu16(UINT16_C(25446), UINT16_C(46949), UINT16_C(46494), UINT16_C(27481)),
simde_x_mm_set_pu16(UINT16_C(54442), UINT16_C(34061), UINT16_C(46613), UINT16_C(44299)),
simde_x_mm_set_pu16(UINT16_C(39944), UINT16_C(40505), UINT16_C(46554), UINT16_C(35890)) },
{ simde_x_mm_set_pu16(UINT16_C( 4562), UINT16_C(11032), UINT16_C(30725), UINT16_C(48961)),
simde_x_mm_set_pu16(UINT16_C(11741), UINT16_C(52603), UINT16_C(11503), UINT16_C(62380)),
simde_x_mm_set_pu16(UINT16_C( 8152), UINT16_C(31818), UINT16_C(21114), UINT16_C(55671)) },
{ simde_x_mm_set_pu16(UINT16_C(25787), UINT16_C(46963), UINT16_C( 3756), UINT16_C(41201)),
simde_x_mm_set_pu16(UINT16_C(64587), UINT16_C(22291), UINT16_C( 7901), UINT16_C(11300)),
simde_x_mm_set_pu16(UINT16_C(45187), UINT16_C(34627), UINT16_C( 5829), UINT16_C(26251)) }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
simde__m64 r = simde_mm_avg_pu16(test_vec[i].a, test_vec[i].b);
simde_test_x86_assert_equal_u16x4(r, test_vec[i].r);
}
simde_mm_empty();
return 0;
}
static int
test_simde_m_pavgw(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m64 a;
simde__m64 b;
simde__m64 r;
} test_vec[8] = {
{ simde_x_mm_set_pu16(UINT16_C( 984), UINT16_C(30280), UINT16_C(42568), UINT16_C(40084)),
simde_x_mm_set_pu16(UINT16_C(27500), UINT16_C(27572), UINT16_C(25285), UINT16_C(55528)),
simde_x_mm_set_pu16(UINT16_C(14242), UINT16_C(28926), UINT16_C(33927), UINT16_C(47806)) },
{ simde_x_mm_set_pu16(UINT16_C(16799), UINT16_C(60083), UINT16_C(41622), UINT16_C(59771)),
simde_x_mm_set_pu16(UINT16_C(44269), UINT16_C(15826), UINT16_C(52483), UINT16_C(45725)),
simde_x_mm_set_pu16(UINT16_C(30534), UINT16_C(37955), UINT16_C(47053), UINT16_C(52748)) },
{ simde_x_mm_set_pu16(UINT16_C(41380), UINT16_C(64067), UINT16_C(33526), UINT16_C(10279)),
simde_x_mm_set_pu16(UINT16_C(34327), UINT16_C(29328), UINT16_C( 8579), UINT16_C( 1111)),
simde_x_mm_set_pu16(UINT16_C(37854), UINT16_C(46698), UINT16_C(21053), UINT16_C( 5695)) },
{ simde_x_mm_set_pu16(UINT16_C(18628), UINT16_C(48112), UINT16_C( 3068), UINT16_C(50432)),
simde_x_mm_set_pu16(UINT16_C( 746), UINT16_C(22132), UINT16_C(21846), UINT16_C(48900)),
simde_x_mm_set_pu16(UINT16_C( 9687), UINT16_C(35122), UINT16_C(12457), UINT16_C(49666)) },
{ simde_x_mm_set_pu16(UINT16_C(10018), UINT16_C( 4381), UINT16_C(59604), UINT16_C( 6897)),
simde_x_mm_set_pu16(UINT16_C(44395), UINT16_C(45261), UINT16_C(45129), UINT16_C(12723)),
simde_x_mm_set_pu16(UINT16_C(27207), UINT16_C(24821), UINT16_C(52367), UINT16_C( 9810)) },
{ simde_x_mm_set_pu16(UINT16_C(25446), UINT16_C(46949), UINT16_C(46494), UINT16_C(27481)),
simde_x_mm_set_pu16(UINT16_C(54442), UINT16_C(34061), UINT16_C(46613), UINT16_C(44299)),
simde_x_mm_set_pu16(UINT16_C(39944), UINT16_C(40505), UINT16_C(46554), UINT16_C(35890)) },
{ simde_x_mm_set_pu16(UINT16_C( 4562), UINT16_C(11032), UINT16_C(30725), UINT16_C(48961)),
simde_x_mm_set_pu16(UINT16_C(11741), UINT16_C(52603), UINT16_C(11503), UINT16_C(62380)),
simde_x_mm_set_pu16(UINT16_C( 8152), UINT16_C(31818), UINT16_C(21114), UINT16_C(55671)) },
{ simde_x_mm_set_pu16(UINT16_C(25787), UINT16_C(46963), UINT16_C( 3756), UINT16_C(41201)),
simde_x_mm_set_pu16(UINT16_C(64587), UINT16_C(22291), UINT16_C( 7901), UINT16_C(11300)),
simde_x_mm_set_pu16(UINT16_C(45187), UINT16_C(34627), UINT16_C( 5829), UINT16_C(26251)) }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
simde__m64 r = simde_m_pavgw(test_vec[i].a, test_vec[i].b);
simde_test_x86_assert_equal_u16x4(r, test_vec[i].r);
}
simde_mm_empty();
return 0;
}
static int
test_simde_mm_avg_pu8(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m64 a;
simde__m64 b;
simde__m64 r;
} test_vec[8] = {
{ simde_x_mm_set_pu8(UINT8_C( 188), UINT8_C( 166), UINT8_C( 84), UINT8_C( 155),
UINT8_C( 198), UINT8_C( 220), UINT8_C( 172), UINT8_C( 150)),
simde_x_mm_set_pu8(UINT8_C( 192), UINT8_C( 110), UINT8_C( 123), UINT8_C( 195),
UINT8_C( 186), UINT8_C( 160), UINT8_C( 76), UINT8_C( 17)),
simde_x_mm_set_pu8(UINT8_C( 190), UINT8_C( 138), UINT8_C( 104), UINT8_C( 175),
UINT8_C( 192), UINT8_C( 190), UINT8_C( 124), UINT8_C( 84)) },
{ simde_x_mm_set_pu8(UINT8_C( 81), UINT8_C( 231), UINT8_C( 17), UINT8_C( 205),
UINT8_C( 110), UINT8_C( 170), UINT8_C( 68), UINT8_C( 253)),
simde_x_mm_set_pu8(UINT8_C( 162), UINT8_C( 211), UINT8_C( 109), UINT8_C( 219),
UINT8_C( 84), UINT8_C( 95), UINT8_C( 217), UINT8_C( 146)),
simde_x_mm_set_pu8(UINT8_C( 122), UINT8_C( 221), UINT8_C( 63), UINT8_C( 212),
UINT8_C( 97), UINT8_C( 133), UINT8_C( 143), UINT8_C( 200)) },
{ simde_x_mm_set_pu8(UINT8_C( 65), UINT8_C( 248), UINT8_C( 129), UINT8_C( 144),
UINT8_C( 4), UINT8_C( 42), UINT8_C( 191), UINT8_C( 186)),
simde_x_mm_set_pu8(UINT8_C( 181), UINT8_C( 198), UINT8_C( 22), UINT8_C( 17),
UINT8_C( 197), UINT8_C( 123), UINT8_C( 216), UINT8_C( 195)),
simde_x_mm_set_pu8(UINT8_C( 123), UINT8_C( 223), UINT8_C( 76), UINT8_C( 81),
UINT8_C( 101), UINT8_C( 83), UINT8_C( 204), UINT8_C( 191)) },
{ simde_x_mm_set_pu8(UINT8_C( 149), UINT8_C( 191), UINT8_C( 152), UINT8_C( 239),
UINT8_C( 227), UINT8_C( 104), UINT8_C( 122), UINT8_C( 140)),
simde_x_mm_set_pu8(UINT8_C( 5), UINT8_C( 95), UINT8_C( 201), UINT8_C( 16),
UINT8_C( 30), UINT8_C( 151), UINT8_C( 230), UINT8_C( 228)),
simde_x_mm_set_pu8(UINT8_C( 77), UINT8_C( 143), UINT8_C( 177), UINT8_C( 128),
UINT8_C( 129), UINT8_C( 128), UINT8_C( 176), UINT8_C( 184)) },
{ simde_x_mm_set_pu8(UINT8_C( 99), UINT8_C( 248), UINT8_C( 192), UINT8_C( 96),
UINT8_C( 9), UINT8_C( 180), UINT8_C( 230), UINT8_C( 75)),
simde_x_mm_set_pu8(UINT8_C( 205), UINT8_C( 207), UINT8_C( 224), UINT8_C( 197),
UINT8_C( 157), UINT8_C( 96), UINT8_C( 165), UINT8_C( 63)),
simde_x_mm_set_pu8(UINT8_C( 152), UINT8_C( 228), UINT8_C( 208), UINT8_C( 147),
UINT8_C( 83), UINT8_C( 138), UINT8_C( 198), UINT8_C( 69)) },
{ simde_x_mm_set_pu8(UINT8_C( 207), UINT8_C( 50), UINT8_C( 87), UINT8_C( 142),
UINT8_C( 106), UINT8_C( 190), UINT8_C( 31), UINT8_C( 212)),
simde_x_mm_set_pu8(UINT8_C( 236), UINT8_C( 29), UINT8_C( 22), UINT8_C( 123),
UINT8_C( 184), UINT8_C( 176), UINT8_C( 133), UINT8_C( 58)),
simde_x_mm_set_pu8(UINT8_C( 222), UINT8_C( 40), UINT8_C( 55), UINT8_C( 133),
UINT8_C( 145), UINT8_C( 183), UINT8_C( 82), UINT8_C( 135)) },
{ simde_x_mm_set_pu8(UINT8_C( 31), UINT8_C( 172), UINT8_C( 185), UINT8_C( 135),
UINT8_C( 147), UINT8_C( 121), UINT8_C( 19), UINT8_C( 169)),
simde_x_mm_set_pu8(UINT8_C( 25), UINT8_C( 222), UINT8_C( 106), UINT8_C( 4),
UINT8_C( 238), UINT8_C( 72), UINT8_C( 216), UINT8_C( 75)),
simde_x_mm_set_pu8(UINT8_C( 28), UINT8_C( 197), UINT8_C( 146), UINT8_C( 70),
UINT8_C( 193), UINT8_C( 97), UINT8_C( 118), UINT8_C( 122)) },
{ simde_x_mm_set_pu8(UINT8_C( 126), UINT8_C( 117), UINT8_C( 85), UINT8_C( 61),
UINT8_C( 8), UINT8_C( 204), UINT8_C( 178), UINT8_C( 71)),
simde_x_mm_set_pu8(UINT8_C( 216), UINT8_C( 115), UINT8_C( 127), UINT8_C( 61),
UINT8_C( 84), UINT8_C( 84), UINT8_C( 64), UINT8_C( 51)),
simde_x_mm_set_pu8(UINT8_C( 171), UINT8_C( 116), UINT8_C( 106), UINT8_C( 61),
UINT8_C( 46), UINT8_C( 144), UINT8_C( 121), UINT8_C( 61)) }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / (sizeof(test_vec[0]))) ; i++) {
simde__m64 r = simde_mm_avg_pu8(test_vec[i].a, test_vec[i].b);
simde_mm_empty();
simde_test_x86_assert_equal_u8x8(r, test_vec[i].r);
}
simde_mm_empty();
return 0;
}
static int
test_simde_m_pavgb(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m64 a;
simde__m64 b;
simde__m64 r;
} test_vec[8] = {
{ simde_x_mm_set_pu8(UINT8_C( 188), UINT8_C( 166), UINT8_C( 84), UINT8_C( 155),
UINT8_C( 198), UINT8_C( 220), UINT8_C( 172), UINT8_C( 150)),
simde_x_mm_set_pu8(UINT8_C( 192), UINT8_C( 110), UINT8_C( 123), UINT8_C( 195),
UINT8_C( 186), UINT8_C( 160), UINT8_C( 76), UINT8_C( 17)),
simde_x_mm_set_pu8(UINT8_C( 190), UINT8_C( 138), UINT8_C( 104), UINT8_C( 175),
UINT8_C( 192), UINT8_C( 190), UINT8_C( 124), UINT8_C( 84)) },
{ simde_x_mm_set_pu8(UINT8_C( 81), UINT8_C( 231), UINT8_C( 17), UINT8_C( 205),
UINT8_C( 110), UINT8_C( 170), UINT8_C( 68), UINT8_C( 253)),
simde_x_mm_set_pu8(UINT8_C( 162), UINT8_C( 211), UINT8_C( 109), UINT8_C( 219),
UINT8_C( 84), UINT8_C( 95), UINT8_C( 217), UINT8_C( 146)),
simde_x_mm_set_pu8(UINT8_C( 122), UINT8_C( 221), UINT8_C( 63), UINT8_C( 212),
UINT8_C( 97), UINT8_C( 133), UINT8_C( 143), UINT8_C( 200)) },
{ simde_x_mm_set_pu8(UINT8_C( 65), UINT8_C( 248), UINT8_C( 129), UINT8_C( 144),
UINT8_C( 4), UINT8_C( 42), UINT8_C( 191), UINT8_C( 186)),
simde_x_mm_set_pu8(UINT8_C( 181), UINT8_C( 198), UINT8_C( 22), UINT8_C( 17),
UINT8_C( 197), UINT8_C( 123), UINT8_C( 216), UINT8_C( 195)),
simde_x_mm_set_pu8(UINT8_C( 123), UINT8_C( 223), UINT8_C( 76), UINT8_C( 81),
UINT8_C( 101), UINT8_C( 83), UINT8_C( 204), UINT8_C( 191)) },
{ simde_x_mm_set_pu8(UINT8_C( 149), UINT8_C( 191), UINT8_C( 152), UINT8_C( 239),
UINT8_C( 227), UINT8_C( 104), UINT8_C( 122), UINT8_C( 140)),
simde_x_mm_set_pu8(UINT8_C( 5), UINT8_C( 95), UINT8_C( 201), UINT8_C( 16),
UINT8_C( 30), UINT8_C( 151), UINT8_C( 230), UINT8_C( 228)),
simde_x_mm_set_pu8(UINT8_C( 77), UINT8_C( 143), UINT8_C( 177), UINT8_C( 128),
UINT8_C( 129), UINT8_C( 128), UINT8_C( 176), UINT8_C( 184)) },
{ simde_x_mm_set_pu8(UINT8_C( 99), UINT8_C( 248), UINT8_C( 192), UINT8_C( 96),
UINT8_C( 9), UINT8_C( 180), UINT8_C( 230), UINT8_C( 75)),
simde_x_mm_set_pu8(UINT8_C( 205), UINT8_C( 207), UINT8_C( 224), UINT8_C( 197),
UINT8_C( 157), UINT8_C( 96), UINT8_C( 165), UINT8_C( 63)),
simde_x_mm_set_pu8(UINT8_C( 152), UINT8_C( 228), UINT8_C( 208), UINT8_C( 147),
UINT8_C( 83), UINT8_C( 138), UINT8_C( 198), UINT8_C( 69)) },
{ simde_x_mm_set_pu8(UINT8_C( 207), UINT8_C( 50), UINT8_C( 87), UINT8_C( 142),
UINT8_C( 106), UINT8_C( 190), UINT8_C( 31), UINT8_C( 212)),
simde_x_mm_set_pu8(UINT8_C( 236), UINT8_C( 29), UINT8_C( 22), UINT8_C( 123),
UINT8_C( 184), UINT8_C( 176), UINT8_C( 133), UINT8_C( 58)),
simde_x_mm_set_pu8(UINT8_C( 222), UINT8_C( 40), UINT8_C( 55), UINT8_C( 133),
UINT8_C( 145), UINT8_C( 183), UINT8_C( 82), UINT8_C( 135)) },
{ simde_x_mm_set_pu8(UINT8_C( 31), UINT8_C( 172), UINT8_C( 185), UINT8_C( 135),
UINT8_C( 147), UINT8_C( 121), UINT8_C( 19), UINT8_C( 169)),
simde_x_mm_set_pu8(UINT8_C( 25), UINT8_C( 222), UINT8_C( 106), UINT8_C( 4),
UINT8_C( 238), UINT8_C( 72), UINT8_C( 216), UINT8_C( 75)),
simde_x_mm_set_pu8(UINT8_C( 28), UINT8_C( 197), UINT8_C( 146), UINT8_C( 70),
UINT8_C( 193), UINT8_C( 97), UINT8_C( 118), UINT8_C( 122)) },
{ simde_x_mm_set_pu8(UINT8_C( 126), UINT8_C( 117), UINT8_C( 85), UINT8_C( 61),
UINT8_C( 8), UINT8_C( 204), UINT8_C( 178), UINT8_C( 71)),
simde_x_mm_set_pu8(UINT8_C( 216), UINT8_C( 115), UINT8_C( 127), UINT8_C( 61),
UINT8_C( 84), UINT8_C( 84), UINT8_C( 64), UINT8_C( 51)),
simde_x_mm_set_pu8(UINT8_C( 171), UINT8_C( 116), UINT8_C( 106), UINT8_C( 61),
UINT8_C( 46), UINT8_C( 144), UINT8_C( 121), UINT8_C( 61)) }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / (sizeof(test_vec[0]))) ; i++) {
simde__m64 r = simde_m_pavgb(test_vec[i].a, test_vec[i].b);
simde_mm_empty();
simde_test_x86_assert_equal_u8x8(r, test_vec[i].r);
}
simde_mm_empty();
return 0;
}
static int
test_simde_mm_cmpeq_ps(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m128i a;
simde__m128i b;
simde__m128i r;
} test_vec[8] = {
{ simde_mm_set_epi32(INT32_C( 1552099433), INT32_C(-1589398258), INT32_C( -34553673), INT32_C(-1178885563)),
simde_mm_set_epi32(INT32_C( 1552099433), INT32_C( 2025844073), INT32_C( -34553673), INT32_C(-1178885563)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( 0), INT32_C( -1), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C(-1766041281), INT32_C(-1662168132), INT32_C( 997624458), INT32_C( 980393671)),
simde_mm_set_epi32(INT32_C( 1122334686), INT32_C(-1662168132), INT32_C( 1502327165), INT32_C( 1228800964)),
simde_mm_set_epi32(INT32_C( 0), INT32_C( -1), INT32_C( 0), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( 1053856039), INT32_C( 189518021), INT32_C(-2093780846), INT32_C( 717465502)),
simde_mm_set_epi32(INT32_C( 1053856039), INT32_C( 189518021), INT32_C( -730260217), INT32_C( 1570531267)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( -1), INT32_C( 0), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C(-1211703701), INT32_C( 1792645956), INT32_C( 451470260), INT32_C( 72883505)),
simde_mm_set_epi32(INT32_C(-1211703701), INT32_C( -873756537), INT32_C( 1700529530), INT32_C( 72883505)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( 0), INT32_C( 0), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 1123941451), INT32_C(-1499396317), INT32_C( -496690637), INT32_C( 857633319)),
simde_mm_set_epi32(INT32_C(-1095910111), INT32_C(-1499396317), INT32_C( -59751101), INT32_C( -47922840)),
simde_mm_set_epi32(INT32_C( 0), INT32_C( -1), INT32_C( 0), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C(-1786351786), INT32_C( 618588335), INT32_C(-1648947504), INT32_C(-1160443929)),
simde_mm_set_epi32(INT32_C( 1923711258), INT32_C( 775175059), INT32_C(-1633817987), INT32_C( 778628411)),
simde_mm_set_epi32(INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( 2132068337), INT32_C( 303020289), INT32_C(-1544950892), INT32_C(-2063582009)),
simde_mm_set_epi32(INT32_C( 2132068337), INT32_C( 628767021), INT32_C(-1152607496), INT32_C(-1526726995)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( 0), INT32_C( 0), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( 2000861670), INT32_C(-1296714344), INT32_C( 682422961), INT32_C( -767128199)),
simde_mm_set_epi32(INT32_C( 2000861670), INT32_C(-1296714344), INT32_C( 682422961), INT32_C(-1784377677)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( -1), INT32_C( -1), INT32_C( 0)) }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
simde__m128i r = simde_mm_castps_si128(
simde_mm_cmpeq_ps(
simde_mm_castsi128_ps(test_vec[i].a),
simde_mm_castsi128_ps(test_vec[i].b)));
simde_test_x86_assert_equal_i32x4(r, test_vec[i].r);
}
return 0;
}
static int
test_simde_mm_cmpeq_ss(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m128i a;
simde__m128i b;
simde__m128i r;
} test_vec[8] = {
{ simde_mm_set_epi32(INT32_C( 975888251), INT32_C( 1037275787), INT32_C( -206927716), INT32_C( 1719930130)),
simde_mm_set_epi32(INT32_C(-1683768293), INT32_C( 1037275787), INT32_C( -206927716), INT32_C( 1719930130)),
simde_mm_set_epi32(INT32_C( 975888251), INT32_C( 1037275787), INT32_C( -206927716), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C(-1524488806), INT32_C( -573553543), INT32_C( 42112282), INT32_C( 112731860)),
simde_mm_set_epi32(INT32_C( 1557664843), INT32_C( -39848297), INT32_C( 42112282), INT32_C( 112731860)),
simde_mm_set_epi32(INT32_C(-1524488806), INT32_C( -573553543), INT32_C( 42112282), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 1378184574), INT32_C(-1915421318), INT32_C( -131047892), INT32_C( -798352758)),
simde_mm_set_epi32(INT32_C( 1378184574), INT32_C(-1967398858), INT32_C( -131047892), INT32_C(-1869734720)),
simde_mm_set_epi32(INT32_C( 1378184574), INT32_C(-1915421318), INT32_C( -131047892), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( 1981544552), INT32_C( 329373642), INT32_C( -104014353), INT32_C(-2092043281)),
simde_mm_set_epi32(INT32_C( 2125102991), INT32_C( 978475086), INT32_C( 1426268882), INT32_C( -436875296)),
simde_mm_set_epi32(INT32_C( 1981544552), INT32_C( 329373642), INT32_C( -104014353), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( 600612499), INT32_C(-1490414099), INT32_C(-2094604589), INT32_C( 126748780)),
simde_mm_set_epi32(INT32_C( 600612499), INT32_C(-1490414099), INT32_C(-2094604589), INT32_C( 126748780)),
simde_mm_set_epi32(INT32_C( 600612499), INT32_C(-1490414099), INT32_C(-2094604589), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 60156341), INT32_C( 1267841603), INT32_C(-1347475320), INT32_C(-1548408923)),
simde_mm_set_epi32(INT32_C( 60156341), INT32_C( -387226227), INT32_C( -76120938), INT32_C(-1548408923)),
simde_mm_set_epi32(INT32_C( 60156341), INT32_C( 1267841603), INT32_C(-1347475320), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C(-2114878036), INT32_C(-1987807687), INT32_C( 1314812087), INT32_C( -402159797)),
simde_mm_set_epi32(INT32_C(-2114878036), INT32_C(-1987807687), INT32_C( -580165908), INT32_C( -311736955)),
simde_mm_set_epi32(INT32_C(-2114878036), INT32_C(-1987807687), INT32_C( 1314812087), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( 1498340262), INT32_C( 467089732), INT32_C( -352096361), INT32_C( -125007519)),
simde_mm_set_epi32(INT32_C(-1919145018), INT32_C( 854922987), INT32_C( 767022324), INT32_C( -125007519)),
simde_mm_set_epi32(INT32_C( 1498340262), INT32_C( 467089732), INT32_C( -352096361), INT32_C( -1)) }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
simde__m128i r = simde_mm_castps_si128(
simde_mm_cmpeq_ss(
simde_mm_castsi128_ps(test_vec[i].a),
simde_mm_castsi128_ps(test_vec[i].b)));
simde_test_x86_assert_equal_i32x4(r, test_vec[i].r);
}
return 0;
}
static int
test_simde_mm_cmpge_ps(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m128i a;
simde__m128i b;
simde__m128i r;
} test_vec[8] = {
{ simde_mm_set_epi32(INT32_C(-2117681573), INT32_C( 1744824135), INT32_C(-1062100051), INT32_C( -758867207)),
simde_mm_set_epi32(INT32_C( 447802409), INT32_C(-1805122446), INT32_C(-1062100051), INT32_C( 180201744)),
simde_mm_set_epi32(INT32_C( 0), INT32_C( -1), INT32_C( -1), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( 501801973), INT32_C( -437596087), INT32_C( 96926344), INT32_C( 1479688678)),
simde_mm_set_epi32(INT32_C( 2057298249), INT32_C( -899804986), INT32_C( -711059659), INT32_C( 886835596)),
simde_mm_set_epi32(INT32_C( 0), INT32_C( 0), INT32_C( -1), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 927826628), INT32_C(-1620708712), INT32_C(-2141396655), INT32_C(-1921942403)),
simde_mm_set_epi32(INT32_C( -440885672), INT32_C(-1620708712), INT32_C( 2101230656), INT32_C(-1921942403)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( -1), INT32_C( 0), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C(-1545828562), INT32_C( -731809091), INT32_C(-1137290929), INT32_C( -77584541)),
simde_mm_set_epi32(INT32_C( 1117766142), INT32_C(-2055588954), INT32_C(-1137290929), INT32_C(-1359346144)),
simde_mm_set_epi32(INT32_C( 0), INT32_C( 0), INT32_C( -1), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C(-1420198491), INT32_C( 1600056611), INT32_C( -347234499), INT32_C( 1584151154)),
simde_mm_set_epi32(INT32_C(-1420198491), INT32_C( 1600056611), INT32_C( 1047775179), INT32_C( 673458453)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( -1), INT32_C( 0), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( -594070283), INT32_C( -270758299), INT32_C( 185236064), INT32_C( 607788733)),
simde_mm_set_epi32(INT32_C( -310503835), INT32_C( 1875198957), INT32_C( 185236064), INT32_C( 290211410)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( 0), INT32_C( -1), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 275701977), INT32_C(-1310829701), INT32_C(-1932286124), INT32_C( 124706827)),
simde_mm_set_epi32(INT32_C( 275701977), INT32_C( 2044408096), INT32_C( 371148478), INT32_C( 1787635053)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( 0), INT32_C( 0), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( 335124996), INT32_C(-2113521475), INT32_C( 960990723), INT32_C( -969567969)),
simde_mm_set_epi32(INT32_C(-1587045050), INT32_C(-2113521475), INT32_C( -168625313), INT32_C( 1040258918)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( -1), INT32_C( -1), INT32_C( 0)) }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
simde__m128i r = simde_mm_castps_si128(
simde_mm_cmpge_ps(
simde_mm_castsi128_ps(test_vec[i].a),
simde_mm_castsi128_ps(test_vec[i].b)));
simde_test_x86_assert_equal_i32x4(r, test_vec[i].r);
}
return 0;
}
static int
test_simde_mm_cmpge_ss(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m128i a;
simde__m128i b;
simde__m128i r;
} test_vec[8] = {
{ simde_mm_set_epi32(INT32_C(-1012979392), INT32_C(-1453212125), INT32_C( 815083508), INT32_C( 1351772430)),
simde_mm_set_epi32(INT32_C( 1169877184), INT32_C(-1037467546), INT32_C( 1421795564), INT32_C( 905862977)),
simde_mm_set_epi32(INT32_C(-1012979392), INT32_C(-1453212125), INT32_C( 815083508), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( -324333154), INT32_C( 1314427040), INT32_C( -483618994), INT32_C( 1502460142)),
simde_mm_set_epi32(INT32_C( -202797776), INT32_C( 94174629), INT32_C( 926181510), INT32_C( 1502460142)),
simde_mm_set_epi32(INT32_C( -324333154), INT32_C( 1314427040), INT32_C( -483618994), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 467112718), INT32_C(-1304161813), INT32_C(-1064952269), INT32_C( 631164600)),
simde_mm_set_epi32(INT32_C( 467112718), INT32_C(-1304161813), INT32_C( 200476027), INT32_C( 1663275417)),
simde_mm_set_epi32(INT32_C( 467112718), INT32_C(-1304161813), INT32_C(-1064952269), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( -347696391), INT32_C( 148936949), INT32_C( 1398613274), INT32_C( 1250010386)),
simde_mm_set_epi32(INT32_C( -347696391), INT32_C( 148936949), INT32_C( 1202050063), INT32_C( 1250010386)),
simde_mm_set_epi32(INT32_C( -347696391), INT32_C( 148936949), INT32_C( 1398613274), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C(-1684279233), INT32_C(-2118983098), INT32_C( 160153353), INT32_C( -113728462)),
simde_mm_set_epi32(INT32_C(-1684279233), INT32_C(-2118983098), INT32_C( 160153353), INT32_C( 1908868579)),
simde_mm_set_epi32(INT32_C(-1684279233), INT32_C(-2118983098), INT32_C( 160153353), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C(-1844989631), INT32_C( 1725503201), INT32_C( 822658308), INT32_C( -958604095)),
simde_mm_set_epi32(INT32_C( 1098943561), INT32_C( 1725503201), INT32_C( -755708322), INT32_C( -958604095)),
simde_mm_set_epi32(INT32_C(-1844989631), INT32_C( 1725503201), INT32_C( 822658308), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 375717031), INT32_C( -882753921), INT32_C( 1130912475), INT32_C( 2045186948)),
simde_mm_set_epi32(INT32_C( 375717031), INT32_C( -882753921), INT32_C( -800937725), INT32_C( 2045186948)),
simde_mm_set_epi32(INT32_C( 375717031), INT32_C( -882753921), INT32_C( 1130912475), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 602871888), INT32_C( 470458702), INT32_C(-1169608009), INT32_C( -214741679)),
simde_mm_set_epi32(INT32_C( 602871888), INT32_C( -493719927), INT32_C(-1169608009), INT32_C( 2044474163)),
simde_mm_set_epi32(INT32_C( 602871888), INT32_C( 470458702), INT32_C(-1169608009), INT32_C( 0)) }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
simde__m128i r = simde_mm_castps_si128(
simde_mm_cmpge_ss(
simde_mm_castsi128_ps(test_vec[i].a),
simde_mm_castsi128_ps(test_vec[i].b)));
simde_test_x86_assert_equal_i32x4(r, test_vec[i].r);
}
return 0;
}
static int
test_simde_mm_cmpgt_ps(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m128i a;
simde__m128i b;
simde__m128i r;
} test_vec[8] = {
{ simde_mm_set_epi32(INT32_C( 1960669177), INT32_C(-1800221672), INT32_C( -201138064), INT32_C( 1882570539)),
simde_mm_set_epi32(INT32_C( 1960669177), INT32_C( 1636503467), INT32_C( 379370104), INT32_C( 1549588428)),
simde_mm_set_epi32(INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 1497868169), INT32_C( 1587819932), INT32_C( 11597982), INT32_C( 367113544)),
simde_mm_set_epi32(INT32_C( 1497868169), INT32_C( 1587819932), INT32_C( 11597982), INT32_C(-2087685948)),
simde_mm_set_epi32(INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( -420177326), INT32_C( 1458568188), INT32_C( 1173908260), INT32_C(-1290366123)),
simde_mm_set_epi32(INT32_C(-1452540627), INT32_C(-1072533390), INT32_C( 1463315378), INT32_C( 944710330)),
simde_mm_set_epi32(INT32_C( 0), INT32_C( -1), INT32_C( 0), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( 1987295390), INT32_C( -783471208), INT32_C( 1614612869), INT32_C( 941455851)),
simde_mm_set_epi32(INT32_C( 776864087), INT32_C( -275776600), INT32_C( 1614612869), INT32_C( 941455851)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( -1), INT32_C( 0), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( -802004143), INT32_C(-2136990592), INT32_C( 1617943513), INT32_C( 1268400008)),
simde_mm_set_epi32(INT32_C( -802004143), INT32_C(-2136990592), INT32_C( 1458980297), INT32_C( 1268400008)),
simde_mm_set_epi32(INT32_C( 0), INT32_C( 0), INT32_C( -1), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C(-1974256896), INT32_C( 1350058685), INT32_C(-1649890899), INT32_C(-2052839662)),
simde_mm_set_epi32(INT32_C(-1974256896), INT32_C( 1388826354), INT32_C(-2033282795), INT32_C(-2052839662)),
simde_mm_set_epi32(INT32_C( 0), INT32_C( 0), INT32_C( 0), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( 42472091), INT32_C( 2006715626), INT32_C( 18778978), INT32_C( 1523053306)),
simde_mm_set_epi32(INT32_C( 42472091), INT32_C(-1636528069), INT32_C( 18778978), INT32_C( 737106093)),
simde_mm_set_epi32(INT32_C( 0), INT32_C( -1), INT32_C( 0), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 1244568026), INT32_C(-1381724018), INT32_C( -492895509), INT32_C( -783840348)),
simde_mm_set_epi32(INT32_C( 567191695), INT32_C( -729265936), INT32_C( -492895509), INT32_C( -783840348)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( -1), INT32_C( 0), INT32_C( 0)) }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
simde__m128i r = simde_mm_castps_si128(
simde_mm_cmpgt_ps(
simde_mm_castsi128_ps(test_vec[i].a),
simde_mm_castsi128_ps(test_vec[i].b)));
simde_test_x86_assert_equal_i32x4(r, test_vec[i].r);
}
return 0;
}
static int
test_simde_mm_cmpgt_ss(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m128i a;
simde__m128i b;
simde__m128i r;
} test_vec[8] = {
{ simde_mm_set_epi32(INT32_C( 1869056804), INT32_C(-1753986411), INT32_C( -585204320), INT32_C(-1910961055)),
simde_mm_set_epi32(INT32_C( 1869056804), INT32_C(-1102496477), INT32_C( -20892909), INT32_C( -63499356)),
simde_mm_set_epi32(INT32_C( 1869056804), INT32_C(-1753986411), INT32_C( -585204320), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 528987825), INT32_C( -236154839), INT32_C( 1847822202), INT32_C( 1073580784)),
simde_mm_set_epi32(INT32_C( 301802145), INT32_C( -236154839), INT32_C( 1847822202), INT32_C( 1073580784)),
simde_mm_set_epi32(INT32_C( 528987825), INT32_C( -236154839), INT32_C( 1847822202), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( -453663293), INT32_C( 374222760), INT32_C( 660253560), INT32_C(-1094975358)),
simde_mm_set_epi32(INT32_C( 922033710), INT32_C(-1385400175), INT32_C( 281683050), INT32_C(-1094975358)),
simde_mm_set_epi32(INT32_C( -453663293), INT32_C( 374222760), INT32_C( 660253560), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( 56611761), INT32_C( -294357766), INT32_C( 221827642), INT32_C(-1086961889)),
simde_mm_set_epi32(INT32_C(-2059704292), INT32_C( -294357766), INT32_C(-1642431615), INT32_C(-1453505032)),
simde_mm_set_epi32(INT32_C( 56611761), INT32_C( -294357766), INT32_C( 221827642), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( -677567670), INT32_C(-1065179289), INT32_C( 1230662601), INT32_C( 1022052917)),
simde_mm_set_epi32(INT32_C( -677567670), INT32_C( 692939036), INT32_C( 1108906800), INT32_C(-2115601689)),
simde_mm_set_epi32(INT32_C( -677567670), INT32_C(-1065179289), INT32_C( 1230662601), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 658893489), INT32_C( -592874075), INT32_C( 90769968), INT32_C( 1780967347)),
simde_mm_set_epi32(INT32_C( -745618317), INT32_C( -592874075), INT32_C( 90769968), INT32_C( 1901683344)),
simde_mm_set_epi32(INT32_C( 658893489), INT32_C( -592874075), INT32_C( 90769968), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( 596908542), INT32_C( -725878217), INT32_C( 43862031), INT32_C( 120397305)),
simde_mm_set_epi32(INT32_C( 1105546030), INT32_C( -725878217), INT32_C( 43862031), INT32_C(-1679076026)),
simde_mm_set_epi32(INT32_C( 596908542), INT32_C( -725878217), INT32_C( 43862031), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C(-2095835916), INT32_C( 2093817071), INT32_C(-1700253832), INT32_C( 1213385208)),
simde_mm_set_epi32(INT32_C(-1122300334), INT32_C( 1314746582), INT32_C(-1700253832), INT32_C( 1213385208)),
simde_mm_set_epi32(INT32_C(-2095835916), INT32_C( 2093817071), INT32_C(-1700253832), INT32_C( 0)) }
};
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])); i++) {
simde__m128i r = simde_mm_castps_si128(
simde_mm_cmpgt_ss(
simde_mm_castsi128_ps(test_vec[i].a),
simde_mm_castsi128_ps(test_vec[i].b)));
simde_test_x86_assert_equal_i32x4(r, test_vec[i].r);
}
return 0;
}
static int
test_simde_mm_cmple_ps(SIMDE_MUNIT_TEST_ARGS) {
const struct {
simde__m128i a;
simde__m128i b;
simde__m128i r;
} test_vec[8] = {
{ simde_mm_set_epi32(INT32_C(-1214095902), INT32_C( -66909402), INT32_C( -553169346), INT32_C( 1655881585)),
simde_mm_set_epi32(INT32_C( 1411879436), INT32_C( 1800787365), INT32_C( -553169346), INT32_C( -934991244)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( -1), INT32_C( -1), INT32_C( 0)) },
{ simde_mm_set_epi32(INT32_C( 935354519), INT32_C( -241132058), INT32_C( 1879436355), INT32_C( -995448835)),
simde_mm_set_epi32(INT32_C( 935354519), INT32_C( -241132058), INT32_C( 778854493), INT32_C( 1939053113)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( -1), INT32_C( 0), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C(-2000937674), INT32_C( 926691548), INT32_C( 1566199240), INT32_C(-2071387770)),
simde_mm_set_epi32(INT32_C( -33682990), INT32_C( 926691548), INT32_C( -862341564), INT32_C(-2071387770)),
simde_mm_set_epi32(INT32_C( 0), INT32_C( -1), INT32_C( 0), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 1400009830), INT32_C( 2074443710), INT32_C(-1988154474), INT32_C(-1285973673)),
simde_mm_set_epi32(INT32_C( 1431717555), INT32_C( 2074443710), INT32_C( -236063022), INT32_C(-1285973673)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( -1), INT32_C( 0), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( -969028248), INT32_C( 1961285965), INT32_C( 2034451315), INT32_C( 982408470)),
simde_mm_set_epi32(INT32_C( -969028248), INT32_C( 737591133), INT32_C( 2034451315), INT32_C( 1972820242)),
simde_mm_set_epi32(INT32_C( -1), INT32_C( 0), INT32_C( -1), INT32_C( -1)) },
{ simde_mm_set_epi32(INT32_C( 689515799), INT32_C( 1226329239), INT32_C( -601248060), INT32_C( -246025007)),