diff options
author | Julian Brown <julian@codesourcery.com> | 2010-05-21 15:08:44 +0000 |
---|---|---|
committer | Julian Brown <jules@gcc.gnu.org> | 2010-05-21 15:08:44 +0000 |
commit | 7c19c715bb7735587ba00eab68c1b9b75cba3b2a (patch) | |
tree | 1aa80e7b1d02366c14586b1e311cf2df73d1d103 /gcc/config/arm/thumb2.md | |
parent | 204fc5505c08b8ba82aabfe503e2fc20e98054a6 (diff) | |
download | gcc-7c19c715bb7735587ba00eab68c1b9b75cba3b2a.tar.gz |
arm.c (arm_function_ok_for_sibcall): Only forbid sibling calls for Thumb-1.
gcc/
* config/arm/arm.c (arm_function_ok_for_sibcall): Only forbid
sibling calls for Thumb-1.
* config/arm/arm.h (USE_RETURN_INSN): Enable for Thumb-2.
* config/arm/arm.md (*call_symbol, *call_value_symbol): Use for
Thumb-2.
(*call_insn, *call_value_insn): Don't use for Thumb-2.
(sibcall, sibcall_value, *sibcall_insn, *sibcall_value_insn): Use
for Thumb-2.
(return): New expander.
(*arm_return): New name for ARM return insn.
* config/arm/thumb2.md (*thumb2_return): New insn pattern.
Co-Authored-By: Mark Mitchell <mark@codesourcery.com>
From-SVN: r159672
Diffstat (limited to 'gcc/config/arm/thumb2.md')
-rw-r--r-- | gcc/config/arm/thumb2.md | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/config/arm/thumb2.md b/gcc/config/arm/thumb2.md index 9b8075296d5..e97715ff595 100644 --- a/gcc/config/arm/thumb2.md +++ b/gcc/config/arm/thumb2.md @@ -1054,6 +1054,19 @@ (set_attr "length" "20")] ) +;; Note: this is not predicable, to avoid issues with linker-generated +;; interworking stubs. +(define_insn "*thumb2_return" + [(return)] + "TARGET_THUMB2 && USE_RETURN_INSN (FALSE)" + "* + { + return output_return_instruction (const_true_rtx, TRUE, FALSE); + }" + [(set_attr "type" "load1") + (set_attr "length" "12")] +) + (define_insn_and_split "thumb2_eh_return" [(unspec_volatile [(match_operand:SI 0 "s_register_operand" "r")] VUNSPEC_EH_RETURN) |