aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-04-16 17:34:44 -0700
committerRichard Henderson <rth@gcc.gnu.org>2002-04-16 17:34:44 -0700
commitf1ba94ddd2f8e9159b45ecb79cfa39a38944933a (patch)
treece868453862265527f6d188115974dc902ee8fbe /gcc
parent3bb6f0700af0f235ce470d1b36c9db47d034b44e (diff)
downloadgcc-f1ba94ddd2f8e9159b45ecb79cfa39a38944933a.zip
gcc-f1ba94ddd2f8e9159b45ecb79cfa39a38944933a.tar.gz
gcc-f1ba94ddd2f8e9159b45ecb79cfa39a38944933a.tar.bz2
mips.md (can_delay): Split out of existing define_delays.
* config/mips/mips.md (can_delay): Split out of existing define_delays. (HILO_delay): Set can_delay false. From-SVN: r52387
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/mips/mips.md32
2 files changed, 23 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3a185ec..74a936b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index fbaf63f..c90109f 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -135,6 +135,18 @@
(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"
@@ -162,30 +174,19 @@
(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