target-insns.def (stack_protect_set, [...]): New targetm instruction patterns.
authorRichard Sandiford <richard.sandiford@arm.com>
Sun, 5 Jul 2015 07:56:45 +0000 (07:56 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sun, 5 Jul 2015 07:56:45 +0000 (07:56 +0000)
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
gcc/cfgexpand.c
gcc/function.c
gcc/target-insns.def

index c1a7abbd3841d37019af2ce4b4279aa7dcab2320..6f077c7a5d9fecfd94532eb4d0736b502c83b27e 100644 (file)
@@ -1,3 +1,11 @@
+2015-07-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * 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  <richard.sandiford@arm.com>
 
        * expr.h (gen_move_insn_uncast): Delete.
index 05eb2ad513540694215bdbf9b92601b50e179057..4f9a31dbaefc66d932a9576ac22a1bca9e38ab0a 100644 (file)
@@ -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);
index 8134c4e7067d6c356a11340d90cb5c0fa7a75d9a..2c9deac047f19841412aba4d469389ac51d1c282 100644 (file)
@@ -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 */
index 12994d36ed40826316441b8cbeca0cf64d1b1cff..6aae708abf7185f2fb3cb0a5741dc230a6e4548f 100644 (file)
@@ -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))