aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-07-28 19:50:22 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-07-28 19:50:22 +0000
commit902628047cb9763809ef2c3155cbf321e08c2656 (patch)
tree70d2e68d80216da241ce498d231faa1593ba57a9 /gcc
parentc1ddc8e9d86458e96e9e56751e87b6a76991fa58 (diff)
downloadgcc-902628047cb9763809ef2c3155cbf321e08c2656.zip
gcc-902628047cb9763809ef2c3155cbf321e08c2656.tar.gz
gcc-902628047cb9763809ef2c3155cbf321e08c2656.tar.bz2
target-insns.def (indirect_jump): New targetm instruction pattern.
gcc/ * target-insns.def (indirect_jump): New targetm instruction pattern. * optabs.c (emit_indirect_jump): Use it instead of HAVE_*/gen_* interface. From-SVN: r226321
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/optabs.c11
-rw-r--r--gcc/target-insns.def1
3 files changed, 12 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d1aca5d..90baee0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2015-07-28 Richard Sandiford <richard.sandiford@arm.com>
+ * target-insns.def (indirect_jump): New targetm instruction pattern.
+ * optabs.c (emit_indirect_jump): Use it instead of HAVE_*/gen_*
+ interface.
+
+2015-07-28 Richard Sandiford <richard.sandiford@arm.com>
+
* config/fr30/fr30.md (indirect_jump): Use pmode_register_operand
instead of nonimmediate_operand. Remove C condiition.
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 0719ba2..c27e244 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -4484,16 +4484,15 @@ prepare_float_lib_cmp (rtx x, rtx y, enum rtx_code comparison,
/* Generate code to indirectly jump to a location given in the rtx LOC. */
void
-emit_indirect_jump (rtx loc ATTRIBUTE_UNUSED)
+emit_indirect_jump (rtx loc)
{
-#ifndef HAVE_indirect_jump
- sorry ("indirect jumps are not available on this target");
-#else
+ if (!targetm.have_indirect_jump ())
+ sorry ("indirect jumps are not available on this target");
+
struct expand_operand ops[1];
create_address_operand (&ops[0], loc);
- expand_jump_insn (CODE_FOR_indirect_jump, 1, ops);
+ expand_jump_insn (targetm.code_for_indirect_jump, 1, ops);
emit_barrier ();
-#endif
}
diff --git a/gcc/target-insns.def b/gcc/target-insns.def
index 4f49ba6c..c125d68 100644
--- a/gcc/target-insns.def
+++ b/gcc/target-insns.def
@@ -44,6 +44,7 @@ DEF_TARGET_INSN (epilogue, (void))
DEF_TARGET_INSN (exception_receiver, (void))
DEF_TARGET_INSN (extv, (rtx x0, rtx x1, rtx x2, rtx x3))
DEF_TARGET_INSN (extzv, (rtx x0, rtx x1, rtx x2, rtx x3))
+DEF_TARGET_INSN (indirect_jump, (rtx x0))
DEF_TARGET_INSN (insv, (rtx x0, rtx x1, rtx x2, rtx x3))
DEF_TARGET_INSN (jump, (rtx x0))
DEF_TARGET_INSN (load_multiple, (rtx x0, rtx x1, rtx x2))