diff options
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/arm/arm.md | 12 |
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); }" ) |