__builtin_constant_p for trivial operations
Marc Glisse
marc.glisse at inria.fr
Sat Sep 17 09:27:46 CEST 2011
On Sun, 20 Feb 2011, Torbjorn Granlund wrote:
> Marc Glisse <marc.glisse at inria.fr> writes:
>
> would something like the attached ugliness be acceptable? (don't take
> it as a real patch, it wasn't properly tested and is incomplete)
>
> I think we cannot change e.g. mpz_add_ui from a function to a macro,
> since we have documented it as a function. There are surely programs
> out there which make a function pointer, perhaps through a function
> table, to mpz_add_ui.
Actually, something similar should still be possible:
#define __gmpz_add_ui(X,Y,Z) \
__builtin_constant_p(Z) ? ... : (__gmpz_add_ui)(X,Y,Z)
lets &__gmpz_add_ui return the address to the library function. And no
inline function ;-)
> The goal is that, if I have a C++ mpz_class variable z, z*=-1 and z/2
> get translated to mpz_neg and mpz_tdiv_q_2exp instead of mpz_mul_si
> and mpz_tdiv_q_ui. With zero runtime penalty.
>
> Could that not be made at the C++ level?
That's what I did a few weeks ago, as you may have seen in the commits.
--
Marc Glisse
More information about the gmp-discuss
mailing list