diff options
author | jules <jules@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-05-21 15:08:44 +0000 |
---|---|---|
committer | jules <jules@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-05-21 15:08:44 +0000 |
commit | d68c2c10506586077f8541ff07ebe5d0d600b327 (patch) | |
tree | 1aa80e7b1d02366c14586b1e311cf2df73d1d103 /gcc/config/arm/arm.md | |
parent | b6ec0ba679aa0c428a9d2ab805827281459173a4 (diff) | |
download | gcc-d68c2c10506586077f8541ff07ebe5d0d600b327.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159672 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/arm/arm.md')
-rw-r--r-- | gcc/config/arm/arm.md | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 9682ba12d25..ab8bce43bc4 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -8650,7 +8650,7 @@ (match_operand 1 "" "")) (use (match_operand 2 "" "")) (clobber (reg:SI LR_REGNUM))] - "TARGET_ARM + "TARGET_32BIT && (GET_CODE (operands[0]) == SYMBOL_REF) && !arm_is_long_call_p (SYMBOL_REF_DECL (operands[0]))" "* @@ -8666,7 +8666,7 @@ (match_operand:SI 2 "" ""))) (use (match_operand 3 "" "")) (clobber (reg:SI LR_REGNUM))] - "TARGET_ARM + "TARGET_32BIT && (GET_CODE (operands[1]) == SYMBOL_REF) && !arm_is_long_call_p (SYMBOL_REF_DECL (operands[1]))" "* @@ -8681,7 +8681,7 @@ (match_operand:SI 1 "" "")) (use (match_operand 2 "" "")) (clobber (reg:SI LR_REGNUM))] - "TARGET_THUMB + "TARGET_THUMB1 && GET_CODE (operands[0]) == SYMBOL_REF && !arm_is_long_call_p (SYMBOL_REF_DECL (operands[0]))" "bl\\t%a0" @@ -8695,7 +8695,7 @@ (match_operand 2 "" ""))) (use (match_operand 3 "" "")) (clobber (reg:SI LR_REGNUM))] - "TARGET_THUMB + "TARGET_THUMB1 && GET_CODE (operands[1]) == SYMBOL_REF && !arm_is_long_call_p (SYMBOL_REF_DECL (operands[1]))" "bl\\t%a1" @@ -8709,7 +8709,7 @@ (match_operand 1 "general_operand" "")) (return) (use (match_operand 2 "" ""))])] - "TARGET_ARM" + "TARGET_32BIT" " { if (operands[2] == NULL_RTX) @@ -8723,7 +8723,7 @@ (match_operand 2 "general_operand" ""))) (return) (use (match_operand 3 "" ""))])] - "TARGET_ARM" + "TARGET_32BIT" " { if (operands[3] == NULL_RTX) @@ -8736,7 +8736,7 @@ (match_operand 1 "" "")) (return) (use (match_operand 2 "" ""))] - "TARGET_ARM && GET_CODE (operands[0]) == SYMBOL_REF" + "TARGET_32BIT && GET_CODE (operands[0]) == SYMBOL_REF" "* return NEED_PLT_RELOC ? \"b%?\\t%a0(PLT)\" : \"b%?\\t%a0\"; " @@ -8749,15 +8749,20 @@ (match_operand 2 "" ""))) (return) (use (match_operand 3 "" ""))] - "TARGET_ARM && GET_CODE (operands[1]) == SYMBOL_REF" + "TARGET_32BIT && GET_CODE (operands[1]) == SYMBOL_REF" "* return NEED_PLT_RELOC ? \"b%?\\t%a1(PLT)\" : \"b%?\\t%a1\"; " [(set_attr "type" "call")] ) +(define_expand "return" + [(return)] + "TARGET_32BIT && USE_RETURN_INSN (FALSE)" + "") + ;; Often the return insn will be the same as loading from memory, so set attr -(define_insn "return" +(define_insn "*arm_return" [(return)] "TARGET_ARM && USE_RETURN_INSN (FALSE)" "* |