Commit c6762423 by Michael Meissner Committed by Michael Meissner

builtins.def (DEF_FLOATN_BUILTIN): Change most _Float<N> and _Float<N>X built-in…

builtins.def (DEF_FLOATN_BUILTIN): Change most _Float<N> and _Float<N>X built-in functions so that the variant...

2017-10-31  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* builtins.def (DEF_FLOATN_BUILTIN): Change most _Float<N> and
	_Float<N>X built-in functions so that the variant without the
	"__builtin_" prefix is only enabled for the GNU C and Objective C
	languages when they are in non-strict ANSI/ISO mode.
	(DEF_EXT_LIB_FLOATN_NX_BUILTINS): Likewise.
	* target.def (floatn_builtin_p): Add a target hook to control
	whether _Float<N> and _Float<N>X built-in functions without the
	"__builtin_" prefix are enabled, and return true for C and
	Objective C in the default hook.  Include langhooks.h in
	targhooks.c.
	* targhooks.h (default_floatn_builtin_p): Likewise.
	* targhooks.c (default_floatn_builtin_p): Likewise.
	* doc/tm.texi.in (TARGET_FLOATN_BUILTIN_P): Document the
	floatn_builtin_p target hook.
	* doc/tm.texi (TARGET_FLOATN_BUILTIN_P): Likewise.

