Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/gnu/dist/gcc/gcc Pull in sparc64 fix from gcc cvs:



details:   https://anonhg.NetBSD.org/src/rev/19a03ec9189a
branches:  trunk
changeset: 559728:19a03ec9189a
user:      martin <martin%NetBSD.org@localhost>
date:      Mon Mar 22 22:56:09 2004 +0000

description:
Pull in sparc64 fix from gcc cvs:
Forbid mode changes from SImode for lower FP regs if ARCH64.
Fixes PR 23380 and PR 23124.

diffstat:

 gnu/dist/gcc/gcc/ChangeLog            |   7 +++++++
 gnu/dist/gcc/gcc/config/sparc/sparc.h |  14 ++++++++++++++
 2 files changed, 21 insertions(+), 0 deletions(-)

diffs (38 lines):

diff -r 3344d4476e16 -r 19a03ec9189a gnu/dist/gcc/gcc/ChangeLog
--- a/gnu/dist/gcc/gcc/ChangeLog        Mon Mar 22 20:28:57 2004 +0000
+++ b/gnu/dist/gcc/gcc/ChangeLog        Mon Mar 22 22:56:09 2004 +0000
@@ -1,3 +1,10 @@
+2004-01-27  Eric Botcazou  <ebotcazou%libertysurf.fr@localhost>
+
+       PR target/10904
+       PR target/13058
+       * config/sparc/sparc.h (CANNOT_CHANGE_MODE_CLASS): New.
+       Forbid mode changes from SImode for lower FP regs if ARCH64.
+
 2004-02-14  Release Manager
 
        * GCC 3.3.3 Released.
diff -r 3344d4476e16 -r 19a03ec9189a gnu/dist/gcc/gcc/config/sparc/sparc.h
--- a/gnu/dist/gcc/gcc/config/sparc/sparc.h     Mon Mar 22 20:28:57 2004 +0000
+++ b/gnu/dist/gcc/gcc/config/sparc/sparc.h     Mon Mar 22 22:56:09 2004 +0000
@@ -1233,6 +1233,20 @@
    {-1, -1, -1, 0x20}, /* GENERAL_OR_EXTRA_FP_REGS */  \
    {-1, -1, -1, 0x3f}} /* ALL_REGS */
 
+/* Defines invalid mode changes.  Borrowed from pa64-regs.h.
+
+   SImode loads to floating-point registers are not zero-extended.
+   The definition for LOAD_EXTEND_OP specifies that integer loads
+   narrower than BITS_PER_WORD will be zero-extended.  As a result,
+   we inhibit changes from SImode unless they are to a mode that is
+   identical in size.  */
+
+#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS)              \
+  (TARGET_ARCH64                                               \
+   && (FROM) == SImode                                         \
+   && GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO)               \
+   ? reg_classes_intersect_p (CLASS, FP_REGS) : 0)
+
 /* The same information, inverted:
    Return the class number of the smallest class containing
    reg number REGNO.  This could be a conditional expression



Home | Main Index | Thread Index | Old Index