@@ -6,6 +6,7 @@ use std::mem;
6
6
use stdsimd_test:: assert_instr;
7
7
use simd_llvm:: { simd_shuffle2, simd_shuffle4, simd_shuffle8} ;
8
8
9
+ use x86:: __m128i;
9
10
use v128:: * ;
10
11
11
12
// SSE4 rounding constans
@@ -387,8 +388,8 @@ pub unsafe fn _mm_mullo_epi32 (a: i32x4, b:i32x4) -> i32x4 {
387
388
#[ inline( always) ]
388
389
#[ target_feature = "+sse4.1" ]
389
390
#[ cfg_attr( test, assert_instr( ptest) ) ]
390
- pub unsafe fn _mm_testz_si128 ( a : i64x2 , mask : i64x2 ) -> i32 {
391
- ptestz ( a, mask)
391
+ pub unsafe fn _mm_testz_si128 ( a : __m128i , mask : __m128i ) -> i32 {
392
+ ptestz ( a. into ( ) , mask. into ( ) )
392
393
}
393
394
394
395
/// Tests whether the specified bits in a 128-bit integer vector are all
@@ -406,8 +407,8 @@ pub unsafe fn _mm_testz_si128(a: i64x2, mask: i64x2) -> i32 {
406
407
#[ inline( always) ]
407
408
#[ target_feature = "+sse4.1" ]
408
409
#[ cfg_attr( test, assert_instr( ptest) ) ]
409
- pub unsafe fn _mm_testc_si128 ( a : i64x2 , mask : i64x2 ) -> i32 {
410
- ptestc ( a, mask)
410
+ pub unsafe fn _mm_testc_si128 ( a : __m128i , mask : __m128i ) -> i32 {
411
+ ptestc ( a. into ( ) , mask. into ( ) )
411
412
}
412
413
413
414
/// Tests whether the specified bits in a 128-bit integer vector are
@@ -425,8 +426,8 @@ pub unsafe fn _mm_testc_si128(a: i64x2, mask: i64x2) -> i32 {
425
426
#[ inline( always) ]
426
427
#[ target_feature = "+sse4.1" ]
427
428
#[ cfg_attr( test, assert_instr( ptest) ) ]
428
- pub unsafe fn _mm_testnzc_si128 ( a : i64x2 , mask : i64x2 ) -> i32 {
429
- ptestnzc ( a, mask)
429
+ pub unsafe fn _mm_testnzc_si128 ( a : __m128i , mask : __m128i ) -> i32 {
430
+ ptestnzc ( a. into ( ) , mask. into ( ) )
430
431
}
431
432
432
433
/// Tests whether the specified bits in a 128-bit integer vector are all
@@ -444,7 +445,7 @@ pub unsafe fn _mm_testnzc_si128(a: i64x2, mask: i64x2) -> i32 {
444
445
#[ inline( always) ]
445
446
#[ target_feature = "+sse4.1" ]
446
447
#[ cfg_attr( test, assert_instr( ptest) ) ]
447
- pub unsafe fn _mm_test_all_zeros ( a : i64x2 , mask : i64x2 ) -> i32 {
448
+ pub unsafe fn _mm_test_all_zeros ( a : __m128i , mask : __m128i ) -> i32 {
448
449
_mm_testz_si128 ( a, mask)
449
450
}
450
451
@@ -463,8 +464,8 @@ pub unsafe fn _mm_test_all_zeros(a: i64x2, mask: i64x2) -> i32 {
463
464
#[ target_feature = "+sse4.1" ]
464
465
#[ cfg_attr( test, assert_instr( pcmpeqd) ) ]
465
466
#[ cfg_attr( test, assert_instr( ptest) ) ]
466
- pub unsafe fn _mm_test_all_ones ( a : i64x2 ) -> i32 {
467
- _mm_testc_si128 ( a, i64x2 :: splat ( - 1 ) )
467
+ pub unsafe fn _mm_test_all_ones ( a : __m128i ) -> i32 {
468
+ _mm_testc_si128 ( a, :: x86 :: sse2 :: _mm_cmpeq_epi32 ( a . into ( ) , a . into ( ) ) . into ( ) )
468
469
}
469
470
470
471
/// Tests whether the specified bits in a 128-bit integer vector are
@@ -482,7 +483,7 @@ pub unsafe fn _mm_test_all_ones(a: i64x2) -> i32 {
482
483
#[ inline( always) ]
483
484
#[ target_feature = "+sse4.1" ]
484
485
#[ cfg_attr( test, assert_instr( ptest) ) ]
485
- pub unsafe fn _mm_test_mix_ones_zeros ( a : i64x2 , mask : i64x2 ) -> i32 {
486
+ pub unsafe fn _mm_test_mix_ones_zeros ( a : __m128i , mask : __m128i ) -> i32 {
486
487
_mm_testnzc_si128 ( a, mask)
487
488
}
488
489
@@ -850,6 +851,7 @@ mod tests {
850
851
use stdsimd_test:: simd_test;
851
852
852
853
use v128:: * ;
854
+ use x86:: __m128i;
853
855
use x86:: sse41;
854
856
855
857
#[ simd_test = "sse4.1" ]
@@ -1200,98 +1202,98 @@ mod tests {
1200
1202
1201
1203
#[ simd_test = "sse4.1" ]
1202
1204
unsafe fn _mm_testz_si128 ( ) {
1203
- let a = i64x2 :: splat ( 1 ) ;
1204
- let mask = i64x2 :: splat ( 0 ) ;
1205
+ let a = __m128i :: splat ( 1 ) ;
1206
+ let mask = __m128i :: splat ( 0 ) ;
1205
1207
let r = sse41:: _mm_testz_si128 ( a, mask) ;
1206
1208
assert_eq ! ( r, 1 ) ;
1207
- let a = i64x2 :: splat ( 0b101 ) ;
1208
- let mask = i64x2 :: splat ( 0b110 ) ;
1209
+ let a = __m128i :: splat ( 0b101 ) ;
1210
+ let mask = __m128i :: splat ( 0b110 ) ;
1209
1211
let r = sse41:: _mm_testz_si128 ( a, mask) ;
1210
1212
assert_eq ! ( r, 0 ) ;
1211
- let a = i64x2 :: splat ( 0b011 ) ;
1212
- let mask = i64x2 :: splat ( 0b100 ) ;
1213
+ let a = __m128i :: splat ( 0b011 ) ;
1214
+ let mask = __m128i :: splat ( 0b100 ) ;
1213
1215
let r = sse41:: _mm_testz_si128 ( a, mask) ;
1214
1216
assert_eq ! ( r, 1 ) ;
1215
1217
}
1216
1218
1217
1219
#[ simd_test = "sse4.1" ]
1218
1220
unsafe fn _mm_testc_si128 ( ) {
1219
- let a = i64x2 :: splat ( -1 ) ;
1220
- let mask = i64x2 :: splat ( 0 ) ;
1221
+ let a = __m128i :: splat ( -1 ) ;
1222
+ let mask = __m128i :: splat ( 0 ) ;
1221
1223
let r = sse41:: _mm_testc_si128 ( a, mask) ;
1222
1224
assert_eq ! ( r, 1 ) ;
1223
- let a = i64x2 :: splat ( 0b101 ) ;
1224
- let mask = i64x2 :: splat ( 0b110 ) ;
1225
+ let a = __m128i :: splat ( 0b101 ) ;
1226
+ let mask = __m128i :: splat ( 0b110 ) ;
1225
1227
let r = sse41:: _mm_testc_si128 ( a, mask) ;
1226
1228
assert_eq ! ( r, 0 ) ;
1227
- let a = i64x2 :: splat ( 0b101 ) ;
1228
- let mask = i64x2 :: splat ( 0b100 ) ;
1229
+ let a = __m128i :: splat ( 0b101 ) ;
1230
+ let mask = __m128i :: splat ( 0b100 ) ;
1229
1231
let r = sse41:: _mm_testc_si128 ( a, mask) ;
1230
1232
assert_eq ! ( r, 1 ) ;
1231
1233
}
1232
1234
1233
1235
#[ simd_test = "sse4.1" ]
1234
1236
unsafe fn _mm_testnzc_si128 ( ) {
1235
- let a = i64x2 :: splat ( 0 ) ;
1236
- let mask = i64x2 :: splat ( 1 ) ;
1237
+ let a = __m128i :: splat ( 0 ) ;
1238
+ let mask = __m128i :: splat ( 1 ) ;
1237
1239
let r = sse41:: _mm_testnzc_si128 ( a, mask) ;
1238
1240
assert_eq ! ( r, 0 ) ;
1239
- let a = i64x2 :: splat ( -1 ) ;
1240
- let mask = i64x2 :: splat ( 0 ) ;
1241
+ let a = __m128i :: splat ( -1 ) ;
1242
+ let mask = __m128i :: splat ( 0 ) ;
1241
1243
let r = sse41:: _mm_testnzc_si128 ( a, mask) ;
1242
1244
assert_eq ! ( r, 0 ) ;
1243
- let a = i64x2 :: splat ( 0b101 ) ;
1244
- let mask = i64x2 :: splat ( 0b110 ) ;
1245
+ let a = __m128i :: splat ( 0b101 ) ;
1246
+ let mask = __m128i :: splat ( 0b110 ) ;
1245
1247
let r = sse41:: _mm_testnzc_si128 ( a, mask) ;
1246
1248
assert_eq ! ( r, 1 ) ;
1247
- let a = i64x2 :: splat ( 0b101 ) ;
1248
- let mask = i64x2 :: splat ( 0b101 ) ;
1249
+ let a = __m128i :: splat ( 0b101 ) ;
1250
+ let mask = __m128i :: splat ( 0b101 ) ;
1249
1251
let r = sse41:: _mm_testnzc_si128 ( a, mask) ;
1250
1252
assert_eq ! ( r, 0 ) ;
1251
1253
}
1252
1254
1253
1255
#[ simd_test = "sse4.1" ]
1254
1256
unsafe fn _mm_test_all_zeros ( ) {
1255
- let a = i64x2 :: splat ( 1 ) ;
1256
- let mask = i64x2 :: splat ( 0 ) ;
1257
+ let a = __m128i :: splat ( 1 ) ;
1258
+ let mask = __m128i :: splat ( 0 ) ;
1257
1259
let r = sse41:: _mm_test_all_zeros ( a, mask) ;
1258
1260
assert_eq ! ( r, 1 ) ;
1259
- let a = i64x2 :: splat ( 0b101 ) ;
1260
- let mask = i64x2 :: splat ( 0b110 ) ;
1261
+ let a = __m128i :: splat ( 0b101 ) ;
1262
+ let mask = __m128i :: splat ( 0b110 ) ;
1261
1263
let r = sse41:: _mm_test_all_zeros ( a, mask) ;
1262
1264
assert_eq ! ( r, 0 ) ;
1263
- let a = i64x2 :: splat ( 0b011 ) ;
1264
- let mask = i64x2 :: splat ( 0b100 ) ;
1265
+ let a = __m128i :: splat ( 0b011 ) ;
1266
+ let mask = __m128i :: splat ( 0b100 ) ;
1265
1267
let r = sse41:: _mm_test_all_zeros ( a, mask) ;
1266
1268
assert_eq ! ( r, 1 ) ;
1267
1269
}
1268
1270
1269
1271
#[ simd_test = "sse4.1" ]
1270
1272
unsafe fn _mm_test_all_ones ( ) {
1271
- let a = i64x2 :: splat ( -1 ) ;
1273
+ let a = __m128i :: splat ( -1 ) ;
1272
1274
let r = sse41:: _mm_test_all_ones ( a) ;
1273
1275
assert_eq ! ( r, 1 ) ;
1274
- let a = i64x2 :: splat ( 0b101 ) ;
1276
+ let a = __m128i :: splat ( 0b101 ) ;
1275
1277
let r = sse41:: _mm_test_all_ones ( a) ;
1276
1278
assert_eq ! ( r, 0 ) ;
1277
1279
}
1278
1280
1279
1281
#[ simd_test = "sse4.1" ]
1280
1282
unsafe fn _mm_test_mix_ones_zeros ( ) {
1281
- let a = i64x2 :: splat ( 0 ) ;
1282
- let mask = i64x2 :: splat ( 1 ) ;
1283
+ let a = __m128i :: splat ( 0 ) ;
1284
+ let mask = __m128i :: splat ( 1 ) ;
1283
1285
let r = sse41:: _mm_test_mix_ones_zeros ( a, mask) ;
1284
1286
assert_eq ! ( r, 0 ) ;
1285
- let a = i64x2 :: splat ( -1 ) ;
1286
- let mask = i64x2 :: splat ( 0 ) ;
1287
+ let a = __m128i :: splat ( -1 ) ;
1288
+ let mask = __m128i :: splat ( 0 ) ;
1287
1289
let r = sse41:: _mm_test_mix_ones_zeros ( a, mask) ;
1288
1290
assert_eq ! ( r, 0 ) ;
1289
- let a = i64x2 :: splat ( 0b101 ) ;
1290
- let mask = i64x2 :: splat ( 0b110 ) ;
1291
+ let a = __m128i :: splat ( 0b101 ) ;
1292
+ let mask = __m128i :: splat ( 0b110 ) ;
1291
1293
let r = sse41:: _mm_test_mix_ones_zeros ( a, mask) ;
1292
1294
assert_eq ! ( r, 1 ) ;
1293
- let a = i64x2 :: splat ( 0b101 ) ;
1294
- let mask = i64x2 :: splat ( 0b101 ) ;
1295
+ let a = __m128i :: splat ( 0b101 ) ;
1296
+ let mask = __m128i :: splat ( 0b101 ) ;
1295
1297
let r = sse41:: _mm_test_mix_ones_zeros ( a, mask) ;
1296
1298
assert_eq ! ( r, 0 ) ;
1297
1299
}
0 commit comments