OSDN Git Service

* config/sh/sh.h (MODES_TIEABLE_P): Don't tie SFmode to other FP
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 11 Nov 2000 05:54:02 +0000 (05:54 +0000)
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 11 Nov 2000 05:54:02 +0000 (05:54 +0000)
modes.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37380 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/sh/sh.h

index b94b70e..0b2e121 100644 (file)
@@ -1,3 +1,8 @@
+2000-11-11  Alexandre Oliva  <aoliva@redhat.com>
+
+       * config/sh/sh.h (MODES_TIEABLE_P): Don't tie SFmode to other FP
+       modes.
+
 2000-11-10  Joseph S. Myers  <jsm28@cam.ac.uk>
 
        * gcc.texi, gcov.texi: Update dates and version numbers.
index 330fe2d..0e71052 100644 (file)
@@ -537,10 +537,15 @@ do {                                                                      \
 /* Value is 1 if it is a good idea to tie two pseudo registers
    when one has mode MODE1 and one has mode MODE2.
    If HARD_REGNO_MODE_OK could produce different values for MODE1 and MODE2,
-   for any hard reg, then this must be 0 for correct output.  */
+   for any hard reg, then this must be 0 for correct output.
+   That's the case for xd registers: we don't hold SFmode values in
+   them, so we can't tie an SFmode pseudos with one in another
+   floating-point mode.  */
 
 #define MODES_TIEABLE_P(MODE1, MODE2) \
-  ((MODE1) == (MODE2) || GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2))
+  ((MODE1) == (MODE2) \
+   || (GET_MODE_CLASS (MODE1) == GET_MODE_CLASS (MODE2) \
+       && (MODE1) != SFmode && (MODE2) != SFmode))
 
 /* Specify the registers used for certain standard purposes.
    The values of these macros are register numbers.  */