]> gcc.gnu.org Git - gcc.git/blobdiff - gcc/config/i386/i386.md
i386.md (pushqi1): New.
[gcc.git] / gcc / config / i386 / i386.md
index 6eae78c567aad2f8ca4c8bb9d0128a04b29fadb1..77392fe0e1950356630644ec4f1a48e439a37828 100644 (file)
   ""
   "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
This page took 0.055258 seconds and 5 git commands to generate.