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:
parent
649507afb0
commit
ba61421d58
|
@ -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>
|
2012-03-11 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* config/i386/i386.c (x86_this_parameter): Replace DImode with
|
* config/i386/i386.c (x86_this_parameter): Replace DImode with
|
||||||
|
|
|
@ -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
|
/* Load the function address to r11. Try to load address using
|
||||||
the shorter movl instead of movabs. We may want to support
|
the shorter movl instead of movabs. We may want to support
|
||||||
movq for kernel mode, but kernel does not use trampolines at
|
movq for kernel mode, but kernel does not use trampolines at
|
||||||
the moment. */
|
the moment. FNADDR is a 32bit address and may not be in
|
||||||
if (x86_64_zext_immediate_operand (fnaddr, VOIDmode))
|
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);
|
mem = adjust_address (m_tramp, HImode, offset);
|
||||||
emit_move_insn (mem, gen_int_mode (0xbb41, HImode));
|
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;
|
offset += 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Load static chain using movabs to r10. Use the
|
/* Load static chain using movabs to r10. Use the shorter movl
|
||||||
shorter movl instead of movabs for x32. */
|
instead of movabs when ptr_mode == SImode. */
|
||||||
if (TARGET_X32)
|
if (ptr_mode == SImode)
|
||||||
{
|
{
|
||||||
opcode = 0xba41;
|
opcode = 0xba41;
|
||||||
size = 6;
|
size = 6;
|
||||||
|
|
Loading…
Reference in New Issue