Fix fnspec of math builtins

* 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.
This commit is contained in:
Jan Hubicka 2020-10-27 09:51:56 +01:00
parent e94de06fd6
commit 0365b9e4af
2 changed files with 9 additions and 2 deletions

View File

@ -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, \

View File

@ -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"