From 0d67d7588625b785226c45f3c8b8ca7c65e2852e Mon Sep 17 00:00:00 2001 From: uros Date: Sun, 23 Aug 2009 12:14:26 +0000 Subject: [PATCH] PR target/40718 * config/i386/i386.c (*call_pop_1): Disable for sibling calls. (*call_value_pop_1): Ditto. (*sibcall_pop_1): New insn pattern. (*sibcall_value_pop_1): Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@151029 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 2 ++ gcc/config/i386/i386.md | 26 +++++++++++++++----------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index defd6b7..10333a9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -2,7 +2,9 @@ PR target/40718 * config/i386/i386.c (*call_pop_1): Disable for sibling calls. + (*call_value_pop_1): Ditto. (*sibcall_pop_1): New insn pattern. + (*sibcall_value_pop_1): Ditto. 2009-08-23 Alan Modra diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 3be44d3..0735d5e 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -22095,22 +22095,26 @@ (match_operand:SI 2 "" ""))) (set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) (match_operand:SI 3 "immediate_operand" "i")))] - "!TARGET_64BIT" + "!SIBLING_CALL_P (insn) && !TARGET_64BIT" { if (constant_call_address_operand (operands[1], Pmode)) - { - if (SIBLING_CALL_P (insn)) - return "jmp\t%P1"; - else - return "call\t%P1"; - } - if (SIBLING_CALL_P (insn)) - return "jmp\t%A1"; - else - return "call\t%A1"; + return "call\t%P1"; + return "call\t%A1"; } [(set_attr "type" "callv")]) +(define_insn "*sibcall_value_pop_1" + [(set (match_operand 0 "" "") + (call (mem:QI (match_operand:SI 1 "call_insn_operand" "s,U")) + (match_operand:SI 2 "" ""))) + (set (reg:SI SP_REG) (plus:SI (reg:SI SP_REG) + (match_operand:SI 3 "immediate_operand" "i,i")))] + "SIBLING_CALL_P (insn) && !TARGET_64BIT" + "@ + jmp\t%P1 + jmp\t%A1" + [(set_attr "type" "callv")]) + (define_insn "*call_value_0" [(set (match_operand 0 "" "") (call (mem:QI (match_operand:SI 1 "constant_call_address_operand" "")) -- 2.7.4