aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/i386/i386.c
diff options
context:
space:
mode:
authorhubicka <>2005-10-31 18:42:23 +0000
committerhubicka <>2005-10-31 18:42:23 +0000
commit4a8ee263da650096e9d0015e8b8fb7985a3cb330 (patch)
treeffab745ca3bb9c7d53c6bf3467a3082d8905c73a /gcc/config/i386/i386.c
parentb3c906963c006208dad3b6f9f23fdca3af502331 (diff)
PR target/20928
* i386.c (legitimize_pic_address): Deal with large immediates. * gcc.c-torture/compile/pr20928.c: New test.
Diffstat (limited to 'gcc/config/i386/i386.c')
-rw-r--r--gcc/config/i386/i386.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 5fe9e3f0062..7b3f8887996 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -6016,7 +6016,18 @@ legitimize_pic_address (rtx orig, rtx reg)
}
else
{
- if (GET_CODE (addr) == CONST)
+ if (GET_CODE (addr) == CONST_INT
+ && !x86_64_immediate_operand (addr, VOIDmode))
+ {
+ if (reg)
+ {
+ emit_move_insn (reg, addr);
+ new = reg;
+ }
+ else
+ new = force_reg (Pmode, addr);
+ }
+ else if (GET_CODE (addr) == CONST)
{
addr = XEXP (addr, 0);