static void hgcd_jacobi_hook (void *p, mp_srcptr gp, mp_size_t gn, mp_srcptr qp, mp_size_t qn, int d) { ASSERT (!gp); ASSERT (d >= 0); MPN_NORMALIZE (qp, qn); if (qn > 0) { struct hgcd_jacobi_ctx *ctx = (struct hgcd_jacobi_ctx *) p; /* NOTES: This is a bit ugly. A tp area is passed to gcd_subdiv_step, which stores q at the start of that area. We now use the rest. */ mp_ptr tp = (mp_ptr) qp + qn; mpn_hgcd_matrix_update_q (ctx->M, qp, qn, d, tp); *ctx->bitsp = mpn_jacobi_update (*ctx->bitsp, d, qp[0] & 3); } }
static void jacobi_hook (void *p, mp_srcptr gp, mp_size_t gn, mp_srcptr qp, mp_size_t qn, int d) { unsigned *bitsp = (unsigned *) p; if (gp) { ASSERT (gn > 0); if (gn != 1 || gp[0] != 1) { *bitsp = BITS_FAIL; return; } } if (qp) { ASSERT (qn > 0); ASSERT (d >= 0); *bitsp = mpn_jacobi_update (*bitsp, d, qp[0] & 3); } }