OSDN Git Service

PR target/40718
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 23 Aug 2009 12:14:26 +0000 (12:14 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 23 Aug 2009 12:14:26 +0000 (12:14 +0000)
* 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
gcc/config/i386/i386.md

index defd6b7..10333a9 100644 (file)
@@ -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  <amodra@bigpond.net.au>
 
index 3be44d3..0735d5e 100644 (file)
              (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" ""))