diff options
Diffstat (limited to 'gcc/config/mips/generic.md')
-rw-r--r-- | gcc/config/mips/generic.md | 18 |
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") |