On Tue, Oct 27, 2020 at 9:06 AM Jan Hubicka <hubi...@ucw.cz> wrote: > > > On Mon, 26 Oct 2020, Jan Hubicka wrote: > > > > > Hi, > > > this patch makes us to use ".C" and ".P" fnspecs where > > > applicable. I also noticed that gamma and variants are > > > declared as storing to memory while they are not (gamma_r does) > > > > I think the point is that they store to the global signgam. > > Ah, thanks for an explanation. Here is updated patch w/o the gamma > changes.
OK. Richard. > gcc/ChangeLog: > > 2020-10-26 Jan Hubicka <hubi...@ucw.cz> > > * builtin-attrs.def (STRERRNOC): New macro. > (STRERRNOP): New macro. > (ATTR_ERRNOCONST_NOTHROW_LEAF_LIST): New attr list. > (ATTR_ERRNOPURE_NOTHROW_LEAF_LIST): New attr list. > * builtins.def (ATTR_MATHFN_ERRNO): Use > ATTR_ERRNOCONST_NOTHROW_LEAF_LIST. > (ATTR_MATHFN_FPROUNDING_ERRNO): Use ATTR_ERRNOCONST_NOTHROW_LEAF_LIST > or ATTR_ERRNOPURE_NOTHROW_LEAF_LIST. > > diff --git a/gcc/builtin-attrs.def b/gcc/builtin-attrs.def > index 778bc8a43a1..087572412f4 100644 > --- a/gcc/builtin-attrs.def > +++ b/gcc/builtin-attrs.def > @@ -67,6 +67,8 @@ DEF_ATTR_FOR_INT (6) > DEF_ATTR_TREE_LIST (ATTR_LIST_##ENUM, ATTR_NULL, \ > ATTR_##ENUM, ATTR_NULL) > DEF_ATTR_FOR_STRING (STR1, "1 ") > +DEF_ATTR_FOR_STRING (STRERRNOC, ".C") > +DEF_ATTR_FOR_STRING (STRERRNOP, ".P") > #undef DEF_ATTR_FOR_STRING > > /* Construct a tree for a list of two integers. */ > @@ -136,6 +138,10 @@ DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_LIST, ATTR_CONST, > \ > ATTR_NULL, ATTR_NOTHROW_LIST) > DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_LEAF_LIST, ATTR_CONST, \ > ATTR_NULL, ATTR_NOTHROW_LEAF_LIST) > +DEF_ATTR_TREE_LIST (ATTR_ERRNOCONST_NOTHROW_LEAF_LIST, ATTR_FNSPEC,\ > + ATTR_LIST_STRERRNOC, ATTR_NOTHROW_LEAF_LIST) > +DEF_ATTR_TREE_LIST (ATTR_ERRNOPURE_NOTHROW_LEAF_LIST, ATTR_FNSPEC,\ > + ATTR_LIST_STRERRNOP, ATTR_NOTHROW_LEAF_LIST) > DEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_LIST, ATTR_PURE, \ > ATTR_NULL, ATTR_NOTHROW_LIST) > DEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_LEAF_LIST, ATTR_PURE, \ > diff --git a/gcc/builtins.def b/gcc/builtins.def > index 61aff89e658..b3bd96cef42 100644 > --- a/gcc/builtins.def > +++ b/gcc/builtins.def > @@ -254,7 +254,7 @@ along with GCC; see the file COPYING3. If not see > `errno'. If !flag_errno_math they are instead "const". */ > #undef ATTR_MATHFN_ERRNO > #define ATTR_MATHFN_ERRNO (flag_errno_math ? \ > - ATTR_NOTHROW_LEAF_LIST : ATTR_CONST_NOTHROW_LEAF_LIST) > + ATTR_ERRNOCONST_NOTHROW_LEAF_LIST : ATTR_CONST_NOTHROW_LEAF_LIST) > > /* Define an attribute list for math functions that are normally > "const" but if flag_rounding_math is set they are instead "pure". > @@ -271,7 +271,8 @@ along with GCC; see the file COPYING3. If not see > "const" depending on whether we care about FP rounding. */ > #undef ATTR_MATHFN_FPROUNDING_ERRNO > #define ATTR_MATHFN_FPROUNDING_ERRNO (flag_errno_math ? \ > - ATTR_NOTHROW_LEAF_LIST : ATTR_MATHFN_FPROUNDING) > + (flag_rounding_math ? ATTR_ERRNOPURE_NOTHROW_LEAF_LIST \ > + : ATTR_ERRNOCONST_NOTHROW_LEAF_LIST) : ATTR_MATHFN_FPROUNDING) > > /* Define an attribute list for math functions that need to mind FP > rounding, but because they store into memory they are never "const"