mips.md (can_delay): Split out of existing define_delays.
authorRichard Henderson <rth@redhat.com>
Wed, 17 Apr 2002 00:34:44 +0000 (17:34 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 17 Apr 2002 00:34:44 +0000 (17:34 -0700)
        * config/mips/mips.md (can_delay): Split out of existing define_delays.
        (HILO_delay): Set can_delay false.

From-SVN: r52387

gcc/ChangeLog
gcc/config/mips/mips.md

index 3a185ec3e00b6793b5f2d61840f72de102f1701a..74a936b630f0b1bb9b6539f076ce4173dc3678a3 100644 (file)
@@ -1,3 +1,9 @@
+2002-04-16  Richard Henderson  <rth@redhat.com>
+
+       PR 6202
+       * config/mips/mips.md (can_delay): Split out of existing define_delays.
+       (HILO_delay): Set can_delay false.
+
 2002-04-16  Dale Johannesen <dalej@apple.com>
 
        * config/rs6000/rs6000.c (rs6000_output_function_prologue): Compute
index fbaf63faf7f1c05a40702c0b30c6fa2088133c2e..c90109f82d170b40079e800fbda5947822876c9c 100644 (file)
                (const_string "yes")
                (const_string "no")))
 
+;; Can the instruction be put into a delay slot?
+(define_attr "can_delay" "no,yes"
+  (if_then_else (and (eq_attr "dslot" "no")
+                    ; ADJUST_INSN_LENGTH divides length by 2 on mips16,
+                    ; so cope with it here.
+                    (ior (and (eq (symbol_ref "mips16") (const_int 0))
+                                  (eq_attr "length" "4"))
+                         (and (ne (symbol_ref "mips16") (const_int 0))
+                              (eq_attr "length" "2"))))
+               (const_string "yes")
+               (const_string "no")))
+
 ;; Attribute defining whether or not we can use the branch-likely instructions
 
 (define_attr "branch_likely" "no,yes"
 
 (define_delay (and (eq_attr "type" "branch")
                   (eq (symbol_ref "mips16") (const_int 0)))
-  [(and (eq_attr "dslot" "no") (eq_attr "length" "4"))
+  [(eq_attr "can_delay" "yes")
    (nil)
    (and (eq_attr "branch_likely" "yes")
        (and (eq_attr "dslot" "no")
             (eq_attr "length" "4")))])
 
 (define_delay (eq_attr "type" "jump")
-  [(and (eq_attr "dslot" "no")
-       ;; ADJUST_INSN_LENGTH divides length by 2 on mips16, so cope
-       ;; with it here.  It doesn't matter for branches above,
-       ;; because mips16 branches don't have delay slots anyway.
-       (ior (and (eq (symbol_ref "mips16") (const_int 0))
-                 (eq_attr "length" "4"))
-            (and (ne (symbol_ref "mips16") (const_int 0))
-                 (eq_attr "length" "2"))))
+  [(eq_attr "can_delay" "yes")
    (nil)
    (nil)])
 
 (define_delay (and (eq_attr "type" "call") (eq_attr "abicalls" "no"))
-  [(and (eq_attr "dslot" "no")
-       (ior (and (eq (symbol_ref "mips16") (const_int 0))
-                 (eq_attr "length" "4"))
-            (and (ne (symbol_ref "mips16") (const_int 0))
-                 (eq_attr "length" "2"))))
+  [(eq_attr "can_delay" "yes")
    (nil)
    (nil)])
 
@@ -5823,7 +5824,8 @@ move\\t%0,%z4\\n\\
   ""
   ""
   [(set_attr "type" "nop")
-   (set_attr "mode" "none")])
+   (set_attr "mode" "none")
+   (set_attr "can_delay" "no")])
 
 ;; This insn handles moving CCmode values.  It's really just a
 ;; slightly simplified copy of movsi_internal2, with additional cases