5
5
6
6
7
7
#include <immintrin.h>
8
+ #include "builtin_test_helpers.h"
8
9
9
10
// NOTE: This should match the tests in llvm/test/CodeGen/X86/sse-intrinsics-fast-isel.ll
10
11
@@ -13,6 +14,7 @@ __m128 test_mm_add_ps(__m128 A, __m128 B) {
13
14
// CHECK: fadd <4 x float>
14
15
return _mm_add_ps (A , B );
15
16
}
17
+ TEST_CONSTEXPR (match_m128 (_mm_add_ps ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, (__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }), +9.0f , +4.0f , +4.0f , +5.0f ));
16
18
17
19
__m128 test_mm_add_ss (__m128 A , __m128 B ) {
18
20
// CHECK-LABEL: test_mm_add_ss
@@ -22,19 +24,22 @@ __m128 test_mm_add_ss(__m128 A, __m128 B) {
22
24
// CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
23
25
return _mm_add_ss (A , B );
24
26
}
27
+ TEST_CONSTEXPR (match_m128 (_mm_add_ss ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, (__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }), +9.0f , +0.0f , +2.0f , +4.0f ));
25
28
26
29
__m128 test_mm_and_ps (__m128 A , __m128 B ) {
27
30
// CHECK-LABEL: test_mm_and_ps
28
31
// CHECK: and <4 x i32>
29
32
return _mm_and_ps (A , B );
30
33
}
34
+ TEST_CONSTEXPR (match_m128 (_mm_and_ps ((__m128 ){-4.0f , -5.0f , +6.0f , +7.0f }, (__m128 ){+0.0f , -0.0f , -0.0f , +7.0f }), -0.0f , -0.0f , +0.0f , +7.0f ));
31
35
32
36
__m128 test_mm_andnot_ps (__m128 A , __m128 B ) {
33
37
// CHECK-LABEL: test_mm_andnot_ps
34
38
// CHECK: xor <4 x i32> %{{.*}}, <i32 -1, i32 -1, i32 -1, i32 -1>
35
39
// CHECK: and <4 x i32>
36
40
return _mm_andnot_ps (A , B );
37
41
}
42
+ TEST_CONSTEXPR (match_m128 (_mm_andnot_ps ((__m128 ){-4.0f , -5.0f , +6.0f , +7.0f }, (__m128 ){+0.0f , -0.0f , -0.0f , +7.0f }), +0.0f , +0.0f , +0.0f , +0.0f ));
38
43
39
44
__m128 test_mm_cmp_ps_eq_oq (__m128 a , __m128 b ) {
40
45
// CHECK-LABEL: test_mm_cmp_ps_eq_oq
@@ -322,6 +327,15 @@ __m128 test_mm_cvtsi32_ss(__m128 A, int B) {
322
327
// CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
323
328
return _mm_cvtsi32_ss (A , B );
324
329
}
330
+ TEST_CONSTEXPR (match_m128 (_mm_cvtsi32_ss ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, 42 ), +42.0f , +0.0f , +2.0f , +4.0f ));
331
+
332
+ __m128 test_mm_cvt_si2ss (__m128 A , int B ) {
333
+ // CHECK-LABEL: test_mm_cvt_si2ss
334
+ // CHECK: sitofp i32 %{{.*}} to float
335
+ // CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
336
+ return _mm_cvt_si2ss (A , B );
337
+ }
338
+ TEST_CONSTEXPR (match_m128 (_mm_cvt_si2ss ((__m128 ){+4.0f , +2.0f , +0.0f , +4.0f }, -99 ), -99.0f , +2.0f , +0.0f , +4.0f ));
325
339
326
340
#ifdef __x86_64__
327
341
__m128 test_mm_cvtsi64_ss (__m128 A , long long B ) {
@@ -330,13 +344,15 @@ __m128 test_mm_cvtsi64_ss(__m128 A, long long B) {
330
344
// CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
331
345
return _mm_cvtsi64_ss (A , B );
332
346
}
347
+ TEST_CONSTEXPR (match_m128 (_mm_cvtsi64_ss ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, 555 ), +555.0f , +0.0f , +2.0f , +4.0f ));
333
348
#endif
334
349
335
350
float test_mm_cvtss_f32 (__m128 A ) {
336
351
// CHECK-LABEL: test_mm_cvtss_f32
337
352
// CHECK: extractelement <4 x float> %{{.*}}, i32 0
338
353
return _mm_cvtss_f32 (A );
339
354
}
355
+ TEST_CONSTEXPR (_mm_cvtss_f32 ((__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }) == +8.0f );
340
356
341
357
int test_mm_cvtss_si32 (__m128 A ) {
342
358
// CHECK-LABEL: test_mm_cvtss_si32
@@ -377,6 +393,7 @@ __m128 test_mm_div_ps(__m128 A, __m128 B) {
377
393
// CHECK: fdiv <4 x float>
378
394
return _mm_div_ps (A , B );
379
395
}
396
+ TEST_CONSTEXPR (match_m128 (_mm_div_ps ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, (__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }), +0.125f , +0.0f , +1.0f , +4.0f ));
380
397
381
398
__m128 test_mm_div_ss (__m128 A , __m128 B ) {
382
399
// CHECK-LABEL: test_mm_div_ss
@@ -386,6 +403,7 @@ __m128 test_mm_div_ss(__m128 A, __m128 B) {
386
403
// CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
387
404
return _mm_div_ss (A , B );
388
405
}
406
+ TEST_CONSTEXPR (match_m128 (_mm_div_ss ((__m128 ){+1.0f , +5.0f , +2.0f , +4.0f }, (__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }), +0.125f , +5.0f , +2.0f , +4.0f ));
389
407
390
408
unsigned int test_MM_GET_EXCEPTION_MASK (void ) {
391
409
// CHECK-LABEL: test_MM_GET_EXCEPTION_MASK
@@ -517,18 +535,21 @@ __m128 test_mm_move_ss(__m128 A, __m128 B) {
517
535
// CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
518
536
return _mm_move_ss (A , B );
519
537
}
538
+ TEST_CONSTEXPR (match_m128 (_mm_move_ss ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, (__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }), +8.0f , +0.0f , +2.0f , +4.0f ));
520
539
521
540
__m128 test_mm_movehl_ps (__m128 A , __m128 B ) {
522
541
// CHECK-LABEL: test_mm_movehl_ps
523
542
// CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 6, i32 7, i32 2, i32 3>
524
543
return _mm_movehl_ps (A , B );
525
544
}
545
+ TEST_CONSTEXPR (match_m128 (_mm_movehl_ps ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, (__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }), +2.0f , +1.0f , +2.0f , +4.0f ));
526
546
527
547
__m128 test_mm_movelh_ps (__m128 A , __m128 B ) {
528
548
// CHECK-LABEL: test_mm_movelh_ps
529
549
// CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
530
550
return _mm_movelh_ps (A , B );
531
551
}
552
+ TEST_CONSTEXPR (match_m128 (_mm_movelh_ps ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, (__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }), +1.0f , +0.0f , +8.0f , +4.0f ));
532
553
533
554
int test_mm_movemask_ps (__m128 A ) {
534
555
// CHECK-LABEL: test_mm_movemask_ps
@@ -541,6 +562,7 @@ __m128 test_mm_mul_ps(__m128 A, __m128 B) {
541
562
// CHECK: fmul <4 x float>
542
563
return _mm_mul_ps (A , B );
543
564
}
565
+ TEST_CONSTEXPR (match_m128 (_mm_mul_ps ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, (__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }), +8.0f , +0.0f , +4.0f , +4.0f ));
544
566
545
567
__m128 test_mm_mul_ss (__m128 A , __m128 B ) {
546
568
// CHECK-LABEL: test_mm_mul_ss
@@ -550,12 +572,14 @@ __m128 test_mm_mul_ss(__m128 A, __m128 B) {
550
572
// CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
551
573
return _mm_mul_ss (A , B );
552
574
}
575
+ TEST_CONSTEXPR (match_m128 (_mm_mul_ps ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, (__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }), +8.0f , +0.0f , +4.0f , +4.0f ));
553
576
554
577
__m128 test_mm_or_ps (__m128 A , __m128 B ) {
555
578
// CHECK-LABEL: test_mm_or_ps
556
579
// CHECK: or <4 x i32>
557
580
return _mm_or_ps (A , B );
558
581
}
582
+ TEST_CONSTEXPR (match_m128 (_mm_or_ps ((__m128 ){-4.0f , -5.0f , +6.0f , +7.0f }, (__m128 ){+0.0f , -0.0f , -0.0f , +7.0f }), -4.0f , -5.0f , -6.0f , +7.0f ));
559
583
560
584
void test_mm_prefetch (char const * p ) {
561
585
// CHECK-LABEL: test_mm_prefetch
@@ -628,6 +652,7 @@ __m128 test_mm_set_ps(float A, float B, float C, float D) {
628
652
// CHECK: insertelement <4 x float> {{.*}}, float {{.*}}, i32 3
629
653
return _mm_set_ps (A , B , C , D );
630
654
}
655
+ TEST_CONSTEXPR (match_m128 (_mm_set_ps (+0.0f , +1.0f , +2.0f , +3.0f ), +3.0f , +2.0f , +1.0f , +.0f ));
631
656
632
657
__m128 test_mm_set_ps1 (float A ) {
633
658
// CHECK-LABEL: test_mm_set_ps1
@@ -637,6 +662,7 @@ __m128 test_mm_set_ps1(float A) {
637
662
// CHECK: insertelement <4 x float> {{.*}}, float {{.*}}, i32 3
638
663
return _mm_set_ps1 (A );
639
664
}
665
+ TEST_CONSTEXPR (match_m128 (_mm_set_ps1 (-2.0f ), -2.0f , -2.0f , -2.0f , -2.0f ));
640
666
641
667
void test_MM_SET_ROUNDING_MODE (unsigned int A ) {
642
668
// CHECK-LABEL: test_MM_SET_ROUNDING_MODE
@@ -657,6 +683,7 @@ __m128 test_mm_set_ss(float A) {
657
683
// CHECK: insertelement <4 x float> {{.*}}, float 0.000000e+00, i32 3
658
684
return _mm_set_ss (A );
659
685
}
686
+ TEST_CONSTEXPR (match_m128 (_mm_set_ss (1.0f ), +1.0f , +0.0f , +0.0f , +0.0f ));
660
687
661
688
__m128 test_mm_set1_ps (float A ) {
662
689
// CHECK-LABEL: test_mm_set1_ps
@@ -666,6 +693,7 @@ __m128 test_mm_set1_ps(float A) {
666
693
// CHECK: insertelement <4 x float> {{.*}}, float {{.*}}, i32 3
667
694
return _mm_set1_ps (A );
668
695
}
696
+ TEST_CONSTEXPR (match_m128 (_mm_set1_ps (2.0f ), +2.0f , +2.0f , +2.0f , +2.0f ));
669
697
670
698
void test_mm_setcsr (unsigned int A ) {
671
699
// CHECK-LABEL: test_mm_setcsr
@@ -682,12 +710,14 @@ __m128 test_mm_setr_ps(float A, float B, float C, float D) {
682
710
// CHECK: insertelement <4 x float> {{.*}}, float {{.*}}, i32 3
683
711
return _mm_setr_ps (A , B , C , D );
684
712
}
713
+ TEST_CONSTEXPR (match_m128 (_mm_setr_ps (+0.0f , +1.0f , +2.0f , +3.0f ), +0.0f , +1.0f , +2.0f , +3.0f ));
685
714
686
715
__m128 test_mm_setzero_ps (void ) {
687
716
// CHECK-LABEL: test_mm_setzero_ps
688
717
// CHECK: store <4 x float> zeroinitializer
689
718
return _mm_setzero_ps ();
690
719
}
720
+ TEST_CONSTEXPR (match_m128 (_mm_setzero_ps (), +0.0f , +0.0f , +0.0f , +0.0f ));
691
721
692
722
void test_mm_sfence (void ) {
693
723
// CHECK-LABEL: test_mm_sfence
@@ -787,6 +817,7 @@ __m128 test_mm_sub_ps(__m128 A, __m128 B) {
787
817
// CHECK: fsub <4 x float>
788
818
return _mm_sub_ps (A , B );
789
819
}
820
+ TEST_CONSTEXPR (match_m128 (_mm_sub_ps ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, (__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }), -7.0f , -4.0f , +0.0f , +3.0f ));
790
821
791
822
__m128 test_mm_sub_ss (__m128 A , __m128 B ) {
792
823
// CHECK-LABEL: test_mm_sub_ss
@@ -796,6 +827,7 @@ __m128 test_mm_sub_ss(__m128 A, __m128 B) {
796
827
// CHECK: insertelement <4 x float> %{{.*}}, float %{{.*}}, i32 0
797
828
return _mm_sub_ss (A , B );
798
829
}
830
+ TEST_CONSTEXPR (match_m128 (_mm_sub_ss ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, (__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }), -7.0f , +0.0f , +2.0f , +4.0f ));
799
831
800
832
void test_MM_TRANSPOSE4_PS (__m128 * A , __m128 * B , __m128 * C , __m128 * D ) {
801
833
// CHECK-LABEL: test_MM_TRANSPOSE4_PS
@@ -857,107 +889,18 @@ __m128 test_mm_unpackhi_ps(__m128 A, __m128 B) {
857
889
// CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
858
890
return _mm_unpackhi_ps (A , B );
859
891
}
892
+ TEST_CONSTEXPR (match_m128 (_mm_unpackhi_ps ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, (__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }), +2.0f , +2.0f , +4.0f , +1.0f ));
860
893
861
894
__m128 test_mm_unpacklo_ps (__m128 A , __m128 B ) {
862
895
// CHECK-LABEL: test_mm_unpacklo_ps
863
896
// CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
864
897
return _mm_unpacklo_ps (A , B );
865
898
}
899
+ TEST_CONSTEXPR (match_m128 (_mm_unpacklo_ps ((__m128 ){+1.0f , +0.0f , +2.0f , +4.0f }, (__m128 ){+8.0f , +4.0f , +2.0f , +1.0f }), +1.0f , +8.0f , +0.0f , +4.0f ));
866
900
867
901
__m128 test_mm_xor_ps (__m128 A , __m128 B ) {
868
902
// CHECK-LABEL: test_mm_xor_ps
869
903
// CHECK: xor <4 x i32>
870
904
return _mm_xor_ps (A , B );
871
905
}
872
-
873
- // Test constexpr handling.
874
- #if defined(__cplusplus ) && (__cplusplus >= 201103L )
875
-
876
- void test_constexpr () {
877
- constexpr __m128 k1 {+1.0f ,+0.0f ,+2.0f ,+4.0f };
878
- constexpr __m128 k2 {+8.0f ,+4.0f ,+2.0f ,+1.0f };
879
- constexpr __m128 k3 {-4.0f ,-5.0f ,+6.0f ,+7.0f };
880
- constexpr __m128 k4 {+0.0f ,-0.0f ,-0.0f ,+0.0f };
881
-
882
- constexpr __m128 v_mm_set_ss = _mm_set_ss (1.0f );
883
- static_assert (v_mm_set_ss [0 ] == +1.0f && v_mm_set_ss [1 ] == +0.0f && v_mm_set_ss [2 ] == +0.0f && v_mm_set_ss [3 ] == +0.0f );
884
-
885
- constexpr __m128 v_mm_set1_ps = _mm_set1_ps (2.0f );
886
- static_assert (v_mm_set1_ps [0 ] == +2.0f && v_mm_set1_ps [1 ] == +2.0f && v_mm_set1_ps [2 ] == +2.0f && v_mm_set1_ps [3 ] == +2.0f );
887
-
888
- constexpr __m128 v_mm_set_ps1 = _mm_set_ps1 (-2.0f );
889
- static_assert (v_mm_set_ps1 [0 ] == -2.0f && v_mm_set_ps1 [1 ] == -2.0f && v_mm_set_ps1 [2 ] == -2.0f && v_mm_set_ps1 [3 ] == -2.0f );
890
-
891
- constexpr __m128 v_mm_set_ps = _mm_set_ps (+0.0f , +1.0f , +2.0f , +3.0f );
892
- static_assert (v_mm_set_ps [0 ] == +3.0f && v_mm_set_ps [1 ] == +2.0f && v_mm_set_ps [2 ] == +1.0f && v_mm_set_ps [3 ] == +0.0f );
893
-
894
- constexpr __m128 v_mm_setr_ps = _mm_setr_ps (+0.0f , +1.0f , +2.0f , +3.0f );
895
- static_assert (v_mm_setr_ps [0 ] == +0.0f && v_mm_setr_ps [1 ] == +1.0f && v_mm_setr_ps [2 ] == +2.0f && v_mm_setr_ps [3 ] == +3.0f );
896
-
897
- constexpr __m128 v_mm_setzero_ps = _mm_setzero_ps ();
898
- static_assert (v_mm_setzero_ps [0 ] == +0.0f && v_mm_setzero_ps [1 ] == +0.0f && v_mm_setzero_ps [2 ] == +0.0f && v_mm_setzero_ps [3 ] == +0.0f );
899
-
900
- constexpr __m128 v_mm_add_ss = _mm_add_ss (k1 , k2 );
901
- static_assert (v_mm_add_ss [0 ] == +9.0f && v_mm_add_ss [1 ] == +0.0f && v_mm_add_ss [2 ] == +2.0f && v_mm_add_ss [3 ] == +4.0f );
902
-
903
- constexpr __m128 v_mm_add_ps = _mm_add_ps (k1 , k2 );
904
- static_assert (v_mm_add_ps [0 ] == +9.0f && v_mm_add_ps [1 ] == +4.0f && v_mm_add_ps [2 ] == +4.0f && v_mm_add_ps [3 ] == +5.0f );
905
-
906
- constexpr __m128 v_mm_sub_ss = _mm_sub_ss (k1 , k2 );
907
- static_assert (v_mm_sub_ss [0 ] == -7.0f && v_mm_sub_ss [1 ] == +0.0f && v_mm_sub_ss [2 ] == +2.0f && v_mm_sub_ss [3 ] == +4.0f );
908
-
909
- constexpr __m128 v_mm_sub_ps = _mm_sub_ps (k1 , k2 );
910
- static_assert (v_mm_sub_ps [0 ] == -7.0f && v_mm_sub_ps [1 ] == -4.0f && v_mm_sub_ps [2 ] == +0.0f && v_mm_sub_ps [3 ] == +3.0f );
911
-
912
- constexpr __m128 v_mm_mul_ss = _mm_mul_ss (k1 , k2 );
913
- static_assert (v_mm_mul_ss [0 ] == +8.0f && v_mm_mul_ss [1 ] == +0.0f && v_mm_mul_ss [2 ] == +2.0f && v_mm_mul_ss [3 ] == +4.0f );
914
-
915
- constexpr __m128 v_mm_mul_ps = _mm_mul_ps (k1 , k2 );
916
- static_assert (v_mm_mul_ps [0 ] == +8.0f && v_mm_mul_ps [1 ] == +0.0f && v_mm_mul_ps [2 ] == +4.0f && v_mm_mul_ps [3 ] == +4.0f );
917
-
918
- constexpr __m128 v_mm_div_ss = _mm_div_ss (k1 , k2 );
919
- static_assert (v_mm_div_ss [0 ] == +0.125f && v_mm_div_ss [1 ] == +0.0f && v_mm_div_ss [2 ] == +2.0f && v_mm_div_ss [3 ] == +4.0f );
920
-
921
- constexpr __m128 v_mm_div_ps = _mm_div_ps (k1 , k2 );
922
- static_assert (v_mm_div_ps [0 ] == +0.125f && v_mm_div_ps [1 ] == +0.0f && v_mm_div_ps [2 ] == +1.0f && v_mm_div_ps [3 ] == +4.0f );
923
-
924
- constexpr __m128 v_mm_and_ps = _mm_and_ps (k3 , k4 );
925
- static_assert (v_mm_and_ps [0 ] == +0.0f && v_mm_and_ps [1 ] == +0.0f && v_mm_and_ps [2 ] == +0.0f && v_mm_and_ps [3 ] == +0.0f );
926
-
927
- constexpr __m128 v_mm_andnot_ps = _mm_andnot_ps (k3 , k4 );
928
- static_assert (v_mm_andnot_ps [0 ] == +0.0f && v_mm_andnot_ps [1 ] == +0.0f && v_mm_andnot_ps [2 ] == +0.0f && v_mm_andnot_ps [3 ] == +0.0f );
929
-
930
- constexpr __m128 v_mm_or_ps = _mm_or_ps (k3 , k4 );
931
- static_assert (v_mm_or_ps [0 ] == -4.0f && v_mm_or_ps [1 ] == -5.0f && v_mm_or_ps [2 ] == -6.0f && v_mm_or_ps [3 ] == +7.0f );
932
-
933
- constexpr __m128 v_mm_xor_ps = _mm_xor_ps (k3 , k4 );
934
- static_assert (v_mm_xor_ps [0 ] == -4.0f && v_mm_xor_ps [1 ] == +5.0f && v_mm_xor_ps [2 ] == -6.0f && v_mm_xor_ps [3 ] == +7.0f );
935
-
936
- constexpr __m128 v_mm_unpackhi_ps = _mm_unpackhi_ps (k1 , k2 );
937
- static_assert (v_mm_unpackhi_ps [0 ] == +2.0f && v_mm_unpackhi_ps [1 ] == +2.0f && v_mm_unpackhi_ps [2 ] == +4.0f && v_mm_unpackhi_ps [3 ] == +1.0f );
938
-
939
- constexpr __m128 v_mm_unpacklo_ps = _mm_unpacklo_ps (k1 , k2 );
940
- static_assert (v_mm_unpacklo_ps [0 ] == +1.0f && v_mm_unpacklo_ps [1 ] == +8.0f && v_mm_unpacklo_ps [2 ] == +0.0f && v_mm_unpacklo_ps [3 ] == +4.0f );
941
-
942
- constexpr __m128 v_mm_move_ss = _mm_move_ss (k1 , k2 );
943
- static_assert (v_mm_move_ss [0 ] == +8.0f && v_mm_move_ss [1 ] == +0.0f && v_mm_move_ss [2 ] == +2.0f && v_mm_move_ss [3 ] == +4.0f );
944
-
945
- constexpr __m128 v_mm_movehl_ps = _mm_movehl_ps (k1 , k2 );
946
- static_assert (v_mm_movehl_ps [0 ] == +2.0f && v_mm_movehl_ps [1 ] == +1.0f && v_mm_movehl_ps [2 ] == +2.0f && v_mm_movehl_ps [3 ] == +4.0f );
947
-
948
- constexpr __m128 v_mm_movelh_ps = _mm_movelh_ps (k1 , k2 );
949
- static_assert (v_mm_movelh_ps [0 ] == +1.0f && v_mm_movelh_ps [1 ] == +0.0f && v_mm_movelh_ps [2 ] == +8.0f && v_mm_movelh_ps [3 ] == +4.0f );
950
-
951
- constexpr __m128 v_mm_cvtsi32_ss = _mm_cvtsi32_ss (k1 , 42 );
952
- static_assert (v_mm_cvtsi32_ss [0 ] == 42.0f && v_mm_cvtsi32_ss [1 ] == +0.0f && v_mm_cvtsi32_ss [2 ] == +2.0f && v_mm_cvtsi32_ss [3 ] == +4.0f );
953
-
954
- constexpr __m128 v_mm_cvt_si2ss = _mm_cvt_si2ss (k2 , -99 );
955
- static_assert (v_mm_cvt_si2ss [0 ] == -99.0f && v_mm_cvt_si2ss [1 ] == +4.0f && v_mm_cvt_si2ss [2 ] == +2.0f && v_mm_cvt_si2ss [3 ] == +1.0f );
956
-
957
- constexpr __m128 v_mm_cvtsi64_ss = _mm_cvtsi64_ss (k3 , 555 );
958
- static_assert (v_mm_cvtsi64_ss [0 ] == 555.0f && v_mm_cvtsi64_ss [1 ] == -5.0f && v_mm_cvtsi64_ss [2 ] == +6.0f && v_mm_cvtsi64_ss [3 ] == +7.0f );
959
-
960
- static_assert (_mm_cvtss_f32 (k2 ) == +8.0f );
961
- }
962
-
963
- #endif
906
+ TEST_CONSTEXPR (match_m128 (_mm_xor_ps ((__m128 ){-4.0f , -5.0f , +6.0f , +7.0f }, (__m128 ){+0.0f , -0.0f , -0.0f , +7.0f }), -4.0f , +5.0f , -6.0f , +0.0f ));
0 commit comments