Move divrem fixup into macro.

This commit is contained in:
William Hart 2013-04-11 01:05:33 +01:00
parent 7b7ffec89c
commit e967731486
2 changed files with 13 additions and 14 deletions

View File

@ -2778,19 +2778,26 @@ do { \
add_ssaaaa((q), __q2, (q), __q2, 0, __q3); \
} while (0)
#define mpir_divrem32_preinv2(q, r2, r3, a1, a2, a3, d1, d2, dinv) \
#define mpir_divrem32_preinv2(q, r2, r3, a1, a2, a3, d11, d21, d1, d2, dinv) \
do { \
mp_limb_t __q2, __q3, __q4, __p1, __p2, __cy; \
umul_ppmm((q), __q2, (a1), (dinv)); \
add_ssaaaa((q), __q2, (q), __q2, (a1), (a2)); \
umul_ppmm(__p1, __p2, (q), (d2)); \
umul_ppmm(__p1, __p2, (q), (d21)); \
(r3) = (a3); \
(r2) = (a2) - (q)*(d1); \
(r2) = (a2) - (q)*(d11); \
sub_ddmmss((r2), (r3), (r2), (r3), __p1, __p2); \
sub_ddmmss((r2), (r3), (r2), (r3), (d1), (d2)); \
sub_ddmmss((r2), (r3), (r2), (r3), (d11), (d21)); \
(q)++; \
if ((r2) >= __q2) \
{ (q)--; add_ssaaaa((r2), (r3), (r2), (r3), (d1), (d2)); } \
{ (q)--; add_ssaaaa((r2), (r3), (r2), (r3), (d11), (d21)); } \
add_333(__cy, (r2), (r3), 0, (r2), (r3), 0, 0, (q)); \
while (UNLIKELY(__cy != 0 || (r2) >= (d1))) \
{ \
if ((r2) == (d1) && (r3) < (d2) && __cy == 0) break; \
sub_333(__cy, (r2), (r3), __cy, (r2), (r3), 0, (d1), (d2)); \
(q)++; \
} \
} while (0)
/* Compute quotient the quotient and remainder for n / d. Requires d

View File

@ -110,15 +110,7 @@ mpn_sb_div_qr (mp_ptr qp,
}
else
{
mpir_divrem32_preinv2(q, n1, n0, n1, np[1], np[0], d11, d01, dinv);
add_333(cy, n1, n0, 0, n1, n0, 0, 0, q);
while (UNLIKELY(cy != 0 || n1 >= d1))
{
if (n1 == d1 && n0 < d0 && cy == 0) break;
sub_333(cy, n1, n0, cy, n1, n0, 0, d1, d0);
(q)++;
}
mpir_divrem32_preinv2(q, n1, n0, n1, np[1], np[0], d11, d01, d1, d0, dinv);
cy2 = mpn_submul_1 (np - dn, dp, dn, q);