* config/mips/mips.md (can_delay): Split out of existing define_delays.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 17 Apr 2002 00:34:44 +0000 (00:34 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 17 Apr 2002 00:34:44 +0000 (00:34 +0000)
        (HILO_delay): Set can_delay false.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@52387 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 3a185ec..74a936b 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 fbaf63f..c90109f 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