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")])
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\";
;; 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\";