diff options
author | hubicka <> | 2005-10-31 18:42:23 +0000 |
---|---|---|
committer | hubicka <> | 2005-10-31 18:42:23 +0000 |
commit | 4a8ee263da650096e9d0015e8b8fb7985a3cb330 (patch) | |
tree | ffab745ca3bb9c7d53c6bf3467a3082d8905c73a /gcc/config/i386/i386.c | |
parent | b3c906963c006208dad3b6f9f23fdca3af502331 (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.c | 13 |
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); |