summaryrefslogtreecommitdiff
path: root/gcc/config/arm/thumb2.md
diff options
context:
space:
mode:
authorJulian Brown <julian@codesourcery.com>2010-05-21 15:08:44 +0000
committerJulian Brown <jules@gcc.gnu.org>2010-05-21 15:08:44 +0000
commit7c19c715bb7735587ba00eab68c1b9b75cba3b2a (patch)
tree1aa80e7b1d02366c14586b1e311cf2df73d1d103 /gcc/config/arm/thumb2.md
parent204fc5505c08b8ba82aabfe503e2fc20e98054a6 (diff)
downloadgcc-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.md13
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)