Skip to content

Commit 8b2dd9c

Browse files
authored
Merge pull request #1951 from folkertdev/permute2f128-tests
improve `_mm256_permute2f128` tests
2 parents b5c1645 + 08d925c commit 8b2dd9c

File tree

1 file changed

+24
-9
lines changed
  • crates/core_arch/src/x86

1 file changed

+24
-9
lines changed

crates/core_arch/src/x86/avx.rs

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)