From-SVN: r254277
parent 6ff16d19
2017-10-31 Michael Meissner <meissner@linux.vnet.ibm.com>
* builtins.def (DEF_FLOATN_BUILTIN): Change most _Float<N> and
_Float<N>X built-in functions so that the variant without the
"__builtin_" prefix is only enabled for the GNU C and Objective C
languages when they are in non-strict ANSI/ISO mode.
(DEF_EXT_LIB_FLOATN_NX_BUILTINS): Likewise.
* target.def (floatn_builtin_p): Add a target hook to control
whether _Float<N> and _Float<N>X built-in functions without the
"__builtin_" prefix are enabled, and return true for C and
Objective C in the default hook. Include langhooks.h in
targhooks.c.
* targhooks.h (default_floatn_builtin_p): Likewise.
* targhooks.c (default_floatn_builtin_p): Likewise.
* doc/tm.texi.in (TARGET_FLOATN_BUILTIN_P): Document the
floatn_builtin_p target hook.
* doc/tm.texi (TARGET_FLOATN_BUILTIN_P): Likewise.
2017-10-31 Matthew Fortune <matthew.fortune@imgtec.com>
Eric Botcazou <ebotcazou@adacore.com>
......@@ -130,18 +130,26 @@ along with GCC; see the file COPYING3. If not see
/* A set of GCC builtins for _FloatN and _FloatNx types. TYPE_MACRO is called
with an argument such as FLOAT32 to produce the enum value for the type. If
we are being fully conformant we ignore the version of these builtins that
does not being with __builtin_. */
we are compiling for the C language with GNU extensions, we enable the name
without the __builtin_ prefix as well as the name with the __builtin_
prefix. C++ does not enable these names by default because they don't have
the _Float<N> and _Float<N>X keywords, and a class based library should use
the __builtin_ names. */
#undef DEF_FLOATN_BUILTIN
#define DEF_FLOATN_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE, \
targetm.floatn_builtin_p ((int) ENUM), true, true, ATTRS, \
false, true)
#undef DEF_EXT_LIB_FLOATN_NX_BUILTINS
#define DEF_EXT_LIB_FLOATN_NX_BUILTINS(ENUM, NAME, TYPE_MACRO, ATTRS) \
DEF_EXT_LIB_BUILTIN (ENUM ## F16, NAME "f16", TYPE_MACRO (FLOAT16), ATTRS) \
DEF_EXT_LIB_BUILTIN (ENUM ## F32, NAME "f32", TYPE_MACRO (FLOAT32), ATTRS) \
DEF_EXT_LIB_BUILTIN (ENUM ## F64, NAME "f64", TYPE_MACRO (FLOAT64), ATTRS) \
DEF_EXT_LIB_BUILTIN (ENUM ## F128, NAME "f128", TYPE_MACRO (FLOAT128), ATTRS)\
DEF_EXT_LIB_BUILTIN (ENUM ## F32X, NAME "f32x", TYPE_MACRO (FLOAT32X), ATTRS)\
DEF_EXT_LIB_BUILTIN (ENUM ## F64X, NAME "f64x", TYPE_MACRO (FLOAT64X), ATTRS)\
DEF_EXT_LIB_BUILTIN (ENUM ## F128X, NAME "f128x", TYPE_MACRO (FLOAT128X), \
ATTRS)
#define DEF_EXT_LIB_FLOATN_NX_BUILTINS(ENUM, NAME, TYPE_MACRO, 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) \
DEF_FLOATN_BUILTIN (ENUM ## F128, NAME "f128", TYPE_MACRO (FLOAT128), ATTRS) \
DEF_FLOATN_BUILTIN (ENUM ## F32X, NAME "f32x", TYPE_MACRO (FLOAT32X), ATTRS) \
DEF_FLOATN_BUILTIN (ENUM ## F64X, NAME "f64x", TYPE_MACRO (FLOAT64X), ATTRS) \
DEF_FLOATN_BUILTIN (ENUM ## F128X, NAME "f128x", TYPE_MACRO (FLOAT128X), \
ATTRS)
/* Like DEF_LIB_BUILTIN, except that the function is only a part of
the standard in C94 or above. */
......
......@@ -4284,6 +4284,17 @@ ISO/IEC TS 18661-3:2015; that is, @var{n} is one of 32, 64, 128, or,
if @var{extended} is false, 16 or greater than 128 and a multiple of 32.
@end deftypefn
@deftypefn {Target Hook} bool TARGET_FLOATN_BUILTIN_P (int @var{func})
Define this to return true if the @code{_Float@var{n}} and
@code{_Float@var{n}x} built-in functions should implicitly enable the
built-in function without the @code{__builtin_} prefix in addition to the
normal built-in function with the @code{__builtin_} prefix. The default is
to only enable built-in functions without the @code{__builtin_} prefix for
the GNU C langauge. In strict ANSI/ISO mode, the built-in function without
the @code{__builtin_} prefix is not enabled. The argument @code{FUNC} is the
@code{enum built_in_function} id of the function to be enabled.
@end deftypefn
@deftypefn {Target Hook} bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P (machine_mode @var{mode})
Define this to return nonzero for machine modes for which the port has
small register classes. If this target hook returns nonzero for a given
......
......@@ -3326,6 +3326,8 @@ stack.
@hook TARGET_FLOATN_MODE
@hook TARGET_FLOATN_BUILTIN_P
@hook TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P
@node Scalar Return
......
......@@ -3458,6 +3458,19 @@ if @var{extended} is false, 16 or greater than 128 and a multiple of 32.",
opt_scalar_float_mode, (int n, bool extended),
default_floatn_mode)
DEFHOOK
(floatn_builtin_p,
"Define this to return true if the @code{_Float@var{n}} and\n\
@code{_Float@var{n}x} built-in functions should implicitly enable the\n\
built-in function without the @code{__builtin_} prefix in addition to the\n\
normal built-in function with the @code{__builtin_} prefix. The default is\n\
to only enable built-in functions without the @code{__builtin_} prefix for\n\
the GNU C langauge. In strict ANSI/ISO mode, the built-in function without\n\
the @code{__builtin_} prefix is not enabled. The argument @code{FUNC} is the\n\
@code{enum built_in_function} id of the function to be enabled.",
bool, (int func),
default_floatn_builtin_p)
/* Compute cost of moving data from a register of class FROM to one of
TO, using MODE. */
DEFHOOK
......
......@@ -81,7 +81,7 @@ along with GCC; see the file COPYING3. If not see
#include "predict.h"
#include "params.h"
#include "real.h"
#include "langhooks.h"
bool
default_legitimate_address_p (machine_mode mode ATTRIBUTE_UNUSED,
......@@ -563,6 +563,28 @@ default_floatn_mode (int n, bool extended)
return opt_scalar_float_mode ();
}
/* Define this to return true if the _Floatn and _Floatnx built-in functions
should implicitly enable the built-in function without the __builtin_ prefix
in addition to the normal built-in function with the __builtin_ prefix. The
default is to only enable built-in functions without the __builtin_ prefix
for the GNU C langauge. The argument FUNC is the enum builtin_in_function
id of the function to be enabled. */
bool
default_floatn_builtin_p (int func ATTRIBUTE_UNUSED)
{
static bool first_time_p = true;
static bool c_or_objective_c;
if (first_time_p)
{
first_time_p = false;
c_or_objective_c = lang_GNU_C () || lang_GNU_OBJC ();
}
return c_or_objective_c;
}
/* Make some target macros useable by target-independent code. */
bool
targhook_words_big_endian (void)
......
......@@ -75,6 +75,7 @@ extern tree default_mangle_assembler_name (const char *);
extern bool default_scalar_mode_supported_p (scalar_mode);
extern bool default_libgcc_floating_mode_supported_p (scalar_float_mode);
extern opt_scalar_float_mode default_floatn_mode (int, bool);
extern bool default_floatn_builtin_p (int);
extern bool targhook_words_big_endian (void);
extern bool targhook_float_words_big_endian (void);
extern bool default_float_exceptions_rounding_supported_p (void);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment