diff options
author | Zack Weinberg <zack@wolery.cumb.org> | 2000-08-05 18:24:19 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 2000-08-05 18:24:19 +0000 |
commit | 26f2c02a97d337b9d4f00067957ad86db350cc2c (patch) | |
tree | c0c1b04a63c7ba64a04c706fb2299f9d6ddaa1ff /gcc | |
parent | 0681921da12cb172489157f10e460f31f5ee320f (diff) | |
download | gcc-26f2c02a97d337b9d4f00067957ad86db350cc2c.zip gcc-26f2c02a97d337b9d4f00067957ad86db350cc2c.tar.gz gcc-26f2c02a97d337b9d4f00067957ad86db350cc2c.tar.bz2 |
i386.h (FUNCTION_OK_FOR_SIBCALL): Not OK if DECL's return type is a float mode...
* 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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386.h | 14 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20000731-1.x | 3 |
4 files changed, 20 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2f75308..78006cf 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 fe4a31e..62f5fb0 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 463c14c..aca5368 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 8d4b6e2..0000000 --- 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 |