aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2022-10-31 09:07:04 +0100
committerJakub Jelinek <jakub@redhat.com>2022-10-31 09:07:04 +0100
commit29490c2a1dc00944f2420eb59374705f180a2e53 (patch)
treed7575bdac07e30c9f98048935e939b6fa568a5ca
parent7f940822816917fea276654514eccdc8eacd5e93 (diff)
downloadgcc-29490c2a1dc00944f2420eb59374705f180a2e53.zip
gcc-29490c2a1dc00944f2420eb59374705f180a2e53.tar.gz
gcc-29490c2a1dc00944f2420eb59374705f180a2e53.tar.bz2
builtins: Add __builtin_nextafterf16b builtin
The following patch adds another needed builtin. The earlier patch adds among other things __builtin_nextafterf16 builtin which we need in order to constexpr evaluate std::nextafter(_Float16) overload (patch for that has been posted already). While there is inline implementation of the overload, it isn't constant evaluation friendly, and the builtin doesn't need libm implementation because it will be used only during constant expression evaluation. We need the same thing also for std::nextafter(__gnu_cxx::__bfloat16_t) though and this patch does that. 2022-10-31 Jakub Jelinek <jakub@redhat.com> * builtin-types.def (BT_FN_BFLOAT16_BFLOAT16_BFLOAT16): New. * builtins.def (BUILT_IN_NEXTAFTERF16B): New builtin. * fold-const-call.cc (fold_const_call_sss): Handle CFN_BUILT_IN_NEXTAFTERF16B.
-rw-r--r--gcc/builtin-types.def2
-rw-r--r--gcc/builtins.def1
-rw-r--r--gcc/fold-const-call.cc1
3 files changed, 4 insertions, 0 deletions
diff --git a/gcc/builtin-types.def b/gcc/builtin-types.def
index 2dbed8a..81460e1 100644
--- a/gcc/builtin-types.def
+++ b/gcc/builtin-types.def
@@ -461,6 +461,8 @@ DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT64X_FLOAT64X_FLOAT64X,
BT_FLOAT64X, BT_FLOAT64X, BT_FLOAT64X)
DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT128X_FLOAT128X_FLOAT128X,
BT_FLOAT128X, BT_FLOAT128X, BT_FLOAT128X)
+DEF_FUNCTION_TYPE_2 (BT_FN_BFLOAT16_BFLOAT16_BFLOAT16,
+ BT_BFLOAT16, BT_BFLOAT16, BT_BFLOAT16)
DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_FLOATPTR,
BT_FLOAT, BT_FLOAT, BT_FLOAT_PTR)
DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_DOUBLEPTR,
diff --git a/gcc/builtins.def b/gcc/builtins.def
index 42c005a..4997315 100644
--- a/gcc/builtins.def
+++ b/gcc/builtins.def
@@ -591,6 +591,7 @@ DEF_C99_BUILTIN (BUILT_IN_NEXTAFTERF, "nextafterf", BT_FN_FLOAT_FLOAT_FLO
DEF_C99_BUILTIN (BUILT_IN_NEXTAFTERL, "nextafterl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_ERRNO)
#define NEXTAFTER_TYPE(F) BT_FN_##F##_##F##_##F
DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_NEXTAFTER, "nextafter", NEXTAFTER_TYPE, ATTR_MATHFN_ERRNO)
+DEF_GCC_BUILTIN (BUILT_IN_NEXTAFTERF16B, "nextafterf16b", BT_FN_BFLOAT16_BFLOAT16_BFLOAT16, ATTR_MATHFN_ERRNO)
DEF_C99_BUILTIN (BUILT_IN_NEXTTOWARD, "nexttoward", BT_FN_DOUBLE_DOUBLE_LONGDOUBLE, ATTR_MATHFN_ERRNO)
DEF_C99_BUILTIN (BUILT_IN_NEXTTOWARDF, "nexttowardf", BT_FN_FLOAT_FLOAT_LONGDOUBLE, ATTR_MATHFN_ERRNO)
DEF_C99_BUILTIN (BUILT_IN_NEXTTOWARDL, "nexttowardl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_ERRNO)
diff --git a/gcc/fold-const-call.cc b/gcc/fold-const-call.cc
index 5f15815..ab1b098 100644
--- a/gcc/fold-const-call.cc
+++ b/gcc/fold-const-call.cc
@@ -1438,6 +1438,7 @@ fold_const_call_sss (real_value *result, combined_fn fn,
CASE_CFN_NEXTAFTER:
CASE_CFN_NEXTAFTER_FN:
+ case CFN_BUILT_IN_NEXTAFTERF16B:
CASE_CFN_NEXTTOWARD:
return fold_const_nextafter (result, arg0, arg1, format);