9
9
//! [intel64_ref]: http://www.intel.de/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf
10
10
11
11
use crate :: {
12
- core_arch:: { simd:: * , x86:: * } ,
12
+ core_arch:: { simd:: * , simd_llvm :: * , x86:: * } ,
13
13
mem:: transmute,
14
14
} ;
15
15
@@ -31,7 +31,7 @@ pub unsafe fn _mm_setzero_si64() -> __m64 {
31
31
#[ target_feature( enable = "mmx" ) ]
32
32
#[ cfg_attr( test, assert_instr( paddb) ) ]
33
33
pub unsafe fn _mm_add_pi8 ( a : __m64 , b : __m64 ) -> __m64 {
34
- paddb ( a , b)
34
+ transmute ( simd_add ( a . as_i8x8 ( ) , b. as_i8x8 ( ) ) )
35
35
}
36
36
37
37
/// Adds packed 8-bit integers in `a` and `b`.
@@ -47,7 +47,7 @@ pub unsafe fn _m_paddb(a: __m64, b: __m64) -> __m64 {
47
47
#[ target_feature( enable = "mmx" ) ]
48
48
#[ cfg_attr( test, assert_instr( paddw) ) ]
49
49
pub unsafe fn _mm_add_pi16 ( a : __m64 , b : __m64 ) -> __m64 {
50
- paddw ( a , b)
50
+ transmute ( simd_add ( a . as_i16x4 ( ) , b. as_i16x4 ( ) ) )
51
51
}
52
52
53
53
/// Adds packed 16-bit integers in `a` and `b`.
@@ -63,7 +63,7 @@ pub unsafe fn _m_paddw(a: __m64, b: __m64) -> __m64 {
63
63
#[ target_feature( enable = "mmx" ) ]
64
64
#[ cfg_attr( test, assert_instr( paddd) ) ]
65
65
pub unsafe fn _mm_add_pi32 ( a : __m64 , b : __m64 ) -> __m64 {
66
- paddd ( a , b)
66
+ transmute ( simd_add ( a . as_i32x2 ( ) , b. as_i32x2 ( ) ) )
67
67
}
68
68
69
69
/// Adds packed 32-bit integers in `a` and `b`.
@@ -79,7 +79,7 @@ pub unsafe fn _m_paddd(a: __m64, b: __m64) -> __m64 {
79
79
#[ target_feature( enable = "mmx" ) ]
80
80
#[ cfg_attr( test, assert_instr( paddsb) ) ]
81
81
pub unsafe fn _mm_adds_pi8 ( a : __m64 , b : __m64 ) -> __m64 {
82
- paddsb ( a , b)
82
+ transmute ( simd_saturating_add ( a . as_i8x8 ( ) , b. as_i8x8 ( ) ) )
83
83
}
84
84
85
85
/// Adds packed 8-bit integers in `a` and `b` using saturation.
@@ -95,7 +95,7 @@ pub unsafe fn _m_paddsb(a: __m64, b: __m64) -> __m64 {
95
95
#[ target_feature( enable = "mmx" ) ]
96
96
#[ cfg_attr( test, assert_instr( paddsw) ) ]
97
97
pub unsafe fn _mm_adds_pi16 ( a : __m64 , b : __m64 ) -> __m64 {
98
- paddsw ( a , b)
98
+ transmute ( simd_saturating_add ( a . as_i16x4 ( ) , b. as_i16x4 ( ) ) )
99
99
}
100
100
101
101
/// Adds packed 16-bit integers in `a` and `b` using saturation.
@@ -111,7 +111,7 @@ pub unsafe fn _m_paddsw(a: __m64, b: __m64) -> __m64 {
111
111
#[ target_feature( enable = "mmx" ) ]
112
112
#[ cfg_attr( test, assert_instr( paddusb) ) ]
113
113
pub unsafe fn _mm_adds_pu8 ( a : __m64 , b : __m64 ) -> __m64 {
114
- paddusb ( a , b)
114
+ transmute ( simd_saturating_add ( a . as_u8x8 ( ) , b. as_u8x8 ( ) ) )
115
115
}
116
116
117
117
/// Adds packed unsigned 8-bit integers in `a` and `b` using saturation.
@@ -127,7 +127,7 @@ pub unsafe fn _m_paddusb(a: __m64, b: __m64) -> __m64 {
127
127
#[ target_feature( enable = "mmx" ) ]
128
128
#[ cfg_attr( test, assert_instr( paddusw) ) ]
129
129
pub unsafe fn _mm_adds_pu16 ( a : __m64 , b : __m64 ) -> __m64 {
130
- paddusw ( a , b)
130
+ transmute ( simd_saturating_add ( a . as_u16x4 ( ) , b. as_u16x4 ( ) ) )
131
131
}
132
132
133
133
/// Adds packed unsigned 16-bit integers in `a` and `b` using saturation.
@@ -143,7 +143,7 @@ pub unsafe fn _m_paddusw(a: __m64, b: __m64) -> __m64 {
143
143
#[ target_feature( enable = "mmx" ) ]
144
144
#[ cfg_attr( test, assert_instr( psubb) ) ]
145
145
pub unsafe fn _mm_sub_pi8 ( a : __m64 , b : __m64 ) -> __m64 {
146
- psubb ( a , b)
146
+ transmute ( simd_sub ( a . as_i8x8 ( ) , b. as_i8x8 ( ) ) )
147
147
}
148
148
149
149
/// Subtract packed 8-bit integers in `b` from packed 8-bit integers in `a`.
@@ -159,7 +159,7 @@ pub unsafe fn _m_psubb(a: __m64, b: __m64) -> __m64 {
159
159
#[ target_feature( enable = "mmx" ) ]
160
160
#[ cfg_attr( test, assert_instr( psubw) ) ]
161
161
pub unsafe fn _mm_sub_pi16 ( a : __m64 , b : __m64 ) -> __m64 {
162
- psubw ( a , b)
162
+ transmute ( simd_sub ( a . as_i16x4 ( ) , b. as_i16x4 ( ) ) )
163
163
}
164
164
165
165
/// Subtract packed 16-bit integers in `b` from packed 16-bit integers in `a`.
@@ -175,7 +175,7 @@ pub unsafe fn _m_psubw(a: __m64, b: __m64) -> __m64 {
175
175
#[ target_feature( enable = "mmx" ) ]
176
176
#[ cfg_attr( test, assert_instr( psubd) ) ]
177
177
pub unsafe fn _mm_sub_pi32 ( a : __m64 , b : __m64 ) -> __m64 {
178
- psubd ( a , b)
178
+ transmute ( simd_sub ( a . as_i32x2 ( ) , b. as_i32x2 ( ) ) )
179
179
}
180
180
181
181
/// Subtract packed 32-bit integers in `b` from packed 32-bit integers in `a`.
@@ -192,7 +192,7 @@ pub unsafe fn _m_psubd(a: __m64, b: __m64) -> __m64 {
192
192
#[ target_feature( enable = "mmx" ) ]
193
193
#[ cfg_attr( test, assert_instr( psubsb) ) ]
194
194
pub unsafe fn _mm_subs_pi8 ( a : __m64 , b : __m64 ) -> __m64 {
195
- psubsb ( a , b)
195
+ transmute ( simd_saturating_sub ( a . as_i8x8 ( ) , b. as_i8x8 ( ) ) )
196
196
}
197
197
198
198
/// Subtract packed 8-bit integers in `b` from packed 8-bit integers in `a`
@@ -210,7 +210,7 @@ pub unsafe fn _m_psubsb(a: __m64, b: __m64) -> __m64 {
210
210
#[ target_feature( enable = "mmx" ) ]
211
211
#[ cfg_attr( test, assert_instr( psubsw) ) ]
212
212
pub unsafe fn _mm_subs_pi16 ( a : __m64 , b : __m64 ) -> __m64 {
213
- psubsw ( a , b)
213
+ transmute ( simd_saturating_sub ( a . as_i16x4 ( ) , b. as_i16x4 ( ) ) )
214
214
}
215
215
216
216
/// Subtract packed 16-bit integers in `b` from packed 16-bit integers in `a`
@@ -228,7 +228,7 @@ pub unsafe fn _m_psubsw(a: __m64, b: __m64) -> __m64 {
228
228
#[ target_feature( enable = "mmx" ) ]
229
229
#[ cfg_attr( test, assert_instr( psubusb) ) ]
230
230
pub unsafe fn _mm_subs_pu8 ( a : __m64 , b : __m64 ) -> __m64 {
231
- psubusb ( a , b)
231
+ transmute ( simd_saturating_sub ( a . as_u8x8 ( ) , b. as_u8x8 ( ) ) )
232
232
}
233
233
234
234
/// Subtract packed unsigned 8-bit integers in `b` from packed unsigned 8-bit
@@ -246,7 +246,7 @@ pub unsafe fn _m_psubusb(a: __m64, b: __m64) -> __m64 {
246
246
#[ target_feature( enable = "mmx" ) ]
247
247
#[ cfg_attr( test, assert_instr( psubusw) ) ]
248
248
pub unsafe fn _mm_subs_pu16 ( a : __m64 , b : __m64 ) -> __m64 {
249
- psubusw ( a , b)
249
+ transmute ( simd_saturating_sub ( a . as_u16x4 ( ) , b. as_u16x4 ( ) ) )
250
250
}
251
251
252
252
/// Subtract packed unsigned 16-bit integers in `b` from packed unsigned
@@ -475,34 +475,6 @@ pub unsafe fn _mm_cvtsi64_si32(a: __m64) -> i32 {
475
475
476
476
#[ allow( improper_ctypes) ]
477
477
extern "C" {
478
- #[ link_name = "llvm.x86.mmx.padd.b" ]
479
- fn paddb ( a : __m64 , b : __m64 ) -> __m64 ;
480
- #[ link_name = "llvm.x86.mmx.padd.w" ]
481
- fn paddw ( a : __m64 , b : __m64 ) -> __m64 ;
482
- #[ link_name = "llvm.x86.mmx.padd.d" ]
483
- fn paddd ( a : __m64 , b : __m64 ) -> __m64 ;
484
- #[ link_name = "llvm.x86.mmx.padds.b" ]
485
- fn paddsb ( a : __m64 , b : __m64 ) -> __m64 ;
486
- #[ link_name = "llvm.x86.mmx.padds.w" ]
487
- fn paddsw ( a : __m64 , b : __m64 ) -> __m64 ;
488
- #[ link_name = "llvm.x86.mmx.paddus.b" ]
489
- fn paddusb ( a : __m64 , b : __m64 ) -> __m64 ;
490
- #[ link_name = "llvm.x86.mmx.paddus.w" ]
491
- fn paddusw ( a : __m64 , b : __m64 ) -> __m64 ;
492
- #[ link_name = "llvm.x86.mmx.psub.b" ]
493
- fn psubb ( a : __m64 , b : __m64 ) -> __m64 ;
494
- #[ link_name = "llvm.x86.mmx.psub.w" ]
495
- fn psubw ( a : __m64 , b : __m64 ) -> __m64 ;
496
- #[ link_name = "llvm.x86.mmx.psub.d" ]
497
- fn psubd ( a : __m64 , b : __m64 ) -> __m64 ;
498
- #[ link_name = "llvm.x86.mmx.psubs.b" ]
499
- fn psubsb ( a : __m64 , b : __m64 ) -> __m64 ;
500
- #[ link_name = "llvm.x86.mmx.psubs.w" ]
501
- fn psubsw ( a : __m64 , b : __m64 ) -> __m64 ;
502
- #[ link_name = "llvm.x86.mmx.psubus.b" ]
503
- fn psubusb ( a : __m64 , b : __m64 ) -> __m64 ;
504
- #[ link_name = "llvm.x86.mmx.psubus.w" ]
505
- fn psubusw ( a : __m64 , b : __m64 ) -> __m64 ;
506
478
#[ link_name = "llvm.x86.mmx.packsswb" ]
507
479
fn packsswb ( a : __m64 , b : __m64 ) -> __m64 ;
508
480
#[ link_name = "llvm.x86.mmx.packssdw" ]
0 commit comments