https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82853

--- Comment #16 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
For unsigned x % y == z if y is odd constant we can handle it for any constant
z, by computing m = mul_inv (y, 2^prec) and d = (2^prec / y) and using x * m -
(z * m) < d .
For even y, not sure if it can work for anything but z == 0; for z == 0 we can
do
s = ctz (y); y_ = y >> s; m = mul_inv (y_, 2^prec); d = (2^prec / y_);
and use ((x * m) r>> s) < d .

Reply via email to