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

--- Comment #6 from Avinash Jayakar <avinashd at gcc dot gnu.org> ---
ROUND_MOD_EXPR and ROUND_DIV_EXPR can be implemented as follows (as done in
expand_divmod)

For unsigned
r = x %[rd] y;
is
r = x % y; if (r > ((y - 1) >> 1)) r -= y;
d = x /[rd] y;
is
r = x % y; d = x / y; if (r > ((y - 1) >> 1)) d++;

For signed
r = x %[rd] y; d = x %[rd] y;
is 
r = x % y; d = x / y;
if (r > ((y - 1) >> 1))
{
    if (x ^ y < 0) { r += y; d--; }
    else { r -= y; d++; }
}

Reply via email to