gcc/
authorRichard Sandiford <richard.sandiford@arm.com>
Sun, 5 Jul 2015 07:52:32 +0000 (07:52 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sun, 5 Jul 2015 07:52:32 +0000 (07:52 +0000)
* target-insns.def (restore_stack_block, restore_stack_function)
(restore_stack_nonlocal, save_stack_block, save_stack_function)
(save_stack_nonlocal): New targetm instruction patterns.
* builtins.c (expand_builtin_apply): Use them instead of
HAVE_*/gen_* interface.
* explow.c (emit_stack_save, emit_stack_restore): Likewise.

From-SVN: r225426

gcc/ChangeLog
gcc/builtins.c
gcc/explow.c
gcc/target-insns.def

index 848d4dbb68e6d5d2d5b1fd18a6b4496f0ee491b2..0185b6a987e5c6f8068f309d5b0095b6fa98d103 100644 (file)
@@ -1,3 +1,12 @@
+2015-07-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * target-insns.def (restore_stack_block, restore_stack_function)
+       (restore_stack_nonlocal, save_stack_block, save_stack_function)
+       (save_stack_nonlocal): New targetm instruction patterns.
+       * builtins.c (expand_builtin_apply): Use them instead of
+       HAVE_*/gen_* interface.
+       * explow.c (emit_stack_save, emit_stack_restore): Likewise.
+
 2015-07-05  Richard Sandiford  <richard.sandiford@arm.com>
 
        * target-insns.def (trap): New targetm instruction pattern.
index d953c634800620f308198f6a30dfe5081404b564..3110d0ae30fd613145c2e989d26e348741aa2589 100644 (file)
@@ -1611,11 +1611,9 @@ expand_builtin_apply (rtx function, rtx arguments, rtx argsize)
   NO_DEFER_POP;
 
   /* Save the stack with nonlocal if available.  */
-#ifdef HAVE_save_stack_nonlocal
-  if (HAVE_save_stack_nonlocal)
+  if (targetm.have_save_stack_nonlocal ())
     emit_stack_save (SAVE_NONLOCAL, &old_stack_level);
   else
-#endif
     emit_stack_save (SAVE_BLOCK, &old_stack_level);
 
   /* Allocate a block of memory onto the stack and copy the memory
@@ -1732,11 +1730,9 @@ expand_builtin_apply (rtx function, rtx arguments, rtx argsize)
   add_function_usage_to (call_insn, call_fusage);
 
   /* Restore the stack.  */
-#ifdef HAVE_save_stack_nonlocal
-  if (HAVE_save_stack_nonlocal)
+  if (targetm.have_save_stack_nonlocal ())
     emit_stack_restore (SAVE_NONLOCAL, old_stack_level);
   else
-#endif
     emit_stack_restore (SAVE_BLOCK, old_stack_level);
   fixup_args_size_notes (call_insn, get_last_insn (), 0);
 
index c2158f35f28e9af88aa56dc30c6193ac0ced74f7..c64a3ee95d0f52a6a961158def7352ecb18b5333 100644 (file)
@@ -973,30 +973,24 @@ emit_stack_save (enum save_level save_level, rtx *psave)
 {
   rtx sa = *psave;
   /* The default is that we use a move insn and save in a Pmode object.  */
-  rtx (*fcn) (rtx, rtx) = gen_move_insn_uncast;
+  rtx_insn *(*fcn) (rtx, rtx) = gen_move_insn;
   machine_mode mode = STACK_SAVEAREA_MODE (save_level);
 
   /* See if this machine has anything special to do for this kind of save.  */
   switch (save_level)
     {
-#ifdef HAVE_save_stack_block
     case SAVE_BLOCK:
-      if (HAVE_save_stack_block)
-       fcn = gen_save_stack_block;
+      if (targetm.have_save_stack_block ())
+       fcn = targetm.gen_save_stack_block;
       break;
-#endif
-#ifdef HAVE_save_stack_function
     case SAVE_FUNCTION:
-      if (HAVE_save_stack_function)
-       fcn = gen_save_stack_function;
+      if (targetm.have_save_stack_function ())
+       fcn = targetm.gen_save_stack_function;
       break;
-#endif
-#ifdef HAVE_save_stack_nonlocal
     case SAVE_NONLOCAL:
-      if (HAVE_save_stack_nonlocal)
-       fcn = gen_save_stack_nonlocal;
+      if (targetm.have_save_stack_nonlocal ())
+       fcn = targetm.gen_save_stack_nonlocal;
       break;
-#endif
     default:
       break;
     }
@@ -1028,7 +1022,7 @@ void
 emit_stack_restore (enum save_level save_level, rtx sa)
 {
   /* The default is that we use a move insn.  */
-  rtx (*fcn) (rtx, rtx) = gen_move_insn_uncast;
+  rtx_insn *(*fcn) (rtx, rtx) = gen_move_insn;
 
   /* If stack_realign_drap, the x86 backend emits a prologue that aligns both
      STACK_POINTER and HARD_FRAME_POINTER.
@@ -1047,24 +1041,18 @@ emit_stack_restore (enum save_level save_level, rtx sa)
   /* See if this machine has anything special to do for this kind of save.  */
   switch (save_level)
     {
-#ifdef HAVE_restore_stack_block
     case SAVE_BLOCK:
-      if (HAVE_restore_stack_block)
-       fcn = gen_restore_stack_block;
+      if (targetm.have_restore_stack_block ())
+       fcn = targetm.gen_restore_stack_block;
       break;
-#endif
-#ifdef HAVE_restore_stack_function
     case SAVE_FUNCTION:
-      if (HAVE_restore_stack_function)
-       fcn = gen_restore_stack_function;
+      if (targetm.have_restore_stack_function ())
+       fcn = targetm.gen_restore_stack_function;
       break;
-#endif
-#ifdef HAVE_restore_stack_nonlocal
     case SAVE_NONLOCAL:
-      if (HAVE_restore_stack_nonlocal)
-       fcn = gen_restore_stack_nonlocal;
+      if (targetm.have_restore_stack_nonlocal ())
+       fcn = targetm.gen_restore_stack_nonlocal;
       break;
-#endif
     default:
       break;
     }
index 33e112e9200bd47ae48188aff11ebf2aabcc2f42..12994d36ed40826316441b8cbeca0cf64d1b1cff 100644 (file)
@@ -46,7 +46,13 @@ 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))
 DEF_TARGET_INSN (prologue, (void))
+DEF_TARGET_INSN (restore_stack_block, (rtx x0, rtx x1))
+DEF_TARGET_INSN (restore_stack_function, (rtx x0, rtx x1))
+DEF_TARGET_INSN (restore_stack_nonlocal, (rtx x0, rtx x1))
 DEF_TARGET_INSN (return, (void))
+DEF_TARGET_INSN (save_stack_block, (rtx x0, rtx x1))
+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 (store_multiple, (rtx x0, rtx x1, rtx x2))