aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPhilip Blundell <pb@nexus.co.uk>2002-02-19 22:23:56 +0000
committerPhil Blundell <pb@gcc.gnu.org>2002-02-19 22:23:56 +0000
commit7b8781c8617d3469e7f12a6d6dc12542f192f4dc (patch)
tree047286c81eca6bb00afabcafa64ab58fb181bfaa /gcc
parent9b41c370487dfd259898aa0dd996d17ad1c2e1fb (diff)
downloadgcc-7b8781c8617d3469e7f12a6d6dc12542f192f4dc.zip
gcc-7b8781c8617d3469e7f12a6d6dc12542f192f4dc.tar.gz
gcc-7b8781c8617d3469e7f12a6d6dc12542f192f4dc.tar.bz2
re PR target/5185 ([ARM] Segmentation fault in final.c)
2002-02-19 Philip Blundell <pb@nexus.co.uk> PR 5185 * config/arm/arm.h (THUMB_LEGITIMATE_CONSTANT_P): Accept anything if generating PIC. PR 5054 * config/arm/arm.md (call_insn) [TARGET_THUMB]: Use arm_is_longcall_p rather than inspecting call-type cookie directly. (call_value_insn) [TARGET_THUMB]: Likewise. From-SVN: r49879
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/config/arm/arm.h3
-rw-r--r--gcc/config/arm/arm.md6
3 files changed, 18 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c5813d2..45819e6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,15 @@
+2002-02-19 Philip Blundell <pb@nexus.co.uk>
+
+ PR 5185
+ * config/arm/arm.h (THUMB_LEGITIMATE_CONSTANT_P): Accept anything
+ if generating PIC.
+
+ PR 5054
+ * config/arm/arm.md (call_insn) [TARGET_THUMB]: Use
+ arm_is_longcall_p rather than inspecting call-type cookie
+ directly.
+ (call_value_insn) [TARGET_THUMB]: Likewise.
+
2002-02-19 Graham Stott <grahams@redhat.com>
* config/i386/i386.c (ix86_expand_builtin): Fix typo.
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index bd448db..c68c867 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -1843,7 +1843,8 @@ typedef struct
#define THUMB_LEGITIMATE_CONSTANT_P(X) \
( GET_CODE (X) == CONST_INT \
|| GET_CODE (X) == CONST_DOUBLE \
- || CONSTANT_ADDRESS_P (X))
+ || CONSTANT_ADDRESS_P (X) \
+ || flag_pic)
#define LEGITIMATE_CONSTANT_P(X) \
(TARGET_ARM ? ARM_LEGITIMATE_CONSTANT_P (X) : THUMB_LEGITIMATE_CONSTANT_P (X))
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 3646fe5..d1259d4 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -6655,7 +6655,8 @@
(use (match_operand 2 "" ""))
(clobber (reg:SI LR_REGNUM))]
"TARGET_THUMB
- && operands[2] == const0_rtx && (GET_CODE (operands[0]) == SYMBOL_REF)"
+ && GET_CODE (operands[0]) == SYMBOL_REF
+ && !arm_is_longcall_p (operands[0], INTVAL (operands[2]), 1)"
"bl\\t%a0"
[(set_attr "length" "4")
(set_attr "type" "call")]
@@ -6668,7 +6669,8 @@
(use (match_operand 3 "" ""))
(clobber (reg:SI LR_REGNUM))]
"TARGET_THUMB
- && operands[3] == const0_rtx && (GET_CODE (operands[1]) == SYMBOL_REF)"
+ && GET_CODE (operands[1]) == SYMBOL_REF
+ && !arm_is_longcall_p (operands[1], INTVAL (operands[3]), 1)"
"bl\\t%a1"
[(set_attr "length" "4")
(set_attr "type" "call")]