1 Why should bf16 be modified to f16b?
--------------------------------------------------------------------------------------------------------------
diff --git a/gcc/c-family/c-cppbuiltin.cc b/gcc/c-family/c-cppbuiltin.cc
index a80372c8991..273bb9cf028 100644
--- a/gcc/c-family/c-cppbuiltin.cc
+++ b/gcc/c-family/c-cppbuiltin.cc
@@ -1422,7 +1422,7 @@ c_cpp_builtins (cpp_reader *pfile)
else if (bfloat16_type_node
&& mode == TYPE_MODE (bfloat16_type_node))
{
- memcpy (suffix, "bf16", 5);
+ memcpy (suffix, "f16b", 5);
memcpy (float_h_prefix, "BFLT16", 7);
}
else
--------------------------------------------------------------------------------------------------------------
There is such code:
--------------------------------------------------------------------------------------------------------------
DEF_C99_BUILTIN (BUILT_IN_LOGB, "logb", BT_FN_DOUBLE_DOUBLE,
ATTR_MATHFN_FPROUNDING_ERRNO)
DEF_C99_BUILTIN (BUILT_IN_LOGBF, "logbf", BT_FN_FLOAT_FLOAT,
ATTR_MATHFN_FPROUNDING_ERRNO)
--------------------------------------------------------------------------------------------------------------
bf16 and f16 will conflict when expanded, but f16b and f16 will not.
The previous code also used the symbol f16b:
--------------------------------------------------------------------------------------------------------------
-DEF_GCC_BUILTIN (BUILT_IN_NANSF16B, "nansf16b",
BT_FN_BFLOAT16_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
-DEF_GCC_BUILTIN (BUILT_IN_NEXTAFTERF16B, "nextafterf16b",
BT_FN_BFLOAT16_BFLOAT16_BFLOAT16, ATTR_MATHFN_ERRNO)
--------------------------------------------------------------------------------------------------------------
2 Why should BUILT_IN_NANSF16B and BUILT_IN_NEXTAFTERF16B be deleted?
--------------------------------------------------------------------------------------------------------------
-DEF_GCC_BUILTIN (BUILT_IN_NANSF16B, "nansf16b",
BT_FN_BFLOAT16_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
-DEF_GCC_BUILTIN (BUILT_IN_NEXTAFTERF16B, "nextafterf16b",
BT_FN_BFLOAT16_BFLOAT16_BFLOAT16, ATTR_MATHFN_ERRNO)
--------------------------------------------------------------------------------------------------------------
In the general macro definition, it has already been processed to remove
redundant code.
--------------------------------------------------------------------------------------------------------------
#define DEF_GCC_FLOATN_NX_BUILTINS(ENUM, NAME, TYPE_MACRO, ATTRS) \
+ DEF_GCC_BUILTIN (ENUM ## F16B, NAME "f16b", TYPE_MACRO (BFLOAT16), ATTRS) \
DEF_GCC_BUILTIN (ENUM ## F16, NAME "f16", TYPE_MACRO (FLOAT16), ATTRS) \
DEF_GCC_BUILTIN (ENUM ## F32, NAME "f32", TYPE_MACRO (FLOAT32), ATTRS) \
DEF_GCC_BUILTIN (ENUM ## F64, NAME "f64", TYPE_MACRO (FLOAT64), ATTRS) \
// and
#define DEF_EXT_LIB_FLOATN_NX_BUILTINS(ENUM, NAME, TYPE_MACRO, ATTRS) \
+ DEF_FLOATN_BUILTIN (ENUM ## F16B, NAME "f16b", TYPE_MACRO (BFLOAT16), ATTRS)
\
DEF_FLOATN_BUILTIN (ENUM ## F16, NAME "f16", TYPE_MACRO (FLOAT16), ATTRS) \
DEF_FLOATN_BUILTIN (ENUM ## F32, NAME "f32", TYPE_MACRO (FLOAT32), ATTRS) \
DEF_FLOATN_BUILTIN (ENUM ## F64, NAME "f64", TYPE_MACRO (FLOAT64), ATTRS) \
--------------------------------------------------------------------------------------------------------------
3 This modification will have an impact on all architectures that support BF16.
I have completed the following tests:
x86_64 bootstrap based on 18eb6ca136fcd22b381d222cab81265d812ea7b9 passed.
riscv64 bootstrap based on a59c4e496fa916cb9a484a649aa1b4cebd6550f2 passed.
The riscv64 regression passed.
Xiao Zeng (1):
RISC-V: Support BF16 interfaces in libgcc
gcc/builtin-types.def | 30 ++++++++++++++++++++++++++++++
gcc/builtins.cc | 6 ++++++
gcc/builtins.def | 22 +++++++++++-----------
gcc/c-family/c-cppbuiltin.cc | 2 +-
gcc/fold-const-call.cc | 2 --
gcc/gencfn-macros.cc | 5 +++--
gcc/match.pd | 9 ++++++---
gcc/tree.h | 2 +-
libgcc/Makefile.in | 6 +++---
libgcc/libgcc2.c | 20 ++++++++++++++------
libgcc/libgcc2.h | 14 ++++++++++++++
11 files changed, 89 insertions(+), 29 deletions(-)
--
2.43.0