re PR target/41900 (call *%esp shouldn't be generated because of CPU errata)
2009-11-13 Uros Bizjak <ubizjak@gmail.com> PR target/41900 (*call_pop_1, *call_1, *call_value_pop_1, *call_value_1): Use "lsm" as operand 1 constraint. * config/i386/predicates.md (call_insn_operand): Depend on index_register_operand to avoid %esp register. 2009-11-13 Uros Bizjak <ubizjak@gmail.com> Revert: 2009-11-04 Uros Bizjak <ubizjak@gmail.com> PR target/41900 * config/i386/i386.h (ix86_arch_indices) <X86_ARCH_CALL_ESP>: New. (TARGET_CALL_ESP): New define. * config/i386/i386.c (initial_ix86_tune_features): Initialize X86_ARCH_CALL_ESP. * config/i386/i386.md (*call_pop_1_esp, *call_1_esp, *call_value_pop_1_esp, *call_value_1_esp): Rename from *call_pop_1, *call_1, *call_value_pop_1 and *call_value_1. Depend on TARGET_CALL_ESP. (*call_pop_1, *call_1, *call_value_pop_1, *call_value_1): New patterns, use "lsm" as operand 1 constraint. * config/i386/predicates.md (call_insn_operand): Depend on index_register_operand for !TARGET_CALL_ESP to avoid %esp register. From-SVN: r154169
This commit is contained in:
parent
54ef1db76c
commit
2582811f48
|
@ -1,3 +1,30 @@
|
|||
2009-11-13 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/41900
|
||||
(*call_pop_1, *call_1, *call_value_pop_1, *call_value_1): Use "lsm"
|
||||
as operand 1 constraint.
|
||||
* config/i386/predicates.md (call_insn_operand): Depend on
|
||||
index_register_operand to avoid %esp register.
|
||||
|
||||
2009-11-13 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
Revert:
|
||||
2009-11-04 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/41900
|
||||
* config/i386/i386.h (ix86_arch_indices) <X86_ARCH_CALL_ESP>: New.
|
||||
(TARGET_CALL_ESP): New define.
|
||||
* config/i386/i386.c (initial_ix86_tune_features): Initialize
|
||||
X86_ARCH_CALL_ESP.
|
||||
* config/i386/i386.md (*call_pop_1_esp, *call_1_esp,
|
||||
*call_value_pop_1_esp, *call_value_1_esp): Rename from *call_pop_1,
|
||||
*call_1, *call_value_pop_1 and *call_value_1. Depend on
|
||||
TARGET_CALL_ESP.
|
||||
(*call_pop_1, *call_1, *call_value_pop_1, *call_value_1):
|
||||
New patterns, use "lsm" as operand 1 constraint.
|
||||
* config/i386/predicates.md (call_insn_operand): Depend on
|
||||
index_register_operand for !TARGET_CALL_ESP to avoid %esp register.
|
||||
|
||||
2009-11-13 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/42029
|
||||
|
@ -7,15 +34,12 @@
|
|||
2009-11-11 Kai Tietz <kai.tietz@onevision.com>
|
||||
|
||||
Backported from trunk
|
||||
* config/i386/cygming.h (HANDLE_PRAGMA_PUSH_POP_MACRO):
|
||||
Removed.
|
||||
* config/i386/cygming.h (HANDLE_PRAGMA_PUSH_POP_MACRO): Removed.
|
||||
* c-pragma.c (def_pragma_macro_value): Likewise.
|
||||
(def_pragma_macro): Likewise.
|
||||
(pushed_macro_table): Likewise.
|
||||
(HANDLE_PRAGMA_PUSH_POP_MACRO): Remove guarded
|
||||
code.
|
||||
* doc/tm.texi (HANDLE_PRAGMA_PUSH_POP_MACRO):
|
||||
Removed.
|
||||
(HANDLE_PRAGMA_PUSH_POP_MACRO): Remove guarded code.
|
||||
* doc/tm.texi (HANDLE_PRAGMA_PUSH_POP_MACRO): Removed.
|
||||
|
||||
2009-11-10 Chao-ying Fu <fu@mips.com>
|
||||
|
||||
|
@ -126,7 +150,7 @@
|
|||
2009-10-20 Pascal Obry <obry@adacore.com>
|
||||
Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* config/i386/cygming.h (DWARF_FRAME_REGNUM): Add enclosing parens.
|
||||
* config/i386/cygming.h (DWARF_FRAME_REGNUM): Add enclosing parens.
|
||||
|
||||
2009-10-23 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
|
|
|
@ -1469,11 +1469,6 @@ static unsigned int initial_ix86_arch_features[X86_ARCH_LAST] = {
|
|||
|
||||
/* X86_ARCH_BSWAP: Byteswap was added for 80486. */
|
||||
~m_386,
|
||||
|
||||
/* X86_ARCH_CALL_ESP: P6 processors will jump to the address after
|
||||
the decrement (so they will execute return address as code). See
|
||||
Pentium Pro errata 70, Pentium 2 errata A33, Pentium 3 errata E17. */
|
||||
~(m_386 | m_486 | m_PENT | m_PPRO),
|
||||
};
|
||||
|
||||
static const unsigned int x86_accumulate_outgoing_args
|
||||
|
|
|
@ -395,7 +395,6 @@ enum ix86_arch_indices {
|
|||
X86_ARCH_CMPXCHG8B,
|
||||
X86_ARCH_XADD,
|
||||
X86_ARCH_BSWAP,
|
||||
X86_ARCH_CALL_ESP,
|
||||
|
||||
X86_ARCH_LAST
|
||||
};
|
||||
|
@ -407,7 +406,6 @@ extern unsigned char ix86_arch_features[X86_ARCH_LAST];
|
|||
#define TARGET_CMPXCHG8B ix86_arch_features[X86_ARCH_CMPXCHG8B]
|
||||
#define TARGET_XADD ix86_arch_features[X86_ARCH_XADD]
|
||||
#define TARGET_BSWAP ix86_arch_features[X86_ARCH_BSWAP]
|
||||
#define TARGET_CALL_ESP ix86_arch_features[X86_ARCH_CALL_ESP]
|
||||
|
||||
#define TARGET_FISTTP (TARGET_SSE3 && TARGET_80387)
|
||||
|
||||
|
|
|
@ -14969,25 +14969,12 @@
|
|||
}
|
||||
[(set_attr "type" "call")])
|
||||
|
||||
(define_insn "*call_pop_1_esp"
|
||||
[(call (mem:QI (match_operand:SI 0 "call_insn_operand" "rsm"))
|
||||
(match_operand:SI 1 "" ""))
|
||||
(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG)
|
||||
(match_operand:SI 2 "immediate_operand" "i")))]
|
||||
"!TARGET_64BIT && TARGET_CALL_ESP && !SIBLING_CALL_P (insn)"
|
||||
{
|
||||
if (constant_call_address_operand (operands[0], Pmode))
|
||||
return "call\t%P0";
|
||||
return "call\t%A0";
|
||||
}
|
||||
[(set_attr "type" "call")])
|
||||
|
||||
(define_insn "*call_pop_1"
|
||||
[(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lsm"))
|
||||
(match_operand:SI 1 "" ""))
|
||||
(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG)
|
||||
(match_operand:SI 2 "immediate_operand" "i")))]
|
||||
"!TARGET_64BIT && !TARGET_CALL_ESP && !SIBLING_CALL_P (insn)"
|
||||
"!TARGET_64BIT && !SIBLING_CALL_P (insn)"
|
||||
{
|
||||
if (constant_call_address_operand (operands[0], Pmode))
|
||||
return "call\t%P0";
|
||||
|
@ -15038,21 +15025,10 @@
|
|||
}
|
||||
[(set_attr "type" "call")])
|
||||
|
||||
(define_insn "*call_1_esp"
|
||||
[(call (mem:QI (match_operand:SI 0 "call_insn_operand" "rsm"))
|
||||
(match_operand 1 "" ""))]
|
||||
"!TARGET_64BIT && TARGET_CALL_ESP && !SIBLING_CALL_P (insn)"
|
||||
{
|
||||
if (constant_call_address_operand (operands[0], Pmode))
|
||||
return "call\t%P0";
|
||||
return "call\t%A0";
|
||||
}
|
||||
[(set_attr "type" "call")])
|
||||
|
||||
(define_insn "*call_1"
|
||||
[(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lsm"))
|
||||
(match_operand 1 "" ""))]
|
||||
"!TARGET_64BIT && !TARGET_CALL_ESP && !SIBLING_CALL_P (insn)"
|
||||
"!TARGET_64BIT && !SIBLING_CALL_P (insn)"
|
||||
{
|
||||
if (constant_call_address_operand (operands[0], Pmode))
|
||||
return "call\t%P0";
|
||||
|
@ -21491,27 +21467,13 @@
|
|||
}
|
||||
[(set_attr "type" "callv")])
|
||||
|
||||
(define_insn "*call_value_pop_1_esp"
|
||||
[(set (match_operand 0 "" "")
|
||||
(call (mem:QI (match_operand:SI 1 "call_insn_operand" "rsm"))
|
||||
(match_operand:SI 2 "" "")))
|
||||
(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG)
|
||||
(match_operand:SI 3 "immediate_operand" "i")))]
|
||||
"!TARGET_64BIT && TARGET_CALL_ESP && !SIBLING_CALL_P (insn)"
|
||||
{
|
||||
if (constant_call_address_operand (operands[1], Pmode))
|
||||
return "call\t%P1";
|
||||
return "call\t%A1";
|
||||
}
|
||||
[(set_attr "type" "callv")])
|
||||
|
||||
(define_insn "*call_value_pop_1"
|
||||
[(set (match_operand 0 "" "")
|
||||
(call (mem:QI (match_operand:SI 1 "call_insn_operand" "lsm"))
|
||||
(match_operand:SI 2 "" "")))
|
||||
(set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG)
|
||||
(match_operand:SI 3 "immediate_operand" "i")))]
|
||||
"!TARGET_64BIT && !TARGET_CALL_ESP && !SIBLING_CALL_P (insn)"
|
||||
"!TARGET_64BIT && !SIBLING_CALL_P (insn)"
|
||||
{
|
||||
if (constant_call_address_operand (operands[1], Pmode))
|
||||
return "call\t%P1";
|
||||
|
@ -21583,23 +21545,11 @@
|
|||
}
|
||||
[(set_attr "type" "callv")])
|
||||
|
||||
(define_insn "*call_value_1_esp"
|
||||
[(set (match_operand 0 "" "")
|
||||
(call (mem:QI (match_operand:SI 1 "call_insn_operand" "rsm"))
|
||||
(match_operand:SI 2 "" "")))]
|
||||
"!TARGET_64BIT && TARGET_CALL_ESP && !SIBLING_CALL_P (insn)"
|
||||
{
|
||||
if (constant_call_address_operand (operands[1], Pmode))
|
||||
return "call\t%P1";
|
||||
return "call\t%A1";
|
||||
}
|
||||
[(set_attr "type" "callv")])
|
||||
|
||||
(define_insn "*call_value_1"
|
||||
[(set (match_operand 0 "" "")
|
||||
(call (mem:QI (match_operand:SI 1 "call_insn_operand" "lsm"))
|
||||
(match_operand:SI 2 "" "")))]
|
||||
"!TARGET_64BIT && !TARGET_CALL_ESP && !SIBLING_CALL_P (insn)"
|
||||
"!TARGET_64BIT && !SIBLING_CALL_P (insn)"
|
||||
{
|
||||
if (constant_call_address_operand (operands[1], Pmode))
|
||||
return "call\t%P1";
|
||||
|
|
|
@ -547,9 +547,7 @@
|
|||
;; Test for a valid operand for a call instruction.
|
||||
(define_predicate "call_insn_operand"
|
||||
(ior (match_operand 0 "constant_call_address_operand")
|
||||
(ior (and (match_operand 0 "register_no_elim_operand")
|
||||
(ior (match_test "TARGET_CALL_ESP")
|
||||
(match_operand 0 "index_register_operand")))
|
||||
(ior (match_operand 0 "index_register_operand")
|
||||
(match_operand 0 "memory_operand"))))
|
||||
|
||||
;; Similarly, but for tail calls, in which we cannot allow memory references.
|
||||
|
|
Loading…
Reference in New Issue