]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/14558 (ICE while building xfree86 4.3: insn does not satisfy its constra...
authorPhilip Blundell <philb@gnu.org>
Fri, 12 Mar 2004 19:21:24 +0000 (19:21 +0000)
committerPhil Blundell <pb@gcc.gnu.org>
Fri, 12 Mar 2004 19:21:24 +0000 (19:21 +0000)
2004-03-12  Philip Blundell  <philb@gnu.org>

PR target/14558
Backport from trunk:
2004-02-25  Richard Earnshaw  <rearnsha@arm.com>
* arm.h (ARM_GO_IF_LEGITIMATE_INDEX): For QImode the range of
an offset is -4095...+4095 inclusive.

From-SVN: r79403

gcc/ChangeLog
gcc/config/arm/arm.h

index 4f14067b3164769050bd0a661b280b3697fe6563..7561fcd3d70ecc5e4094661bddca9958f6ec0965 100644 (file)
@@ -1,3 +1,11 @@
+2004-03-12  Philip Blundell  <philb@gnu.org>
+
+       PR target/14558
+       Backport from trunk:
+       2004-02-25  Richard Earnshaw  <rearnsha@arm.com>
+       * arm.h (ARM_GO_IF_LEGITIMATE_INDEX): For QImode the range of
+       an offset is -4095...+4095 inclusive.
+
 2004-03-11  Richard Henderson  <rth@redhat.com>
 
        PR target/14539
index 5b03c6ffec22f468a484430871df460eb2002bf4..cb49f572efbf6e4b6ec70188fe9a5fe9dcd96341 100644 (file)
@@ -2003,10 +2003,17 @@ typedef struct
                  && INTVAL (op) <= 31)                                 \
                goto LABEL;                                             \
            }                                                           \
-         /* NASTY: Since this limits the addressing of unsigned        \
-            byte loads.  */                                            \
-         range = ((MODE) == HImode || (MODE) == QImode)                \
-           ? (arm_arch4 ? 256 : 4095) : 4096;                          \
+         /* XXX For ARM v4 we may be doing a sign-extend operation     \
+            during the load, but that has a restricted addressing      \
+            range and we are unable to tell here whether that is the   \
+            case.  To be safe we restrict all loads to that            \
+            range.  */                                                 \
+          if (arm_arch4)                                               \
+           range = (mode == HImode || mode == QImode) ? 256 : 4096;    \
+         else if (mode == HImode)                                      \
+           range = 4095;                                               \
+         else                                                          \
+           range = 4096;                                               \
          if (code == CONST_INT && INTVAL (INDEX) < range               \
              && INTVAL (INDEX) > -range)                               \
            goto LABEL;                                                 \