diff options
author | Michael Meissner <meissner@gcc.gnu.org> | 1994-10-05 18:37:55 +0000 |
---|---|---|
committer | Michael Meissner <meissner@gcc.gnu.org> | 1994-10-05 18:37:55 +0000 |
commit | c399861d39d9ff39e9a088ff8ad9bce02be48aa9 (patch) | |
tree | 36f3073a375da537502abe82f5c45c09ae5ddedb /gcc | |
parent | 8ad4abfc946cff807bf8f0c23b1408ca1ce8a4d1 (diff) | |
download | gcc-c399861d39d9ff39e9a088ff8ad9bce02be48aa9.zip gcc-c399861d39d9ff39e9a088ff8ad9bce02be48aa9.tar.gz gcc-c399861d39d9ff39e9a088ff8ad9bce02be48aa9.tar.bz2 |
Supprt LABEL_REFs when using -fpic.
From-SVN: r8222
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/i386/i386.c | 20 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 6 |
2 files changed, 13 insertions, 13 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 3d5db62..7a7c607 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -1572,7 +1572,8 @@ legitimize_pic_address (orig, reg) if (reg == 0) reg = gen_reg_rtx (Pmode); - if (GET_CODE (addr) == SYMBOL_REF && SYMBOL_REF_FLAG (addr)) + if ((GET_CODE (addr) == SYMBOL_REF && SYMBOL_REF_FLAG (addr)) + || GET_CODE (addr) == LABEL_REF) new = gen_rtx (PLUS, Pmode, pic_offset_table_rtx, orig); else new = gen_rtx (MEM, Pmode, @@ -1854,7 +1855,9 @@ output_pic_addr_const (file, x, code) fprintf (file, "@GOTOFF(%%ebx)"); else if (code == 'P') fprintf (file, "@PLT"); - else if (GET_CODE (x) == LABEL_REF || ! SYMBOL_REF_FLAG (x)) + else if (GET_CODE (x) == LABEL_REF) + fprintf (file, "@GOTOFF"); + else if (! SYMBOL_REF_FLAG (x)) fprintf (file, "@GOT"); else fprintf (file, "@GOTOFF"); @@ -2176,15 +2179,14 @@ print_operand_address (file, addr) if (addr != 0) { - if (GET_CODE (addr) == LABEL_REF) + if (flag_pic) + output_pic_addr_const (file, addr, 0); + + else if (GET_CODE (addr) == LABEL_REF) output_asm_label (addr); + else - { - if (flag_pic) - output_pic_addr_const (file, addr, 0); - else - output_addr_const (file, addr); - } + output_addr_const (file, addr); } if (ireg != 0 && GET_CODE (ireg) == MULT) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index ae67a59..18d56f66 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -808,9 +808,7 @@ /* Fastest way to change a 0 to a 1. */ return AS1 (inc%L0,%0); - if (flag_pic - && GET_CODE (operands[1]) == SYMBOL_REF - && CONSTANT_POOL_ADDRESS_P (operands[1])) + if (flag_pic && SYMBOLIC_CONST (operands[1])) return AS2 (lea%L0,%a1,%0); return AS2 (mov%L0,%1,%0); @@ -2538,7 +2536,7 @@ ;; addsi3 is faster, so put this after. -(define_insn "" +(define_insn "movsi_lea" [(set (match_operand:SI 0 "register_operand" "=r") (match_operand:QI 1 "address_operand" "p"))] "" |