From 877fb4507b254f536cbe3aa19e346092e0bf2661 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 10 Feb 2012 10:23:12 -0800 Subject: [PATCH] Disallow negative constant address for x32 gcc/ 2012-02-10 Uros Bizjak 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 PR target/52146 * gcc.target/i386/pr52146.c: New. From-SVN: r184111 --- gcc/ChangeLog | 6 ++++++ gcc/config/i386/i386.c | 7 +++++++ gcc/testsuite/ChangeLog | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d3ca6b5..abe8c61 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-02-10 Uros Bizjak + + PR target/52146 + * config/i386/i386.c (ix86_legitimate_address_p): Disallow + negative constant address for x32. + 2012-02-10 Richard Henderson * tree-ssa-dce.c (propagate_necessity): Handle GIMPLE_TRANSACTION. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index b901ee6..fad5e66 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 86ea212..ecf16a1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-02-10 H.J. Lu + + PR target/52146 + * gcc.target/i386/pr52146.c: New. + 2012-02-10 Jakub Jelinek PR middle-end/52177 -- 2.7.4