Support ptr_mode != Pmode in x86_output_mi_thunk.
2011-07-13 H.J. Lu <hongjiu.lu@intel.com> * config/i386/i386.c (x86_output_mi_thunk): Support ptr_mode != Pmode. * config/i386/i386.md (*addsi_1_zext): Renamed to ... (addsi_1_zext): This. From-SVN: r176238
This commit is contained in:
parent
dbf32ca5be
commit
72fbc381fe
|
@ -1,3 +1,11 @@
|
||||||
|
2011-07-13 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* config/i386/i386.c (x86_output_mi_thunk): Support ptr_mode
|
||||||
|
!= Pmode.
|
||||||
|
|
||||||
|
* config/i386/i386.md (*addsi_1_zext): Renamed to ...
|
||||||
|
(addsi_1_zext): This.
|
||||||
|
|
||||||
2011-07-13 Bernd Schmidt <bernds@codesourcery.com>
|
2011-07-13 Bernd Schmidt <bernds@codesourcery.com>
|
||||||
|
|
||||||
* doc/tm.texi.in (TARGET_ASM_MERGEABLE_RODATA_PREFIX): Add hook.
|
* doc/tm.texi.in (TARGET_ASM_MERGEABLE_RODATA_PREFIX): Add hook.
|
||||||
|
|
|
@ -29442,7 +29442,7 @@ x86_output_mi_thunk (FILE *file,
|
||||||
/* Adjust the this parameter by a value stored in the vtable. */
|
/* Adjust the this parameter by a value stored in the vtable. */
|
||||||
if (vcall_offset)
|
if (vcall_offset)
|
||||||
{
|
{
|
||||||
rtx vcall_addr, vcall_mem;
|
rtx vcall_addr, vcall_mem, this_mem;
|
||||||
unsigned int tmp_regno;
|
unsigned int tmp_regno;
|
||||||
|
|
||||||
if (TARGET_64BIT)
|
if (TARGET_64BIT)
|
||||||
|
@ -29457,7 +29457,10 @@ x86_output_mi_thunk (FILE *file,
|
||||||
}
|
}
|
||||||
tmp = gen_rtx_REG (Pmode, tmp_regno);
|
tmp = gen_rtx_REG (Pmode, tmp_regno);
|
||||||
|
|
||||||
emit_move_insn (tmp, gen_rtx_MEM (ptr_mode, this_reg));
|
this_mem = gen_rtx_MEM (ptr_mode, this_reg);
|
||||||
|
if (Pmode != ptr_mode)
|
||||||
|
this_mem = gen_rtx_ZERO_EXTEND (Pmode, this_mem);
|
||||||
|
emit_move_insn (tmp, this_mem);
|
||||||
|
|
||||||
/* Adjust the this parameter. */
|
/* Adjust the this parameter. */
|
||||||
vcall_addr = plus_constant (tmp, vcall_offset);
|
vcall_addr = plus_constant (tmp, vcall_offset);
|
||||||
|
@ -29469,8 +29472,14 @@ x86_output_mi_thunk (FILE *file,
|
||||||
vcall_addr = gen_rtx_PLUS (Pmode, tmp, tmp2);
|
vcall_addr = gen_rtx_PLUS (Pmode, tmp, tmp2);
|
||||||
}
|
}
|
||||||
|
|
||||||
vcall_mem = gen_rtx_MEM (Pmode, vcall_addr);
|
vcall_mem = gen_rtx_MEM (ptr_mode, vcall_addr);
|
||||||
emit_insn (ix86_gen_add3 (this_reg, this_reg, vcall_mem));
|
if (Pmode != ptr_mode)
|
||||||
|
emit_insn (gen_addsi_1_zext (this_reg,
|
||||||
|
gen_rtx_REG (ptr_mode,
|
||||||
|
REGNO (this_reg)),
|
||||||
|
vcall_mem));
|
||||||
|
else
|
||||||
|
emit_insn (ix86_gen_add3 (this_reg, this_reg, vcall_mem));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If necessary, drop THIS back to its stack slot. */
|
/* If necessary, drop THIS back to its stack slot. */
|
||||||
|
|
|
@ -5508,7 +5508,7 @@
|
||||||
;; operands so proper swapping will be done in reload. This allow
|
;; operands so proper swapping will be done in reload. This allow
|
||||||
;; patterns constructed from addsi_1 to match.
|
;; patterns constructed from addsi_1 to match.
|
||||||
|
|
||||||
(define_insn "*addsi_1_zext"
|
(define_insn "addsi_1_zext"
|
||||||
[(set (match_operand:DI 0 "register_operand" "=r,r,r")
|
[(set (match_operand:DI 0 "register_operand" "=r,r,r")
|
||||||
(zero_extend:DI
|
(zero_extend:DI
|
||||||
(plus:SI (match_operand:SI 1 "nonimmediate_operand" "%0,r,r")
|
(plus:SI (match_operand:SI 1 "nonimmediate_operand" "%0,r,r")
|
||||||
|
|
Loading…
Reference in New Issue