OSDN Git Service

Disallow negative constant address for x32
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Feb 2012 18:23:12 +0000 (18:23 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Feb 2012 18:23:12 +0000 (18:23 +0000)
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.

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

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

index d3ca6b5..abe8c61 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 b901ee6..fad5e66 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 86ea212..ecf16a1 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