diff options
author | Philip Blundell <pb@nexus.co.uk> | 2002-02-19 22:23:56 +0000 |
---|---|---|
committer | Phil Blundell <pb@gcc.gnu.org> | 2002-02-19 22:23:56 +0000 |
commit | 7b8781c8617d3469e7f12a6d6dc12542f192f4dc (patch) | |
tree | 047286c81eca6bb00afabcafa64ab58fb181bfaa /gcc | |
parent | 9b41c370487dfd259898aa0dd996d17ad1c2e1fb (diff) | |
download | gcc-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/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/config/arm/arm.h | 3 | ||||
-rw-r--r-- | gcc/config/arm/arm.md | 6 |
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")] |