i386.h (FUNCTION_OK_FOR_SIBCALL): Not OK if DECL's return type is a float mode...
authorZack Weinberg <zack@wolery.cumb.org>
Sat, 5 Aug 2000 18:24:19 +0000 (18:24 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Sat, 5 Aug 2000 18:24:19 +0000 (18:24 +0000)
* i386.h (FUNCTION_OK_FOR_SIBCALL):  Not OK if DECL's return
type is a float mode, cfun->decl's return type is not, and
TARGET_FLOAT_RETURNS_IN_80387.

* gcc.c-torture/execute/20000731-1.x: Delete.

From-SVN: r35506

gcc/ChangeLog
gcc/config/i386/i386.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/20000731-1.x [deleted file]

index 2f75308057f4543ec7f71bb4097787bcb6575821..78006cf794aff2fc03b4c34718a680c98d882688 100644 (file)
@@ -1,3 +1,9 @@
+2000-08-05  Zack Weinberg  <zack@wolery.cumb.org>
+
+       * i386.h (FUNCTION_OK_FOR_SIBCALL):  Not OK if DECL's return
+       type is a float mode, cfun->decl's return type is not, and
+       TARGET_FLOAT_RETURNS_IN_80387.
+
 2000-08-04  Andreas Schwab  <schwab@suse.de>
 
        * cppmain.c (cb_def_pragma): Skip the first two tokens from the
index fe4a31ee72cfb2ac10c5fc808f072e7c7915c974..62f5fb0e568e701198dafa06a78f8801deb7a8c6 100644 (file)
@@ -1319,10 +1319,16 @@ typedef struct ix86_args {
 
 #define FUNCTION_ARG_PARTIAL_NREGS(CUM, MODE, TYPE, NAMED) 0
 
-/* If PIC, we cannot optimize sibling calls to global functions
-   because the PLT requires %ebx live.  */
-#define FUNCTION_OK_FOR_SIBCALL(DECL) \
-  (DECL && (! flag_pic || ! TREE_PUBLIC (DECL)))
+/* If PIC, we cannot make sibling calls to global functions
+   because the PLT requires %ebx live.
+   If we are returning floats on the register stack, we cannot make
+   sibling calls to functions that return floats.  (The stack adjust
+   instruction will wind up after the sibcall jump, and not be executed.) */
+#define FUNCTION_OK_FOR_SIBCALL(DECL) (DECL \
+   && (! flag_pic || ! TREE_PUBLIC (DECL)) \
+   && (! TARGET_FLOAT_RETURNS_IN_80387 \
+       || ! FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (DECL)))) \
+       || FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (cfun->decl))))))
 
 /* This macro is invoked just before the start of a function.
    It is used here to output code for -fpic that will load the
index 463c14c36bf516ce36f932efe1e1bb8de0149cca..aca5368d4654e61bd6ec69170c5447aad3e30360 100644 (file)
@@ -1,3 +1,7 @@
+2000-08-05  Zack Weinberg  <zack@wolery.cumb.org>
+
+       * gcc.c-torture/execute/20000731-1.x: Delete.  
+
 2000-08-04  Zack Weinberg  <zack@wolery.cumb.org>
 
        * lib/gcc-dg.exp: Set up TORTURE_OPTIONS, torture_with_loops,
diff --git a/gcc/testsuite/gcc.c-torture/execute/20000731-1.x b/gcc/testsuite/gcc.c-torture/execute/20000731-1.x
deleted file mode 100644 (file)
index 8d4b6e2..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# Doesn't work.  Hasn't worked ever, I think.
-set torture_execute_xfail "i?86-*-*"
-return 0