Commit 94bb5d0c by Richard Henderson Committed by Richard Henderson

i386.md (call_pop_0, [...]): New.

        * i386.md (call_pop_0, call_value_pop_0): New.
        (call_pop_1): Remove constraint from unused arg.  Support sibcalls.
        (call_value_pop_1): Likewise.
        (call_0, call_value_0): New.
        (call_1, call_value_1): Remove constraint from unused arg.

From-SVN: r32768
parent d630442f
2000-03-27 Richard Henderson <rth@cygnus.com>
* i386.md (call_pop_0, call_value_pop_0): New.
(call_pop_1): Remove constraint from unused arg. Support sibcalls.
(call_value_pop_1): Likewise.
(call_0, call_value_0): New.
(call_1, call_value_1): Remove constraint from unused arg.
2000-03-27 Nick Clifton <nickc@cygnus.com>
* invoke.texi (Spec Files): Document new spec % command created by
......
......@@ -7039,19 +7039,41 @@
XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));
}")
(define_insn "*call_pop_0"
[(call (match_operand:QI 0 "constant_call_address_operand" "")
(match_operand:SI 1 "" ""))
(set (reg:SI 7) (plus:SI (reg:SI 7)
(match_operand:SI 3 "immediate_operand" "")))]
""
"*
{
if (SIBLING_CALL_P (insn))
return \"jmp\\t%P0\";
else
return \"call\\t%P0\";
}"
[(set_attr "type" "call")])
(define_insn "*call_pop_1"
[(call (match_operand:QI 0 "call_insn_operand" "m")
(match_operand:SI 1 "general_operand" "g"))
(match_operand:SI 1 "" ""))
(set (reg:SI 7) (plus:SI (reg:SI 7)
(match_operand:SI 3 "immediate_operand" "i")))]
""
"*
{
if (constant_call_address_operand (operands[0], GET_MODE (operands[0])))
return \"call\\t%P0\";
if (constant_call_address_operand (operands[0], QImode))
{
if (SIBLING_CALL_P (insn))
return \"jmp\\t%P0\";
else
return \"call\\t%P0\";
}
operands[0] = XEXP (operands[0], 0);
return \"call\\t%*%0\";
if (SIBLING_CALL_P (insn))
return \"jmp\\t%*%0\";
else
return \"call\\t%*%0\";
}"
[(set_attr "type" "call")])
......@@ -7070,21 +7092,32 @@
XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));
}")
(define_insn "*call_0"
[(call (match_operand:QI 0 "constant_call_address_operand" "")
(match_operand:SI 1 "" ""))]
""
"*
{
if (SIBLING_CALL_P (insn))
return \"jmp\\t%P0\";
else
return \"call\\t%P0\";
}"
[(set_attr "type" "call")])
(define_insn "*call_1"
[(call (match_operand:QI 0 "call_insn_operand" "m")
(match_operand:SI 1 "general_operand" "g"))]
;; Operand 1 not used on the i386.
(match_operand:SI 1 "" ""))]
""
"*
{
if (constant_call_address_operand (operands[0], GET_MODE (operands[0])))
if (constant_call_address_operand (operands[0], QImode))
{
if (SIBLING_CALL_P (insn))
return \"jmp\\t%P0\";
else
return \"call\\t%P0\";
}
operands[0] = XEXP (operands[0], 0);
if (SIBLING_CALL_P (insn))
return \"jmp\\t%*%0\";
......@@ -9363,39 +9396,74 @@
;; Call-value patterns last so that the wildcard operand does not
;; disrupt insn-recog's switch tables.
(define_insn "*call_value_pop_0"
[(set (match_operand 0 "" "")
(call (match_operand:QI 1 "constant_call_address_operand" "")
(match_operand:SI 2 "" "")))
(set (reg:SI 7) (plus:SI (reg:SI 7)
(match_operand:SI 4 "immediate_operand" "")))]
""
"*
{
if (SIBLING_CALL_P (insn))
return \"jmp\\t%P1\";
else
return \"call\\t%P1\";
}"
[(set_attr "type" "callv")])
(define_insn "*call_value_pop_1"
[(set (match_operand 0 "" "")
(call (match_operand:QI 1 "call_insn_operand" "m")
(match_operand:SI 2 "general_operand" "g")))
(match_operand:SI 2 "" "")))
(set (reg:SI 7) (plus:SI (reg:SI 7)
(match_operand:SI 4 "immediate_operand" "i")))]
""
"*
{
if (constant_call_address_operand (operands[1], GET_MODE (operands[1])))
return \"call\\t%P1\";
if (constant_call_address_operand (operands[1], QImode))
{
if (SIBLING_CALL_P (insn))
return \"jmp\\t%P1\";
else
return \"call\\t%P1\";
}
operands[1] = XEXP (operands[1], 0);
return \"call\\t%*%1\";
if (SIBLING_CALL_P (insn))
return \"jmp\\t%*%1\";
else
return \"call\\t%*%1\";
}"
[(set_attr "type" "callv")])
(define_insn "*call_value_0"
[(set (match_operand 0 "" "")
(call (match_operand:QI 1 "constant_call_address_operand" "")
(match_operand:SI 2 "" "")))]
""
"*
{
if (SIBLING_CALL_P (insn))
return \"jmp\\t%P1\";
else
return \"call\\t%P1\";
}"
[(set_attr "type" "callv")])
(define_insn "*call_value_1"
[(set (match_operand 0 "" "")
(call (match_operand:QI 1 "call_insn_operand" "m")
(match_operand:SI 2 "general_operand" "g")))]
;; Operand 2 not used on the i386.
(match_operand:SI 2 "" "")))]
""
"*
{
if (constant_call_address_operand (operands[1], GET_MODE (operands[1])))
if (constant_call_address_operand (operands[1], QImode))
{
if (SIBLING_CALL_P (insn))
return \"jmp\\t%P1\";
else
return \"call\\t%P1\";
}
operands[1] = XEXP (operands[1], 0);
if (SIBLING_CALL_P (insn))
return \"jmp\\t%*%1\";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment