Skip to content

Commit 3fface7

Browse files
committed
add logic tests for ternarylogic
previously the output would just always be all zeroes
1 parent e11af1c commit 3fface7

File tree

1 file changed

+50
-15
lines changed

1 file changed

+50
-15
lines changed

crates/core_arch/src/x86/avx512f.rs

Lines changed: 50 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46240,11 +46240,22 @@ mod tests {
4624046240

4624146241
#[simd_test(enable = "avx512f")]
4624246242
unsafe fn test_mm512_ternarylogic_epi32() {
46243-
let a = _mm512_set1_epi32(1 << 2);
46244-
let b = _mm512_set1_epi32(1 << 1);
46245-
let c = _mm512_set1_epi32(1 << 0);
46246-
let r = _mm512_ternarylogic_epi32::<8>(a, b, c);
46247-
let e = _mm512_set1_epi32(0);
46243+
let a = _mm512_set4_epi32(0b100, 0b110, 0b001, 0b101);
46244+
let b = _mm512_set4_epi32(0b010, 0b011, 0b001, 0b101);
46245+
let c = _mm512_set4_epi32(0b001, 0b000, 0b001, 0b101);
46246+
46247+
// Identity of A.
46248+
let r = _mm512_ternarylogic_epi32::<0b1111_0000>(a, b, c);
46249+
assert_eq_m512i(r, a);
46250+
46251+
// Bitwise or.
46252+
let r = _mm512_ternarylogic_epi32::<0b1111_1110>(a, b, c);
46253+
let e = _mm512_set4_epi32(0b111, 0b111, 0b001, 0b101);
46254+
assert_eq_m512i(r, e);
46255+
46256+
// Majority.
46257+
let r = _mm512_ternarylogic_epi32::<0b1110_1000>(a, b, c);
46258+
let e = _mm512_set4_epi32(0b000, 0b010, 0b001, 0b101);
4624846259
assert_eq_m512i(r, e);
4624946260
}
4625046261

@@ -46274,11 +46285,24 @@ mod tests {
4627446285

4627546286
#[simd_test(enable = "avx512f,avx512vl")]
4627646287
unsafe fn test_mm256_ternarylogic_epi32() {
46277-
let a = _mm256_set1_epi32(1 << 2);
46278-
let b = _mm256_set1_epi32(1 << 1);
46279-
let c = _mm256_set1_epi32(1 << 0);
46280-
let r = _mm256_ternarylogic_epi32::<8>(a, b, c);
46281-
let e = _mm256_set1_epi32(0);
46288+
let _mm256_set4_epi32 = |a, b, c, d| _mm256_setr_epi32(a, b, c, d, a, b, c, d);
46289+
46290+
let a = _mm256_set4_epi32(0b100, 0b110, 0b001, 0b101);
46291+
let b = _mm256_set4_epi32(0b010, 0b011, 0b001, 0b101);
46292+
let c = _mm256_set4_epi32(0b001, 0b000, 0b001, 0b101);
46293+
46294+
// Identity of A.
46295+
let r = _mm256_ternarylogic_epi32::<0b1111_0000>(a, b, c);
46296+
assert_eq_m256i(r, a);
46297+
46298+
// Bitwise or.
46299+
let r = _mm256_ternarylogic_epi32::<0b1111_1110>(a, b, c);
46300+
let e = _mm256_set4_epi32(0b111, 0b111, 0b001, 0b101);
46301+
assert_eq_m256i(r, e);
46302+
46303+
// Majority.
46304+
let r = _mm256_ternarylogic_epi32::<0b1110_1000>(a, b, c);
46305+
let e = _mm256_set4_epi32(0b000, 0b010, 0b001, 0b101);
4628246306
assert_eq_m256i(r, e);
4628346307
}
4628446308

@@ -46308,11 +46332,22 @@ mod tests {
4630846332

4630946333
#[simd_test(enable = "avx512f,avx512vl")]
4631046334
unsafe fn test_mm_ternarylogic_epi32() {
46311-
let a = _mm_set1_epi32(1 << 2);
46312-
let b = _mm_set1_epi32(1 << 1);
46313-
let c = _mm_set1_epi32(1 << 0);
46314-
let r = _mm_ternarylogic_epi32::<8>(a, b, c);
46315-
let e = _mm_set1_epi32(0);
46335+
let a = _mm_setr_epi32(0b100, 0b110, 0b001, 0b101);
46336+
let b = _mm_setr_epi32(0b010, 0b011, 0b001, 0b101);
46337+
let c = _mm_setr_epi32(0b001, 0b000, 0b001, 0b101);
46338+
46339+
// Identity of A.
46340+
let r = _mm_ternarylogic_epi32::<0b1111_0000>(a, b, c);
46341+
assert_eq_m128i(r, a);
46342+
46343+
// Bitwise or.
46344+
let r = _mm_ternarylogic_epi32::<0b1111_1110>(a, b, c);
46345+
let e = _mm_setr_epi32(0b111, 0b111, 0b001, 0b101);
46346+
assert_eq_m128i(r, e);
46347+
46348+
// Majority.
46349+
let r = _mm_ternarylogic_epi32::<0b1110_1000>(a, b, c);
46350+
let e = _mm_setr_epi32(0b000, 0b010, 0b001, 0b101);
4631646351
assert_eq_m128i(r, e);
4631746352
}
4631846353

0 commit comments

Comments
 (0)