@@ -3686,38 +3686,33 @@ mod tests {
3686
3686
assert_eq ! ( r, 0b11 ) ;
3687
3687
}
3688
3688
3689
+ #[ repr( align( 16 ) ) ]
3690
+ struct Memory {
3691
+ data : [ f64 ; 4 ] ,
3692
+ }
3693
+
3689
3694
#[ simd_test = "sse2" ]
3690
3695
unsafe fn _mm_load_pd ( ) {
3691
- let vals = & [ 1.0f64 , 2.0 , 3.0 , 4.0 ] ;
3692
- let mut d = vals. as_ptr ( ) ;
3693
-
3694
- // Align d to 16-byte boundary
3695
- let mut offset = 0 ;
3696
- while ( d as usize ) & 0xf != 0 {
3697
- d = d. offset ( 1 as isize ) ;
3698
- offset += 1 ;
3699
- }
3696
+ let mem = Memory {
3697
+ data : [ 1.0f64 , 2.0 , 3.0 , 4.0 ] ,
3698
+ } ;
3699
+ let vals = & mem. data ;
3700
+ let d = vals. as_ptr ( ) ;
3700
3701
3701
3702
let r = sse2:: _mm_load_pd ( d) ;
3702
- assert_eq ! ( r, f64x2:: new( 1.0 , 2.0 ) + f64x2 :: splat ( offset as f64 ) ) ;
3703
+ assert_eq ! ( r, f64x2:: new( 1.0 , 2.0 ) ) ;
3703
3704
}
3704
3705
3705
3706
#[ simd_test = "sse2" ]
3706
3707
unsafe fn _mm_store_pd ( ) {
3707
- let mut vals = [ 0.0f64 ; 4 ] ;
3708
+ let mut mem = Memory { data : [ 0.0f64 ; 4 ] } ;
3709
+ let vals = & mut mem. data ;
3708
3710
let a = f64x2:: new ( 1.0 , 2.0 ) ;
3709
- let mut d = vals. as_mut_ptr ( ) ;
3710
-
3711
- // Align d to 16-byte boundary
3712
- let mut offset = 0 ;
3713
- while ( d as usize ) & 0xf != 0 {
3714
- d = d. offset ( 1 as isize ) ;
3715
- offset += 1 ;
3716
- }
3711
+ let d = vals. as_mut_ptr ( ) ;
3717
3712
3718
3713
sse2:: _mm_store_pd ( d, * black_box ( & a) ) ;
3719
- assert_eq ! ( vals[ offset + 0 ] , 1.0 ) ;
3720
- assert_eq ! ( vals[ offset + 1 ] , 2.0 ) ;
3714
+ assert_eq ! ( vals[ 0 ] , 1.0 ) ;
3715
+ assert_eq ! ( vals[ 1 ] , 2.0 ) ;
3721
3716
}
3722
3717
3723
3718
#[ simd_test = "sse" ]
0 commit comments