aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1992-10-13 11:18:30 -0700
committerJim Wilson <wilson@gcc.gnu.org>1992-10-13 11:18:30 -0700
commit7c08017416be9c16a25a1459b59329500be7ab10 (patch)
treeba4c67cc8d2bf1df369aebd10468e0d594dadb2e
parent83f49630c33e1c72bebef597d9f56570b3702fe7 (diff)
downloadgcc-7c08017416be9c16a25a1459b59329500be7ab10.zip
gcc-7c08017416be9c16a25a1459b59329500be7ab10.tar.gz
gcc-7c08017416be9c16a25a1459b59329500be7ab10.tar.bz2
(call, call_value): No longer call i960_expand_call,
instead call call_internal/call_value_internal pattern. (call_internal, call_value_internal): Rewrite patterns to pass new args to i960_output_call_insn. From-SVN: r2434
-rw-r--r--gcc/config/i960/i960.md28
1 files changed, 18 insertions, 10 deletions
diff --git a/gcc/config/i960/i960.md b/gcc/config/i960/i960.md
index 1489b46..8ed7c1a 100644
--- a/gcc/config/i960/i960.md
+++ b/gcc/config/i960/i960.md
@@ -2074,20 +2074,24 @@
;;- 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"
@@ -2097,16 +2101,20 @@
""
"
{
- 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"