Commit b14446e2 by Steve Ellcey Committed by Steve Ellcey

ia64.c (ia64_builtin_decl): New.

2010-09-29  Steve Ellcey  <sje@cup.hp.com>

	* config/ia64/ia64.c (ia64_builtin_decl): New.
	(TARGET_BUILTIN_DECL): Define.
	(ia64_builtins): New.
	(ia64_init_builtins): Save decls in ia64_builtins.

From-SVN: r164734
parent 907c53bb
2010-09-29 Steve Ellcey <sje@cup.hp.com>
* config/ia64/ia64.c (ia64_builtin_decl): New.
(TARGET_BUILTIN_DECL): Define.
(ia64_builtins): New.
(ia64_init_builtins): Save decls in ia64_builtins.
2010-09-29 Bernd Schmidt <bernds@codesourcery.com> 2010-09-29 Bernd Schmidt <bernds@codesourcery.com>
PR target/40457 PR target/40457
...@@ -322,6 +322,7 @@ static void ia64_trampoline_init (rtx, tree, rtx); ...@@ -322,6 +322,7 @@ static void ia64_trampoline_init (rtx, tree, rtx);
static void ia64_override_options_after_change (void); static void ia64_override_options_after_change (void);
static void ia64_dwarf_handle_frame_unspec (const char *, rtx, int); static void ia64_dwarf_handle_frame_unspec (const char *, rtx, int);
static tree ia64_builtin_decl (unsigned, bool);
/* Table of valid machine attributes. */ /* Table of valid machine attributes. */
static const struct attribute_spec ia64_attribute_table[] = static const struct attribute_spec ia64_attribute_table[] =
...@@ -347,6 +348,9 @@ static const struct attribute_spec ia64_attribute_table[] = ...@@ -347,6 +348,9 @@ static const struct attribute_spec ia64_attribute_table[] =
#undef TARGET_EXPAND_BUILTIN #undef TARGET_EXPAND_BUILTIN
#define TARGET_EXPAND_BUILTIN ia64_expand_builtin #define TARGET_EXPAND_BUILTIN ia64_expand_builtin
#undef TARGET_BUILTIN_DECL
#define TARGET_BUILTIN_DECL ia64_builtin_decl
#undef TARGET_ASM_BYTE_OP #undef TARGET_ASM_BYTE_OP
#define TARGET_ASM_BYTE_OP "\tdata1\t" #define TARGET_ASM_BYTE_OP "\tdata1\t"
#undef TARGET_ASM_ALIGNED_HI_OP #undef TARGET_ASM_ALIGNED_HI_OP
...@@ -10033,14 +10037,18 @@ enum ia64_builtins ...@@ -10033,14 +10037,18 @@ enum ia64_builtins
IA64_BUILTIN_FABSQ, IA64_BUILTIN_FABSQ,
IA64_BUILTIN_FLUSHRS, IA64_BUILTIN_FLUSHRS,
IA64_BUILTIN_INFQ, IA64_BUILTIN_INFQ,
IA64_BUILTIN_HUGE_VALQ IA64_BUILTIN_HUGE_VALQ,
IA64_BUILTIN_max
}; };
static GTY(()) tree ia64_builtins[(int) IA64_BUILTIN_max];
void void
ia64_init_builtins (void) ia64_init_builtins (void)
{ {
tree fpreg_type; tree fpreg_type;
tree float80_type; tree float80_type;
tree decl;
/* The __fpreg type. */ /* The __fpreg type. */
fpreg_type = make_node (REAL_TYPE); fpreg_type = make_node (REAL_TYPE);
...@@ -10057,7 +10065,7 @@ ia64_init_builtins (void) ...@@ -10057,7 +10065,7 @@ ia64_init_builtins (void)
/* The __float128 type. */ /* The __float128 type. */
if (!TARGET_HPUX) if (!TARGET_HPUX)
{ {
tree ftype, decl; tree ftype;
tree float128_type = make_node (REAL_TYPE); tree float128_type = make_node (REAL_TYPE);
TYPE_PRECISION (float128_type) = 128; TYPE_PRECISION (float128_type) = 128;
...@@ -10066,13 +10074,15 @@ ia64_init_builtins (void) ...@@ -10066,13 +10074,15 @@ ia64_init_builtins (void)
/* TFmode support builtins. */ /* TFmode support builtins. */
ftype = build_function_type (float128_type, void_list_node); ftype = build_function_type (float128_type, void_list_node);
add_builtin_function ("__builtin_infq", ftype, decl = add_builtin_function ("__builtin_infq", ftype,
IA64_BUILTIN_INFQ, BUILT_IN_MD, IA64_BUILTIN_INFQ, BUILT_IN_MD,
NULL, NULL_TREE); NULL, NULL_TREE);
ia64_builtins[IA64_BUILTIN_INFQ] = decl;
add_builtin_function ("__builtin_huge_valq", ftype, decl = add_builtin_function ("__builtin_huge_valq", ftype,
IA64_BUILTIN_HUGE_VALQ, BUILT_IN_MD, IA64_BUILTIN_HUGE_VALQ, BUILT_IN_MD,
NULL, NULL_TREE); NULL, NULL_TREE);
ia64_builtins[IA64_BUILTIN_HUGE_VALQ] = decl;
ftype = build_function_type_list (float128_type, ftype = build_function_type_list (float128_type,
float128_type, float128_type,
...@@ -10081,6 +10091,7 @@ ia64_init_builtins (void) ...@@ -10081,6 +10091,7 @@ ia64_init_builtins (void)
IA64_BUILTIN_FABSQ, BUILT_IN_MD, IA64_BUILTIN_FABSQ, BUILT_IN_MD,
"__fabstf2", NULL_TREE); "__fabstf2", NULL_TREE);
TREE_READONLY (decl) = 1; TREE_READONLY (decl) = 1;
ia64_builtins[IA64_BUILTIN_FABSQ] = decl;
ftype = build_function_type_list (float128_type, ftype = build_function_type_list (float128_type,
float128_type, float128_type,
...@@ -10090,6 +10101,7 @@ ia64_init_builtins (void) ...@@ -10090,6 +10101,7 @@ ia64_init_builtins (void)
IA64_BUILTIN_COPYSIGNQ, BUILT_IN_MD, IA64_BUILTIN_COPYSIGNQ, BUILT_IN_MD,
"__copysigntf3", NULL_TREE); "__copysigntf3", NULL_TREE);
TREE_READONLY (decl) = 1; TREE_READONLY (decl) = 1;
ia64_builtins[IA64_BUILTIN_COPYSIGNQ] = decl;
} }
else else
/* Under HPUX, this is a synonym for "long double". */ /* Under HPUX, this is a synonym for "long double". */
...@@ -10107,13 +10119,15 @@ ia64_init_builtins (void) ...@@ -10107,13 +10119,15 @@ ia64_init_builtins (void)
add_builtin_function ((name), (type), (code), BUILT_IN_MD, \ add_builtin_function ((name), (type), (code), BUILT_IN_MD, \
NULL, NULL_TREE) NULL, NULL_TREE)
def_builtin ("__builtin_ia64_bsp", decl = def_builtin ("__builtin_ia64_bsp",
build_function_type (ptr_type_node, void_list_node), build_function_type (ptr_type_node, void_list_node),
IA64_BUILTIN_BSP); IA64_BUILTIN_BSP);
ia64_builtins[IA64_BUILTIN_BSP] = decl;
def_builtin ("__builtin_ia64_flushrs", decl = def_builtin ("__builtin_ia64_flushrs",
build_function_type (void_type_node, void_list_node), build_function_type (void_type_node, void_list_node),
IA64_BUILTIN_FLUSHRS); IA64_BUILTIN_FLUSHRS);
ia64_builtins[IA64_BUILTIN_FLUSHRS] = decl;
#undef def_builtin #undef def_builtin
...@@ -10183,6 +10197,17 @@ ia64_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, ...@@ -10183,6 +10197,17 @@ ia64_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
return NULL_RTX; return NULL_RTX;
} }
/* Return the ia64 builtin for CODE. */
static tree
ia64_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
{
if (code >= IA64_BUILTIN_max)
return error_mark_node;
return ia64_builtins[code];
}
/* For the HP-UX IA64 aggregate parameters are passed stored in the /* For the HP-UX IA64 aggregate parameters are passed stored in the
most significant bits of the stack slot. */ most significant bits of the stack slot. */
......
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