@@ -230,51 +230,53 @@ unsafe fn test_crc32() {
230
230
#[ cfg( target_arch = "x86_64" ) ]
231
231
#[ target_feature( enable = "sse2" ) ]
232
232
unsafe fn test_simd ( ) {
233
- assert ! ( is_x86_feature_detected!( "sse2" ) ) ;
234
-
235
- let x = _mm_setzero_si128 ( ) ;
236
- let y = _mm_set1_epi16 ( 7 ) ;
237
- let or = _mm_or_si128 ( x, y) ;
238
- let cmp_eq = _mm_cmpeq_epi8 ( y, y) ;
239
- let cmp_lt = _mm_cmplt_epi8 ( y, y) ;
240
-
241
- let ( zero0, zero1) = std:: mem:: transmute :: < _ , ( u64 , u64 ) > ( x) ;
242
- assert_eq ! ( ( zero0, zero1) , ( 0 , 0 ) ) ;
243
- assert_eq ! ( std:: mem:: transmute:: <_, [ u16 ; 8 ] >( or) , [ 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ] ) ;
244
- assert_eq ! (
245
- std:: mem:: transmute:: <_, [ u16 ; 8 ] >( cmp_eq) ,
246
- [ 0xffff , 0xffff , 0xffff , 0xffff , 0xffff , 0xffff , 0xffff , 0xffff ]
247
- ) ;
248
- assert_eq ! ( std:: mem:: transmute:: <_, [ u16 ; 8 ] >( cmp_lt) , [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) ;
249
-
250
- test_mm_slli_si128 ( ) ;
251
- test_mm_movemask_epi8 ( ) ;
252
- test_mm256_movemask_epi8 ( ) ;
253
- test_mm_add_epi8 ( ) ;
254
- test_mm_add_pd ( ) ;
255
- test_mm_cvtepi8_epi16 ( ) ;
256
- #[ cfg( not( jit) ) ]
257
- test_mm_cvtps_epi32 ( ) ;
258
- test_mm_cvttps_epi32 ( ) ;
259
- test_mm_cvtsi128_si64 ( ) ;
260
-
261
- test_mm_extract_epi8 ( ) ;
262
- test_mm_insert_epi16 ( ) ;
263
- test_mm_shuffle_epi8 ( ) ;
264
-
265
- #[ cfg( not( jit) ) ]
266
- test_mm_cmpestri ( ) ;
267
-
268
- test_mm256_shuffle_epi8 ( ) ;
269
- test_mm256_permute2x128_si256 ( ) ;
270
- test_mm256_permutevar8x32_epi32 ( ) ;
271
-
272
- #[ rustfmt:: skip]
233
+ unsafe {
234
+ assert ! ( is_x86_feature_detected!( "sse2" ) ) ;
235
+
236
+ let x = _mm_setzero_si128 ( ) ;
237
+ let y = _mm_set1_epi16 ( 7 ) ;
238
+ let or = _mm_or_si128 ( x, y) ;
239
+ let cmp_eq = _mm_cmpeq_epi8 ( y, y) ;
240
+ let cmp_lt = _mm_cmplt_epi8 ( y, y) ;
241
+
242
+ let ( zero0, zero1) = std:: mem:: transmute :: < _ , ( u64 , u64 ) > ( x) ;
243
+ assert_eq ! ( ( zero0, zero1) , ( 0 , 0 ) ) ;
244
+ assert_eq ! ( std:: mem:: transmute:: <_, [ u16 ; 8 ] >( or) , [ 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ] ) ;
245
+ assert_eq ! (
246
+ std:: mem:: transmute:: <_, [ u16 ; 8 ] >( cmp_eq) ,
247
+ [ 0xffff , 0xffff , 0xffff , 0xffff , 0xffff , 0xffff , 0xffff , 0xffff ]
248
+ ) ;
249
+ assert_eq ! ( std:: mem:: transmute:: <_, [ u16 ; 8 ] >( cmp_lt) , [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ) ;
250
+
251
+ test_mm_slli_si128 ( ) ;
252
+ test_mm_movemask_epi8 ( ) ;
253
+ test_mm256_movemask_epi8 ( ) ;
254
+ test_mm_add_epi8 ( ) ;
255
+ test_mm_add_pd ( ) ;
256
+ test_mm_cvtepi8_epi16 ( ) ;
257
+ #[ cfg( not( jit) ) ]
258
+ test_mm_cvtps_epi32 ( ) ;
259
+ test_mm_cvttps_epi32 ( ) ;
260
+ test_mm_cvtsi128_si64 ( ) ;
261
+
262
+ test_mm_extract_epi8 ( ) ;
263
+ test_mm_insert_epi16 ( ) ;
264
+ test_mm_shuffle_epi8 ( ) ;
265
+
266
+ #[ cfg( not( jit) ) ]
267
+ test_mm_cmpestri ( ) ;
268
+
269
+ test_mm256_shuffle_epi8 ( ) ;
270
+ test_mm256_permute2x128_si256 ( ) ;
271
+ test_mm256_permutevar8x32_epi32 ( ) ;
272
+
273
+ #[ rustfmt:: skip]
273
274
let mask1 = _mm_movemask_epi8 ( dbg ! ( _mm_setr_epi8( 255u8 as i8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ) ) ;
274
- assert_eq ! ( mask1, 1 ) ;
275
+ assert_eq ! ( mask1, 1 ) ;
275
276
276
- #[ cfg( not( jit) ) ]
277
- test_crc32 ( ) ;
277
+ #[ cfg( not( jit) ) ]
278
+ test_crc32 ( ) ;
279
+ }
278
280
}
279
281
280
282
#[ cfg( target_arch = "x86_64" ) ]
@@ -361,23 +363,27 @@ fn assert_eq_m128i(x: std::arch::x86_64::__m128i, y: std::arch::x86_64::__m128i)
361
363
362
364
#[ cfg( target_arch = "x86_64" ) ]
363
365
#[ target_feature( enable = "sse2" ) ]
364
- pub unsafe fn assert_eq_m128d ( a : __m128d , b : __m128d ) {
366
+ pub fn assert_eq_m128d ( a : __m128d , b : __m128d ) {
365
367
if _mm_movemask_pd ( _mm_cmpeq_pd ( a, b) ) != 0b11 {
366
368
panic ! ( "{:?} != {:?}" , a, b) ;
367
369
}
368
370
}
369
371
370
372
#[ cfg( target_arch = "x86_64" ) ]
371
373
#[ target_feature( enable = "avx" ) ]
372
- pub unsafe fn assert_eq_m256i ( a : __m256i , b : __m256i ) {
373
- assert_eq ! ( std:: mem:: transmute:: <_, [ u64 ; 4 ] >( a) , std:: mem:: transmute:: <_, [ u64 ; 4 ] >( b) )
374
+ pub fn assert_eq_m256i ( a : __m256i , b : __m256i ) {
375
+ unsafe {
376
+ assert_eq ! ( std:: mem:: transmute:: <_, [ u64 ; 4 ] >( a) , std:: mem:: transmute:: <_, [ u64 ; 4 ] >( b) )
377
+ }
374
378
}
375
379
376
380
#[ cfg( target_arch = "x86_64" ) ]
377
381
#[ target_feature( enable = "sse2" ) ]
378
382
unsafe fn test_mm_cvtsi128_si64 ( ) {
379
- let r = _mm_cvtsi128_si64 ( std:: mem:: transmute :: < [ i64 ; 2 ] , _ > ( [ 5 , 0 ] ) ) ;
380
- assert_eq ! ( r, 5 ) ;
383
+ unsafe {
384
+ let r = _mm_cvtsi128_si64 ( std:: mem:: transmute :: < [ i64 ; 2 ] , _ > ( [ 5 , 0 ] ) ) ;
385
+ assert_eq ! ( r, 5 ) ;
386
+ }
381
387
}
382
388
383
389
#[ cfg( target_arch = "x86_64" ) ]
@@ -445,20 +451,24 @@ unsafe fn test_mm_shuffle_epi8() {
445
451
#[ cfg( target_arch = "x86_64" ) ]
446
452
#[ target_feature( enable = "sse4.2" ) ]
447
453
unsafe fn str_to_m128i ( s : & [ u8 ] ) -> __m128i {
448
- assert ! ( s. len( ) <= 16 ) ;
449
- let slice = & mut [ 0u8 ; 16 ] ;
450
- std:: ptr:: copy_nonoverlapping ( s. as_ptr ( ) , slice. as_mut_ptr ( ) , s. len ( ) ) ;
451
- _mm_loadu_si128 ( slice. as_ptr ( ) as * const _ )
454
+ unsafe {
455
+ assert ! ( s. len( ) <= 16 ) ;
456
+ let slice = & mut [ 0u8 ; 16 ] ;
457
+ std:: ptr:: copy_nonoverlapping ( s. as_ptr ( ) , slice. as_mut_ptr ( ) , s. len ( ) ) ;
458
+ _mm_loadu_si128 ( slice. as_ptr ( ) as * const _ )
459
+ }
452
460
}
453
461
454
462
#[ cfg( not( jit) ) ]
455
463
#[ cfg( target_arch = "x86_64" ) ]
456
464
#[ target_feature( enable = "sse4.2" ) ]
457
465
unsafe fn test_mm_cmpestri ( ) {
458
- let a = str_to_m128i ( b"bar - garbage" ) ;
459
- let b = str_to_m128i ( b"foobar" ) ;
460
- let i = _mm_cmpestri :: < _SIDD_CMP_EQUAL_ORDERED > ( a, 3 , b, 6 ) ;
461
- assert_eq ! ( 3 , i) ;
466
+ unsafe {
467
+ let a = str_to_m128i ( b"bar - garbage" ) ;
468
+ let b = str_to_m128i ( b"foobar" ) ;
469
+ let i = _mm_cmpestri :: < _SIDD_CMP_EQUAL_ORDERED > ( a, 3 , b, 6 ) ;
470
+ assert_eq ! ( 3 , i) ;
471
+ }
462
472
}
463
473
464
474
#[ cfg( target_arch = "x86_64" ) ]
@@ -513,35 +523,39 @@ unsafe fn test_mm256_permutevar8x32_epi32() {
513
523
#[ target_feature( enable = "avx2" ) ]
514
524
#[ cfg( not( jit) ) ]
515
525
unsafe fn test_mm_cvtps_epi32 ( ) {
516
- let floats: [ f32 ; 4 ] = [ 1.5 , -2.5 , i32:: MAX as f32 + 1.0 , f32:: NAN ] ;
526
+ unsafe {
527
+ let floats: [ f32 ; 4 ] = [ 1.5 , -2.5 , i32:: MAX as f32 + 1.0 , f32:: NAN ] ;
517
528
518
- let float_vec = _mm_loadu_ps ( floats. as_ptr ( ) ) ;
519
- let int_vec = _mm_cvtps_epi32 ( float_vec) ;
529
+ let float_vec = _mm_loadu_ps ( floats. as_ptr ( ) ) ;
530
+ let int_vec = _mm_cvtps_epi32 ( float_vec) ;
520
531
521
- let mut ints: [ i32 ; 4 ] = [ 0 ; 4 ] ;
522
- _mm_storeu_si128 ( ints. as_mut_ptr ( ) as * mut __m128i , int_vec) ;
532
+ let mut ints: [ i32 ; 4 ] = [ 0 ; 4 ] ;
533
+ _mm_storeu_si128 ( ints. as_mut_ptr ( ) as * mut __m128i , int_vec) ;
523
534
524
- // this is very different from `floats.map(|f| f as i32)`!
525
- let expected_ints: [ i32 ; 4 ] = [ 2 , -2 , i32:: MIN , i32:: MIN ] ;
535
+ // this is very different from `floats.map(|f| f as i32)`!
536
+ let expected_ints: [ i32 ; 4 ] = [ 2 , -2 , i32:: MIN , i32:: MIN ] ;
526
537
527
- assert_eq ! ( ints, expected_ints) ;
538
+ assert_eq ! ( ints, expected_ints) ;
539
+ }
528
540
}
529
541
530
542
#[ cfg( target_arch = "x86_64" ) ]
531
543
#[ target_feature( enable = "avx2" ) ]
532
544
unsafe fn test_mm_cvttps_epi32 ( ) {
533
- let floats: [ f32 ; 4 ] = [ 1.5 , -2.5 , i32:: MAX as f32 + 1.0 , f32:: NAN ] ;
545
+ unsafe {
546
+ let floats: [ f32 ; 4 ] = [ 1.5 , -2.5 , i32:: MAX as f32 + 1.0 , f32:: NAN ] ;
534
547
535
- let float_vec = _mm_loadu_ps ( floats. as_ptr ( ) ) ;
536
- let int_vec = _mm_cvttps_epi32 ( float_vec) ;
548
+ let float_vec = _mm_loadu_ps ( floats. as_ptr ( ) ) ;
549
+ let int_vec = _mm_cvttps_epi32 ( float_vec) ;
537
550
538
- let mut ints: [ i32 ; 4 ] = [ 0 ; 4 ] ;
539
- _mm_storeu_si128 ( ints. as_mut_ptr ( ) as * mut __m128i , int_vec) ;
551
+ let mut ints: [ i32 ; 4 ] = [ 0 ; 4 ] ;
552
+ _mm_storeu_si128 ( ints. as_mut_ptr ( ) as * mut __m128i , int_vec) ;
540
553
541
- // this is very different from `floats.map(|f| f as i32)`!
542
- let expected_ints: [ i32 ; 4 ] = [ 1 , -2 , i32:: MIN , i32:: MIN ] ;
554
+ // this is very different from `floats.map(|f| f as i32)`!
555
+ let expected_ints: [ i32 ; 4 ] = [ 1 , -2 , i32:: MIN , i32:: MIN ] ;
543
556
544
- assert_eq ! ( ints, expected_ints) ;
557
+ assert_eq ! ( ints, expected_ints) ;
558
+ }
545
559
}
546
560
547
561
fn test_checked_mul ( ) {
0 commit comments