Hello. I am trying to add fadd function variants and as fadd takes two arguments, the function should be called from fold_const_call_sss (). The function is closely modeled on function calls and cases according to real_nextafter (), also used gdb to look at backtrace. Although I have made changes according to real_nextafter, the function real_fadd is not called by the test program but real_nextafter does get called. I cant find any other places to add calls for fadd. What is missing? The patch is attached herewith. int main () { float x; x = __builtin_fadd (3.5,1.4); } Also, fadd function should not have faddf variant, but is introduced only for the sake. Thanks, -Tejas On Wed, 3 Jul 2019 at 18:29, Tejas Joshi wrote: > > Hello. > Functions like fadd, faddl take two arguments, do the addition and > return the answer in narrower precision than the argument type. The > thing that might be helpful is using the do_add function directly, if > appropriate? > The thing to consider about narrowed down return type is how it can be > achieved. The functions that operate on real numbers like real_round > and so on, do not consider the return type and do calculations on the > entire real number representation. So just defining these functions > and their return type in builtins.def and other appropriate places > would do the trick? > like: > BT_FN_FLOAT_DOUBLE_DOUBLE as return and argument type for FADD > > Or it has to be narrowed down by zeroing down the trailing > out-of-precision bits? > Also, if the addition or any one of the argument exceeds the return > size, the integer part of the addition would not fit in the narrowed > type. Like, 2^32 would easily fit in double but will lose its least > significant bit in float and become 2^31. How these types are supposed > to be handled? > > Thanks, > -Tejas