Skip to content

Commit 6c97650

Browse files
authored
Merge pull request #1959 from folkertdev/ternary-logic-tests-2
improve ternary logic tests
2 parents 775c9d2 + 9a70396 commit 6c97650

File tree

1 file changed

+30
-21
lines changed

1 file changed

+30
-21
lines changed

crates/core_arch/src/x86/avx512f.rs

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -46188,22 +46188,25 @@ mod tests {
4618846188

4618946189
#[simd_test(enable = "avx512f")]
4619046190
unsafe fn test_mm512_ternarylogic_epi32() {
46191+
use core::intrinsics::simd::simd_xor;
46192+
4619146193
let a = _mm512_set4_epi32(0b100, 0b110, 0b001, 0b101);
46192-
let b = _mm512_set4_epi32(0b010, 0b011, 0b001, 0b101);
46193-
let c = _mm512_set4_epi32(0b001, 0b000, 0b001, 0b101);
46194+
let b = _mm512_set4_epi32(0b010, 0b011, 0b001, 0b110);
46195+
let c = _mm512_set4_epi32(0b001, 0b000, 0b001, 0b111);
4619446196

4619546197
// Identity of A.
4619646198
let r = _mm512_ternarylogic_epi32::<0b1111_0000>(a, b, c);
4619746199
assert_eq_m512i(r, a);
4619846200

46199-
// Bitwise or.
46200-
let r = _mm512_ternarylogic_epi32::<0b1111_1110>(a, b, c);
46201-
let e = _mm512_set4_epi32(0b111, 0b111, 0b001, 0b101);
46201+
// Bitwise xor.
46202+
let r = _mm512_ternarylogic_epi32::<0b10010110>(a, b, c);
46203+
let e = _mm512_set4_epi32(0b111, 0b101, 0b001, 0b100);
4620246204
assert_eq_m512i(r, e);
46205+
assert_eq_m512i(r, simd_xor(simd_xor(a, b), c));
4620346206

46204-
// Majority.
46207+
// Majority (2 or more bits set).
4620546208
let r = _mm512_ternarylogic_epi32::<0b1110_1000>(a, b, c);
46206-
let e = _mm512_set4_epi32(0b000, 0b010, 0b001, 0b101);
46209+
let e = _mm512_set4_epi32(0b000, 0b010, 0b001, 0b111);
4620746210
assert_eq_m512i(r, e);
4620846211
}
4620946212

@@ -46233,24 +46236,27 @@ mod tests {
4623346236

4623446237
#[simd_test(enable = "avx512f,avx512vl")]
4623546238
unsafe fn test_mm256_ternarylogic_epi32() {
46239+
use core::intrinsics::simd::simd_xor;
46240+
4623646241
let _mm256_set4_epi32 = |a, b, c, d| _mm256_setr_epi32(a, b, c, d, a, b, c, d);
4623746242

4623846243
let a = _mm256_set4_epi32(0b100, 0b110, 0b001, 0b101);
46239-
let b = _mm256_set4_epi32(0b010, 0b011, 0b001, 0b101);
46240-
let c = _mm256_set4_epi32(0b001, 0b000, 0b001, 0b101);
46244+
let b = _mm256_set4_epi32(0b010, 0b011, 0b001, 0b110);
46245+
let c = _mm256_set4_epi32(0b001, 0b000, 0b001, 0b111);
4624146246

4624246247
// Identity of A.
4624346248
let r = _mm256_ternarylogic_epi32::<0b1111_0000>(a, b, c);
4624446249
assert_eq_m256i(r, a);
4624546250

46246-
// Bitwise or.
46247-
let r = _mm256_ternarylogic_epi32::<0b1111_1110>(a, b, c);
46248-
let e = _mm256_set4_epi32(0b111, 0b111, 0b001, 0b101);
46251+
// Bitwise xor.
46252+
let r = _mm256_ternarylogic_epi32::<0b10010110>(a, b, c);
46253+
let e = _mm256_set4_epi32(0b111, 0b101, 0b001, 0b100);
4624946254
assert_eq_m256i(r, e);
46255+
assert_eq_m256i(r, simd_xor(simd_xor(a, b), c));
4625046256

46251-
// Majority.
46257+
// Majority (2 or more bits set).
4625246258
let r = _mm256_ternarylogic_epi32::<0b1110_1000>(a, b, c);
46253-
let e = _mm256_set4_epi32(0b000, 0b010, 0b001, 0b101);
46259+
let e = _mm256_set4_epi32(0b000, 0b010, 0b001, 0b111);
4625446260
assert_eq_m256i(r, e);
4625546261
}
4625646262

@@ -46280,22 +46286,25 @@ mod tests {
4628046286

4628146287
#[simd_test(enable = "avx512f,avx512vl")]
4628246288
unsafe fn test_mm_ternarylogic_epi32() {
46289+
use core::intrinsics::simd::simd_xor;
46290+
4628346291
let a = _mm_setr_epi32(0b100, 0b110, 0b001, 0b101);
46284-
let b = _mm_setr_epi32(0b010, 0b011, 0b001, 0b101);
46285-
let c = _mm_setr_epi32(0b001, 0b000, 0b001, 0b101);
46292+
let b = _mm_setr_epi32(0b010, 0b011, 0b001, 0b110);
46293+
let c = _mm_setr_epi32(0b001, 0b000, 0b001, 0b111);
4628646294

4628746295
// Identity of A.
4628846296
let r = _mm_ternarylogic_epi32::<0b1111_0000>(a, b, c);
4628946297
assert_eq_m128i(r, a);
4629046298

46291-
// Bitwise or.
46292-
let r = _mm_ternarylogic_epi32::<0b1111_1110>(a, b, c);
46293-
let e = _mm_setr_epi32(0b111, 0b111, 0b001, 0b101);
46299+
// Bitwise xor.
46300+
let r = _mm_ternarylogic_epi32::<0b10010110>(a, b, c);
46301+
let e = _mm_setr_epi32(0b111, 0b101, 0b001, 0b100);
4629446302
assert_eq_m128i(r, e);
46303+
assert_eq_m128i(r, simd_xor(simd_xor(a, b), c));
4629546304

46296-
// Majority.
46305+
// Majority (2 or more bits set).
4629746306
let r = _mm_ternarylogic_epi32::<0b1110_1000>(a, b, c);
46298-
let e = _mm_setr_epi32(0b000, 0b010, 0b001, 0b101);
46307+
let e = _mm_setr_epi32(0b000, 0b010, 0b001, 0b111);
4629946308
assert_eq_m128i(r, e);
4630046309
}
4630146310

0 commit comments

Comments
 (0)