Skip to content

Commit 9a70396

Browse files
committed
improve ternary logic tests
1 parent 3fface7 commit 9a70396

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
@@ -46240,22 +46240,25 @@ mod tests {
4624046240

4624146241
#[simd_test(enable = "avx512f")]
4624246242
unsafe fn test_mm512_ternarylogic_epi32() {
46243+
use core::intrinsics::simd::simd_xor;
46244+
4624346245
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+
let b = _mm512_set4_epi32(0b010, 0b011, 0b001, 0b110);
46247+
let c = _mm512_set4_epi32(0b001, 0b000, 0b001, 0b111);
4624646248

4624746249
// Identity of A.
4624846250
let r = _mm512_ternarylogic_epi32::<0b1111_0000>(a, b, c);
4624946251
assert_eq_m512i(r, a);
4625046252

46251-
// Bitwise or.
46252-
let r = _mm512_ternarylogic_epi32::<0b1111_1110>(a, b, c);
46253-
let e = _mm512_set4_epi32(0b111, 0b111, 0b001, 0b101);
46253+
// Bitwise xor.
46254+
let r = _mm512_ternarylogic_epi32::<0b10010110>(a, b, c);
46255+
let e = _mm512_set4_epi32(0b111, 0b101, 0b001, 0b100);
4625446256
assert_eq_m512i(r, e);
46257+
assert_eq_m512i(r, simd_xor(simd_xor(a, b), c));
4625546258

46256-
// Majority.
46259+
// Majority (2 or more bits set).
4625746260
let r = _mm512_ternarylogic_epi32::<0b1110_1000>(a, b, c);
46258-
let e = _mm512_set4_epi32(0b000, 0b010, 0b001, 0b101);
46261+
let e = _mm512_set4_epi32(0b000, 0b010, 0b001, 0b111);
4625946262
assert_eq_m512i(r, e);
4626046263
}
4626146264

@@ -46285,24 +46288,27 @@ mod tests {
4628546288

4628646289
#[simd_test(enable = "avx512f,avx512vl")]
4628746290
unsafe fn test_mm256_ternarylogic_epi32() {
46291+
use core::intrinsics::simd::simd_xor;
46292+
4628846293
let _mm256_set4_epi32 = |a, b, c, d| _mm256_setr_epi32(a, b, c, d, a, b, c, d);
4628946294

4629046295
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);
46296+
let b = _mm256_set4_epi32(0b010, 0b011, 0b001, 0b110);
46297+
let c = _mm256_set4_epi32(0b001, 0b000, 0b001, 0b111);
4629346298

4629446299
// Identity of A.
4629546300
let r = _mm256_ternarylogic_epi32::<0b1111_0000>(a, b, c);
4629646301
assert_eq_m256i(r, a);
4629746302

46298-
// Bitwise or.
46299-
let r = _mm256_ternarylogic_epi32::<0b1111_1110>(a, b, c);
46300-
let e = _mm256_set4_epi32(0b111, 0b111, 0b001, 0b101);
46303+
// Bitwise xor.
46304+
let r = _mm256_ternarylogic_epi32::<0b10010110>(a, b, c);
46305+
let e = _mm256_set4_epi32(0b111, 0b101, 0b001, 0b100);
4630146306
assert_eq_m256i(r, e);
46307+
assert_eq_m256i(r, simd_xor(simd_xor(a, b), c));
4630246308

46303-
// Majority.
46309+
// Majority (2 or more bits set).
4630446310
let r = _mm256_ternarylogic_epi32::<0b1110_1000>(a, b, c);
46305-
let e = _mm256_set4_epi32(0b000, 0b010, 0b001, 0b101);
46311+
let e = _mm256_set4_epi32(0b000, 0b010, 0b001, 0b111);
4630646312
assert_eq_m256i(r, e);
4630746313
}
4630846314

@@ -46332,22 +46338,25 @@ mod tests {
4633246338

4633346339
#[simd_test(enable = "avx512f,avx512vl")]
4633446340
unsafe fn test_mm_ternarylogic_epi32() {
46341+
use core::intrinsics::simd::simd_xor;
46342+
4633546343
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);
46344+
let b = _mm_setr_epi32(0b010, 0b011, 0b001, 0b110);
46345+
let c = _mm_setr_epi32(0b001, 0b000, 0b001, 0b111);
4633846346

4633946347
// Identity of A.
4634046348
let r = _mm_ternarylogic_epi32::<0b1111_0000>(a, b, c);
4634146349
assert_eq_m128i(r, a);
4634246350

46343-
// Bitwise or.
46344-
let r = _mm_ternarylogic_epi32::<0b1111_1110>(a, b, c);
46345-
let e = _mm_setr_epi32(0b111, 0b111, 0b001, 0b101);
46351+
// Bitwise xor.
46352+
let r = _mm_ternarylogic_epi32::<0b10010110>(a, b, c);
46353+
let e = _mm_setr_epi32(0b111, 0b101, 0b001, 0b100);
4634646354
assert_eq_m128i(r, e);
46355+
assert_eq_m128i(r, simd_xor(simd_xor(a, b), c));
4634746356

46348-
// Majority.
46357+
// Majority (2 or more bits set).
4634946358
let r = _mm_ternarylogic_epi32::<0b1110_1000>(a, b, c);
46350-
let e = _mm_setr_epi32(0b000, 0b010, 0b001, 0b101);
46359+
let e = _mm_setr_epi32(0b000, 0b010, 0b001, 0b111);
4635146360
assert_eq_m128i(r, e);
4635246361
}
4635346362

0 commit comments

Comments
 (0)