On Fri, Sep 26, 2014 at 11:07:28AM +0200, FX wrote: > > Thus, the middle-end assumes that if you have __builtin_{isfinite,isnormal}, > > you also have __builtin_is{less,greater}equal builtins too. > > Many thanks to both of you! I wasn’t looking into the right place at all. I > defined them, and now it works. > > One related question: the __builtin_signbit is not type generic, is there > any reason for it not to be? Is there any reason for it not to be? I ask
I guess history, builtins that were added earlier when we didn't have any typegeneric builtins were all *{f,,l} etc. suffixed. As they are used quite heavily in user code, it is too late to change that. Just look at what glibc <math.h> does for years: /* Return nonzero value if sign of X is negative. */ # ifdef __NO_LONG_DOUBLE_MATH # define signbit(x) \ (sizeof (x) == sizeof (float) ? __signbitf (x) : __signbit (x)) # else # define signbit(x) \ (sizeof (x) == sizeof (float) \ ? __signbitf (x) \ : sizeof (x) == sizeof (double) \ ? __signbit (x) : __signbitl (x)) # endif We can't stop supporting that. Jakub