@@ -1983,7 +1983,10 @@ pub fn _mm256_unpacklo_ps(a: __m256, b: __m256) -> __m256 {
1983
1983
#[ cfg_attr( test, assert_instr( vptest) ) ]
1984
1984
#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
1985
1985
pub fn _mm256_testz_si256 ( a : __m256i , b : __m256i ) -> i32 {
1986
- unsafe { ptestz256 ( a. as_i64x4 ( ) , b. as_i64x4 ( ) ) }
1986
+ unsafe {
1987
+ let r = simd_and ( a. as_i64x4 ( ) , b. as_i64x4 ( ) ) ;
1988
+ ( 0i64 == simd_reduce_or ( r) ) as i32
1989
+ }
1987
1990
}
1988
1991
1989
1992
/// Computes the bitwise AND of 256 bits (representing integer data) in `a` and
@@ -1997,7 +2000,10 @@ pub fn _mm256_testz_si256(a: __m256i, b: __m256i) -> i32 {
1997
2000
#[ cfg_attr( test, assert_instr( vptest) ) ]
1998
2001
#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
1999
2002
pub fn _mm256_testc_si256 ( a : __m256i , b : __m256i ) -> i32 {
2000
- unsafe { ptestc256 ( a. as_i64x4 ( ) , b. as_i64x4 ( ) ) }
2003
+ unsafe {
2004
+ let r = simd_and ( simd_xor ( a. as_i64x4 ( ) , i64x4:: splat ( !0 ) ) , b. as_i64x4 ( ) ) ;
2005
+ ( 0i64 == simd_reduce_or ( r) ) as i32
2006
+ }
2001
2007
}
2002
2008
2003
2009
/// Computes the bitwise AND of 256 bits (representing integer data) in `a` and
@@ -2081,7 +2087,10 @@ pub fn _mm256_testnzc_pd(a: __m256d, b: __m256d) -> i32 {
2081
2087
#[ cfg_attr( test, assert_instr( vtestpd) ) ]
2082
2088
#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
2083
2089
pub fn _mm_testz_pd ( a : __m128d , b : __m128d ) -> i32 {
2084
- unsafe { vtestzpd ( a, b) }
2090
+ unsafe {
2091
+ let r: i64x2 = simd_lt ( transmute ( _mm_and_pd ( a, b) ) , i64x2:: ZERO ) ;
2092
+ ( 0i64 == simd_reduce_or ( r) ) as i32
2093
+ }
2085
2094
}
2086
2095
2087
2096
/// Computes the bitwise AND of 128 bits (representing double-precision (64-bit)
@@ -2098,7 +2107,10 @@ pub fn _mm_testz_pd(a: __m128d, b: __m128d) -> i32 {
2098
2107
#[ cfg_attr( test, assert_instr( vtestpd) ) ]
2099
2108
#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
2100
2109
pub fn _mm_testc_pd ( a : __m128d , b : __m128d ) -> i32 {
2101
- unsafe { vtestcpd ( a, b) }
2110
+ unsafe {
2111
+ let r: i64x2 = simd_lt ( transmute ( _mm_andnot_pd ( a, b) ) , i64x2:: ZERO ) ;
2112
+ ( 0i64 == simd_reduce_or ( r) ) as i32
2113
+ }
2102
2114
}
2103
2115
2104
2116
/// Computes the bitwise AND of 128 bits (representing double-precision (64-bit)
@@ -2185,7 +2197,10 @@ pub fn _mm256_testnzc_ps(a: __m256, b: __m256) -> i32 {
2185
2197
#[ cfg_attr( test, assert_instr( vtestps) ) ]
2186
2198
#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
2187
2199
pub fn _mm_testz_ps ( a : __m128 , b : __m128 ) -> i32 {
2188
- unsafe { vtestzps ( a, b) }
2200
+ unsafe {
2201
+ let r: i32x4 = simd_lt ( transmute ( _mm_and_ps ( a, b) ) , i32x4:: ZERO ) ;
2202
+ ( 0i32 == simd_reduce_or ( r) ) as i32
2203
+ }
2189
2204
}
2190
2205
2191
2206
/// Computes the bitwise AND of 128 bits (representing single-precision (32-bit)
@@ -2202,7 +2217,10 @@ pub fn _mm_testz_ps(a: __m128, b: __m128) -> i32 {
2202
2217
#[ cfg_attr( test, assert_instr( vtestps) ) ]
2203
2218
#[ stable( feature = "simd_x86" , since = "1.27.0" ) ]
2204
2219
pub fn _mm_testc_ps ( a : __m128 , b : __m128 ) -> i32 {
2205
- unsafe { vtestcps ( a, b) }
2220
+ unsafe {
2221
+ let r: i32x4 = simd_lt ( transmute ( _mm_andnot_ps ( a, b) ) , i32x4:: ZERO ) ;
2222
+ ( 0i32 == simd_reduce_or ( r) ) as i32
2223
+ }
2206
2224
}
2207
2225
2208
2226
/// Computes the bitwise AND of 128 bits (representing single-precision (32-bit)
@@ -3148,10 +3166,6 @@ unsafe extern "C" {
3148
3166
fn vrcpps ( a : __m256 ) -> __m256 ;
3149
3167
#[ link_name = "llvm.x86.avx.rsqrt.ps.256" ]
3150
3168
fn vrsqrtps ( a : __m256 ) -> __m256 ;
3151
- #[ link_name = "llvm.x86.avx.ptestz.256" ]
3152
- fn ptestz256 ( a : i64x4 , b : i64x4 ) -> i32 ;
3153
- #[ link_name = "llvm.x86.avx.ptestc.256" ]
3154
- fn ptestc256 ( a : i64x4 , b : i64x4 ) -> i32 ;
3155
3169
#[ link_name = "llvm.x86.avx.ptestnzc.256" ]
3156
3170
fn ptestnzc256 ( a : i64x4 , b : i64x4 ) -> i32 ;
3157
3171
#[ link_name = "llvm.x86.avx.vtestz.pd.256" ]
@@ -3160,10 +3174,6 @@ unsafe extern "C" {
3160
3174
fn vtestcpd256 ( a : __m256d , b : __m256d ) -> i32 ;
3161
3175
#[ link_name = "llvm.x86.avx.vtestnzc.pd.256" ]
3162
3176
fn vtestnzcpd256 ( a : __m256d , b : __m256d ) -> i32 ;
3163
- #[ link_name = "llvm.x86.avx.vtestz.pd" ]
3164
- fn vtestzpd ( a : __m128d , b : __m128d ) -> i32 ;
3165
- #[ link_name = "llvm.x86.avx.vtestc.pd" ]
3166
- fn vtestcpd ( a : __m128d , b : __m128d ) -> i32 ;
3167
3177
#[ link_name = "llvm.x86.avx.vtestnzc.pd" ]
3168
3178
fn vtestnzcpd ( a : __m128d , b : __m128d ) -> i32 ;
3169
3179
#[ link_name = "llvm.x86.avx.vtestz.ps.256" ]
@@ -3172,10 +3182,6 @@ unsafe extern "C" {
3172
3182
fn vtestcps256 ( a : __m256 , b : __m256 ) -> i32 ;
3173
3183
#[ link_name = "llvm.x86.avx.vtestnzc.ps.256" ]
3174
3184
fn vtestnzcps256 ( a : __m256 , b : __m256 ) -> i32 ;
3175
- #[ link_name = "llvm.x86.avx.vtestz.ps" ]
3176
- fn vtestzps ( a : __m128 , b : __m128 ) -> i32 ;
3177
- #[ link_name = "llvm.x86.avx.vtestc.ps" ]
3178
- fn vtestcps ( a : __m128 , b : __m128 ) -> i32 ;
3179
3185
#[ link_name = "llvm.x86.avx.vtestnzc.ps" ]
3180
3186
fn vtestnzcps ( a : __m128 , b : __m128 ) -> i32 ;
3181
3187
#[ link_name = "llvm.x86.avx.min.ps.256" ]
0 commit comments