@@ -106,19 +106,39 @@ fn simd_ops_i32() {
106106 assert_eq ! ( a. min( b * i32x4:: splat( 4 ) ) , i32x4:: from_array( [ 4 , 8 , 10 , -16 ] ) ) ;
107107
108108 assert_eq ! (
109- i8x4:: from_array( [ i8 :: MAX , -23 , 23 , i8 :: MIN ] ) . saturating_add( i8x4:: from_array( [ 1 , i8 :: MIN , i8 :: MAX , 28 ] ) ) ,
109+ i8x4:: from_array( [ i8 :: MAX , -23 , 23 , i8 :: MIN ] ) . saturating_add( i8x4:: from_array( [
110+ 1 ,
111+ i8 :: MIN ,
112+ i8 :: MAX ,
113+ 28
114+ ] ) ) ,
110115 i8x4:: from_array( [ i8 :: MAX , i8 :: MIN , i8 :: MAX , -100 ] )
111116 ) ;
112117 assert_eq ! (
113- i8x4:: from_array( [ i8 :: MAX , -28 , 27 , 42 ] ) . saturating_sub( i8x4:: from_array( [ 1 , i8 :: MAX , i8 :: MAX , -80 ] ) ) ,
118+ i8x4:: from_array( [ i8 :: MAX , -28 , 27 , 42 ] ) . saturating_sub( i8x4:: from_array( [
119+ 1 ,
120+ i8 :: MAX ,
121+ i8 :: MAX ,
122+ -80
123+ ] ) ) ,
114124 i8x4:: from_array( [ 126 , i8 :: MIN , -100 , 122 ] )
115125 ) ;
116126 assert_eq ! (
117- u8x4:: from_array( [ u8 :: MAX , 0 , 23 , 42 ] ) . saturating_add( u8x4:: from_array( [ 1 , 1 , u8 :: MAX , 200 ] ) ) ,
127+ u8x4:: from_array( [ u8 :: MAX , 0 , 23 , 42 ] ) . saturating_add( u8x4:: from_array( [
128+ 1 ,
129+ 1 ,
130+ u8 :: MAX ,
131+ 200
132+ ] ) ) ,
118133 u8x4:: from_array( [ u8 :: MAX , 1 , u8 :: MAX , 242 ] )
119134 ) ;
120135 assert_eq ! (
121- u8x4:: from_array( [ u8 :: MAX , 0 , 23 , 42 ] ) . saturating_sub( u8x4:: from_array( [ 1 , 1 , u8 :: MAX , 200 ] ) ) ,
136+ u8x4:: from_array( [ u8 :: MAX , 0 , 23 , 42 ] ) . saturating_sub( u8x4:: from_array( [
137+ 1 ,
138+ 1 ,
139+ u8 :: MAX ,
140+ 200
141+ ] ) ) ,
122142 u8x4:: from_array( [ 254 , 0 , 0 , 0 ] )
123143 ) ;
124144
@@ -259,6 +279,42 @@ fn simd_gather_scatter() {
259279 assert_eq ! ( vec, vec![ 124 , 11 , 12 , 82 , 14 , 15 , 16 , 17 , 18 ] ) ;
260280}
261281
282+ fn simd_round ( ) {
283+ assert_eq ! (
284+ f32x4:: from_array( [ 0.9 , 1.001 , 2.0 , -4.5 ] ) . ceil( ) ,
285+ f32x4:: from_array( [ 1.0 , 2.0 , 2.0 , -4.0 ] )
286+ ) ;
287+ assert_eq ! (
288+ f32x4:: from_array( [ 0.9 , 1.001 , 2.0 , -4.5 ] ) . floor( ) ,
289+ f32x4:: from_array( [ 0.0 , 1.0 , 2.0 , -5.0 ] )
290+ ) ;
291+ assert_eq ! (
292+ f32x4:: from_array( [ 0.9 , 1.001 , 2.0 , -4.5 ] ) . round( ) ,
293+ f32x4:: from_array( [ 1.0 , 1.0 , 2.0 , -5.0 ] )
294+ ) ;
295+ assert_eq ! (
296+ f32x4:: from_array( [ 0.9 , 1.001 , 2.0 , -4.5 ] ) . trunc( ) ,
297+ f32x4:: from_array( [ 0.0 , 1.0 , 2.0 , -4.0 ] )
298+ ) ;
299+
300+ assert_eq ! (
301+ f64x4:: from_array( [ 0.9 , 1.001 , 2.0 , -4.5 ] ) . ceil( ) ,
302+ f64x4:: from_array( [ 1.0 , 2.0 , 2.0 , -4.0 ] )
303+ ) ;
304+ assert_eq ! (
305+ f64x4:: from_array( [ 0.9 , 1.001 , 2.0 , -4.5 ] ) . floor( ) ,
306+ f64x4:: from_array( [ 0.0 , 1.0 , 2.0 , -5.0 ] )
307+ ) ;
308+ assert_eq ! (
309+ f64x4:: from_array( [ 0.9 , 1.001 , 2.0 , -4.5 ] ) . round( ) ,
310+ f64x4:: from_array( [ 1.0 , 1.0 , 2.0 , -5.0 ] )
311+ ) ;
312+ assert_eq ! (
313+ f64x4:: from_array( [ 0.9 , 1.001 , 2.0 , -4.5 ] ) . trunc( ) ,
314+ f64x4:: from_array( [ 0.0 , 1.0 , 2.0 , -4.0 ] )
315+ ) ;
316+ }
317+
262318fn simd_intrinsics ( ) {
263319 extern "platform-intrinsic" {
264320 fn simd_eq < T , U > ( x : T , y : T ) -> U ;
@@ -299,5 +355,6 @@ fn main() {
299355 simd_cast ( ) ;
300356 simd_swizzle ( ) ;
301357 simd_gather_scatter ( ) ;
358+ simd_round ( ) ;
302359 simd_intrinsics ( ) ;
303360}
0 commit comments