diff options
author | Kaz Kojima <kkojima@gcc.gnu.org> | 2012-10-04 03:03:12 +0000 |
---|---|---|
committer | Kaz Kojima <kkojima@gcc.gnu.org> | 2012-10-04 03:03:12 +0000 |
commit | 7d9f9bd1e4ec1f84b8277b0f9c1b5eea7da384b8 (patch) | |
tree | e393195df7efc45bef76599dcebddd35047e5db2 /gcc/config/sh | |
parent | 3f15f285dc0b6871c3ce07329226872d6eea19b5 (diff) | |
download | gcc-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.c | 6 | ||||
-rw-r--r-- | gcc/config/sh/sh.md | 7 |
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" |