summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2000-08-05 18:24:19 +0000
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2000-08-05 18:24:19 +0000
commitbd5c69bd0ba3058a75f7ee3bfaa628254dbad01e (patch)
treec0c1b04a63c7ba64a04c706fb2299f9d6ddaa1ff
parentf43cd02fc18f263ae813407c65b7d6fd0cd9dc3a (diff)
downloadppe42-gcc-bd5c69bd0ba3058a75f7ee3bfaa628254dbad01e.tar.gz
ppe42-gcc-bd5c69bd0ba3058a75f7ee3bfaa628254dbad01e.zip
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@35506 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/i386.h14
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20000731-1.x3
4 files changed, 20 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2f75308057f..78006cf794a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index fe4a31ee72c..62f5fb0e568 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 463c14c36bf..aca5368d465 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 8d4b6e23f33..00000000000
--- a/gcc/testsuite/gcc.c-torture/execute/20000731-1.x
+++ /dev/null
@@ -1,3 +0,0 @@
-# Doesn't work. Hasn't worked ever, I think.
-set torture_execute_xfail "i?86-*-*"
-return 0
OpenPOWER on IntegriCloud