]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i386.h (CONST_DOUBLE_OK_FOR_LETTER_P): Return 0 when eliminating the frame pointer...
authorH.J. Lu <hjl@gnu.org>
Sun, 26 Jul 1998 00:35:12 +0000 (00:35 +0000)
committerJeff Law <law@gcc.gnu.org>
Sun, 26 Jul 1998 00:35:12 +0000 (18:35 -0600)
        * i386.h (CONST_DOUBLE_OK_FOR_LETTER_P): Return 0 when eliminating
        the frame pointer and compiling PIC code and reload has not completed.

From-SVN: r21393

gcc/ChangeLog
gcc/config/i386/i386.h

index 85d36f68cafc338a8ecb38f33ce37776b2289829..7517d2f42df8e7a8e71de21339dec8cd1c586b7b 100644 (file)
@@ -1,5 +1,8 @@
 Sun Jul 26 01:11:12 1998  H.J. Lu  (hjl@gnu.org)
 
+       * i386.h (CONST_DOUBLE_OK_FOR_LETTER_P): Return 0 when eliminating
+       the frame pointer and compiling PIC code and reload has not completed.
+
        * i386.c (output_to_reg): Add code to emulate non-popping DImode
        case.
 
index a575611e018eaa6f9e46aea86e73f3e31ab03714..b8fef1148447ad7c94d6609a10679a1f98d6219b 100644 (file)
@@ -896,10 +896,19 @@ enum reg_class
 /* Similar, but for floating constants, and defining letters G and H.
    Here VALUE is the CONST_DOUBLE rtx itself.  We allow constants even if
    TARGET_387 isn't set, because the stack register converter may need to
-   load 0.0 into the function value register. */
+   load 0.0 into the function value register.
+
+   We disallow these constants when -fomit-frame-pointer and compiling
+   PIC code since reload might need to force the constant to memory.
+   Forcing the constant to memory changes the elimination offsets after
+   the point where they must stay constant.
+
+   However, we must allow them after reload as completed as reg-stack.c
+   will create insns which use these constants.  */
 
 #define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C)  \
-  ((C) == 'G' ? standard_80387_constant_p (VALUE) : 0)
+  (((reload_completed || !flag_pic || !flag_omit_frame_pointer) && (C) == 'G') \
+   ? standard_80387_constant_p (VALUE) : 0)
 
 /* Place additional restrictions on the register class to use when it
    is necessary to be able to hold a value of mode MODE in a reload