Disallow negative constant address for x32
authorH.J. Lu <hjl@gcc.gnu.org>
Fri, 10 Feb 2012 18:23:12 +0000 (10:23 -0800)
committerH.J. Lu <hjl@gcc.gnu.org>
Fri, 10 Feb 2012 18:23:12 +0000 (10:23 -0800)
gcc/

2012-02-10  Uros Bizjak  <ubizjak@gmail.com>

PR target/52146
* config/i386/i386.c (ix86_legitimate_address_p): Disallow
negative constant address for x32.

gcc/testsuite/

2012-02-10  H.J. Lu  <hongjiu.lu@intel.com>

PR target/52146
* gcc.target/i386/pr52146.c: New.

From-SVN: r184111

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog

index d3ca6b516caffa26848b267958778d2bfe1d77c5..abe8c6164fa53c7bd6ef1a99cd3ddb41cc7844d7 100644 (file)
@@ -1,3 +1,9 @@
+2012-02-10  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/52146
+       * config/i386/i386.c (ix86_legitimate_address_p): Disallow
+       negative constant address for x32.
+
 2012-02-10  Richard Henderson  <rth@redhat.com>
 
         * tree-ssa-dce.c (propagate_necessity): Handle GIMPLE_TRANSACTION.
index b901ee648e11d70e81a6d1ec48b32310426ca441..fad5e66d9c91bad0fe07d7351db7f3c559fc66bc 100644 (file)
@@ -11932,6 +11932,13 @@ ix86_legitimate_address_p (enum machine_mode mode ATTRIBUTE_UNUSED,
   rtx base, index, disp;
   HOST_WIDE_INT scale;
 
+  /* Since constant address in x32 is signed extended to 64bit,
+     we have to prevent addresses from 0x80000000 to 0xffffffff.  */
+  if (TARGET_X32
+      && CONST_INT_P (addr)
+      && INTVAL (addr) < 0)
+    return false;
+
   if (ix86_decompose_address (addr, &parts) <= 0)
     /* Decomposition failed.  */
     return false;
index 86ea212cfae4482f8c15d8ca8bbcf902e9abddb8..ecf16a18a2d3efbf01d6793d7072aed32583e8b2 100644 (file)
@@ -1,3 +1,8 @@
+2012-02-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/52146
+       * gcc.target/i386/pr52146.c: New.
+
 2012-02-10  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/52177