summaryrefslogtreecommitdiff
path: root/gcc/config/arm/arm.md
diff options
context:
space:
mode:
authorjules <jules@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-21 15:08:44 +0000
committerjules <jules@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-21 15:08:44 +0000
commitd68c2c10506586077f8541ff07ebe5d0d600b327 (patch)
tree1aa80e7b1d02366c14586b1e311cf2df73d1d103 /gcc/config/arm/arm.md
parentb6ec0ba679aa0c428a9d2ab805827281459173a4 (diff)
downloadgcc-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.md23
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)"
"*