aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-07-05 07:49:16 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-07-05 07:49:16 +0000
commit43c7dca8816e84a7b2d6caa10bed3c0a3c0c7e8e (patch)
tree6995c7c2cbb0c52c8f244f7d0153fd5b54927567 /gcc/builtins.c
parent95a3fb9de80862675c209a5db85fb8bffd1640e6 (diff)
downloadgcc-43c7dca8816e84a7b2d6caa10bed3c0a3c0c7e8e.zip
gcc-43c7dca8816e84a7b2d6caa10bed3c0a3c0c7e8e.tar.gz
gcc-43c7dca8816e84a7b2d6caa10bed3c0a3c0c7e8e.tar.bz2
target-insns.def (untyped_call, [...]): New targetm instruction patterns.
gcc/ * target-insns.def (untyped_call, untyped_return): New targetm instruction patterns. * builtins.c (expand_builtin_apply): Use them instead of HAVE_*/gen_* interface. (result_vector): Define unconditionally. From-SVN: r225423
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index c5a7980..f354694 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -104,9 +104,7 @@ static int target_char_cast (tree, char *);
static rtx get_memory_rtx (tree, tree);
static int apply_args_size (void);
static int apply_result_size (void);
-#if defined (HAVE_untyped_call) || defined (HAVE_untyped_return)
static rtx result_vector (int, rtx);
-#endif
static void expand_builtin_prefetch (tree);
static rtx expand_builtin_apply_args (void);
static rtx expand_builtin_apply_args_1 (void);
@@ -1448,7 +1446,6 @@ apply_result_size (void)
return size;
}
-#if defined (HAVE_untyped_call) || defined (HAVE_untyped_return)
/* Create a vector describing the result block RESULT. If SAVEP is true,
the result block is used to save the values; otherwise it is used to
restore the values. */
@@ -1477,7 +1474,6 @@ result_vector (int savep, rtx result)
}
return gen_rtx_PARALLEL (VOIDmode, gen_rtvec_v (nelts, savevec));
}
-#endif /* HAVE_untyped_call or HAVE_untyped_return */
/* Save the state required to perform an untyped call with the same
arguments as were passed to the current function. */
@@ -1698,12 +1694,13 @@ expand_builtin_apply (rtx function, rtx arguments, rtx argsize)
function = memory_address (FUNCTION_MODE, function);
/* Generate the actual call instruction and save the return value. */
-#ifdef HAVE_untyped_call
- if (HAVE_untyped_call)
- emit_call_insn (gen_untyped_call (gen_rtx_MEM (FUNCTION_MODE, function),
- result, result_vector (1, result)));
+ if (targetm.have_untyped_call ())
+ {
+ rtx mem = gen_rtx_MEM (FUNCTION_MODE, function);
+ emit_call_insn (targetm.gen_untyped_call (mem, result,
+ result_vector (1, result)));
+ }
else
-#endif
#ifdef HAVE_call_value
if (HAVE_call_value)
{
@@ -1767,14 +1764,13 @@ expand_builtin_return (rtx result)
apply_result_size ();
result = gen_rtx_MEM (BLKmode, result);
-#ifdef HAVE_untyped_return
- if (HAVE_untyped_return)
+ if (targetm.have_untyped_return ())
{
- emit_jump_insn (gen_untyped_return (result, result_vector (0, result)));
+ rtx vector = result_vector (0, result);
+ emit_jump_insn (targetm.gen_untyped_return (result, vector));
emit_barrier ();
return;
}
-#endif
/* Restore the return value and note that each value is used. */
size = 0;