aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/sh
diff options
context:
space:
mode:
authorKaz Kojima <kkojima@gcc.gnu.org>2012-10-04 03:03:12 +0000
committerKaz Kojima <kkojima@gcc.gnu.org>2012-10-04 03:03:12 +0000
commit7d9f9bd1e4ec1f84b8277b0f9c1b5eea7da384b8 (patch)
treee393195df7efc45bef76599dcebddd35047e5db2 /gcc/config/sh
parent3f15f285dc0b6871c3ce07329226872d6eea19b5 (diff)
downloadgcc-7d9f9bd1e4ec1f84b8277b0f9c1b5eea7da384b8.zip
gcc-7d9f9bd1e4ec1f84b8277b0f9c1b5eea7da384b8.tar.gz
gcc-7d9f9bd1e4ec1f84b8277b0f9c1b5eea7da384b8.tar.bz2
sh.c (sh_can_use_simple_return_p): Return false for SHmedia and SHcompact using call_cookie.
* sh.c (sh_can_use_simple_return_p): Return false for SHmedia and SHcompact using call_cookie. * sh.md (epilogue): Emit non-inlined return insns for SHmedia and SHcompact using call_cookie. From-SVN: r192061
Diffstat (limited to 'gcc/config/sh')
-rw-r--r--gcc/config/sh/sh.c6
-rw-r--r--gcc/config/sh/sh.md7
2 files changed, 13 insertions, 0 deletions
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 9f6b796..33ae28e 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -13134,6 +13134,12 @@ sh_can_use_simple_return_p (void)
HARD_REG_SET live_regs_mask;
int d;
+ /* Some targets require special return insns. */
+ if (TARGET_SHMEDIA
+ || (TARGET_SHCOMPACT
+ && (crtl->args.info.call_cookie & CALL_COOKIE_RET_TRAMP (1))))
+ return false;
+
if (! reload_completed || frame_pointer_needed)
return false;
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index 91a09c5..7a1c4d3 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -10460,6 +10460,13 @@ label:
""
{
sh_expand_epilogue (false);
+ if (TARGET_SHMEDIA
+ || (TARGET_SHCOMPACT
+ && (crtl->args.info.call_cookie & CALL_COOKIE_RET_TRAMP (1))))
+ {
+ emit_jump_insn (gen_return ());
+ DONE;
+ }
})
(define_expand "eh_return"