Revision control
Copy as Markdown
Other Tools
pub fn eq_mask(a: u32, b: u32) -> u32 {
let x = a ^ b;
let minus_x = (!x).wrapping_add(1u32);
let x_or_minus_x = x | minus_x;
let xnx = x_or_minus_x.wrapping_shr(31);
xnx.wrapping_sub(1u32)
}
pub fn gte_mask(a: u32, b: u32) -> u32 {
let x = a;
let y = b;
let x_xor_y = x ^ y;
let x_sub_y = x.wrapping_sub(y);
let x_sub_y_xor_y = x_sub_y ^ y;
let q = x_xor_y | x_sub_y_xor_y;
let x_xor_q = x ^ q;
let x_xor_q_ = x_xor_q.wrapping_shr(31);
x_xor_q_.wrapping_sub(1u32)
}