* config/sh/sh.md (UNSPECV_SP_SWITCH_B): New.
authordj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 31 Jul 2009 04:59:45 +0000 (04:59 +0000)
committerdj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 31 Jul 2009 04:59:45 +0000 (04:59 +0000)
(UNSPECV_SP_SWITCH_E): New.
(sp_switch_1): Change to an unspec.
(sp_switch_2): Change to an unspec.  Don't use post-inc when we
replace $r15.
* config/sh/sh.c (sh_expand_prologue): Use the constant pool to
reference the new stack's address

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@150306 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/sh/sh.c

index f5c6a4f..6f24540 100644 (file)
@@ -1,3 +1,13 @@
+2009-07-31  DJ Delorie  <dj@redhat.com>
+
+       * config/sh/sh.md (UNSPECV_SP_SWITCH_B): New.
+       (UNSPECV_SP_SWITCH_E): New.
+       (sp_switch_1): Change to an unspec.
+       (sp_switch_2): Change to an unspec.  Don't use post-inc when we
+       replace $r15.
+       * config/sh/sh.c (sh_expand_prologue): Use the constant pool to
+       reference the new stack's address
+
 2009-07-30  Sebastian Pop  <sebastian.pop@amd.com>
 
        * Makefile.in (OBJS-common): Added dependence on graphite-blocking.o,
index 788b0fe..5b555f8 100644 (file)
@@ -6743,13 +6743,19 @@ sh_expand_prologue (void)
   /* If we're supposed to switch stacks at function entry, do so now.  */
   if (sp_switch_attr)
     {
+      rtx lab, newsrc;
       /* The argument specifies a variable holding the address of the
         stack the interrupt function should switch to/from at entry/exit.  */
+      tree arg = TREE_VALUE ( TREE_VALUE (sp_switch_attr));
       const char *s
-       = ggc_strdup (TREE_STRING_POINTER (TREE_VALUE (sp_switch_attr)));
+       = ggc_strdup (TREE_STRING_POINTER (arg));
       rtx sp_switch = gen_rtx_SYMBOL_REF (Pmode, s);
 
-      emit_insn (gen_sp_switch_1 (sp_switch));
+      lab = add_constant (sp_switch, SImode, 0);
+      newsrc = gen_rtx_LABEL_REF (VOIDmode, lab);
+      newsrc = gen_const_mem (SImode, newsrc);
+
+      emit_insn (gen_sp_switch_1 (newsrc));
     }
 
   d = calc_live_regs (&live_regs_mask);