#ifndef _NEW_H #define _NEW_H /* Declarations for gmp-contrib stuff. These will ultimately go into gmp-h.in or gmp-impl.h. */ #ifndef DC_DIV_QR_THRESHOLD #define DC_DIV_QR_THRESHOLD 43 #endif #ifndef DC_DIVAPPR_Q_THRESHOLD #define DC_DIVAPPR_Q_THRESHOLD 208 #endif #ifndef DC_DIV_Q_THRESHOLD #define DC_DIV_Q_THRESHOLD 228 #endif #ifndef DC_BDIV_QR_THRESHOLD #define DC_BDIV_QR_THRESHOLD 52 #endif #ifndef DC_BDIV_Q_THRESHOLD #define DC_BDIV_Q_THRESHOLD 224 #endif #ifndef DIVEXACT_JEB_THRESHOLD #define DIVEXACT_JEB_THRESHOLD 25 #endif #ifndef INV_NEWTON_THRESHOLD #define INV_NEWTON_THRESHOLD 654 #endif #ifndef BINV_NEWTON_THRESHOLD #define BINV_NEWTON_THRESHOLD 807 #endif #ifndef MU_DIVAPPR_Q_THRESHOLD #define MU_DIVAPPR_Q_THRESHOLD 4000 #endif #ifndef MU_DIV_Q_THRESHOLD #define MU_DIV_Q_THRESHOLD 4000 #endif #ifndef MU_BDIV_Q_THRESHOLD #define MU_BDIV_Q_THRESHOLD 2000 #endif /* If CHECK is defined, artificially reduce thresholds to make testing more effective. */ #ifdef CHECK #undef MUL_FFT_MODF_THRESHOLD #define MUL_FFT_MODF_THRESHOLD 32 #undef DC_DIV_QR_THRESHOLD #define DC_DIV_QR_THRESHOLD 3 #undef DC_DIVAPPR_Q_THRESHOLD #define DC_DIVAPPR_Q_THRESHOLD 4 #undef DC_DIV_Q_THRESHOLD #define DC_DIV_Q_THRESHOLD 3 #undef DC_BDIV_QR_THRESHOLD #define DC_BDIV_QR_THRESHOLD 4 #undef DC_BDIV_Q_THRESHOLD #define DC_BDIV_Q_THRESHOLD 4 #undef DIVEXACT_JEB_THRESHOLD #define DIVEXACT_JEB_THRESHOLD 6 #undef INV_NEWTON_THRESHOLD #define INV_NEWTON_THRESHOLD 6 #undef BINV_NEWTON_THRESHOLD #define BINV_NEWTON_THRESHOLD 6 #undef MU_DIVAPPR_Q_THRESHOLD #define MU_DIVAPPR_Q_THRESHOLD 8 #undef MU_DIV_Q_THRESHOLD #define MU_DIV_Q_THRESHOLD 8 #undef MU_BDIV_Q_THRESHOLD #define MU_BDIV_Q_THRESHOLD 8 #endif #if TUNE_PROGRAM_BUILD #undef DC_DIV_QR_THRESHOLD #define DC_DIV_QR_THRESHOLD dc_div_qr_threshold extern mp_size_t dc_div_qr_threshold; #undef DC_DIVAPPR_Q_THRESHOLD #define DC_DIVAPPR_Q_THRESHOLD dc_divappr_q_threshold extern mp_size_t dc_divappr_q_threshold; #undef DC_DIV_Q_THRESHOLD #define DC_DIV_Q_THRESHOLD dc_div_q_threshold extern mp_size_t dc_div_q_threshold; #undef DC_BDIV_QR_THRESHOLD #define DC_BDIV_QR_THRESHOLD dc_bdiv_qr_threshold extern mp_size_t dc_bdiv_qr_threshold; #undef DC_BDIV_Q_THRESHOLD #define DC_BDIV_Q_THRESHOLD dc_bdiv_q_threshold extern mp_size_t dc_bdiv_q_threshold; #undef DIVEXACT_JEB_THRESHOLD #define DIVEXACT_JEB_THRESHOLD divexact_jeb_threshold extern mp_size_t divexact_jeb_threshold; #undef INV_NEWTON_THRESHOLD #define INV_NEWTON_THRESHOLD inv_newton_threshold extern mp_size_t inv_newton_threshold; #undef BINV_NEWTON_THRESHOLD #define BINV_NEWTON_THRESHOLD binv_newton_threshold extern mp_size_t binv_newton_threshold; #endif mp_limb_t mpn_sb_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr); mp_limb_t mpn_sb_div_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr); mp_limb_t mpn_sb_divappr_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr); mp_limb_t mpn_dc_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t); mp_limb_t mpn_dc_div_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t); mp_limb_t mpn_preinv_dc_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr); mp_limb_t mpn_dc_divappr_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t); mp_limb_t mpn_preinv_dc_divappr_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr); mp_limb_t mpn_mu_div_qr (mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); mp_size_t mpn_mu_div_qr_itch (mp_size_t, mp_size_t, int); void mpn_preinv_mu_div_qr (mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); mp_limb_t mpn_mu_divappr_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); mp_size_t mpn_mu_divappr_q_itch (mp_size_t, mp_size_t, int); void mpn_preinv_mu_divappr_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); mp_limb_t mpn_mu_div_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); void mpn_invert (mp_ptr, mp_srcptr, mp_size_t); void mpn_binvert (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); mp_size_t mpn_binvert_itch (mp_size_t); mp_limb_t mpn_sb_bdiv_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); void mpn_sb_bdiv_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); mp_limb_t mpn_dc_bdiv_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); mp_size_t mpn_dc_bdiv_qr_n_itch (mp_size_t n); mp_limb_t mpn_dc_bdiv_qr_n (mp_ptr qp, mp_ptr np, mp_srcptr dp, mp_size_t n, mp_limb_t dinv, mp_ptr tp); void mpn_dc_bdiv_q (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); mp_size_t mpn_dc_bdiv_q_n_itch (mp_size_t n); void mpn_dc_bdiv_q_n (mp_ptr qp, mp_ptr np, mp_srcptr dp, mp_size_t n, mp_limb_t dinv, mp_ptr tp); void mpn_mu_bdiv_q (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); mp_size_t mpn_mu_bdiv_q_itch (mp_size_t, mp_size_t); void mpn_divexact (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr); mp_size_t mpn_divexact_itch (mp_size_t, mp_size_t); #ifndef HAVE_NATIVE_mpn_sub_nc #undef mpn_sub_nc static inline mp_limb_t mpn_sub_nc (mp_ptr rp, mp_srcptr up, mp_srcptr vp, mp_size_t n, mp_limb_t ci) { mp_limb_t co; co = mpn_sub_n (rp, up, vp, n); co += mpn_sub_1 (rp, rp, n, ci); return co; } #endif #define binvert_limb(x,y) modlimb_invert(x,y) #endif /* _NEW_H */