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"

Reply via email to