Use movl instead of movabs for x32.
2011-07-10 H.J. Lu <hongjiu.lu@intel.com> * config/i386/i386.c (ix86_trampoline_init): Use movl instead of movabs for x32. From-SVN: r176129
This commit is contained in:
parent
3db72de312
commit
9e419e387c
|
@ -1,3 +1,8 @@
|
|||
2011-07-10 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config/i386/i386.c (ix86_trampoline_init): Use movl instead
|
||||
of movabs for x32.
|
||||
|
||||
2011-07-10 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* config/i386/i386.c (x86_output_mi_thunk): Generate rtl and
|
||||
|
|
|
@ -22730,7 +22730,7 @@ ix86_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
|
|||
}
|
||||
else
|
||||
{
|
||||
int offset = 0;
|
||||
int offset = 0, size;
|
||||
|
||||
/* Load the function address to r11. Try to load address using
|
||||
the shorter movl instead of movabs. We may want to support
|
||||
|
@ -22759,11 +22759,21 @@ ix86_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
|
|||
|
||||
/* Load static chain using movabs to r10. */
|
||||
mem = adjust_address (m_tramp, HImode, offset);
|
||||
emit_move_insn (mem, gen_int_mode (0xba49, HImode));
|
||||
/* Use the shorter movl instead of movabs for x32. */
|
||||
if (TARGET_X32)
|
||||
{
|
||||
size = 6;
|
||||
emit_move_insn (mem, gen_int_mode (0xba41, HImode));
|
||||
}
|
||||
else
|
||||
{
|
||||
size = 10;
|
||||
emit_move_insn (mem, gen_int_mode (0xba49, HImode));
|
||||
}
|
||||
|
||||
mem = adjust_address (m_tramp, DImode, offset + 2);
|
||||
mem = adjust_address (m_tramp, ptr_mode, offset + 2);
|
||||
emit_move_insn (mem, chain_value);
|
||||
offset += 10;
|
||||
offset += size;
|
||||
|
||||
/* Jump to r11; the last (unused) byte is a nop, only there to
|
||||
pad the write out to a single 32-bit store. */
|
||||
|
|
Loading…
Reference in New Issue