@@ -3928,28 +3928,43 @@ mod tests {
39283928
39293929 #[ simd_test( enable = "avx" ) ]
39303930 unsafe fn test_mm256_permute2f128_ps ( ) {
3931- let a = _mm256_setr_ps ( 1 ., 2 ., 3 ., 4 ., 1 ., 2 ., 3 ., 4 .) ;
3932- let b = _mm256_setr_ps ( 5 ., 6 ., 7 ., 8 ., 5 ., 6 ., 7 ., 8 .) ;
3933- let r = _mm256_permute2f128_ps :: < 0x13 > ( a, b) ;
3934- let e = _mm256_setr_ps ( 5 ., 6 ., 7 ., 8 ., 1 ., 2 ., 3 ., 4 .) ;
3931+ let a = _mm256_setr_ps ( 11 ., 12 ., 13 ., 14 ., 15 ., 16 ., 17 ., 18 .) ;
3932+ let b = _mm256_setr_ps ( 21 ., 22 ., 23 ., 24 ., 25 ., 26 ., 27 ., 28 .) ;
3933+ let r = _mm256_permute2f128_ps :: < 0b0001_0011 > ( a, b) ;
3934+ let e = _mm256_setr_ps ( 25 ., 26 ., 27 ., 28 ., 15 ., 16 ., 17 ., 18 .) ;
39353935 assert_eq_m256 ( r, e) ;
3936+
3937+ // Setting bits 3 or 7 (zero-indexed) zeroes the corresponding field.
3938+ let r = _mm256_permute2f128_ps :: < 0b1001_1011 > ( a, b) ;
3939+ let z = _mm256_setr_ps ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ;
3940+ assert_eq_m256 ( r, z) ;
39363941 }
39373942
39383943 #[ simd_test( enable = "avx" ) ]
39393944 unsafe fn test_mm256_permute2f128_pd ( ) {
39403945 let a = _mm256_setr_pd ( 1. , 2. , 3. , 4. ) ;
39413946 let b = _mm256_setr_pd ( 5. , 6. , 7. , 8. ) ;
3942- let r = _mm256_permute2f128_pd :: < 0x31 > ( a, b) ;
3947+ let r = _mm256_permute2f128_pd :: < 0b0011_0001 > ( a, b) ;
39433948 let e = _mm256_setr_pd ( 3. , 4. , 7. , 8. ) ;
39443949 assert_eq_m256d ( r, e) ;
3950+
3951+ // Setting bits 3 or 7 (zero-indexed) zeroes the corresponding field.
3952+ let r = _mm256_permute2f128_pd :: < 0b1011_1001 > ( a, b) ;
3953+ let e = _mm256_setr_pd ( 0.0 , 0.0 , 0.0 , 0.0 ) ;
3954+ assert_eq_m256d ( r, e) ;
39453955 }
39463956
39473957 #[ simd_test( enable = "avx" ) ]
39483958 unsafe fn test_mm256_permute2f128_si256 ( ) {
3949- let a = _mm256_setr_epi32 ( 1 , 2 , 3 , 4 , 1 , 2 , 3 , 4 ) ;
3950- let b = _mm256_setr_epi32 ( 5 , 6 , 7 , 8 , 5 , 6 , 7 , 8 ) ;
3951- let r = _mm256_permute2f128_si256 :: < 0x20 > ( a, b) ;
3952- let e = _mm256_setr_epi32 ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ) ;
3959+ let a = _mm256_setr_epi32 ( 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 ) ;
3960+ let b = _mm256_setr_epi32 ( 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 ) ;
3961+ let r = _mm256_permute2f128_si256 :: < 0b0010_0000 > ( a, b) ;
3962+ let e = _mm256_setr_epi32 ( 11 , 12 , 13 , 14 , 21 , 22 , 23 , 24 ) ;
3963+ assert_eq_m256i ( r, e) ;
3964+
3965+ // Setting bits 3 or 7 (zero-indexed) zeroes the corresponding field.
3966+ let r = _mm256_permute2f128_si256 :: < 0b1010_1000 > ( a, b) ;
3967+ let e = _mm256_setr_epi32 ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) ;
39533968 assert_eq_m256i ( r, e) ;
39543969 }
39553970
0 commit comments