From c65aa0429d688103b446a7cb2985c351b52071f3 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Sun, 5 Jul 2015 07:56:45 +0000 Subject: [PATCH] target-insns.def (stack_protect_set, [...]): New targetm instruction patterns. gcc/ * target-insns.def (stack_protect_set, stack_protect_test): New targetm instruction patterns. * cfgexpand.c (stack_protect_prologue): Use them instead of HAVE_*/gen_* interface. * function.c (stack_protect_epilogue): Likewise. From-SVN: r225428 --- gcc/ChangeLog | 8 ++++++++ gcc/cfgexpand.c | 20 ++++++-------------- gcc/function.c | 12 +++--------- gcc/target-insns.def | 2 ++ 4 files changed, 19 insertions(+), 23 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c1a7abbd384..6f077c7a5d9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-07-05 Richard Sandiford + + * target-insns.def (stack_protect_set, stack_protect_test): New + targetm instruction patterns. + * cfgexpand.c (stack_protect_prologue): Use them instead of + HAVE_*/gen_* interface. + * function.c (stack_protect_epilogue): Likewise. + 2015-07-05 Richard Sandiford * expr.h (gen_move_insn_uncast): Delete. diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 05eb2ad5135..4f9a31dbaef 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -5767,11 +5767,6 @@ expand_main_function (void) /* Expand code to initialize the stack_protect_guard. This is invoked at the beginning of a function to be protected. */ -#ifndef HAVE_stack_protect_set -# define HAVE_stack_protect_set 0 -# define gen_stack_protect_set(x,y) (gcc_unreachable (), NULL_RTX) -#endif - static void stack_protect_prologue (void) { @@ -5783,15 +5778,12 @@ stack_protect_prologue (void) /* Allow the target to copy from Y to X without leaking Y into a register. */ - if (HAVE_stack_protect_set) - { - rtx insn = gen_stack_protect_set (x, y); - if (insn) - { - emit_insn (insn); - return; - } - } + if (targetm.have_stack_protect_set ()) + if (rtx_insn *insn = targetm.gen_stack_protect_set (x, y)) + { + emit_insn (insn); + return; + } /* Otherwise do a straight move. */ emit_move_insn (x, y); diff --git a/gcc/function.c b/gcc/function.c index 8134c4e7067..2c9deac047f 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -4874,11 +4874,6 @@ init_function_start (tree subr) /* Expand code to verify the stack_protect_guard. This is invoked at the end of a function to be protected. */ -#ifndef HAVE_stack_protect_test -# define HAVE_stack_protect_test 0 -# define gen_stack_protect_test(x, y, z) (gcc_unreachable (), NULL_RTX) -#endif - void stack_protect_epilogue (void) { @@ -4891,13 +4886,12 @@ stack_protect_epilogue (void) /* Allow the target to compare Y with X without leaking either into a register. */ - switch (HAVE_stack_protect_test != 0) + switch (targetm.have_stack_protect_test ()) { case 1: - tmp = gen_stack_protect_test (x, y, label); - if (tmp) + if (rtx_insn *seq = targetm.gen_stack_protect_test (x, y, label)) { - emit_insn (tmp); + emit_insn (seq); break; } /* FALLTHRU */ diff --git a/gcc/target-insns.def b/gcc/target-insns.def index 12994d36ed4..6aae708abf7 100644 --- a/gcc/target-insns.def +++ b/gcc/target-insns.def @@ -55,6 +55,8 @@ DEF_TARGET_INSN (save_stack_function, (rtx x0, rtx x1)) DEF_TARGET_INSN (save_stack_nonlocal, (rtx x0, rtx x1)) DEF_TARGET_INSN (sibcall_epilogue, (void)) DEF_TARGET_INSN (simple_return, (void)) +DEF_TARGET_INSN (stack_protect_set, (rtx x0, rtx x1)) +DEF_TARGET_INSN (stack_protect_test, (rtx x0, rtx x1, rtx x2)) DEF_TARGET_INSN (store_multiple, (rtx x0, rtx x1, rtx x2)) DEF_TARGET_INSN (tablejump, (rtx x0, rtx x1)) DEF_TARGET_INSN (trap, (void)) -- 2.30.2