@@ -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
@@ -425,8 +426,8 @@ pub unsafe fn _mm_mullo_epi32 (a: i32x4, b:i32x4) -> i32x4 {
425
426
#[ inline( always) ]
426
427
#[ target_feature = "+sse4.1" ]
427
428
#[ cfg_attr( test, assert_instr( ptest) ) ]
428
- pub unsafe fn _mm_testz_si128 ( a : i64x2 , mask : i64x2 ) -> i32 {
429
- ptestz ( a, mask)
429
+ pub unsafe fn _mm_testz_si128 ( a : __m128i , mask : __m128i ) -> i32 {
430
+ ptestz ( a. into ( ) , mask. into ( ) )
430
431
}
431
432
432
433
@@ -445,8 +446,8 @@ pub unsafe fn _mm_testz_si128(a: i64x2, mask: i64x2) -> i32 {
445
446
#[ inline( always) ]
446
447
#[ target_feature = "+sse4.1" ]
447
448
#[ cfg_attr( test, assert_instr( ptest) ) ]
448
- pub unsafe fn _mm_testc_si128 ( a : i64x2 , mask : i64x2 ) -> i32 {
449
- ptestc ( a, mask)
449
+ pub unsafe fn _mm_testc_si128 ( a : __m128i , mask : __m128i ) -> i32 {
450
+ ptestc ( a. into ( ) , mask. into ( ) )
450
451
}
451
452
452
453
/// Tests whether the specified bits in a 128-bit integer vector are
@@ -464,8 +465,8 @@ pub unsafe fn _mm_testc_si128(a: i64x2, mask: i64x2) -> i32 {
464
465
#[ inline( always) ]
465
466
#[ target_feature = "+sse4.1" ]
466
467
#[ cfg_attr( test, assert_instr( ptest) ) ]
467
- pub unsafe fn _mm_testnzc_si128 ( a : i64x2 , mask : i64x2 ) -> i32 {
468
- ptestnzc ( a, mask)
468
+ pub unsafe fn _mm_testnzc_si128 ( a : __m128i , mask : __m128i ) -> i32 {
469
+ ptestnzc ( a. into ( ) , mask. into ( ) )
469
470
}
470
471
471
472
/// Tests whether the specified bits in a 128-bit integer vector are all
@@ -483,7 +484,7 @@ pub unsafe fn _mm_testnzc_si128(a: i64x2, mask: i64x2) -> i32 {
483
484
#[ inline( always) ]
484
485
#[ target_feature = "+sse4.1" ]
485
486
#[ cfg_attr( test, assert_instr( ptest) ) ]
486
- pub unsafe fn _mm_test_all_zeros ( a : i64x2 , mask : i64x2 ) -> i32 {
487
+ pub unsafe fn _mm_test_all_zeros ( a : __m128i , mask : __m128i ) -> i32 {
487
488
_mm_testz_si128 ( a, mask)
488
489
}
489
490
@@ -502,8 +503,8 @@ pub unsafe fn _mm_test_all_zeros(a: i64x2, mask: i64x2) -> i32 {
502
503
#[ target_feature = "+sse4.1" ]
503
504
#[ cfg_attr( test, assert_instr( pcmpeqd) ) ]
504
505
#[ cfg_attr( test, assert_instr( ptest) ) ]
505
- pub unsafe fn _mm_test_all_ones ( a : i64x2 ) -> i32 {
506
- _mm_testc_si128 ( a, i64x2 :: splat ( - 1 ) )
506
+ pub unsafe fn _mm_test_all_ones ( a : __m128i ) -> i32 {
507
+ _mm_testc_si128 ( a, :: x86 :: sse2 :: _mm_cmpeq_epi32 ( a . into ( ) , a . into ( ) ) . into ( ) )
507
508
}
508
509
509
510
/// Tests whether the specified bits in a 128-bit integer vector are
@@ -521,7 +522,7 @@ pub unsafe fn _mm_test_all_ones(a: i64x2) -> i32 {
521
522
#[ inline( always) ]
522
523
#[ target_feature = "+sse4.1" ]
523
524
#[ cfg_attr( test, assert_instr( ptest) ) ]
524
- pub unsafe fn _mm_test_mix_ones_zeros ( a : i64x2 , mask : i64x2 ) -> i32 {
525
+ pub unsafe fn _mm_test_mix_ones_zeros ( a : __m128i , mask : __m128i ) -> i32 {
525
526
_mm_testnzc_si128 ( a, mask)
526
527
}
527
528
@@ -924,6 +925,7 @@ mod tests {
924
925
use stdsimd_test:: simd_test;
925
926
926
927
use v128:: * ;
928
+ use x86:: __m128i;
927
929
use x86:: sse41;
928
930
929
931
#[ simd_test = "sse4.1" ]
@@ -1352,98 +1354,98 @@ mod tests {
1352
1354
1353
1355
#[ simd_test = "sse4.1" ]
1354
1356
unsafe fn _mm_testz_si128 ( ) {
1355
- let a = i64x2 :: splat ( 1 ) ;
1356
- let mask = i64x2 :: splat ( 0 ) ;
1357
+ let a = __m128i :: splat ( 1 ) ;
1358
+ let mask = __m128i :: splat ( 0 ) ;
1357
1359
let r = sse41:: _mm_testz_si128 ( a, mask) ;
1358
1360
assert_eq ! ( r, 1 ) ;
1359
- let a = i64x2 :: splat ( 0b101 ) ;
1360
- let mask = i64x2 :: splat ( 0b110 ) ;
1361
+ let a = __m128i :: splat ( 0b101 ) ;
1362
+ let mask = __m128i :: splat ( 0b110 ) ;
1361
1363
let r = sse41:: _mm_testz_si128 ( a, mask) ;
1362
1364
assert_eq ! ( r, 0 ) ;
1363
- let a = i64x2 :: splat ( 0b011 ) ;
1364
- let mask = i64x2 :: splat ( 0b100 ) ;
1365
+ let a = __m128i :: splat ( 0b011 ) ;
1366
+ let mask = __m128i :: splat ( 0b100 ) ;
1365
1367
let r = sse41:: _mm_testz_si128 ( a, mask) ;
1366
1368
assert_eq ! ( r, 1 ) ;
1367
1369
}
1368
1370
1369
1371
#[ simd_test = "sse4.1" ]
1370
1372
unsafe fn _mm_testc_si128 ( ) {
1371
- let a = i64x2 :: splat ( -1 ) ;
1372
- let mask = i64x2 :: splat ( 0 ) ;
1373
+ let a = __m128i :: splat ( -1 ) ;
1374
+ let mask = __m128i :: splat ( 0 ) ;
1373
1375
let r = sse41:: _mm_testc_si128 ( a, mask) ;
1374
1376
assert_eq ! ( r, 1 ) ;
1375
- let a = i64x2 :: splat ( 0b101 ) ;
1376
- let mask = i64x2 :: splat ( 0b110 ) ;
1377
+ let a = __m128i :: splat ( 0b101 ) ;
1378
+ let mask = __m128i :: splat ( 0b110 ) ;
1377
1379
let r = sse41:: _mm_testc_si128 ( a, mask) ;
1378
1380
assert_eq ! ( r, 0 ) ;
1379
- let a = i64x2 :: splat ( 0b101 ) ;
1380
- let mask = i64x2 :: splat ( 0b100 ) ;
1381
+ let a = __m128i :: splat ( 0b101 ) ;
1382
+ let mask = __m128i :: splat ( 0b100 ) ;
1381
1383
let r = sse41:: _mm_testc_si128 ( a, mask) ;
1382
1384
assert_eq ! ( r, 1 ) ;
1383
1385
}
1384
1386
1385
1387
#[ simd_test = "sse4.1" ]
1386
1388
unsafe fn _mm_testnzc_si128 ( ) {
1387
- let a = i64x2 :: splat ( 0 ) ;
1388
- let mask = i64x2 :: splat ( 1 ) ;
1389
+ let a = __m128i :: splat ( 0 ) ;
1390
+ let mask = __m128i :: splat ( 1 ) ;
1389
1391
let r = sse41:: _mm_testnzc_si128 ( a, mask) ;
1390
1392
assert_eq ! ( r, 0 ) ;
1391
- let a = i64x2 :: splat ( -1 ) ;
1392
- let mask = i64x2 :: splat ( 0 ) ;
1393
+ let a = __m128i :: splat ( -1 ) ;
1394
+ let mask = __m128i :: splat ( 0 ) ;
1393
1395
let r = sse41:: _mm_testnzc_si128 ( a, mask) ;
1394
1396
assert_eq ! ( r, 0 ) ;
1395
- let a = i64x2 :: splat ( 0b101 ) ;
1396
- let mask = i64x2 :: splat ( 0b110 ) ;
1397
+ let a = __m128i :: splat ( 0b101 ) ;
1398
+ let mask = __m128i :: splat ( 0b110 ) ;
1397
1399
let r = sse41:: _mm_testnzc_si128 ( a, mask) ;
1398
1400
assert_eq ! ( r, 1 ) ;
1399
- let a = i64x2 :: splat ( 0b101 ) ;
1400
- let mask = i64x2 :: splat ( 0b101 ) ;
1401
+ let a = __m128i :: splat ( 0b101 ) ;
1402
+ let mask = __m128i :: splat ( 0b101 ) ;
1401
1403
let r = sse41:: _mm_testnzc_si128 ( a, mask) ;
1402
1404
assert_eq ! ( r, 0 ) ;
1403
1405
}
1404
1406
1405
1407
#[ simd_test = "sse4.1" ]
1406
1408
unsafe fn _mm_test_all_zeros ( ) {
1407
- let a = i64x2 :: splat ( 1 ) ;
1408
- let mask = i64x2 :: splat ( 0 ) ;
1409
+ let a = __m128i :: splat ( 1 ) ;
1410
+ let mask = __m128i :: splat ( 0 ) ;
1409
1411
let r = sse41:: _mm_test_all_zeros ( a, mask) ;
1410
1412
assert_eq ! ( r, 1 ) ;
1411
- let a = i64x2 :: splat ( 0b101 ) ;
1412
- let mask = i64x2 :: splat ( 0b110 ) ;
1413
+ let a = __m128i :: splat ( 0b101 ) ;
1414
+ let mask = __m128i :: splat ( 0b110 ) ;
1413
1415
let r = sse41:: _mm_test_all_zeros ( a, mask) ;
1414
1416
assert_eq ! ( r, 0 ) ;
1415
- let a = i64x2 :: splat ( 0b011 ) ;
1416
- let mask = i64x2 :: splat ( 0b100 ) ;
1417
+ let a = __m128i :: splat ( 0b011 ) ;
1418
+ let mask = __m128i :: splat ( 0b100 ) ;
1417
1419
let r = sse41:: _mm_test_all_zeros ( a, mask) ;
1418
1420
assert_eq ! ( r, 1 ) ;
1419
1421
}
1420
1422
1421
1423
#[ simd_test = "sse4.1" ]
1422
1424
unsafe fn _mm_test_all_ones ( ) {
1423
- let a = i64x2 :: splat ( -1 ) ;
1425
+ let a = __m128i :: splat ( -1 ) ;
1424
1426
let r = sse41:: _mm_test_all_ones ( a) ;
1425
1427
assert_eq ! ( r, 1 ) ;
1426
- let a = i64x2 :: splat ( 0b101 ) ;
1428
+ let a = __m128i :: splat ( 0b101 ) ;
1427
1429
let r = sse41:: _mm_test_all_ones ( a) ;
1428
1430
assert_eq ! ( r, 0 ) ;
1429
1431
}
1430
1432
1431
1433
#[ simd_test = "sse4.1" ]
1432
1434
unsafe fn _mm_test_mix_ones_zeros ( ) {
1433
- let a = i64x2 :: splat ( 0 ) ;
1434
- let mask = i64x2 :: splat ( 1 ) ;
1435
+ let a = __m128i :: splat ( 0 ) ;
1436
+ let mask = __m128i :: splat ( 1 ) ;
1435
1437
let r = sse41:: _mm_test_mix_ones_zeros ( a, mask) ;
1436
1438
assert_eq ! ( r, 0 ) ;
1437
- let a = i64x2 :: splat ( -1 ) ;
1438
- let mask = i64x2 :: splat ( 0 ) ;
1439
+ let a = __m128i :: splat ( -1 ) ;
1440
+ let mask = __m128i :: splat ( 0 ) ;
1439
1441
let r = sse41:: _mm_test_mix_ones_zeros ( a, mask) ;
1440
1442
assert_eq ! ( r, 0 ) ;
1441
- let a = i64x2 :: splat ( 0b101 ) ;
1442
- let mask = i64x2 :: splat ( 0b110 ) ;
1443
+ let a = __m128i :: splat ( 0b101 ) ;
1444
+ let mask = __m128i :: splat ( 0b110 ) ;
1443
1445
let r = sse41:: _mm_test_mix_ones_zeros ( a, mask) ;
1444
1446
assert_eq ! ( r, 1 ) ;
1445
- let a = i64x2 :: splat ( 0b101 ) ;
1446
- let mask = i64x2 :: splat ( 0b101 ) ;
1447
+ let a = __m128i :: splat ( 0b101 ) ;
1448
+ let mask = __m128i :: splat ( 0b101 ) ;
1447
1449
let r = sse41:: _mm_test_mix_ones_zeros ( a, mask) ;
1448
1450
assert_eq ! ( r, 0 ) ;
1449
1451
}
0 commit comments