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