@@ -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