On 07/09/2011 02:36 PM, H.J. Lu wrote: > > Hi, > > Thunk is in ptr_mode, not Pmode. OK for trunk? > > Thanks. > > H.J. > --- > 2011-07-09 H.J. Lu <hongjiu...@intel.com> > > * config/i386/i386.c (x86_output_mi_thunk): Use ptr_mode instead > of Pmode for vtable adjustment. > > diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c > index 04cb07d..c852719 100644 > --- a/gcc/config/i386/i386.c > +++ b/gcc/config/i386/i386.c > @@ -29338,7 +29681,7 @@ x86_output_mi_thunk (FILE *file, > if (vcall_offset) > { > if (TARGET_64BIT) > - tmp = gen_rtx_REG (DImode, R10_REG); > + tmp = gen_rtx_REG (ptr_mode, R10_REG); > else > { > int tmp_regno = CX_REG; > @@ -29348,7 +29691,7 @@ x86_output_mi_thunk (FILE *file, > tmp = gen_rtx_REG (SImode, tmp_regno); > } > > - xops[0] = gen_rtx_MEM (Pmode, this_reg); > + xops[0] = gen_rtx_MEM (ptr_mode, this_reg); > xops[1] = tmp; > output_asm_insn ("mov%z1\t{%0, %1|%1, %0}", xops); > > @@ -29360,9 +29703,10 @@ x86_output_mi_thunk (FILE *file, > xops[0] = GEN_INT (vcall_offset); > xops[1] = tmp2; > output_asm_insn ("mov{q}\t{%0, %1|%1, %0}", xops); > - xops[0] = gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, tmp, tmp2)); > + xops[0] = gen_rtx_MEM (ptr_mode, > + gen_rtx_PLUS (Pmode, tmp, tmp2)); > } > - xops[1] = this_reg; > + xops[1] = gen_rtx_REG (ptr_mode, REGNO (this_reg));
Not ok. This is incoherent in its treatment of Pmode vs ptr_mode. You're creating an addition (plus:P (reg:ptr tmp) (reg:P tmp2)) I have a queued patch that replaces all of this with rtl. I will post it later today. r~