+2015-08-24 Richard Sandiford <richard.sandiford@arm.com>
+
+ * target-insns.def (movstr): New pattern.
+ * builtins.c (HAVE_movstr, CODE_FOR_movstr): Delete.
+ (expand_movstr): Use targetm rather than HAVE_movstr/
+ CODE_FOR_movstr.
+
2015-08-24 Richard Sandiford <richard.sandiford@arm.com>
* config/microblaze/microblaze.c (microblaze_classify_unspec): Fix
}
}
-#ifndef HAVE_movstr
-# define HAVE_movstr 0
-# define CODE_FOR_movstr CODE_FOR_nothing
-#endif
-
/* Expand into a movstr instruction, if one is available. Return NULL_RTX if
we failed, the caller should emit a normal call, otherwise try to
get the result in TARGET, if convenient. If ENDP is 0 return the
rtx dest_mem;
rtx src_mem;
- if (!HAVE_movstr)
+ if (!targetm.have_movstr ())
return NULL_RTX;
dest_mem = get_memory_rtx (dest, NULL);
create_output_operand (&ops[0], endp ? target : NULL_RTX, Pmode);
create_fixed_operand (&ops[1], dest_mem);
create_fixed_operand (&ops[2], src_mem);
- if (!maybe_expand_insn (CODE_FOR_movstr, 3, ops))
+ if (!maybe_expand_insn (targetm.code_for_movstr, 3, ops))
return NULL_RTX;
if (endp && target != const0_rtx)
DEF_TARGET_INSN (mem_signal_fence, (rtx x0))
DEF_TARGET_INSN (mem_thread_fence, (rtx x0))
DEF_TARGET_INSN (memory_barrier, (void))
+DEF_TARGET_INSN (movstr, (rtx x0, rtx x1, rtx x2))
DEF_TARGET_INSN (nonlocal_goto, (rtx x0, rtx x1, rtx x2, rtx x3))
DEF_TARGET_INSN (nonlocal_goto_receiver, (void))
DEF_TARGET_INSN (prefetch, (rtx x0, rtx x1, rtx x2))