@@ -59,12 +59,60 @@ unsafe fn test_simd() {
59
59
let or = _mm_or_si128 ( x, y) ;
60
60
let cmp_eq = _mm_cmpeq_epi8 ( y, y) ;
61
61
let cmp_lt = _mm_cmplt_epi8 ( y, y) ;
62
- let shl = _mm_slli_si128 ( y, 1 ) ;
63
62
64
63
assert_eq ! ( std:: mem:: transmute:: <_, [ u16 ; 8 ] >( or) , [ 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ] ) ;
65
64
assert_eq ! ( std:: mem:: transmute:: <_, [ u16 ; 8 ] >( cmp_eq) , [ 0xffff , 0xffff , 0xffff , 0xffff , 0xffff , 0xffff , 0xffff , 0xffff ] ) ;
66
65
assert_eq ! ( std:: mem:: transmute:: <_, [ u16 ; 8 ] >( cmp_lt) , [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) ;
67
- assert_eq ! ( std:: mem:: transmute:: <_, [ u16 ; 8 ] >( or) , [ 7 , 7 , 7 , 7 , 7 , 7 , 7 , 0 ] ) ;
66
+
67
+ test_mm_slli_si128 ( ) ;
68
+ }
69
+
70
+ #[ target_feature( enable = "sse2" ) ]
71
+ unsafe fn test_mm_slli_si128 ( ) {
72
+ use std:: arch:: x86_64:: * ;
73
+
74
+ #[ rustfmt:: skip]
75
+ let a = _mm_setr_epi8 (
76
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ,
77
+ ) ;
78
+ let r = _mm_slli_si128 ( a, 1 ) ;
79
+ let e = _mm_setr_epi8 ( 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ) ;
80
+ assert_eq_m128i ( r, e) ;
81
+
82
+ #[ rustfmt:: skip]
83
+ let a = _mm_setr_epi8 (
84
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ,
85
+ ) ;
86
+ let r = _mm_slli_si128 ( a, 15 ) ;
87
+ let e = _mm_setr_epi8 ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ) ;
88
+ assert_eq_m128i ( r, e) ;
89
+
90
+ #[ rustfmt:: skip]
91
+ let a = _mm_setr_epi8 (
92
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ,
93
+ ) ;
94
+ let r = _mm_slli_si128 ( a, 16 ) ;
95
+ assert_eq_m128i ( r, _mm_set1_epi8 ( 0 ) ) ;
96
+
97
+ #[ rustfmt:: skip]
98
+ let a = _mm_setr_epi8 (
99
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ,
100
+ ) ;
101
+ let r = _mm_slli_si128 ( a, -1 ) ;
102
+ assert_eq_m128i ( _mm_set1_epi8 ( 0 ) , r) ;
103
+
104
+ #[ rustfmt:: skip]
105
+ let a = _mm_setr_epi8 (
106
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ,
107
+ ) ;
108
+ let r = _mm_slli_si128 ( a, -0x80000000 ) ;
109
+ assert_eq_m128i ( r, _mm_set1_epi8 ( 0 ) ) ;
110
+ }
111
+
112
+ fn assert_eq_m128i ( x : std:: arch:: x86_64:: __m128i , y : std:: arch:: x86_64:: __m128i ) {
113
+ unsafe {
114
+ assert_eq ! ( std:: mem:: transmute:: <_, [ u8 ; 16 ] >( x) , std:: mem:: transmute:: <_, [ u8 ; 16 ] >( x) ) ;
115
+ }
68
116
}
69
117
70
118
#[ derive( PartialEq ) ]
0 commit comments