@@ -285,14 +285,23 @@ mod tests {
285
285
use simd:: * ;
286
286
use stdsimd_test:: simd_test;
287
287
288
- #[ simd_test( enable = "vsx" ) ]
289
- unsafe fn vec_xxpermdi_u62x2 ( ) {
290
- let a: vector_unsigned_long = u64x2:: new ( 0 , 1 ) . into_bits ( ) ;
291
- let b = u64x2:: new ( 2 , 3 ) . into_bits ( ) ;
288
+ macro_rules! test_vec_xxpermdi {
289
+ { $name: ident, $shorttype: ident, $longtype: ident, [ $( $a: expr) ,+] , [ $( $b: expr) ,+] , [ $( $c: expr) ,+] , [ $( $d: expr) ,+] } => {
290
+ #[ simd_test( enable = "vsx" ) ]
291
+ unsafe fn $name( ) {
292
+ let a: $longtype = $shorttype:: new( $( $a) ,+, $( $b) ,+) . into_bits( ) ;
293
+ let b = $shorttype:: new( $( $c) ,+, $( $d) ,+) . into_bits( ) ;
292
294
293
- assert_eq ! ( u64x2:: new( 0 , 2 ) , vec_xxpermdi( a, b, 0 ) . into_bits( ) ) ;
294
- assert_eq ! ( u64x2:: new( 1 , 2 ) , vec_xxpermdi( a, b, 1 ) . into_bits( ) ) ;
295
- assert_eq ! ( u64x2:: new( 0 , 3 ) , vec_xxpermdi( a, b, 2 ) . into_bits( ) ) ;
296
- assert_eq ! ( u64x2:: new( 1 , 3 ) , vec_xxpermdi( a, b, 3 ) . into_bits( ) ) ;
295
+ assert_eq!( $shorttype:: new( $( $a) ,+, $( $c) ,+) , vec_xxpermdi( a, b, 0 ) . into_bits( ) ) ;
296
+ assert_eq!( $shorttype:: new( $( $b) ,+, $( $c) ,+) , vec_xxpermdi( a, b, 1 ) . into_bits( ) ) ;
297
+ assert_eq!( $shorttype:: new( $( $a) ,+, $( $d) ,+) , vec_xxpermdi( a, b, 2 ) . into_bits( ) ) ;
298
+ assert_eq!( $shorttype:: new( $( $b) ,+, $( $d) ,+) , vec_xxpermdi( a, b, 3 ) . into_bits( ) ) ;
299
+ }
300
+ }
297
301
}
302
+
303
+ test_vec_xxpermdi ! { test_vec_xxpermdi_u64x2, u64x2, vector_unsigned_long, [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] }
304
+ test_vec_xxpermdi ! { test_vec_xxpermdi_i64x2, i64x2, vector_signed_long, [ 0 ] , [ -1 ] , [ 2 ] , [ -3 ] }
305
+ test_vec_xxpermdi ! { test_vec_xxpermdi_m64x2, m64x2, vector_bool_long, [ false ] , [ true ] , [ false ] , [ true ] }
306
+ test_vec_xxpermdi ! { test_vec_xxpermdi_f64x2, f64x2, vector_double, [ 0.0 ] , [ 1.0 ] , [ 2.0 ] , [ 3.0 ] }
298
307
}
0 commit comments