annotate gcc/config/mips/p6600.md @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 ;; DFA-based pipeline description for P6600.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 ;; Copyright (C) 2018 Free Software Foundation, Inc.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 ;; This file is part of GCC.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 ;; GCC is free software; you can redistribute it and/or modify it
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 ;; under the terms of the GNU General Public License as published
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 ;; by the Free Software Foundation; either version 3, or (at your
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 ;; option) any later version.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 ;; GCC is distributed in the hope that it will be useful, but WITHOUT
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 ;; License for more details.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 ;; You should have received a copy of the GNU General Public License
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 ;; along with GCC; see the file COPYING3. If not see
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 ;; <http://www.gnu.org/licenses/>.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 (define_automaton "p6600_agen_alq_pipe, p6600_mdu_pipe, p6600_fpu_pipe")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 ;; The address generation queue (AGQ) has AL2, CTISTD and LDSTA pipes
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 (define_cpu_unit "p6600_agq, p6600_al2, p6600_ctistd, p6600_lsu"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 "p6600_agen_alq_pipe")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 (define_cpu_unit "p6600_gpmul, p6600_gpdiv" "p6600_mdu_pipe")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 ;; The arithmetic-logic-unit queue (ALQ) has ALU pipe
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 (define_cpu_unit "p6600_alq, p6600_alu" "p6600_agen_alq_pipe")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 ;; The floating-point-unit queue (FPQ) has short and long pipes
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 (define_cpu_unit "p6600_fpu_short, p6600_fpu_long" "p6600_fpu_pipe")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 ;; Short FPU pipeline.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 (define_cpu_unit "p6600_fpu_intadd, p6600_fpu_cmp, p6600_fpu_float,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 p6600_fpu_logic_a, p6600_fpu_logic_b, p6600_fpu_div,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 p6600_fpu_store" "p6600_fpu_pipe")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 ;; Long FPU pipeline.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 (define_cpu_unit "p6600_fpu_logic, p6600_fpu_float_a, p6600_fpu_float_b,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 p6600_fpu_float_c, p6600_fpu_float_d" "p6600_fpu_pipe")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 (define_cpu_unit "p6600_fpu_mult, p6600_fpu_fdiv, p6600_fpu_apu" "p6600_fpu_pipe")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 (define_reservation "p6600_agq_al2" "p6600_agq, p6600_al2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 (define_reservation "p6600_agq_ctistd" "p6600_agq, p6600_ctistd")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 (define_reservation "p6600_agq_lsu" "p6600_agq, p6600_lsu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 (define_reservation "p6600_alq_alu" "p6600_alq, p6600_alu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 ;; FPU-MSA pipe
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 ;; Arithmetic
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 ;; add, hadd, sub, hsub, average, min, max, compare
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 (define_insn_reservation "p6600_msa_short_int_add" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 (eq_attr "type" "simd_int_arith"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 "p6600_fpu_short, p6600_fpu_intadd")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 ;; Bitwise Instructions
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 ;; and, or, xor, bit-clear, leading-bits-count, shift, shuffle
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 (define_insn_reservation "p6600_msa_short_logic" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 (eq_attr "type" "simd_shift,simd_bit,simd_splat,simd_fill,simd_shf,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 simd_permute,simd_logic"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 "p6600_fpu_short, p6600_fpu_logic_a")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 ;; move.v
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 (define_insn_reservation "p6600_msa_short_logic_move_v" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 (eq_attr "type" "simd_move"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 "p6600_fpu_short, p6600_fpu_logic_a")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 ;; Float compare
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 (define_insn_reservation "p6600_msa_short_cmp" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 (eq_attr "type" "simd_fcmp"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 "p6600_fpu_short, p6600_fpu_cmp")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 ;; Float exp2, min, max
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 (define_insn_reservation "p6600_msa_short_float2" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 (eq_attr "type" "simd_fexp2,simd_fminmax"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 "p6600_fpu_short, p6600_fpu_float")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 ;; Vector sat
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 (define_insn_reservation "p6600_msa_short_logic3" 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 (eq_attr "type" "simd_sat,simd_pcnt"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 "p6600_fpu_short, p6600_fpu_logic_a, p6600_fpu_logic_b")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 ;; Vector copy, bz, bnz
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 (define_insn_reservation "p6600_msa_short_store4" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 (eq_attr "type" "simd_copy,simd_branch,simd_cmsa"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 "p6600_fpu_short, p6600_fpu_store")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 ;; Vector load
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 (define_insn_reservation "p6600_msa_load" 8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 (eq_attr "type" "simd_load"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 "p6600_agq_lsu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 ;; Vector store
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 (define_insn_reservation "p6600_msa_short_store" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108 (eq_attr "type" "simd_store"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 "p6600_agq_lsu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 ;; binsl, binsr, insert, vshf, sld
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112 (define_insn_reservation "p6600_msa_long_logic" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114 (eq_attr "type" "simd_bitins,simd_bitmov,simd_insert,simd_sld"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 "p6600_fpu_long, p6600_fpu_logic")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 ;; Float fclass, flog2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118 (define_insn_reservation "p6600_msa_long_float2" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
120 (eq_attr "type" "simd_fclass,simd_flog2"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
121 "p6600_fpu_long, p6600_fpu_float_a")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
122
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
123 ;; fadd, fsub
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
124 (define_insn_reservation "p6600_msa_long_float4" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126 (eq_attr "type" "simd_fadd,simd_fcvt"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127 "p6600_fpu_long, p6600_fpu_float_a, p6600_fpu_float_b")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129 ;; fmul
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
130 (define_insn_reservation "p6600_msa_long_float5" 5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
131 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
132 (eq_attr "type" "simd_fmul"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
133 "p6600_fpu_long, p6600_fpu_float_a, p6600_fpu_float_b, p6600_fpu_float_c")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
134
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
135 ;; fmadd, fmsub
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
136 (define_insn_reservation "p6600_msa_long_float8" 8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
137 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
138 (eq_attr "type" "simd_fmadd"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
139 "p6600_fpu_long, p6600_fpu_float_a,
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
140 p6600_fpu_float_b, p6600_fpu_float_c, p6600_fpu_float_d")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
141
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
142 ;; Vector mul, dotp, madd, msub
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
143 (define_insn_reservation "p6600_msa_long_mult" 5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
144 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
145 (eq_attr "type" "simd_mul"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
146 "p6600_fpu_long, p6600_fpu_mult")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
147
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
148 ;; fdiv, fmod (semi-pipelined)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
149 (define_insn_reservation "p6600_msa_long_fdiv" 10
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
150 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
151 (eq_attr "type" "simd_fdiv"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
152 "p6600_fpu_long, nothing, nothing, p6600_fpu_fdiv*8")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
153
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
154 ;; div, mod (non-pipelined)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
155 (define_insn_reservation "p6600_msa_long_div" 10
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
156 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
157 (eq_attr "type" "simd_div"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
158 "p6600_fpu_long, p6600_fpu_div*9, p6600_fpu_div + p6600_fpu_logic_a")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
159
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
160 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
161 ;; FPU pipe
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
162 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
163
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
164 ;; fadd, fsub
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
165 (define_insn_reservation "p6600_fpu_fadd" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
166 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
167 (eq_attr "type" "fadd"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
168 "p6600_fpu_long, p6600_fpu_apu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
169
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
170 ;; fabs, fneg, fcmp
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
171 (define_insn_reservation "p6600_fpu_fabs" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
172 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
173 (ior (eq_attr "type" "fabs,fneg,fcmp,fmove")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
174 (and (eq_attr "type" "condmove")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
175 (eq_attr "mode" "SF,DF"))))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
176 "p6600_fpu_short, p6600_fpu_apu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
177
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
178 ;; fload
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
179 (define_insn_reservation "p6600_fpu_fload" 8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
180 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
181 (eq_attr "type" "fpload,fpidxload"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
182 "p6600_agq_lsu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
183
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
184 ;; fstore
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
185 (define_insn_reservation "p6600_fpu_fstore" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
186 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
187 (eq_attr "type" "fpstore,fpidxstore"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
188 "p6600_agq_lsu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
189
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
190 ;; fmadd
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
191 (define_insn_reservation "p6600_fpu_fmadd" 8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
192 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
193 (eq_attr "type" "fmadd"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
194 "p6600_fpu_long, p6600_fpu_apu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
195
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
196 ;; fmul
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
197 (define_insn_reservation "p6600_fpu_fmul" 5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
198 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
199 (eq_attr "type" "fmul"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
200 "p6600_fpu_long, p6600_fpu_apu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
201
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
202 ;; fdiv, fsqrt
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
203 (define_insn_reservation "p6600_fpu_div" 17
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
204 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
205 (eq_attr "type" "fdiv,frdiv,fsqrt,frsqrt"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
206 "p6600_fpu_long, p6600_fpu_apu*17")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
207
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
208 ;; fcvt
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
209 (define_insn_reservation "p6600_fpu_fcvt" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
210 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
211 (eq_attr "type" "fcvt"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
212 "p6600_fpu_long, p6600_fpu_apu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
213
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
214 ;; mtc
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
215 (define_insn_reservation "p6600_fpu_fmtc" 7
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
216 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
217 (eq_attr "type" "mtc"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
218 "p6600_agq_lsu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
219
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
220 ;; mfc
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
221 (define_insn_reservation "p6600_fpu_fmfc" 7
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
222 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
223 (eq_attr "type" "mfc"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
224 "p6600_agq_lsu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
225
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
226 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
227 ;; Integer pipe
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
228 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
229
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
230 ;; and
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
231 (define_insn_reservation "p6600_int_and" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
232 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
233 (eq_attr "move_type" "logical"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
234 "p6600_alq_alu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
235
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
236 ;; lui
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
237 (define_insn_reservation "p6600_int_lui" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
238 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
239 (eq_attr "move_type" "const"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
240 "p6600_alq_alu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
241
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
242 ;; Load lb, lbu, lh, lhu, lq, lw, lw_i2f, lwxs
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
243 (define_insn_reservation "p6600_int_load" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
244 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
245 (eq_attr "type" "load"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
246 "p6600_agq_lsu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
247
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
248 ;; store
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
249 (define_insn_reservation "p6600_int_store" 3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
250 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
251 (eq_attr "type" "store"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
252 "p6600_agq_lsu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
253
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
254 ;; andi, sll, srl, seb, seh
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
255 (define_insn_reservation "p6600_int_arith_1" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
256 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
257 (eq_attr "move_type" "andi,sll0,signext"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
258 "p6600_alq_alu | p6600_agq_al2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
259
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
260 ;; addi, addiu, ori, xori, add, addu
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
261 (define_insn_reservation "p6600_int_arith_2" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
262 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
263 (eq_attr "alu_type" "add,or,xor"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
264 "p6600_alq_alu | p6600_agq_al2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
265
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
266 ;; nor, sub
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
267 (define_insn_reservation "p6600_int_arith_3" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
268 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
269 (eq_attr "alu_type" "and,not,nor,sub"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
270 "p6600_alq_alu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
271
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
272 ;; srl, sra, rotr, slt, sllv, srlv
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
273 (define_insn_reservation "p6600_int_arith_4" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
274 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
275 (eq_attr "type" "shift,slt,move"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
276 "p6600_alq_alu | p6600_agq_al2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
277
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
278 ;; nop
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
279 (define_insn_reservation "p6600_int_nop" 0
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
280 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
281 (eq_attr "type" "nop"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
282 "p6600_alq_alu | p6600_agq_al2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
283
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
284 ;; clo, clz
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
285 (define_insn_reservation "p6600_int_countbits" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
286 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
287 (eq_attr "type" "clz"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
288 "p6600_agq_al2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
289
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
290 ;; Conditional moves
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
291 (define_insn_reservation "p6600_int_condmove" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
292 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
293 (eq_attr "type" "condmove"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
294 "p6600_agq_al2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
295
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
296 ;; mfhi/lo
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
297 (define_insn_reservation "p6600_dsp_mfhilo" 5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
298 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
299 (eq_attr "type" "mfhi,mflo"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
300 "p6600_agq_lsu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
301
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
302 ;; mthi/lo
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
303 (define_insn_reservation "p6600_dsp_mthilo" 5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
304 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
305 (eq_attr "type" "mthi,mtlo"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
306 "p6600_agq_lsu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
307
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
308 ;; mul, mulu, muh, muhu
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
309 (define_insn_reservation "p6600_dsp_mult" 4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
310 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
311 (eq_attr "type" "imul3,imul,imul3nc"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
312 "p6600_gpmul")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
313
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
314 ;; branch and jump
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
315 (define_insn_reservation "p6600_int_branch" 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
316 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
317 (eq_attr "type" "branch,jump"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
318 "p6600_agq_ctistd")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
319
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
320 ;; prefetch
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
321 (define_insn_reservation "p6600_int_prefetch" 0
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
322 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
323 (eq_attr "type" "prefetch,prefetchx"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
324 "p6600_agq_lsu")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
325
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
326 ;; divide
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
327 (define_insn_reservation "p6600_int_div" 8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
328 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
329 (eq_attr "type" "idiv,idiv3"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
330 "p6600_gpdiv*5")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
331
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
332 ;; arith
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
333 (define_insn_reservation "p6600_int_arith_5" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
334 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
335 (eq_attr "type" "arith"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
336 "p6600_agq_al2")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
337
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
338 ;; call
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
339 (define_insn_reservation "p6600_int_call" 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
340 (and (eq_attr "cpu" "p6600")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
341 (eq_attr "jal" "indirect,direct"))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
342 "p6600_agq_ctistd")