Torbjorn Granlund <t...@gmplib.org> writes: > Which tail call?
In the normalized case, the checked in mpn_div_qr_1 does something like *qh = ...; ... return mpn_div_qr_1n_pi1(...); Which is a nice tail call. With the struct-returning version one gets instead res.qh = ...; ... res.r = mpn_div_qr_1n_pi1(...); return res; which I don't think the compiler has any chance of turning into a tail call. > Should we unconfuse ourselves and users about what type of inverse is to > be passed? The "pi1" moniker might be replaced. How many one-limb > inverse types do we currently consider? It would make some sense to me to do like the mod_1_* functions, and have a corresponding _cps function precomputing anything needed. The ABI then says nothing about the details, only that a maximum of 4 (say) precomputed limbs will be used. For the fancy div_qr_1 algorithm, what's needed is the same old reciprocal dinv = (B^2-1)/d - B, and B^2 - d*(B+dinv), same as for mod_1_1. And shiftcount, in the unnormalized case. Regards, /Niels -- Niels Möller. PGP-encrypted email is preferred. Keyid C0B98E26. Internet email is subject to wholesale government surveillance. _______________________________________________ gmp-devel mailing list gmp-devel@gmplib.org http://gmplib.org/mailman/listinfo/gmp-devel