Lines Matching refs:xp
86 /* Maximum scratch needed by this branch (at xp): 2*n */
88 mpn_bc_invertappr (mp_ptr ip, mp_srcptr dp, mp_size_t n, mp_ptr xp)
93 ASSERT (! MPN_OVERLAP_P (ip, n, xp, mpn_invertappr_itch(n)));
94 ASSERT (! MPN_OVERLAP_P (dp, n, xp, mpn_invertappr_itch(n)));
101 MPN_FILL (xp, n, GMP_NUMB_MAX);
102 mpn_com (xp + n, dp, n);
104 /* Now xp contains B^2n - {dp,n}*B^n - 1 */
108 mpn_divrem_2 (ip, 0, xp, 4, dp);
114 mpn_sbpi1_divappr_q (ip, xp, 2 * n, dp, n, inv.inv32);
116 mpn_dcpi1_divappr_q (ip, xp, 2 * n, dp, n, &inv);
160 #define xp scratch
205 /* FIXME: We do only need {xp,n+1}*/
206 mpn_mul (xp, dp - n, n, ip - rn, rn);
207 mpn_add_n (xp + rn, xp + rn, dp - n, n - rn + 1);
209 /* We computed (truncated) {xp,n+1} <- 1.{ip,rn} * 0.{dp,n} */
211 mpn_mulmod_bnm1 (xp, mn, dp - n, n, ip - rn, rn, tp);
212 /* We computed {xp,mn} <- {ip,rn} * {dp,n} mod (B^mn-1) */
216 cy = mpn_add_n (xp + rn, xp + rn, dp - n, mn - rn);
217 cy = mpn_add_nc (xp, xp, dp - (n - (mn - rn)), n - (mn - rn), cy);
219 xp[mn] = CNST_LIMB (1); /* set a limit for DECR_U */
220 MPN_DECR_U (xp + rn + n - mn, 2 * mn + 1 - rn - n, CNST_LIMB (1) - cy);
221 MPN_DECR_U (xp, mn, CNST_LIMB (1) - xp[mn]); /* if DECR_U eroded xp[mn] */
225 if (xp[n] < CNST_LIMB (2)) { /* "positive" residue class */
226 cy = xp[n]; /* 0 <= cy <= 1 here. */
229 if (mpn_cmp (xp, dp - n, n) > 0) {
231 chk = mpn_sublsh1_n (xp, xp, dp - n, n);
232 ASSERT (chk == xp[n]);
235 ASSERT_CARRY (mpn_sub_n (xp, xp, dp - n, n));
238 if (cy++ && !mpn_sub_n (xp, xp, dp - n, n)) {
239 ASSERT_CARRY (mpn_sub_n (xp, xp, dp - n, n));
245 if (mpn_cmp (xp, dp - n, n) > 0) {
246 ASSERT_NOCARRY (mpn_rsblsh1_n (xp + n, xp, dp - n, n));
249 ASSERT_NOCARRY (mpn_sub_nc (xp + 2 * n - rn, dp - rn, xp + n - rn, rn, mpn_cmp (xp, dp - n, n - rn) > 0));
251 if (mpn_cmp (xp, dp - n, n) > 0) {
252 ASSERT_NOCARRY (mpn_sub_n (xp, xp, dp - n, n));
255 ASSERT_NOCARRY (mpn_sub_nc (xp + 2 * n - rn, dp - rn, xp + n - rn, rn, mpn_cmp (xp, dp - n, n - rn) > 0));
259 ASSERT (xp[n] >= GMP_NUMB_MAX - CNST_LIMB(1));
260 MPN_DECR_U(xp, n + 1, cy);
261 if (xp[n] != GMP_NUMB_MAX) {
263 ASSERT_CARRY (mpn_add_n (xp, xp, dp - n, n));
265 mpn_com (xp + 2 * n - rn, xp + n - rn, rn);
268 /* Compute x_ju_j. FIXME:We need {xp+rn,rn}, mulhi? */
269 mpn_mul_n (xp, xp + 2 * n - rn, ip - rn, rn);
270 cy = mpn_add_n (xp + rn, xp + rn, xp + 2 * n - rn, 2 * rn - n);
271 cy = mpn_add_nc (ip - n, xp + 3 * rn - n, xp + n + rn, n - rn, cy);
275 cy = xp[3 * rn - n - 1] > GMP_NUMB_MAX - CNST_LIMB (7); /* Be conservative. */
276 /* cy = mpn_add_1 (xp + rn, xp + rn, 2*rn - n, 4); */
284 #undef xp