A simple conversion. Tested on x86_64-linux-gnu. Also tested by building one target per cpu directory and checking that there were no changes in the assembly output for gcc.dg, g++.dg and gcc.c-torture. Committed as preapproved.
Thanks, Richard gcc/ * 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. diff --git a/gcc/builtins.c b/gcc/builtins.c index bac28ef..d79372c 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -3434,11 +3434,6 @@ expand_builtin_mempcpy_args (tree dest, tree src, tree len, } } -#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 @@ -3453,7 +3448,7 @@ expand_movstr (tree dest, tree src, rtx target, int endp) rtx dest_mem; rtx src_mem; - if (!HAVE_movstr) + if (!targetm.have_movstr ()) return NULL_RTX; dest_mem = get_memory_rtx (dest, NULL); @@ -3467,7 +3462,7 @@ expand_movstr (tree dest, tree src, rtx target, int endp) 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) diff --git a/gcc/target-insns.def b/gcc/target-insns.def index e94b1de..00e0027 100644 --- a/gcc/target-insns.def +++ b/gcc/target-insns.def @@ -61,6 +61,7 @@ DEF_TARGET_INSN (load_multiple, (rtx x0, rtx x1, rtx x2)) 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))