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 + + * 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 * 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 + + * gcc.c-torture/execute/20000731-1.x: Delete. + 2000-08-04 Zack Weinberg * 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