+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
/* 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
}
\f
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))