comparison gcc/config/mips/5500.md @ 0:a06113de4d67

first commit
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Fri, 17 Jul 2009 14:47:48 +0900
parents
children 77e2b8dfacca
comparison
equal deleted inserted replaced
-1:000000000000 0:a06113de4d67
1 ;; DFA-based pipeline description for 5500
2 (define_automaton "vr55")
3 (define_cpu_unit "vr55_dp0" "vr55")
4 (define_cpu_unit "vr55_dp1" "vr55")
5 (define_cpu_unit "vr55_mem" "vr55")
6 (define_cpu_unit "vr55_mac" "vr55")
7 (define_cpu_unit "vr55_fp" "vr55")
8 (define_cpu_unit "vr55_bru" "vr55")
9
10 ;;
11 ;; The ordering of the instruction-execution-path/resource-usage
12 ;; descriptions (also known as reservation RTL) is roughly ordered
13 ;; based on the define attribute RTL for the "type" classification.
14 ;; When modifying, remember that the first test that matches is the
15 ;; reservation used!
16 ;;
17
18 (define_insn_reservation "ir_vr55_unknown" 1
19 (and (eq_attr "cpu" "r5500")
20 (eq_attr "type" "unknown"))
21 "vr55_dp0+vr55_dp1+vr55_mem+vr55_mac+vr55_fp+vr55_bru")
22
23 ;; Assume prediction fails.
24 (define_insn_reservation "ir_vr55_branch" 2
25 (and (eq_attr "cpu" "r5500")
26 (eq_attr "type" "branch,jump,call"))
27 "vr55_bru")
28
29 (define_insn_reservation "ir_vr55_load" 3
30 (and (eq_attr "cpu" "r5500")
31 (eq_attr "type" "load,fpload,fpidxload"))
32 "vr55_mem")
33
34 (define_bypass 4
35 "ir_vr55_load"
36 "ir_vr55_mthilo,ir_vr55_imul_si,ir_vr55_imul_di,ir_vr55_imadd,
37 ir_vr55_idiv_si,ir_vr55_idiv_di")
38
39 (define_insn_reservation "ir_vr55_store" 0
40 (and (eq_attr "cpu" "r5500")
41 (eq_attr "type" "store,fpstore,fpidxstore"))
42 "vr55_mem")
43
44 ;; This reservation is for conditional move based on integer
45 ;; or floating point CC.
46 (define_insn_reservation "ir_vr55_condmove" 2
47 (and (eq_attr "cpu" "r5500")
48 (eq_attr "type" "condmove"))
49 "vr55_dp0|vr55_dp1")
50
51 ;; Move to/from FPU registers
52 (define_insn_reservation "ir_vr55_xfer" 2
53 (and (eq_attr "cpu" "r5500")
54 (eq_attr "type" "mfc,mtc"))
55 "vr55_dp0|vr55_dp1")
56
57 (define_insn_reservation "ir_vr55_arith" 1
58 (and (eq_attr "cpu" "r5500")
59 (eq_attr "type" "arith,shift,signext,slt,clz,const,logical,move,nop,trap"))
60 "vr55_dp0|vr55_dp1")
61
62 (define_bypass 2
63 "ir_vr55_arith"
64 "ir_vr55_mthilo,ir_vr55_imul_si,ir_vr55_imul_di,ir_vr55_imadd,
65 ir_vr55_idiv_si,ir_vr55_idiv_di")
66
67 (define_insn_reservation "ir_vr55_mthilo" 1
68 (and (eq_attr "cpu" "r5500")
69 (eq_attr "type" "mthilo"))
70 "vr55_mac")
71
72 (define_insn_reservation "ir_vr55_mfhilo" 5
73 (and (eq_attr "cpu" "r5500")
74 (eq_attr "type" "mfhilo"))
75 "vr55_mac")
76
77 ;; The default latency is for the GPR result of a mul. Bypasses handle the
78 ;; latency of {mul,mult}->{mfhi,mflo}.
79 (define_insn_reservation "ir_vr55_imul_si" 5
80 (and (eq_attr "cpu" "r5500")
81 (and (eq_attr "type" "imul,imul3")
82 (eq_attr "mode" "SI")))
83 "vr55_mac")
84
85 ;; The default latency is for pre-reload scheduling and handles the case
86 ;; where a pseudo destination will be stored in a GPR (as it usually is).
87 ;; The delay includes the latency of the dmult itself and the anticipated
88 ;; mflo or mfhi.
89 ;;
90 ;; Once the mflo or mfhi has been created, bypasses handle the latency
91 ;; between it and the dmult.
92 (define_insn_reservation "ir_vr55_imul_di" 9
93 (and (eq_attr "cpu" "r5500")
94 (and (eq_attr "type" "imul,imul3")
95 (eq_attr "mode" "DI")))
96 "vr55_mac*4")
97
98 ;; The default latency is as for ir_vr55_imul_si.
99 (define_insn_reservation "ir_vr55_imadd" 5
100 (and (eq_attr "cpu" "r5500")
101 (eq_attr "type" "imadd"))
102 "vr55_mac")
103
104 (define_bypass 1
105 "ir_vr55_imul_si,ir_vr55_imadd"
106 "ir_vr55_imadd"
107 "mips_linked_madd_p")
108
109 (define_bypass 2
110 "ir_vr55_imul_si,ir_vr55_imadd"
111 "ir_vr55_mfhilo")
112
113 (define_bypass 4
114 "ir_vr55_imul_di"
115 "ir_vr55_mfhilo")
116
117 ;; Divide algorithm is early out with best latency of 7 pcycles.
118 ;; Use worst case for scheduling purposes.
119 (define_insn_reservation "ir_vr55_idiv_si" 42
120 (and (eq_attr "cpu" "r5500")
121 (and (eq_attr "type" "idiv")
122 (eq_attr "mode" "SI")))
123 "vr55_mac")
124
125 (define_insn_reservation "ir_vr55_idiv_di" 74
126 (and (eq_attr "cpu" "r5500")
127 (and (eq_attr "type" "idiv")
128 (eq_attr "mode" "DI")))
129 "vr55_mac")
130
131 (define_insn_reservation "ir_vr55_fadd" 4
132 (and (eq_attr "cpu" "r5500")
133 (eq_attr "type" "fadd"))
134 "vr55_fp")
135
136 (define_insn_reservation "ir_vr55_fmul_sf" 5
137 (and (eq_attr "cpu" "r5500")
138 (and (eq_attr "type" "fmul")
139 (eq_attr "mode" "SF")))
140 "vr55_mac")
141
142 (define_insn_reservation "ir_vr55_fmul_df" 6
143 (and (eq_attr "cpu" "r5500")
144 (and (eq_attr "type" "fmul")
145 (eq_attr "mode" "DF")))
146 "vr55_mac")
147
148 (define_insn_reservation "ir_vr55_fmadd_sf" 9
149 (and (eq_attr "cpu" "r5500")
150 (and (eq_attr "type" "fmadd")
151 (eq_attr "mode" "SF")))
152 "vr55_mac")
153
154 (define_insn_reservation "ir_vr55_fmadd_df" 10
155 (and (eq_attr "cpu" "r5500")
156 (and (eq_attr "type" "fmadd")
157 (eq_attr "mode" "DF")))
158 "vr55_mac")
159
160 (define_insn_reservation "ir_vr55_fdiv_sf" 30
161 (and (eq_attr "cpu" "r5500")
162 (and (eq_attr "type" "fdiv,frdiv,fsqrt")
163 (eq_attr "mode" "SF")))
164 "vr55_mac")
165
166 (define_insn_reservation "ir_vr55_fdiv_df" 59
167 (and (eq_attr "cpu" "r5500")
168 (and (eq_attr "type" "fdiv,frdiv,fsqrt")
169 (eq_attr "mode" "DF")))
170 "vr55_mac")
171
172 (define_insn_reservation "ir_vr55_fabs" 2
173 (and (eq_attr "cpu" "r5500")
174 (eq_attr "type" "fabs,fneg,fmove"))
175 "vr55_fp")
176
177 (define_insn_reservation "ir_vr55_fcmp" 2
178 (and (eq_attr "cpu" "r5500")
179 (eq_attr "type" "fcmp"))
180 "vr55_fp")
181
182 (define_insn_reservation "ir_vr55_fcvt_sf" 4
183 (and (eq_attr "cpu" "r5500")
184 (and (eq_attr "type" "fcvt")
185 (eq_attr "mode" "SF")))
186 "vr55_fp")
187
188 (define_insn_reservation "ir_vr55_fcvt_df" 6
189 (and (eq_attr "cpu" "r5500")
190 (and (eq_attr "type" "fcvt")
191 (eq_attr "mode" "DF")))
192 "vr55_fp")
193
194 (define_insn_reservation "ir_vr55_frsqrt_sf" 60
195 (and (eq_attr "cpu" "r5500")
196 (and (eq_attr "type" "frsqrt")
197 (eq_attr "mode" "SF")))
198 "vr55_mac")
199
200 (define_insn_reservation "ir_vr55_frsqrt_df" 118
201 (and (eq_attr "cpu" "r5500")
202 (and (eq_attr "type" "frsqrt")
203 (eq_attr "mode" "DF")))
204 "vr55_mac")
205
206 (define_insn_reservation "ir_vr55_multi" 1
207 (and (eq_attr "cpu" "r5500")
208 (eq_attr "type" "multi"))
209 "vr55_dp0+vr55_dp1+vr55_mem+vr55_mac+vr55_fp+vr55_bru")