OSDN Git Service

* config/mips/mips.c (mips_legitimate_address_p): Limit "la" addresses.
authoraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Aug 2001 17:02:56 +0000 (17:02 +0000)
committeraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Aug 2001 17:02:56 +0000 (17:02 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44721 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/mips/mips.c

index 37852f3..c8e70c3 100644 (file)
@@ -1,3 +1,7 @@
+2001-08-07  Aldy Hernandez  <aldyh@redhat.com>
+
+       * config/mips/mips.c (mips_legitimate_address_p): Limit "la" addresses.
+
 2001-08-08  Jason Merrill  <jason_merrill@redhat.com>
 
        * alias.c (get_alias_set): Return a previously calculated
index 7a2d962..a2caf2a 100644 (file)
@@ -1364,9 +1364,12 @@ mips_legitimate_address_p (mode, xinsn, strict)
                  || code1 != CONST
                  || GET_CODE (XEXP (xplus1, 0)) != MINUS)
              /* When assembling for machines with 64 bit registers,
-                the assembler will not sign-extend the constant "foo"
-                in "la x, foo(x)" */
-             && (!TARGET_64BIT || (code1 == CONST_INT && INTVAL (xplus1) > 0))
+                the assembler will sign-extend the constant "foo"
+                in "la x, foo(x)" yielding the wrong result for:
+                (set (blah:DI) (plus x y)).  */
+             && (!TARGET_64BIT
+                 || trunc_int_for_mode (INTVAL (xplus1),
+                                        SImode) == INTVAL (xplus1))
              && !TARGET_MIPS16)
            return 1;
        }