+Fri Jan 14 00:28:06 2000 Jeffrey A Law (law@cygnus.com)
+
+ * fr30.c (call_operand): Tighten and rework to match rules for
+ call RTL expressions.
+ * fr30.h (PREDICATE_CODES, case call_operand): Only allow MEMs.
+ * fr30.md (call patterns): Improve constraints.
+
Thu Jan 13 23:44:03 2000 Richard Henderson <rth@cygnus.com>
* fr30.c (fr30_expand_epilogue): Revert last change.
int
call_operand (operand, mode)
rtx operand;
- Mmode mode;
+ Mmode mode ATTRIBUTE_UNUSED;
{
- return nonimmediate_operand (operand, mode)
- || (GET_CODE (operand) == MEM
- && GET_CODE (XEXP (operand, 0)) == SYMBOL_REF);
+ return (GET_CODE (operand) == MEM
+ && (GET_CODE (XEXP (operand, 0)) == SYMBOL_REF
+ || GET_CODE (XEXP (operand, 0)) == REG));
}
/* Returns true iff all the registers in the operands array
{ "stack_add_operand", { CONST_INT }}, \
{ "high_register_operand", { REG }}, \
{ "low_register_operand", { REG }}, \
- { "call_operand", { REG, MEM }}, \
+ { "call_operand", { MEM }}, \
{ "fp_displacement_operand", { CONST_INT }}, \
{ "sp_displacement_operand", { CONST_INT }}, \
{ "add_immediate_operand", { REG, CONST_INT }},
;; registers used as operands.
(define_insn "call"
- [(call (match_operand 0 "call_operand" "Qrm")
+ [(call (match_operand 0 "call_operand" "Qm")
(match_operand 1 "" "g"))
(clobber (reg:SI 17))]
""
(define_insn "call_value"
[(set (match_operand 0 "register_operand" "=r")
- (call (match_operand 1 "call_operand" "Qrm")
+ (call (match_operand 1 "call_operand" "Qm")
(match_operand 2 "" "g")))
(clobber (reg:SI 17))]
""