h8300.md (movqi_h8300, [...]): Consolidate the H8/300, H8/300H and H8/S variants...
authorJeff Law <law@redhat.com>
Tue, 3 Jul 2018 05:14:10 +0000 (23:14 -0600)
committerJeff Law <law@gcc.gnu.org>
Tue, 3 Jul 2018 05:14:10 +0000 (23:14 -0600)
* config/h8300/h8300.md (movqi_h8300, movqi_h8300hs): Consolidate
the H8/300, H8/300H and H8/S variants into a single pattern.
(movhi_h8300, movqi_h8300hs): Similarly.
(pushqi_h8300hs, pushhi_h8300hs): Consolidate into a single pattern.
(QHI mode iterator): New.

From-SVN: r262329

gcc/ChangeLog
gcc/config/h8300/h8300.md

index 15becdc2466f12facd426d533680c868f782da0b..a1f2d351983b540f6973f9025d0079636f77b493 100644 (file)
@@ -1,5 +1,11 @@
 2018-07-02  Jeff Law  <law@redhat.com>
 
+       * config/h8300/h8300.md (movqi_h8300, movqi_h8300hs): Consolidate
+       the H8/300, H8/300H and H8/S variants into a single pattern.
+       (movhi_h8300, movqi_h8300hs): Similarly.
+       (pushqi_h8300hs, pushhi_h8300hs): Consolidate into a single pattern.
+       (QHI mode iterator): New.
+
        * config/h8300/h8300.md: Remove trailing whitespace.
 
 2018-07-02  Jim Wilson  <jimw@sifive.com>
index 846fd735de0406b1d25bf5d59b774c40e727ca6b..74b22338c218448b13d69748430ef665c67696bc 100644 (file)
 
 (define_mode_iterator P [(HI "Pmode == HImode") (SI "Pmode == SImode")])
 
+(define_mode_iterator QHI [QI HI])
 \f
 ;; ----------------------------------------------------------------------
 ;; MOVE INSTRUCTIONS
 
 ;; movqi
 
-(define_insn "*movqi_h8300"
+(define_insn "*movqi_h8nosx"
   [(set (match_operand:QI 0 "general_operand_dst" "=r,r ,<,r,r,m")
        (match_operand:QI 1 "general_operand_src" " I,r>,r,n,m,r"))]
-  "TARGET_H8300
-   && h8300_move_ok (operands[0], operands[1])"
-  "@
-   sub.b       %X0,%X0
-   mov.b       %R1,%X0
-   mov.b       %X1,%R0
-   mov.b       %R1,%X0
-   mov.b       %R1,%X0
-   mov.b       %X1,%R0"
-  [(set_attr "length" "2,2,2,2,4,4")
-   (set_attr "cc" "set_zn,set_znv,set_znv,set_znv,set_znv,set_znv")])
-
-(define_insn "*movqi_h8300hs"
-  [(set (match_operand:QI 0 "general_operand_dst" "=r,r ,<,r,r,m")
-       (match_operand:QI 1 "general_operand_src" " I,r>,r,n,m,r"))]
-  "(TARGET_H8300H || TARGET_H8300S) && !TARGET_H8300SX
+  "(TARGET_H8300 || TARGET_H8300H || TARGET_H8300S) && !TARGET_H8300SX
     && h8300_move_ok (operands[0], operands[1])"
   "@
    sub.b       %X0,%X0
    mov.b       %X1,%R0"
   [(set (attr "length")
        (symbol_ref "compute_mov_length (operands)"))
-   (set_attr "cc" "set_zn,set_znv,set_znv,clobber,set_znv,set_znv")])
+   (set_attr "cc" "set_zn,set_znv,set_znv,set_znv,set_znv,set_znv")])
 
 (define_insn "*movqi_h8sx"
   [(set (match_operand:QI 0 "general_operand_dst" "=Z,rQ")
 
 ;; movhi
 
-(define_insn "*movhi_h8300"
+(define_insn "*movhi_h8nosx"
   [(set (match_operand:HI 0 "general_operand_dst" "=r,r,<,r,r,m")
        (match_operand:HI 1 "general_operand_src" "I,r>,r,i,m,r"))]
-  "TARGET_H8300
-   && h8300_move_ok (operands[0], operands[1])"
-  "@
-   sub.w       %T0,%T0
-   mov.w       %T1,%T0
-   mov.w       %T1,%T0
-   mov.w       %T1,%T0
-   mov.w       %T1,%T0
-   mov.w       %T1,%T0"
-  [(set (attr "length")
-       (symbol_ref "compute_mov_length (operands)"))
-   (set_attr "cc" "set_zn,set_znv,set_znv,set_znv,set_znv,set_znv")])
-
-(define_insn "*movhi_h8300hs"
-  [(set (match_operand:HI 0 "general_operand_dst" "=r,r,<,r,r,m")
-       (match_operand:HI 1 "general_operand_src" "I,r>,r,i,m,r"))]
-  "(TARGET_H8300H || TARGET_H8300S) && !TARGET_H8300SX
+  "(TARGET_H8300 || TARGET_H8300H || TARGET_H8300S) && !TARGET_H8300SX
     && h8300_move_ok (operands[0], operands[1])"
   "@
    sub.w       %T0,%T0
   "mov.w\\t%T0,@-r7"
   [(set_attr "length" "2")])
 
-(define_insn "*pushqi1_h8300hs_<mode>"
-  [(set (mem:QI
+(define_insn "*push1_h8300hs_<mode>"
+  [(set (mem:QHI
        (pre_modify:P
          (reg:P SP_REG)
          (plus:P (reg:P SP_REG) (const_int -4))))
-       (match_operand:QI 0 "register_no_sp_elim_operand" "r"))]
+       (match_operand:QHI 0 "register_no_sp_elim_operand" "r"))]
   "TARGET_H8300H || TARGET_H8300S"
   "mov.l\\t%S0,@-er7"
   [(set_attr "length" "4")])
 
-(define_insn "*pushhi1_h8300hs_<mode>"
-  [(set (mem:HI
-       (pre_modify:P
-         (reg:P SP_REG)
-         (plus:P (reg:P SP_REG) (const_int -4))))
-       (match_operand:HI 0 "register_no_sp_elim_operand" "r"))]
-  "TARGET_H8300H || TARGET_H8300S"
-  "mov.l\\t%S0,@-er7"
-  [(set_attr "length" "4")])
 \f
 ;; ----------------------------------------------------------------------
 ;; TEST INSTRUCTIONS