copy_to_mode_reg (Pmode, XEXP (operands[1], 0)));
}")
-(define_insn "*call_value_pop_pic"
- [(set (match_operand 0 "" "=rf")
- (call (match_operand:QI 1 "call_insn_operand" "m")
- (match_operand:SI 2 "general_operand" "g")))
- (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\";
-
- operands[1] = XEXP (operands[1], 0);
- return \"call\\t%*%1\";
-}"
- [(set_attr "type" "callv")])
-
-(define_insn "*call_value_pop_pic2"
- [(set (match_operand 0 "" "=rf")
- (call (match_operand:QI 1 "constant_call_address_operand" "")
- (match_operand:SI 2 "general_operand" "g")))
- (set (reg:SI 7) (plus:SI (reg:SI 7)
- (match_operand:SI 4 "immediate_operand" "i")))]
- "!HALF_PIC_P ()"
- "call\\t%P1"
- [(set_attr "type" "callv")])
-
(define_expand "call_value"
[(set (match_operand 0 "" "")
(call (match_operand:QI 1 "indirect_operand" "")
copy_to_mode_reg (Pmode, XEXP (operands[1], 0)));
}")
-(define_insn "*call_value_pic"
- [(set (match_operand 0 "" "=rf")
- (call (match_operand:QI 1 "call_insn_operand" "m")
- (match_operand:SI 2 "general_operand" "g")))]
- ;; Operand 2 not used on the i386.
- ""
- "*
-{
- if (constant_call_address_operand (operands[1], GET_MODE (operands[1])))
- return \"call\\t%P1\";
-
- operands[1] = XEXP (operands[1], 0);
- return \"call\\t%*%1\";
-}"
- [(set_attr "type" "callv")])
-
-(define_insn "*call_value_pic2"
- [(set (match_operand 0 "" "=rf")
- (call (match_operand:QI 1 "constant_call_address_operand" "")
- (match_operand:SI 2 "general_operand" "g")))]
- "!HALF_PIC_P ()"
- "call\\t%P1"
- [(set_attr "type" "callv")])
-
;; Call subroutine returning any type.
(define_expand "untyped_call"
"ix86_expand_prologue (); DONE;")
(define_insn "prologue_set_got"
- [(set (match_operand:SI 0 "" "")
+ [(set (match_operand:SI 0 "register_operand" "=r")
(unspec_volatile:SI
[(plus:SI (match_dup 0)
(plus:SI (match_operand:SI 1 "symbolic_operand" "")
[(set_attr "type" "alu")])
(define_insn "prologue_get_pc"
- [(set (match_operand:SI 0 "" "")
+ [(set (match_operand:SI 0 "register_operand" "=r")
(unspec_volatile:SI [(plus:SI (pc) (match_operand 1 "" ""))] 2))]
""
"*
(ior:HI (match_dup 0) (const_int -1)))
(clobber (reg:CC 17))])]
"")
+
+\f
+;; Call-value patterns last so that the wildcard operand does not
+;; disrupt insn-recog's switch tables.
+
+(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")))
+ (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\";
+
+ operands[1] = XEXP (operands[1], 0);
+ return \"call\\t%*%1\";
+}"
+ [(set_attr "type" "callv")])
+
+(define_insn "*call_value_pop_2"
+ [(set (match_operand 0 "" "")
+ (call (match_operand:QI 1 "constant_call_address_operand" "")
+ (match_operand:SI 2 "general_operand" "g")))
+ (set (reg:SI 7) (plus:SI (reg:SI 7)
+ (match_operand:SI 4 "immediate_operand" "i")))]
+ "!HALF_PIC_P ()"
+ "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.
+ ""
+ "*
+{
+ if (constant_call_address_operand (operands[1], GET_MODE (operands[1])))
+ return \"call\\t%P1\";
+
+ operands[1] = XEXP (operands[1], 0);
+ return \"call\\t%*%1\";
+}"
+ [(set_attr "type" "callv")])
+
+(define_insn "*call_value_2"
+ [(set (match_operand 0 "" "")
+ (call (match_operand:QI 1 "constant_call_address_operand" "")
+ (match_operand:SI 2 "general_operand" "g")))]
+ "!HALF_PIC_P ()"
+ "call\\t%P1"
+ [(set_attr "type" "callv")])