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++; } }