support larger int types
drepper at gmail.com
Thu Oct 13 13:30:44 UTC 2016
On Wed, Oct 12, 2016 at 6:24 PM, Marc Glisse <marc.glisse at inria.fr> wrote:
> - there were plans to completely decouple the limb size from the size of
> long (the argument of mpz_*_si), so the same code could be used for
> different sizes (and so we could play with arbitrary limb sizes).
And having the various *_iNN and *_uNN should then be a boost and not
a negative, no?
> - the ABI should be relatively stable, the list of functions provided by
> libgmp should not be too random depending on the exact compiler and options
> used to build it.
Yep, I see that. Especially with the extended types. But this lowest
common denominator rule is holding back development.
> - I believe GMP still doesn't require a C99 compiler.
Except for passing of 64-bit numbers with some 32-bit compilers this
should not be an issue. The __int128 types are not in C99 or even C14
and therefore any support like this would go beyond standrd C anyway.
> (at some point, I was tempted to add long long support in the C++ wrapper,
> where it is easier because overloading and inlining avoid most ABI
That would work for me as well. It should be much less controversial.
> What does your interface look like? 2 new functions mpz_set_si128 and
Exactly the names I chose.
> Or did you also add fits_* and get_* functions? Or even the
> mixed operations like mpz_add_si128?
I have a growing number of these interfaces. So far I have setters,
comparison and arithmetic with integers, for mpz and mpq. Not a
complete set yet, since I don't need it so far, but simple versions
can be written fairly quickly.
> I assume an autoconf test would determine if the functions are compiled. In
> gmp.h, would we test the macro __SIZEOF_INT128__, or would we hard-code the
> result from autoconf?
Well, if the __int128 is not compiled in you cannot test macros in the
headers. So, the configure decision has to be remembered. In
addition __SIZEOF_INT128__ has to be checked at compile-time in case a
different compiler is used.
I can prepare an initial patch if there is consensus that such a
change is wanted. It might take a bit, travel and other projects.
The code I wrote so far certainly needs to be adapted to the GMP
More information about the gmp-discuss