@@ -12,7 +12,7 @@ use stdsimd_test::assert_instr;
12
12
#[ inline( always) ]
13
13
#[ target_feature = "+sse3" ]
14
14
#[ cfg_attr( test, assert_instr( addsubps) ) ]
15
- pub unsafe fn _mm_addsub_ps ( a : f32x4 , b : f32x4 ) -> f32x4 {
15
+ pub unsafe fn _mm_addsub_ps ( a : __m128 , b : __m128 ) -> __m128 {
16
16
addsubps ( a, b)
17
17
}
18
18
@@ -21,7 +21,7 @@ pub unsafe fn _mm_addsub_ps(a: f32x4, b: f32x4) -> f32x4 {
21
21
#[ inline( always) ]
22
22
#[ target_feature = "+sse3" ]
23
23
#[ cfg_attr( test, assert_instr( addsubpd) ) ]
24
- pub unsafe fn _mm_addsub_pd ( a : f64x2 , b : f64x2 ) -> f64x2 {
24
+ pub unsafe fn _mm_addsub_pd ( a : __m128d , b : __m128d ) -> __m128d {
25
25
addsubpd ( a, b)
26
26
}
27
27
@@ -30,7 +30,7 @@ pub unsafe fn _mm_addsub_pd(a: f64x2, b: f64x2) -> f64x2 {
30
30
#[ inline( always) ]
31
31
#[ target_feature = "+sse3" ]
32
32
#[ cfg_attr( test, assert_instr( haddpd) ) ]
33
- pub unsafe fn _mm_hadd_pd ( a : f64x2 , b : f64x2 ) -> f64x2 {
33
+ pub unsafe fn _mm_hadd_pd ( a : __m128d , b : __m128d ) -> __m128d {
34
34
haddpd ( a, b)
35
35
}
36
36
@@ -39,7 +39,7 @@ pub unsafe fn _mm_hadd_pd(a: f64x2, b: f64x2) -> f64x2 {
39
39
#[ inline( always) ]
40
40
#[ target_feature = "+sse3" ]
41
41
#[ cfg_attr( test, assert_instr( haddps) ) ]
42
- pub unsafe fn _mm_hadd_ps ( a : f32x4 , b : f32x4 ) -> f32x4 {
42
+ pub unsafe fn _mm_hadd_ps ( a : __m128 , b : __m128 ) -> __m128 {
43
43
haddps ( a, b)
44
44
}
45
45
@@ -48,7 +48,7 @@ pub unsafe fn _mm_hadd_ps(a: f32x4, b: f32x4) -> f32x4 {
48
48
#[ inline( always) ]
49
49
#[ target_feature = "+sse3" ]
50
50
#[ cfg_attr( test, assert_instr( hsubpd) ) ]
51
- pub unsafe fn _mm_hsub_pd ( a : f64x2 , b : f64x2 ) -> f64x2 {
51
+ pub unsafe fn _mm_hsub_pd ( a : __m128d , b : __m128d ) -> __m128d {
52
52
hsubpd ( a, b)
53
53
}
54
54
@@ -57,7 +57,7 @@ pub unsafe fn _mm_hsub_pd(a: f64x2, b: f64x2) -> f64x2 {
57
57
#[ inline( always) ]
58
58
#[ target_feature = "+sse3" ]
59
59
#[ cfg_attr( test, assert_instr( hsubps) ) ]
60
- pub unsafe fn _mm_hsub_ps ( a : f32x4 , b : f32x4 ) -> f32x4 {
60
+ pub unsafe fn _mm_hsub_ps ( a : __m128 , b : __m128 ) -> __m128 {
61
61
hsubps ( a, b)
62
62
}
63
63
@@ -76,7 +76,7 @@ pub unsafe fn _mm_lddqu_si128(mem_addr: *const __m128i) -> __m128i {
76
76
#[ inline( always) ]
77
77
#[ target_feature = "+sse3" ]
78
78
#[ cfg_attr( test, assert_instr( movddup) ) ]
79
- pub unsafe fn _mm_movedup_pd ( a : f64x2 ) -> f64x2 {
79
+ pub unsafe fn _mm_movedup_pd ( a : __m128d ) -> __m128d {
80
80
simd_shuffle2 ( a, a, [ 0 , 0 ] )
81
81
}
82
82
@@ -94,7 +94,7 @@ pub unsafe fn _mm_loaddup_pd(mem_addr: *const f64) -> __m128d {
94
94
#[ inline( always) ]
95
95
#[ target_feature = "+sse3" ]
96
96
#[ cfg_attr( test, assert_instr( movshdup) ) ]
97
- pub unsafe fn _mm_movehdup_ps ( a : f32x4 ) -> f32x4 {
97
+ pub unsafe fn _mm_movehdup_ps ( a : __m128 ) -> __m128 {
98
98
simd_shuffle4 ( a, a, [ 1 , 1 , 3 , 3 ] )
99
99
}
100
100
@@ -103,24 +103,24 @@ pub unsafe fn _mm_movehdup_ps(a: f32x4) -> f32x4 {
103
103
#[ inline( always) ]
104
104
#[ target_feature = "+sse3" ]
105
105
#[ cfg_attr( test, assert_instr( movsldup) ) ]
106
- pub unsafe fn _mm_moveldup_ps ( a : f32x4 ) -> f32x4 {
106
+ pub unsafe fn _mm_moveldup_ps ( a : __m128 ) -> __m128 {
107
107
simd_shuffle4 ( a, a, [ 0 , 0 , 2 , 2 ] )
108
108
}
109
109
110
110
#[ allow( improper_ctypes) ]
111
111
extern "C" {
112
112
#[ link_name = "llvm.x86.sse3.addsub.ps" ]
113
- fn addsubps ( a : f32x4 , b : f32x4 ) -> f32x4 ;
113
+ fn addsubps ( a : __m128 , b : __m128 ) -> __m128 ;
114
114
#[ link_name = "llvm.x86.sse3.addsub.pd" ]
115
- fn addsubpd ( a : f64x2 , b : f64x2 ) -> f64x2 ;
115
+ fn addsubpd ( a : __m128d , b : __m128d ) -> __m128d ;
116
116
#[ link_name = "llvm.x86.sse3.hadd.pd" ]
117
- fn haddpd ( a : f64x2 , b : f64x2 ) -> f64x2 ;
117
+ fn haddpd ( a : __m128d , b : __m128d ) -> __m128d ;
118
118
#[ link_name = "llvm.x86.sse3.hadd.ps" ]
119
- fn haddps ( a : f32x4 , b : f32x4 ) -> f32x4 ;
119
+ fn haddps ( a : __m128 , b : __m128 ) -> __m128 ;
120
120
#[ link_name = "llvm.x86.sse3.hsub.pd" ]
121
- fn hsubpd ( a : f64x2 , b : f64x2 ) -> f64x2 ;
121
+ fn hsubpd ( a : __m128d , b : __m128d ) -> __m128d ;
122
122
#[ link_name = "llvm.x86.sse3.hsub.ps" ]
123
- fn hsubps ( a : f32x4 , b : f32x4 ) -> f32x4 ;
123
+ fn hsubps ( a : __m128 , b : __m128 ) -> __m128 ;
124
124
#[ link_name = "llvm.x86.sse3.ldu.dq" ]
125
125
fn lddqu ( mem_addr : * const i8 ) -> i8x16 ;
126
126
}
@@ -129,90 +129,88 @@ extern "C" {
129
129
mod tests {
130
130
use stdsimd_test:: simd_test;
131
131
132
- use v128:: * ;
133
- use x86:: i586:: sse3;
134
132
use x86:: * ;
135
133
136
134
#[ simd_test = "sse3" ]
137
135
unsafe fn test_mm_addsub_ps ( ) {
138
- let a = f32x4 :: new ( -1.0 , 5.0 , 0.0 , -10.0 ) ;
139
- let b = f32x4 :: new ( -100.0 , 20.0 , 0.0 , -5.0 ) ;
140
- let r = sse3 :: _mm_addsub_ps ( a, b) ;
141
- assert_eq ! ( r, f32x4 :: new ( 99.0 , 25.0 , 0.0 , -15.0 ) ) ;
136
+ let a = _mm_setr_ps ( -1.0 , 5.0 , 0.0 , -10.0 ) ;
137
+ let b = _mm_setr_ps ( -100.0 , 20.0 , 0.0 , -5.0 ) ;
138
+ let r = _mm_addsub_ps ( a, b) ;
139
+ assert_eq_m128 ( r, _mm_setr_ps ( 99.0 , 25.0 , 0.0 , -15.0 ) ) ;
142
140
}
143
141
144
142
#[ simd_test = "sse3" ]
145
143
unsafe fn test_mm_addsub_pd ( ) {
146
- let a = f64x2 :: new ( -1.0 , 5.0 ) ;
147
- let b = f64x2 :: new ( -100.0 , 20.0 ) ;
148
- let r = sse3 :: _mm_addsub_pd ( a, b) ;
149
- assert_eq ! ( r, f64x2 :: new ( 99.0 , 25.0 ) ) ;
144
+ let a = _mm_setr_pd ( -1.0 , 5.0 ) ;
145
+ let b = _mm_setr_pd ( -100.0 , 20.0 ) ;
146
+ let r = _mm_addsub_pd ( a, b) ;
147
+ assert_eq_m128d ( r, _mm_setr_pd ( 99.0 , 25.0 ) ) ;
150
148
}
151
149
152
150
#[ simd_test = "sse3" ]
153
151
unsafe fn test_mm_hadd_pd ( ) {
154
- let a = f64x2 :: new ( -1.0 , 5.0 ) ;
155
- let b = f64x2 :: new ( -100.0 , 20.0 ) ;
156
- let r = sse3 :: _mm_hadd_pd ( a, b) ;
157
- assert_eq ! ( r, f64x2 :: new ( 4.0 , -80.0 ) ) ;
152
+ let a = _mm_setr_pd ( -1.0 , 5.0 ) ;
153
+ let b = _mm_setr_pd ( -100.0 , 20.0 ) ;
154
+ let r = _mm_hadd_pd ( a, b) ;
155
+ assert_eq_m128d ( r, _mm_setr_pd ( 4.0 , -80.0 ) ) ;
158
156
}
159
157
160
158
#[ simd_test = "sse3" ]
161
159
unsafe fn test_mm_hadd_ps ( ) {
162
- let a = f32x4 :: new ( -1.0 , 5.0 , 0.0 , -10.0 ) ;
163
- let b = f32x4 :: new ( -100.0 , 20.0 , 0.0 , -5.0 ) ;
164
- let r = sse3 :: _mm_hadd_ps ( a, b) ;
165
- assert_eq ! ( r, f32x4 :: new ( 4.0 , -10.0 , -80.0 , -5.0 ) ) ;
160
+ let a = _mm_setr_ps ( -1.0 , 5.0 , 0.0 , -10.0 ) ;
161
+ let b = _mm_setr_ps ( -100.0 , 20.0 , 0.0 , -5.0 ) ;
162
+ let r = _mm_hadd_ps ( a, b) ;
163
+ assert_eq_m128 ( r, _mm_setr_ps ( 4.0 , -10.0 , -80.0 , -5.0 ) ) ;
166
164
}
167
165
168
166
#[ simd_test = "sse3" ]
169
167
unsafe fn test_mm_hsub_pd ( ) {
170
- let a = f64x2 :: new ( -1.0 , 5.0 ) ;
171
- let b = f64x2 :: new ( -100.0 , 20.0 ) ;
172
- let r = sse3 :: _mm_hsub_pd ( a, b) ;
173
- assert_eq ! ( r, f64x2 :: new ( -6.0 , -120.0 ) ) ;
168
+ let a = _mm_setr_pd ( -1.0 , 5.0 ) ;
169
+ let b = _mm_setr_pd ( -100.0 , 20.0 ) ;
170
+ let r = _mm_hsub_pd ( a, b) ;
171
+ assert_eq_m128d ( r, _mm_setr_pd ( -6.0 , -120.0 ) ) ;
174
172
}
175
173
176
174
#[ simd_test = "sse3" ]
177
175
unsafe fn test_mm_hsub_ps ( ) {
178
- let a = f32x4 :: new ( -1.0 , 5.0 , 0.0 , -10.0 ) ;
179
- let b = f32x4 :: new ( -100.0 , 20.0 , 0.0 , -5.0 ) ;
180
- let r = sse3 :: _mm_hsub_ps ( a, b) ;
181
- assert_eq ! ( r, f32x4 :: new ( -6.0 , 10.0 , -120.0 , 5.0 ) ) ;
176
+ let a = _mm_setr_ps ( -1.0 , 5.0 , 0.0 , -10.0 ) ;
177
+ let b = _mm_setr_ps ( -100.0 , 20.0 , 0.0 , -5.0 ) ;
178
+ let r = _mm_hsub_ps ( a, b) ;
179
+ assert_eq_m128 ( r, _mm_setr_ps ( -6.0 , 10.0 , -120.0 , 5.0 ) ) ;
182
180
}
183
181
184
182
#[ simd_test = "sse3" ]
185
183
unsafe fn test_mm_lddqu_si128 ( ) {
186
184
#[ cfg_attr( rustfmt, rustfmt_skip) ]
187
- let a = __m128i :: from ( i8x16 :: new (
185
+ let a = _mm_setr_epi8 (
188
186
1 , 2 , 3 , 4 ,
189
187
5 , 6 , 7 , 8 ,
190
188
9 , 10 , 11 , 12 ,
191
189
13 , 14 , 15 , 16 ,
192
- ) ) ;
193
- let r = sse3 :: _mm_lddqu_si128 ( & a) ;
190
+ ) ;
191
+ let r = _mm_lddqu_si128 ( & a) ;
194
192
assert_eq ! ( a, r) ;
195
193
}
196
194
197
195
#[ simd_test = "sse3" ]
198
196
unsafe fn test_mm_movedup_pd ( ) {
199
- let a = f64x2 :: new ( -1.0 , 5.0 ) ;
200
- let r = sse3 :: _mm_movedup_pd ( a) ;
201
- assert_eq ! ( r, f64x2 :: new ( -1.0 , -1.0 ) ) ;
197
+ let a = _mm_setr_pd ( -1.0 , 5.0 ) ;
198
+ let r = _mm_movedup_pd ( a) ;
199
+ assert_eq_m128d ( r, _mm_setr_pd ( -1.0 , -1.0 ) ) ;
202
200
}
203
201
204
202
#[ simd_test = "sse3" ]
205
203
unsafe fn test_mm_movehdup_ps ( ) {
206
- let a = f32x4 :: new ( -1.0 , 5.0 , 0.0 , -10.0 ) ;
207
- let r = sse3 :: _mm_movehdup_ps ( a) ;
208
- assert_eq ! ( r, f32x4 :: new ( 5.0 , 5.0 , -10.0 , -10.0 ) ) ;
204
+ let a = _mm_setr_ps ( -1.0 , 5.0 , 0.0 , -10.0 ) ;
205
+ let r = _mm_movehdup_ps ( a) ;
206
+ assert_eq_m128 ( r, _mm_setr_ps ( 5.0 , 5.0 , -10.0 , -10.0 ) ) ;
209
207
}
210
208
211
209
#[ simd_test = "sse3" ]
212
210
unsafe fn test_mm_moveldup_ps ( ) {
213
- let a = f32x4 :: new ( -1.0 , 5.0 , 0.0 , -10.0 ) ;
214
- let r = sse3 :: _mm_moveldup_ps ( a) ;
215
- assert_eq ! ( r, f32x4 :: new ( -1.0 , -1.0 , 0.0 , 0.0 ) ) ;
211
+ let a = _mm_setr_ps ( -1.0 , 5.0 , 0.0 , -10.0 ) ;
212
+ let r = _mm_moveldup_ps ( a) ;
213
+ assert_eq_m128 ( r, _mm_setr_ps ( -1.0 , -1.0 , 0.0 , 0.0 ) ) ;
216
214
}
217
215
218
216
#[ simd_test = "sse3" ]
0 commit comments