;;- jump to subroutine
(define_expand "call"
- [(call (match_operand:SI 0 "general_operand" "")
- (match_operand:SI 1 "immediate_operand" ""))]
+ [(call (match_operand:SI 0 "general_operand" "g")
+ (match_operand:SI 1 "immediate_operand" "i"))]
""
"
{
- i960_expand_call (operand0, operand1, 0);
+ emit_insn (gen_call_internal (operands[0], operands[1],
+ virtual_outgoing_args_rtx));
DONE;
}")
-(define_insn ""
+(define_insn "call_internal"
[(call (match_operand:SI 0 "general_operand" "g")
- (match_operand:SI 1 "immediate_operand" "i"))]
+ (match_operand:SI 1 "immediate_operand" "i"))
+ (use (match_operand:SI 2 "address_operand" "p"))
+ (clobber (match_scratch:SI 3 "=&r"))]
""
- "* return i960_output_call_insn (operands[0], operands[1], insn);"
+ "* return i960_output_call_insn (operands[0], operands[1], operands[2],
+ operands[3], insn);"
[(set_attr "type" "call")])
(define_expand "call_value"
""
"
{
- i960_expand_call (operand1, operand2, operand0);
+ emit_insn (gen_call_value_internal (operands[0], operands[1], operands[2],
+ virtual_outgoing_args_rtx));
DONE;
}")
-(define_insn ""
+(define_insn "call_value_internal"
[(set (match_operand 0 "register_operand" "=d")
(call (match_operand:SI 1 "general_operand" "g")
- (match_operand:SI 2 "immediate_operand" "i")))]
+ (match_operand:SI 2 "immediate_operand" "i")))
+ (use (match_operand:SI 3 "address_operand" "p"))
+ (clobber (match_scratch:SI 4 "=&r"))]
""
- "* return i960_output_call_insn (operands[1], operands[2], insn);"
+ "* return i960_output_call_insn (operands[1], operands[2], operands[3],
+ operands[4], insn);"
[(set_attr "type" "call")])
(define_insn "return"