aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2012-03-19 14:09:44 +0100
committerUros Bizjak <uros@gcc.gnu.org>2012-03-19 14:09:44 +0100
commit79f3658a243933ec102cf7c8d2e702645020169e (patch)
tree903d73a0086395ca9678278f2a67b82532131b3e
parenta1b60e499f968e348d3465db67786e2571e8ed96 (diff)
downloadgcc-79f3658a243933ec102cf7c8d2e702645020169e.zip
gcc-79f3658a243933ec102cf7c8d2e702645020169e.tar.gz
gcc-79f3658a243933ec102cf7c8d2e702645020169e.tar.bz2
i386.c (ix86_expand_prologue): Use Pmode mode consistently.
* config/i386/i386.c (ix86_expand_prologue) <CM_LARGE_PIC>: Use Pmode mode consistently. Use ix86_gen_add3. Assert that Pmode == DImode. (ix86_expand_split_stack_prologue): Use ix86_gen_add3. (ix86_split_long_move): Ditto. (legitimize_tls_address): Use ix86_gen_sub3. (construct_plt_address): Assert that Pmode == DImode. From-SVN: r185520
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/i386/i386.c38
2 files changed, 32 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c9744de..477fbc0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2012-03-19 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_expand_prologue) <CM_LARGE_PIC>: Use Pmode
+ mode consistently. Use ix86_gen_add3. Assert that Pmode == DImode.
+ (ix86_expand_split_stack_prologue): Use ix86_gen_add3.
+ (ix86_split_long_move): Ditto.
+ (legitimize_tls_address): Use ix86_gen_sub3.
+ (construct_plt_address): Assert that Pmode == DImode.
+
2012-03-18 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md: Remove empty predicates and/or constraints.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 78a366e..9aa5ee7 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -10458,15 +10458,19 @@ ix86_expand_prologue (void)
{
if (ix86_cmodel == CM_LARGE_PIC)
{
- rtx tmp_reg = gen_rtx_REG (DImode, R11_REG);
- rtx label = gen_label_rtx ();
+ rtx label, tmp_reg;
+
+ gcc_assert (Pmode == DImode);
+ label = gen_label_rtx ();
emit_label (label);
LABEL_PRESERVE_P (label) = 1;
+ tmp_reg = gen_rtx_REG (Pmode, R11_REG);
gcc_assert (REGNO (pic_offset_table_rtx) != REGNO (tmp_reg));
- insn = emit_insn (gen_set_rip_rex64 (pic_offset_table_rtx, label));
+ insn = emit_insn (gen_set_rip_rex64 (pic_offset_table_rtx,
+ label));
insn = emit_insn (gen_set_got_offset_rex64 (tmp_reg, label));
- insn = emit_insn (gen_adddi3 (pic_offset_table_rtx,
- pic_offset_table_rtx, tmp_reg));
+ insn = emit_insn (ix86_gen_add3 (pic_offset_table_rtx,
+ pic_offset_table_rtx, tmp_reg));
}
else
insn = emit_insn (gen_set_got_rex64 (pic_offset_table_rtx));
@@ -11196,8 +11200,8 @@ ix86_expand_split_stack_prologue (void)
else
{
emit_move_insn (scratch_reg, offset);
- emit_insn (gen_adddi3 (scratch_reg, scratch_reg,
- stack_pointer_rtx));
+ emit_insn (ix86_gen_add3 (scratch_reg, scratch_reg,
+ stack_pointer_rtx));
}
current = scratch_reg;
}
@@ -11244,6 +11248,7 @@ ix86_expand_split_stack_prologue (void)
{
HOST_WIDE_INT argval;
+ gcc_assert (Pmode == DImode);
/* When using the large model we need to load the address
into a register, and we've run out of registers. So we
switch to a different calling convention, and we call a
@@ -11266,7 +11271,7 @@ ix86_expand_split_stack_prologue (void)
LABEL_PRESERVE_P (label) = 1;
emit_insn (gen_set_rip_rex64 (reg10, label));
emit_insn (gen_set_got_offset_rex64 (reg11, label));
- emit_insn (gen_adddi3 (reg10, reg10, reg11));
+ emit_insn (ix86_gen_add3 (reg10, reg10, reg11));
x = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, split_stack_fn_large),
UNSPEC_GOT);
x = gen_rtx_CONST (Pmode, x);
@@ -12722,7 +12727,7 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
{
base = get_thread_pointer (true);
dest = gen_reg_rtx (Pmode);
- emit_insn (gen_subsi3 (dest, base, off));
+ emit_insn (ix86_gen_sub3 (dest, base, off));
}
break;
@@ -12743,7 +12748,7 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
{
base = get_thread_pointer (true);
dest = gen_reg_rtx (Pmode);
- emit_insn (gen_subsi3 (dest, base, off));
+ emit_insn (ix86_gen_sub3 (dest, base, off));
}
break;
@@ -20626,8 +20631,8 @@ ix86_split_long_move (rtx operands[])
if (nparts == 3)
{
if (TARGET_128BIT_LONG_DOUBLE && mode == XFmode)
- emit_insn (gen_addsi3 (stack_pointer_rtx,
- stack_pointer_rtx, GEN_INT (-4)));
+ emit_insn (ix86_gen_add3 (stack_pointer_rtx,
+ stack_pointer_rtx, GEN_INT (-4)));
emit_move_insn (part[0][2], part[1][2]);
}
else if (nparts == 4)
@@ -22975,14 +22980,17 @@ ix86_expand_strlen (rtx out, rtx src, rtx eoschar, rtx align)
rtx
construct_plt_address (rtx symbol)
{
- rtx tmp = gen_reg_rtx (Pmode);
- rtx unspec = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, symbol), UNSPEC_PLTOFF);
+ rtx tmp, unspec;
gcc_assert (GET_CODE (symbol) == SYMBOL_REF);
gcc_assert (ix86_cmodel == CM_LARGE_PIC);
+ gcc_assert (Pmode == DImode);
+
+ tmp = gen_reg_rtx (Pmode);
+ unspec = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, symbol), UNSPEC_PLTOFF);
emit_move_insn (tmp, gen_rtx_CONST (Pmode, unspec));
- emit_insn (gen_adddi3 (tmp, tmp, pic_offset_table_rtx));
+ emit_insn (ix86_gen_add3 (tmp, tmp, pic_offset_table_rtx));
return tmp;
}