Home | History | Annotate | Download | only in generic

Lines Matching refs:qn

1 /* mpn_mu_bdiv_qr(qp,rp,np,nn,dp,dn,tp) -- Compute {np,nn} / {dp,dn} mod B^qn,
2 where qn = nn-dn, storing the result in {qp,qn}. Overlap allowed between Q
64 FIXME: Trim allocation for (qn > dn) case, 3*dn might be possible. In
74 mp_size_t qn;
79 qn = nn - dn;
82 ASSERT (qn >= 2);
84 if (qn > dn)
96 b = (qn - 1) / dn + 1; /* ceil(qn/dn), number of blocks */
97 in = (qn - 1) / b + 1; /* ceil(qn/b) = ceil(qn / ceil(qn/dn)) */
113 while (qn > in)
132 qn -= in;
149 /* Generate last qn limbs. */
150 mpn_mullo_n (qp, rp, ip, qn);
152 if (BELOW_THRESHOLD (qn, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD))
153 mpn_mul (tp, dp, dn, qp, qn); /* mulhi, need tp[qn+in-1...in] */
157 mpn_mulmod_bnm1 (tp, tn, dp, dn, qp, qn, scratch_out);
158 wn = dn + qn - tn; /* number of wrapped limbs */
166 if (dn != qn)
168 cy += mpn_sub_n (rp, rp + qn, tp + qn, dn - qn);
175 return mpn_sub_nc (rp + dn - qn, np, tp + dn, qn, cy);
191 in = qn - (qn >> 1);
212 qn -= in;
215 mpn_mullo_n (qp, rp, ip, qn); /* high qn quotient limbs */
217 if (BELOW_THRESHOLD (qn, MUL_TO_MULMOD_BNM1_FOR_2NXN_THRESHOLD))
218 mpn_mul (tp, dp, dn, qp, qn); /* mulhigh */
222 mpn_mulmod_bnm1 (tp, tn, dp, dn, qp, qn, scratch_out);
223 wn = dn + qn - tn; /* number of wrapped limbs */
231 cy += mpn_sub_n (rp, rp + qn, tp + qn, dn - qn);
237 return mpn_sub_nc (rp + dn - qn, np + dn + in, tp + dn, qn, cy);
254 /* R' B^{qn} = U - Q' D
256 * Q = B^{qn} - Q' (assuming Q' != 0)
258 * R B^{qn} = U + Q D = U + B^{qn} D - Q' D
259 * = B^{qn} D + R'
281 mp_size_t qn, in, tn, itch_binvert, itch_out, itches;
286 qn = nn - dn;
288 if (qn > dn)
290 b = (qn - 1) / dn + 1; /* ceil(qn/dn), number of blocks */
291 in = (qn - 1) / b + 1; /* ceil(qn/b) = ceil(qn / ceil(qn/dn)) */
295 in = qn - (qn >> 1);