Use word_mode to push/pop register for x86
authorH.J. Lu <hongjiu.lu@intel.com>
Fri, 9 Mar 2012 04:17:02 +0000 (04:17 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Fri, 9 Mar 2012 04:17:02 +0000 (20:17 -0800)
commitcc8459239b4a2dbdaf042e6e108cccaa249e554c
tree072d25a57e83bf59543cb61401b4ddeba4649ff5
parent78d162367846e7cf9f0588bfb3be960caf3ed614
Use word_mode to push/pop register for x86

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

* config/i386/i386.c (setup_incoming_varargs_64): Use word_mode
with integer parameters in registers.
(gen_push): Push register in word_mode instead of Pmode.
(ix86_emit_save_regs): Likewise.
(ix86_emit_save_regs_using_mov): Save integer registers in
word_mode.
(gen_pop): Pop register in word_mode instead of Pmode.
(ix86_emit_restore_regs_using_pop): Likewise.
(ix86_expand_prologue): Replace Pmode with word_mode for push
immediate.  Use ix86_gen_pro_epilogue_adjust_stack.  Save and
restore RAX and R10 in word_mode.
(ix86_emit_restore_regs_using_mov): Restore integer registers
in word_mode.
(ix86_expand_split_stack_prologue): Save R10_REG and restore in
word_mode.
(ix86_split_to_parts): Use word_mode with PUT_MODE for push.
(ix86_split_long_move): Likewise.

* config/i386/i386.md (W): New.
(*push<mode>2_prologue): Replace :P with :W.
(*pop<mode>1): Likewise.
(*pop<mode>1_epilogue): Likewise.
(push/pop peephole2): Use word_mode scratch registers.

From-SVN: r185123
gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.md