Check ptr_mode and use Pmode in ix86_trampoline_init

2012-03-11  H.J. Lu  <hongjiu.lu@intel.com>

	* config/i386/i386.c (ix86_trampoline_init): Use movl for 64bit if
	ptr_mode == SImode.  Replace DImode with Pmode or ptr_mode.

From-SVN: r185197
This commit is contained in:
H.J. Lu 2012-03-11 16:37:45 +00:00 committed by H.J. Lu
parent 649507afb0
commit ba61421d58
2 changed files with 14 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2012-03-11 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (ix86_trampoline_init): Use movl for 64bit if
ptr_mode == SImode. Replace DImode with Pmode or ptr_mode.
2012-03-11 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (x86_this_parameter): Replace DImode with

View File

@ -24309,10 +24309,13 @@ ix86_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
/* Load the function address to r11. Try to load address using
the shorter movl instead of movabs. We may want to support
movq for kernel mode, but kernel does not use trampolines at
the moment. */
if (x86_64_zext_immediate_operand (fnaddr, VOIDmode))
the moment. FNADDR is a 32bit address and may not be in
DImode when ptr_mode == SImode. Always use movl in this
case. */
if (ptr_mode == SImode
|| x86_64_zext_immediate_operand (fnaddr, VOIDmode))
{
fnaddr = copy_to_mode_reg (DImode, fnaddr);
fnaddr = copy_to_mode_reg (Pmode, fnaddr);
mem = adjust_address (m_tramp, HImode, offset);
emit_move_insn (mem, gen_int_mode (0xbb41, HImode));
@ -24331,9 +24334,9 @@ ix86_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
offset += 10;
}
/* Load static chain using movabs to r10. Use the
shorter movl instead of movabs for x32. */
if (TARGET_X32)
/* Load static chain using movabs to r10. Use the shorter movl
instead of movabs when ptr_mode == SImode. */
if (ptr_mode == SImode)
{
opcode = 0xba41;
size = 6;