aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/arm/arm.md12
2 files changed, 15 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 30d4aff..702ad28 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2005-10-06 Richard Earnshaw <richard.earnshaw@arm.com>
+
+ PR target/23783
+ * arm.md (call): If the address isn't a SYMBOL_REF or a register,
+ then force it into a register.
+ (call_value): Likewise.
+
2005-10-06 Richard Henderson <rth@redhat.com>
PR 24049
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index b60ccb7..76eb12b 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -7455,8 +7455,10 @@
invoked it. */
callee = XEXP (operands[0], 0);
- if (GET_CODE (callee) != REG
- && arm_is_longcall_p (operands[0], INTVAL (operands[2]), 0))
+ if ((GET_CODE (callee) == SYMBOL_REF
+ && arm_is_longcall_p (operands[0], INTVAL (operands[2]), 0))
+ || (GET_CODE (callee) != SYMBOL_REF
+ && GET_CODE (callee) != REG))
XEXP (operands[0], 0) = force_reg (Pmode, callee);
}"
)
@@ -7545,8 +7547,10 @@
operands[3] = const0_rtx;
/* See the comment in define_expand \"call\". */
- if (GET_CODE (callee) != REG
- && arm_is_longcall_p (operands[1], INTVAL (operands[3]), 0))
+ if ((GET_CODE (callee) == SYMBOL_REF
+ && arm_is_longcall_p (operands[1], INTVAL (operands[3]), 0))
+ || (GET_CODE (callee) != SYMBOL_REF
+ && GET_CODE (callee) != REG))
XEXP (operands[1], 0) = force_reg (Pmode, callee);
}"
)