Function safe_arch::test_mixed_ones_and_zeroes_m128i

source ·
pub fn test_mixed_ones_and_zeroes_m128i(a: m128i, mask: m128i) -> i32
Available with target feature sse4.1 only.
Expand description

Returns if, among the masked bits, there’s both 0s and 1s

  • Intrinsic: _mm_test_mix_ones_zeros

  • Assembly: ptest xmm, xmm

  • Zero Flag = (a & mask) as u128 == 0

  • Carry Flag = ((!a) & mask) as u128 == 0

  • Return ZeroFlag == 0 && Carry Flag == 0

let a = m128i::from(0b111_u128);
let mask = m128i::from(u128::MAX);
assert_eq!(test_mixed_ones_and_zeroes_m128i(a, mask), 1);
//
let a = m128i::from(0b0_u128);
let mask = m128i::from(u128::MAX);
assert_eq!(test_mixed_ones_and_zeroes_m128i(a, mask), 0);
//
let a = m128i::from(0b1_0000_u128);
let mask = m128i::from(0b0_1111_u128);
assert_eq!(test_mixed_ones_and_zeroes_m128i(a, mask), 0);
//
let a = m128i::from(0b1_0000_u128);
let mask = m128i::from(0b1_1111_u128);
assert_eq!(test_mixed_ones_and_zeroes_m128i(a, mask), 1);