From 20e19db49ec468766f78a6d3a0f3b69980be2974 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Fri, 31 Jul 2009 00:59:45 -0400 Subject: [PATCH] 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 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/sh/sh.c | 10 ++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f5c6a4f87dc..6f24540a9fa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2009-07-31 DJ Delorie + + * 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 * Makefile.in (OBJS-common): Added dependence on graphite-blocking.o, diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 788b0fe1391..5b555f83e1a 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -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); -- 2.11.4.GIT