bodrato at mail.dm.unipi.it
Thu Aug 20 06:07:42 UTC 2015
On Sun, August 16, 2015 11:50 pm, Torbjörn Granlund wrote:
> On Sat, August 15, 2015 12:37 pm, Vincent Delecroix wrote:
> > it would be convenient to have a GMP function
> > int mpq_cmp_z(mpq_t, mpz_t)
> We might consider some code sharing between the mpq_cmp and this
> function, they look very similar.
Maybe I've found a good sharing strategy...
mpq_cmp_maybe_z (mpq_srcptr op1, mpq_srcptr op2, int op2_is_mpz)
mpq_cmp (mpq_srcptr op1, mpq_srcptr op2)
ASSERT (SIZ(DEN(op2) != 0));
return mpq_cmp_maybe_z (op1, op2,
(SIZ(DEN(op2)) | PTR(DEN(op2))) == CNST_LIMB(1));
mpq_cmp_z (mpq_srcptr op1, mpz_srcptr op2)
return mpq_cmp_maybe_z (op1, (mpq_srcptr) op2, 1);
This way gcc compiles the mpq_cmp_z function (on amd64) as:
movl $1, %edx
Is casting an mpz to an mpq, then accessing only the NUM() part of it,
I attach the proposed code, it adds four branches to the typical mpq_cmp
flow. One of them (checking if op1 is an integer) is not needed for
correctness. Please review!
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 5077 bytes
Desc: not available
More information about the gmp-devel