@@ -2997,66 +2997,87 @@ mod tests {
29972997 }
29982998 }
29992999
3000+ macro_rules! test_mm_cvtss_si32_impl {
3001+ ( $alias: ident) => {
3002+ let inputs = & [ 42.0f32 , -3.1 , 4.0e10 , 4.0e-20 , NAN , 2147483500.1 ] ;
3003+ let result = & [ 42i32 , -3 , i32 :: MIN , 0 , i32 :: MIN , 2147483520 ] ;
3004+ for i in 0 ..inputs. len( ) {
3005+ let x = _mm_setr_ps( inputs[ i] , 1.0 , 3.0 , 4.0 ) ;
3006+ let e = result[ i] ;
3007+ let r = $alias( x) ;
3008+ assert_eq!( e, r, "TestCase #{} f({:?}) = {}, expected: {}" , i, x, r, e) ;
3009+ }
3010+ } ;
3011+ }
3012+
30003013 #[ simd_test( enable = "sse" ) ]
30013014 fn test_mm_cvtss_si32 ( ) {
3002- let inputs = & [ 42.0f32 , -3.1 , 4.0e10 , 4.0e-20 , NAN , 2147483500.1 ] ;
3003- let result = & [ 42i32 , -3 , i32:: MIN , 0 , i32:: MIN , 2147483520 ] ;
3004- for i in 0 ..inputs. len ( ) {
3005- let x = _mm_setr_ps ( inputs[ i] , 1.0 , 3.0 , 4.0 ) ;
3006- let e = result[ i] ;
3007- let r = _mm_cvtss_si32 ( x) ;
3008- assert_eq ! (
3009- e, r,
3010- "TestCase #{} _mm_cvtss_si32({:?}) = {}, expected: {}" ,
3011- i, x, r, e
3012- ) ;
3013- }
3015+ test_mm_cvtss_si32_impl ! ( _mm_cvtss_si32) ;
3016+ }
3017+
3018+ #[ simd_test( enable = "sse" ) ]
3019+ fn test_mm_cvt_ss2si ( ) {
3020+ test_mm_cvtss_si32_impl ! ( _mm_cvt_ss2si) ;
3021+ }
3022+
3023+ macro_rules! test_cvttss_si32_impl {
3024+ ( $alias: ident) => {
3025+ let inputs = & [
3026+ ( 42.0f32 , 42i32 ) ,
3027+ ( -31.4 , -31 ) ,
3028+ ( -33.5 , -33 ) ,
3029+ ( -34.5 , -34 ) ,
3030+ ( 10.999 , 10 ) ,
3031+ ( -5.99 , -5 ) ,
3032+ ( 4.0e10 , i32 :: MIN ) ,
3033+ ( 4.0e-10 , 0 ) ,
3034+ ( NAN , i32 :: MIN ) ,
3035+ ( 2147483500.1 , 2147483520 ) ,
3036+ ] ;
3037+ for ( i, & ( xi, e) ) in inputs. iter( ) . enumerate( ) {
3038+ let x = _mm_setr_ps( xi, 1.0 , 3.0 , 4.0 ) ;
3039+ let r = $alias( x) ;
3040+ assert_eq!( e, r, "TestCase #{} f({:?}) = {}, expected: {}" , i, x, r, e) ;
3041+ }
3042+ } ;
30143043 }
30153044
30163045 #[ simd_test( enable = "sse" ) ]
30173046 fn test_mm_cvttss_si32 ( ) {
3018- let inputs = & [
3019- ( 42.0f32 , 42i32 ) ,
3020- ( -31.4 , -31 ) ,
3021- ( -33.5 , -33 ) ,
3022- ( -34.5 , -34 ) ,
3023- ( 10.999 , 10 ) ,
3024- ( -5.99 , -5 ) ,
3025- ( 4.0e10 , i32:: MIN ) ,
3026- ( 4.0e-10 , 0 ) ,
3027- ( NAN , i32:: MIN ) ,
3028- ( 2147483500.1 , 2147483520 ) ,
3029- ] ;
3030- for ( i, & ( xi, e) ) in inputs. iter ( ) . enumerate ( ) {
3031- let x = _mm_setr_ps ( xi, 1.0 , 3.0 , 4.0 ) ;
3032- let r = _mm_cvttss_si32 ( x) ;
3033- assert_eq ! (
3034- e, r,
3035- "TestCase #{} _mm_cvttss_si32({:?}) = {}, expected: {}" ,
3036- i, x, r, e
3037- ) ;
3038- }
3047+ test_cvttss_si32_impl ! ( _mm_cvttss_si32) ;
30393048 }
30403049
30413050 #[ simd_test( enable = "sse" ) ]
3042- const fn test_mm_cvtsi32_ss ( ) {
3043- let a = _mm_setr_ps ( 5.0 , 6.0 , 7.0 , 8.0 ) ;
3051+ fn test_mm_cvtt_ss2si ( ) {
3052+ test_cvttss_si32_impl ! ( _mm_cvtt_ss2si) ;
3053+ }
30443054
3045- let r = _mm_cvtsi32_ss ( a , 4555 ) ;
3046- let e = _mm_setr_ps ( 4555.0 , 6.0 , 7.0 , 8.0 ) ;
3047- assert_eq_m128 ( e , r ) ;
3055+ macro_rules! test_mm_cvtsi32_ss_impl {
3056+ ( $alias : ident ) => {
3057+ let a = _mm_setr_ps ( 5.0 , 6.0 , 7.0 , 8.0 ) ;
30483058
3049- let r = _mm_cvtsi32_ss ( a, 322223333 ) ;
3050- let e = _mm_setr_ps ( 322223333.0 , 6.0 , 7.0 , 8.0 ) ;
3051- assert_eq_m128 ( e, r) ;
3059+ let r = $alias( a, 4555 ) ;
3060+ assert_eq_m128( _mm_setr_ps( 4555.0 , 6.0 , 7.0 , 8.0 ) , r) ;
30523061
3053- let r = _mm_cvtsi32_ss ( a, -432 ) ;
3054- let e = _mm_setr_ps ( -432.0 , 6.0 , 7.0 , 8.0 ) ;
3055- assert_eq_m128 ( e, r) ;
3062+ let r = $alias( a, 322223333 ) ;
3063+ assert_eq_m128( _mm_setr_ps( 322223333.0 , 6.0 , 7.0 , 8.0 ) , r) ;
30563064
3057- let r = _mm_cvtsi32_ss ( a, -322223333 ) ;
3058- let e = _mm_setr_ps ( -322223333.0 , 6.0 , 7.0 , 8.0 ) ;
3059- assert_eq_m128 ( e, r) ;
3065+ let r = $alias( a, -432 ) ;
3066+ assert_eq_m128( _mm_setr_ps( -432.0 , 6.0 , 7.0 , 8.0 ) , r) ;
3067+
3068+ let r = $alias( a, -322223333 ) ;
3069+ assert_eq_m128( _mm_setr_ps( -322223333.0 , 6.0 , 7.0 , 8.0 ) , r) ;
3070+ } ;
3071+ }
3072+
3073+ #[ simd_test( enable = "sse" ) ]
3074+ const fn test_mm_cvtsi32_ss ( ) {
3075+ test_mm_cvtsi32_ss_impl ! ( _mm_cvtsi32_ss) ;
3076+ }
3077+
3078+ #[ simd_test( enable = "sse" ) ]
3079+ fn test_mm_cvt_si2ss ( ) {
3080+ test_mm_cvtsi32_ss_impl ! ( _mm_cvt_si2ss) ;
30603081 }
30613082
30623083 #[ simd_test( enable = "sse" ) ]
@@ -3071,18 +3092,24 @@ mod tests {
30713092 assert_eq_m128 ( r, _mm_setr_ps ( 4.25 , 0.0 , 0.0 , 0.0 ) ) ;
30723093 }
30733094
3095+ macro_rules! test_mm_set1_ps_impl {
3096+ ( $alias: ident) => {
3097+ let r = $alias( black_box( 4.25 ) ) ;
3098+ assert_eq!( get_m128( r, 0 ) , 4.25 ) ;
3099+ assert_eq!( get_m128( r, 1 ) , 4.25 ) ;
3100+ assert_eq!( get_m128( r, 2 ) , 4.25 ) ;
3101+ assert_eq!( get_m128( r, 3 ) , 4.25 ) ;
3102+ } ;
3103+ }
3104+
30743105 #[ simd_test( enable = "sse" ) ]
30753106 const fn test_mm_set1_ps ( ) {
3076- let r1 = _mm_set1_ps ( black_box ( 4.25 ) ) ;
3077- let r2 = _mm_set_ps1 ( black_box ( 4.25 ) ) ;
3078- assert_eq ! ( get_m128( r1, 0 ) , 4.25 ) ;
3079- assert_eq ! ( get_m128( r1, 1 ) , 4.25 ) ;
3080- assert_eq ! ( get_m128( r1, 2 ) , 4.25 ) ;
3081- assert_eq ! ( get_m128( r1, 3 ) , 4.25 ) ;
3082- assert_eq ! ( get_m128( r2, 0 ) , 4.25 ) ;
3083- assert_eq ! ( get_m128( r2, 1 ) , 4.25 ) ;
3084- assert_eq ! ( get_m128( r2, 2 ) , 4.25 ) ;
3085- assert_eq ! ( get_m128( r2, 3 ) , 4.25 ) ;
3107+ test_mm_set1_ps_impl ! ( _mm_set1_ps) ;
3108+ }
3109+
3110+ #[ simd_test( enable = "sse" ) ]
3111+ const fn test_mm_set_ps1 ( ) {
3112+ test_mm_set1_ps_impl ! ( _mm_set_ps1) ;
30863113 }
30873114
30883115 #[ simd_test( enable = "sse" ) ]
@@ -3171,11 +3198,22 @@ mod tests {
31713198 assert_eq_m128 ( r, _mm_setr_ps ( 42.0 , 0.0 , 0.0 , 0.0 ) ) ;
31723199 }
31733200
3201+ macro_rules! test_mm_load1_ps_impl {
3202+ ( $alias: ident) => {
3203+ let a = 42.0f32 ;
3204+ let r = unsafe { $alias( ptr:: addr_of!( a) ) } ;
3205+ assert_eq_m128( r, _mm_setr_ps( 42.0 , 42.0 , 42.0 , 42.0 ) ) ;
3206+ } ;
3207+ }
3208+
31743209 #[ simd_test( enable = "sse" ) ]
31753210 const fn test_mm_load1_ps ( ) {
3176- let a = 42.0f32 ;
3177- let r = unsafe { _mm_load1_ps ( ptr:: addr_of!( a) ) } ;
3178- assert_eq_m128 ( r, _mm_setr_ps ( 42.0 , 42.0 , 42.0 , 42.0 ) ) ;
3211+ test_mm_load1_ps_impl ! ( _mm_load1_ps) ;
3212+ }
3213+
3214+ #[ simd_test( enable = "sse" ) ]
3215+ const fn test_mm_load_ps1 ( ) {
3216+ test_mm_load1_ps_impl ! ( _mm_load_ps1) ;
31793217 }
31803218
31813219 #[ simd_test( enable = "sse" ) ]
@@ -3227,19 +3265,24 @@ mod tests {
32273265 assert_eq ! ( vals[ 2 ] , 0.0 ) ;
32283266 }
32293267
3268+ macro_rules! test_mm_store1_ps_impl {
3269+ ( $alias: ident) => {
3270+ let mut vals = Memory { data: [ 0.0f32 ; 4 ] } ;
3271+ let a = _mm_setr_ps( 1.0 , 2.0 , 3.0 , 4.0 ) ;
3272+ let p = vals. data. as_mut_ptr( ) ;
3273+ unsafe { $alias( p, * black_box( & a) ) } ;
3274+ assert_eq!( vals. data, [ 1.0 , 1.0 , 1.0 , 1.0 ] ) ;
3275+ } ;
3276+ }
3277+
32303278 #[ simd_test( enable = "sse" ) ]
32313279 const fn test_mm_store1_ps ( ) {
3232- let mut vals = Memory { data : [ 0.0f32 ; 4 ] } ;
3233- let a = _mm_setr_ps ( 1.0 , 2.0 , 3.0 , 4.0 ) ;
3234-
3235- // guaranteed to be aligned to 16 bytes
3236- let p = vals. data . as_mut_ptr ( ) ;
3237-
3238- unsafe {
3239- _mm_store1_ps ( p, * black_box ( & a) ) ;
3240- }
3280+ test_mm_store1_ps_impl ! ( _mm_store1_ps) ;
3281+ }
32413282
3242- assert_eq ! ( vals. data, [ 1.0 , 1.0 , 1.0 , 1.0 ] ) ;
3283+ #[ simd_test( enable = "sse" ) ]
3284+ const fn test_mm_store_ps1 ( ) {
3285+ test_mm_store1_ps_impl ! ( _mm_store_ps1) ;
32433286 }
32443287
32453288 #[ simd_test( enable = "sse" ) ]
0 commit comments