summaryrefslogtreecommitdiff
path: root/gcc/config/mips/generic.md
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/mips/generic.md')
-rw-r--r--gcc/config/mips/generic.md18
1 files changed, 17 insertions, 1 deletions
diff --git a/gcc/config/mips/generic.md b/gcc/config/mips/generic.md
index d61511f33d6..c197ecff34e 100644
--- a/gcc/config/mips/generic.md
+++ b/gcc/config/mips/generic.md
@@ -43,7 +43,7 @@
"alu")
(define_insn_reservation "generic_hilo" 1
- (eq_attr "type" "mfhilo,mthilo")
+ (eq_attr "type" "mfhi,mflo,mthi,mtlo")
"imuldiv*3")
(define_insn_reservation "generic_imul" 17
@@ -103,3 +103,19 @@
(define_insn_reservation "generic_frecip_fsqrt_step" 5
(eq_attr "type" "frdiv1,frdiv2,frsqrt1,frsqrt2")
"alu")
+
+(define_insn_reservation "generic_atomic" 10
+ (eq_attr "type" "atomic")
+ "alu")
+
+;; Sync loop consists of (in order)
+;; (1) optional sync,
+;; (2) LL instruction,
+;; (3) branch and 1-2 ALU instructions,
+;; (4) SC instruction,
+;; (5) branch and ALU instruction.
+;; The net result of this reservation is a big delay with a flush of
+;; ALU pipeline.
+(define_insn_reservation "generic_sync_loop" 40
+ (eq_attr "type" "syncloop")
+ "alu*39")