On Mon, 20 May 2019, Martin Jambor wrote:

> in addition to the things already pointed out by Joseph, I have the
> following comments.  But as Joseph has already pointed out, you should
> also test your patch on __float128 types, so please make sure your code
> gets invoked and works for something like:
> 
>     if (__builtin_roundevenf128 (0x1p64q+0.5) != (0x1p64q))
>       link_error (__LINE__);

 ... but with the f128 constant suffix not q, so it works on more 
architectures (all those with _Float128 support, not just those with older 
__float128 support).

> > +DEF_EXT_LIB_BUILTIN    (BUILT_IN_ROUNDEVEN, "roundeven", 
> > BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
> > +DEF_EXT_LIB_BUILTIN    (BUILT_IN_ROUNDEVENF, "roundevenf", 
> > BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
> > +DEF_EXT_LIB_BUILTIN    (BUILT_IN_ROUNDEVENL, "roundevenl", 
> > BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
> 
> ...and for the code to trigger for __builtin_roundevenf128 you have to
> define this builtin function too.  The easiest way is to do it in the
> same way it is done for BUILTIN_ROUND and many other functions, i.e. use
> DEF_EXT_LIB_FLOATN_NX_BUILTINS.

Also note that TS 18661-1 has been merged into C2X.  I haven't yet updated 
glibc headers to reflect this, but this means a new DEF_C2X_BUILTIN should 
be added similar to DEF_C11_BUILTIN, and used for those three new 
functions, instead of DEF_EXT_LIB_BUILTIN.  (And for the strdup and 
strndup built-in functions, also added to C2X, but that's independent of 
the present project.)

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to