""
"ix86_expand_move (QImode, operands); DONE;")
+;; emit_push_insn when it calls move_by_pieces requires an insn to
+;; "push a byte". But actually we use pushw, which has the effect
+;; of rounding the amount pushed up to a halfword.
+
+(define_insn "*pushqi2"
+ [(set (match_operand:QI 0 "push_operand" "=X,X")
+ (match_operand:QI 1 "nonmemory_no_elim_operand" "n,r"))]
+ "!TARGET_64BIT"
+ "@
+ push{w}\\t{|word ptr }%1
+ push{w}\\t%w1"
+ [(set_attr "type" "push")
+ (set_attr "mode" "HI")])
+
;; Situation is quite tricky about when to choose full sized (SImode) move
;; over QImode moves. For Q_REG -> Q_REG move we use full size only for
;; partial register dependency machines (such as AMD Athlon), where QImode