diff options
author | Richard Henderson <rth@cygnus.com> | 2000-08-29 00:51:21 +0000 |
---|---|---|
committer | Richard Henderson <rth@cygnus.com> | 2000-08-29 00:51:21 +0000 |
commit | b0b08df717b1059d08043bd2a90f9ef1da0d717a (patch) | |
tree | 8f525e55c0a3ddb2de3321636646544d9b0e18b6 /gcc/config/i386/i386.md | |
parent | 668d3fa68ecef4054ff7b45346d7cff2dddaabeb (diff) |
* config/i386/i386.c: Don't error on EXTRA_CONSTRAINT defined.
(call_insn_operand): Don't expect a surrounding mem.
(constant_call_address_operand): Likewise.
* config/i386/i386.h (PREDICATE_CODES): Update.
* config/i386/i386.md (call patterns): Move the match_operand
for the call destination inside the mem.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@36024 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/i386/i386.md')
-rw-r--r-- | gcc/config/i386/i386.md | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 7d4faf347cb..c377978a5c4 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -8457,12 +8457,12 @@ && (GET_CODE (XEXP (operands[0], 0)) != SYMBOL_REF || !SYMBOL_REF_FLAG (XEXP (operands[0], 0)))) current_function_uses_pic_offset_table = 1; - if (! call_insn_operand (operands[0], QImode)) + if (! call_insn_operand (XEXP (operands[0], 0), Pmode)) 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" "") + [(call (mem:QI (match_operand:SI 0 "constant_call_address_operand" "")) (match_operand:SI 1 "" "")) (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 3 "immediate_operand" "")))] @@ -8477,21 +8477,20 @@ [(set_attr "type" "call")]) (define_insn "*call_pop_1" - [(call (match_operand:QI 0 "call_insn_operand" "m") + [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "rsm")) (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], QImode)) + if (constant_call_address_operand (operands[0], Pmode)) { 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\"; else @@ -8513,12 +8512,12 @@ && (GET_CODE (XEXP (operands[0], 0)) != SYMBOL_REF || !SYMBOL_REF_FLAG (XEXP (operands[0], 0)))) current_function_uses_pic_offset_table = 1; - if (! call_insn_operand (operands[0], QImode)) + if (! call_insn_operand (XEXP (operands[0], 0), Pmode)) 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" "") + [(call (mem:QI (match_operand:SI 0 "constant_call_address_operand" "")) (match_operand:SI 1 "" ""))] "" "* @@ -8531,7 +8530,7 @@ [(set_attr "type" "call")]) (define_insn "*call_1" - [(call (match_operand:QI 0 "call_insn_operand" "m") + [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "rsm")) (match_operand:SI 1 "" ""))] "" "* @@ -8543,7 +8542,6 @@ else return \"call\\t%P0\"; } - operands[0] = XEXP (operands[0], 0); if (SIBLING_CALL_P (insn)) return \"jmp\\t%*%0\"; else @@ -8576,7 +8574,7 @@ && (GET_CODE (XEXP (operands[1], 0)) != SYMBOL_REF || !SYMBOL_REF_FLAG (XEXP (operands[1], 0)))) current_function_uses_pic_offset_table = 1; - if (! call_insn_operand (operands[1], QImode)) + if (! call_insn_operand (XEXP (operands[1], 0), Pmode)) XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); }") @@ -8595,7 +8593,7 @@ && (GET_CODE (XEXP (operands[1], 0)) != SYMBOL_REF || !SYMBOL_REF_FLAG (XEXP (operands[1], 0)))) current_function_uses_pic_offset_table = 1; - if (! call_insn_operand (operands[1], QImode)) + if (! call_insn_operand (XEXP (operands[1], 0), Pmode)) XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); }") @@ -11056,7 +11054,7 @@ (define_insn "*call_value_pop_0" [(set (match_operand 0 "" "") - (call (match_operand:QI 1 "constant_call_address_operand" "") + (call (mem:QI (match_operand:SI 1 "constant_call_address_operand" "")) (match_operand:SI 2 "" ""))) (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 4 "immediate_operand" "")))] @@ -11072,7 +11070,7 @@ (define_insn "*call_value_pop_1" [(set (match_operand 0 "" "") - (call (match_operand:QI 1 "call_insn_operand" "m") + (call (mem:QI (match_operand:SI 1 "call_insn_operand" "rsm")) (match_operand:SI 2 "" ""))) (set (reg:SI 7) (plus:SI (reg:SI 7) (match_operand:SI 4 "immediate_operand" "i")))] @@ -11086,7 +11084,6 @@ else return \"call\\t%P1\"; } - operands[1] = XEXP (operands[1], 0); if (SIBLING_CALL_P (insn)) return \"jmp\\t%*%1\"; else @@ -11096,7 +11093,7 @@ (define_insn "*call_value_0" [(set (match_operand 0 "" "") - (call (match_operand:QI 1 "constant_call_address_operand" "") + (call (mem:QI (match_operand:SI 1 "constant_call_address_operand" "")) (match_operand:SI 2 "" "")))] "" "* @@ -11110,7 +11107,7 @@ (define_insn "*call_value_1" [(set (match_operand 0 "" "") - (call (match_operand:QI 1 "call_insn_operand" "m") + (call (mem:QI (match_operand:SI 1 "call_insn_operand" "rsm")) (match_operand:SI 2 "" "")))] "" "* @@ -11122,7 +11119,6 @@ else return \"call\\t%P1\"; } - operands[1] = XEXP (operands[1], 0); if (SIBLING_CALL_P (insn)) return \"jmp\\t%*%1\"; else |