sh.md (UNSPECV_SP_SWITCH_B): New.

* 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

From-SVN: r150306
This commit is contained in:
DJ Delorie 2009-07-31 00:59:45 -04:00 committed by DJ Delorie
parent e60d414986
commit 20e19db49e
2 changed files with 18 additions and 2 deletions

View 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,

View 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);