]>
Commit | Line | Data |
---|---|---|
a945c346 | 1 | ;; Copyright (C) 2012-2024 Free Software Foundation, Inc. |
a239aff8 M |
2 | ;; |
3 | ;; This file is part of GCC. | |
4 | ;; | |
5 | ;; GCC is free software; you can redistribute it and/or modify | |
6 | ;; it under the terms of the GNU General Public License as published by | |
7 | ;; the Free Software Foundation; either version 3, or (at your option) | |
8 | ;; any later version. | |
9 | ;; | |
10 | ;; GCC is distributed in the hope that it will be useful, | |
11 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | ;; GNU General Public License for more details. | |
14 | ;; | |
15 | ;; You should have received a copy of the GNU General Public License | |
16 | ;; along with GCC; see the file COPYING3. If not see | |
17 | ;; <http://www.gnu.org/licenses/>. | |
18 | ;; | |
19 | ||
20 | ;; Scheduling for ZHAOXIN lujiazui processor. | |
21 | ||
ec1db901 AM |
22 | ;; Modeling automatons for decoders, execution pipes, AGU pipes, and divider. |
23 | (define_automaton "lujiazui_decoder,lujiazui_core,lujiazui_agu,lujiazui_div") | |
a239aff8 M |
24 | |
25 | ;; The rules for the decoder are simple: | |
26 | ;; - an instruction with 1 uop can be decoded by any of the three | |
27 | ;; decoders in one cycle. | |
28 | ;; - an instruction with 2 uops can be decoded by decoder 0 or decoder 1 | |
29 | ;; but still in only one cycle. | |
30 | ;; - a complex (microcode) instruction can only be decoded by | |
31 | ;; decoder 0, and this takes an unspecified number of cycles. | |
32 | ;; | |
33 | ;; The goal is to schedule such that we have a few-one-two uops sequence | |
34 | ;; in each cycle, to decode as many instructions per cycle as possible. | |
35 | (define_cpu_unit "lua_decoder0" "lujiazui_decoder") | |
36 | (define_cpu_unit "lua_decoder1" "lujiazui_decoder") | |
37 | (define_cpu_unit "lua_decoder2" "lujiazui_decoder") | |
38 | ||
39 | ;; We first wish to find an instruction for lua_decoder0, so exclude | |
40 | ;; lua_decoder1 and lua_decoder2 from being reserved until | |
41 | ;; lua_decoder0 is reserved, and also exclude lua_decoder2 | |
42 | ;; from being reserved until lua_decoder1 is reserved. | |
43 | (presence_set "lua_decoder1" "lua_decoder0") | |
44 | (presence_set "lua_decoder2" "lua_decoder0") | |
45 | (presence_set "lua_decoder2" "lua_decoder1") | |
46 | ||
47 | ;; Most instructions can be decoded on any of the three decoders. | |
48 | (define_reservation "lua_decodern" "lua_decoder0|lua_decoder1|lua_decoder2") | |
49 | (define_reservation "lua_decoder01" "lua_decoder0|lua_decoder1") | |
50 | ||
51 | ;; The out-of-order core has six pipelines. | |
52 | ;; Port 4, 5 are responsible for address calculations, load or store. | |
53 | ;; Port 0, 1, 2, 3 for everything else. | |
54 | ||
55 | (define_cpu_unit "lua_p0,lua_p1,lua_p2,lua_p3" "lujiazui_core") | |
56 | (define_cpu_unit "lua_p4,lua_p5" "lujiazui_agu") | |
57 | ||
ec1db901 AM |
58 | (define_cpu_unit "lua_div" "lujiazui_div") |
59 | ||
a239aff8 M |
60 | (define_reservation "lua_p03" "lua_p0|lua_p3") |
61 | (define_reservation "lua_p12" "lua_p1|lua_p2") | |
62 | (define_reservation "lua_p1p2" "lua_p1+lua_p2") | |
63 | (define_reservation "lua_p45" "lua_p4|lua_p5") | |
64 | (define_reservation "lua_p4p5" "lua_p4+lua_p5") | |
65 | (define_reservation "lua_p0p1p2p3" "lua_p0+lua_p1+lua_p2+lua_p3") | |
66 | ||
67 | ;; Only the irregular instructions have to be modeled here. | |
68 | ||
69 | ;; Complex instruction. | |
70 | (define_insn_reservation "lua_complex_insn" 6 | |
71 | (and (eq_attr "cpu" "lujiazui") | |
72 | (eq_attr "type" "other,multi,str")) | |
73 | "lua_decoder0") | |
74 | ||
75 | ;; Call instruction. | |
76 | (define_insn_reservation "lua_call" 1 | |
77 | (and (eq_attr "cpu" "lujiazui") | |
78 | (eq_attr "type" "call,callv")) | |
79 | "lua_decoder0,lua_p45,lua_p1") | |
80 | ||
81 | ;; MOV - integer moves. | |
82 | (define_insn_reservation "lua_imov" 1 | |
83 | (and (eq_attr "cpu" "lujiazui") | |
84 | (and (eq_attr "memory" "none") | |
85 | (eq_attr "type" "imov,imovx"))) | |
86 | "lua_decodern,lua_p12") | |
87 | ||
88 | (define_insn_reservation "lua_imov_load" 4 | |
89 | (and (eq_attr "cpu" "lujiazui") | |
90 | (and (eq_attr "memory" "load") | |
91 | (eq_attr "type" "imov,imovx"))) | |
92 | "lua_decoder01,lua_p45") | |
93 | ||
94 | (define_insn_reservation "lua_imov_store" 1 | |
95 | (and (eq_attr "cpu" "lujiazui") | |
96 | (and (eq_attr "memory" "store") | |
97 | (eq_attr "type" "imov"))) | |
98 | "lua_decodern,lua_p12+lua_p45") | |
99 | ||
100 | (define_insn_reservation "lua_icmov" 1 | |
101 | (and (eq_attr "cpu" "lujiazui") | |
102 | (and (eq_attr "memory" "none,unknown") | |
103 | (eq_attr "type" "icmov"))) | |
104 | "lua_decodern,lua_p2") | |
105 | ||
106 | (define_insn_reservation "lua_icmov_load" 5 | |
107 | (and (eq_attr "cpu" "lujiazui") | |
108 | (and (eq_attr "memory" "load") | |
109 | (eq_attr "type" "icmov"))) | |
110 | "lua_decoder01,lua_p45,lua_p2") | |
111 | ||
112 | ;; Push and pop. | |
113 | (define_insn_reservation "lua_push_reg" 1 | |
114 | (and (eq_attr "cpu" "lujiazui") | |
115 | (and (eq_attr "memory" "store") | |
116 | (eq_attr "type" "push"))) | |
117 | "lua_decodern,lua_p12+lua_p45") | |
118 | ||
119 | (define_insn_reservation "lua_push_mem" 4 | |
120 | (and (eq_attr "cpu" "lujiazui") | |
121 | (and (eq_attr "memory" "both") | |
122 | (eq_attr "type" "push"))) | |
123 | "lua_decoder01,lua_p45,lua_p12+lua_p45") | |
124 | ||
125 | (define_insn_reservation "lua_pop_reg" 4 | |
126 | (and (eq_attr "cpu" "lujiazui") | |
127 | (and (eq_attr "memory" "load") | |
128 | (eq_attr "type" "pop"))) | |
129 | "lua_decoder01,lua_p45") | |
130 | ||
131 | (define_insn_reservation "lua_pop_mem" 4 | |
132 | (and (eq_attr "cpu" "lujiazui") | |
133 | (and (eq_attr "memory" "both") | |
134 | (eq_attr "type" "pop"))) | |
135 | "lua_decoder0,lua_p45,lua_p12+lua_p45") | |
136 | ||
137 | (define_insn_reservation "lua_lea" 1 | |
138 | (and (eq_attr "cpu" "lujiazui") | |
139 | (eq_attr "type" "lea")) | |
94c0b26f | 140 | "lua_decodern,lua_p45") |
a239aff8 M |
141 | |
142 | (define_insn_reservation "lua_shift_rotate" 1 | |
143 | (and (eq_attr "cpu" "lujiazui") | |
144 | (and (eq_attr "memory" "none,unknown") | |
145 | (eq_attr "type" "ishift,ishift1,rotate,rotate1"))) | |
146 | "lua_decodern,lua_p2") | |
147 | ||
148 | (define_insn_reservation "lua_shift_rotate_load" 5 | |
149 | (and (eq_attr "cpu" "lujiazui") | |
150 | (and (eq_attr "memory" "load") | |
151 | (eq_attr "type" "ishift,ishift1,rotate,rotate1"))) | |
152 | "lua_decoder01,lua_p45,lua_p2") | |
153 | ||
154 | (define_insn_reservation "lua_shift_rotate_store" 1 | |
155 | (and (eq_attr "cpu" "lujiazui") | |
156 | (and (eq_attr "memory" "store") | |
157 | (eq_attr "type" "ishift,ishift1,rotate,rotate1"))) | |
158 | "lua_decoder01,lua_p2,lua_p45") | |
159 | ||
160 | (define_insn_reservation "lua_shift_rotate_both" 5 | |
161 | (and (eq_attr "cpu" "lujiazui") | |
162 | (and (eq_attr "memory" "both") | |
163 | (eq_attr "type" "ishift,ishift1,rotate,rotate1"))) | |
164 | "lua_decoder0,lua_p45,lua_p2,lua_p45") | |
165 | ||
166 | (define_insn_reservation "lua_branch" 1 | |
167 | (and (eq_attr "cpu" "lujiazui") | |
168 | (and (eq_attr "memory" "none") | |
169 | (eq_attr "type" "ibr"))) | |
170 | "lua_decodern,lua_p1") | |
171 | ||
172 | (define_insn_reservation "lua_indirect_branch_load" 5 | |
173 | (and (eq_attr "cpu" "lujiazui") | |
174 | (and (eq_attr "memory" "load") | |
175 | (eq_attr "type" "ibr"))) | |
176 | "lua_decodern,lua_p45,lua_p1") | |
177 | ||
178 | (define_insn_reservation "lua_leave" 4 | |
179 | (and (eq_attr "cpu" "lujiazui") | |
180 | (eq_attr "type" "leave")) | |
181 | "lua_decoder0,lua_p45+lua_p12,lua_p12") | |
182 | ||
183 | ;; Multiplication instructions. | |
184 | ||
185 | (define_insn_reservation "lua_imul_qi" 2 | |
186 | (and (eq_attr "cpu" "lujiazui") | |
187 | (and (eq_attr "memory" "none") | |
188 | (and (eq_attr "mode" "QI") | |
189 | (eq_attr "type" "imul,imulx")))) | |
190 | "lua_decodern,lua_p1p2") | |
191 | ||
192 | (define_insn_reservation "lua_imul_qi_mem" 6 | |
193 | (and (eq_attr "cpu" "lujiazui") | |
194 | (and (eq_attr "memory" "!none") | |
195 | (and (eq_attr "mode" "QI") | |
196 | (eq_attr "type" "imul,imulx")))) | |
197 | "lua_decoder01,lua_p1p2+lua_p45") | |
198 | ||
199 | (define_insn_reservation "lua_imul_hisi" 3 | |
200 | (and (eq_attr "cpu" "lujiazui") | |
201 | (and (eq_attr "memory" "none") | |
202 | (and (eq_attr "mode" "HI,SI") | |
203 | (eq_attr "type" "imul,imulx")))) | |
204 | "lua_decoder0,lua_p1p2") | |
205 | ||
206 | (define_insn_reservation "lua_imul_hisi_mem" 7 | |
207 | (and (eq_attr "cpu" "lujiazui") | |
208 | (and (eq_attr "memory" "!none") | |
209 | (and (eq_attr "mode" "HI,SI") | |
210 | (eq_attr "type" "imul,imulx")))) | |
211 | "lua_decoder0,lua_p1p2+lua_p45") | |
212 | ||
213 | (define_insn_reservation "lua_imul_di" 12 | |
214 | (and (eq_attr "cpu" "lujiazui") | |
215 | (and (eq_attr "memory" "none") | |
216 | (and (eq_attr "mode" "DI") | |
217 | (eq_attr "type" "imul,imulx")))) | |
218 | "lua_decoder0,lua_p0p1p2p3") | |
219 | ||
220 | (define_insn_reservation "lua_imul_di_mem" 16 | |
221 | (and (eq_attr "cpu" "lujiazui") | |
222 | (and (eq_attr "memory" "!none") | |
223 | (and (eq_attr "mode" "DI") | |
224 | (eq_attr "type" "imul,imulx")))) | |
225 | "lua_decoder0,lua_p0p1p2p3+lua_p45") | |
226 | ||
227 | ;; Division instructions. | |
228 | ||
229 | (define_insn_reservation "lua_idiv_qi" 21 | |
230 | (and (eq_attr "cpu" "lujiazui") | |
231 | (and (eq_attr "memory" "none") | |
232 | (and (eq_attr "mode" "QI") | |
233 | (eq_attr "type" "idiv")))) | |
ec1db901 | 234 | "lua_decoder0,lua_p0p1p2p3,lua_div*21") |
a239aff8 M |
235 | |
236 | (define_insn_reservation "lua_idiv_qi_load" 25 | |
237 | (and (eq_attr "cpu" "lujiazui") | |
238 | (and (eq_attr "memory" "load") | |
239 | (and (eq_attr "mode" "QI") | |
240 | (eq_attr "type" "idiv")))) | |
ec1db901 | 241 | "lua_decoder0,lua_p45,lua_p0p1p2p3,lua_div*21") |
a239aff8 M |
242 | |
243 | (define_insn_reservation "lua_idiv_hi" 22 | |
244 | (and (eq_attr "cpu" "lujiazui") | |
245 | (and (eq_attr "memory" "none") | |
246 | (and (eq_attr "mode" "HI") | |
247 | (eq_attr "type" "idiv")))) | |
ec1db901 | 248 | "lua_decoder0,lua_p0p1p2p3,lua_div*22") |
a239aff8 M |
249 | |
250 | (define_insn_reservation "lua_idiv_hi_load" 26 | |
251 | (and (eq_attr "cpu" "lujiazui") | |
252 | (and (eq_attr "memory" "load") | |
253 | (and (eq_attr "mode" "HI") | |
254 | (eq_attr "type" "idiv")))) | |
ec1db901 | 255 | "lua_decoder0,lua_p45,lua_p0p1p2p3,lua_div*22") |
a239aff8 M |
256 | |
257 | (define_insn_reservation "lua_idiv_si" 20 | |
258 | (and (eq_attr "cpu" "lujiazui") | |
259 | (and (eq_attr "memory" "none") | |
260 | (and (eq_attr "mode" "SI") | |
261 | (eq_attr "type" "idiv")))) | |
ec1db901 | 262 | "lua_decoder0,lua_p0p1p2p3,lua_div*20") |
a239aff8 M |
263 | |
264 | (define_insn_reservation "lua_idiv_si_load" 24 | |
265 | (and (eq_attr "cpu" "lujiazui") | |
266 | (and (eq_attr "memory" "load") | |
267 | (and (eq_attr "mode" "SI") | |
268 | (eq_attr "type" "idiv")))) | |
ec1db901 | 269 | "lua_decoder0,lua_p45,lua_p0p1p2p3,lua_div*20") |
a239aff8 M |
270 | |
271 | (define_insn_reservation "lua_idiv_di" 150 | |
272 | (and (eq_attr "cpu" "lujiazui") | |
273 | (and (eq_attr "memory" "none") | |
274 | (and (eq_attr "mode" "DI") | |
275 | (eq_attr "type" "idiv")))) | |
ec1db901 | 276 | "lua_decoder0,lua_p0p1p2p3,lua_div*150") |
a239aff8 M |
277 | |
278 | (define_insn_reservation "lua_idiv_di_load" 154 | |
279 | (and (eq_attr "cpu" "lujiazui") | |
280 | (and (eq_attr "memory" "load") | |
281 | (and (eq_attr "mode" "DI") | |
282 | (eq_attr "type" "idiv")))) | |
ec1db901 | 283 | "lua_decoder0,lua_p45,lua_p0p1p2p3,lua_div*150") |
a239aff8 M |
284 | |
285 | ;; x87 floating point operations. | |
286 | ||
287 | (define_insn_reservation "lua_fxch" 1 | |
288 | (and (eq_attr "cpu" "lujiazui") | |
289 | (eq_attr "type" "fxch")) | |
290 | "lua_decodern,lua_p1") | |
291 | ||
292 | (define_insn_reservation "lua_fop" 3 | |
293 | (and (eq_attr "cpu" "lujiazui") | |
294 | (and (eq_attr "memory" "none,unknown") | |
295 | (eq_attr "type" "fop"))) | |
296 | "lua_decodern,lua_p0") | |
297 | ||
298 | (define_insn_reservation "lua_fop_load" 7 | |
299 | (and (eq_attr "cpu" "lujiazui") | |
300 | (and (eq_attr "memory" "load") | |
301 | (eq_attr "type" "fop"))) | |
302 | "lua_decoder01,lua_p45,lua_p0") | |
303 | ||
304 | (define_insn_reservation "lua_fop_store" 3 | |
305 | (and (eq_attr "cpu" "lujiazui") | |
306 | (and (eq_attr "memory" "store") | |
307 | (eq_attr "type" "fop"))) | |
308 | "lua_decodern,lua_p0,lua_p45") | |
309 | ||
310 | (define_insn_reservation "lua_fop_both" 7 | |
311 | (and (eq_attr "cpu" "lujiazui") | |
312 | (and (eq_attr "memory" "both") | |
313 | (eq_attr "type" "fop"))) | |
314 | "lua_decoder0,lua_p45,lua_p0,lua_p45") | |
315 | ||
316 | (define_insn_reservation "lua_fsgn" 1 | |
317 | (and (eq_attr "cpu" "lujiazui") | |
318 | (eq_attr "type" "fsgn")) | |
319 | "lua_decodern,lua_p0") | |
320 | ||
321 | (define_insn_reservation "lua_fistp" 1 | |
322 | (and (eq_attr "cpu" "lujiazui") | |
323 | (and (eq_attr "memory" "none") | |
324 | (eq_attr "type" "fistp"))) | |
325 | "lua_decodern,lua_p0") | |
326 | ||
327 | (define_insn_reservation "lua_fistp_mem" 4 | |
328 | (and (eq_attr "cpu" "lujiazui") | |
329 | (and (eq_attr "memory" "!none") | |
330 | (eq_attr "type" "fistp"))) | |
331 | "lua_decoder0,lua_p0+lua_p45") | |
332 | ||
333 | (define_insn_reservation "lua_fcmov" 3 | |
334 | (and (eq_attr "cpu" "lujiazui") | |
335 | (eq_attr "type" "fcmov")) | |
336 | "lua_decodern,lua_p0") | |
337 | ||
338 | (define_insn_reservation "lua_fcmp" 1 | |
339 | (and (eq_attr "cpu" "lujiazui") | |
340 | (and (eq_attr "memory" "none") | |
341 | (eq_attr "type" "fcmp"))) | |
342 | "lua_decodern,lua_p0") | |
343 | ||
344 | (define_insn_reservation "lua_fcmp_load" 5 | |
345 | (and (eq_attr "cpu" "lujiazui") | |
346 | (and (eq_attr "memory" "load") | |
347 | (eq_attr "type" "fcmp"))) | |
348 | "lua_decoder01,lua_p45,lua_p0") | |
349 | ||
350 | (define_insn_reservation "lua_fmov" 1 | |
351 | (and (eq_attr "cpu" "lujiazui") | |
352 | (and (eq_attr "memory" "none") | |
353 | (eq_attr "type" "fmov"))) | |
354 | "lua_decodern,lua_p0") | |
355 | ||
356 | (define_insn_reservation "lua_fmov_load" 4 | |
357 | (and (eq_attr "cpu" "lujiazui") | |
358 | (and (eq_attr "memory" "load") | |
359 | (and (eq_attr "mode" "!XF") | |
360 | (eq_attr "type" "fmov")))) | |
361 | "lua_decoder01,lua_p45,lua_p0") | |
362 | ||
363 | (define_insn_reservation "lua_fmov_XF_load" 3 | |
364 | (and (eq_attr "cpu" "lujiazui") | |
365 | (and (eq_attr "memory" "load") | |
366 | (and (eq_attr "mode" "XF") | |
367 | (eq_attr "type" "fmov")))) | |
368 | "lua_decoder0,lua_p45,lua_p0") | |
369 | ||
370 | (define_insn_reservation "lua_fmov_store" 1 | |
371 | (and (eq_attr "cpu" "lujiazui") | |
372 | (and (eq_attr "memory" "store") | |
373 | (and (eq_attr "mode" "!XF") | |
374 | (eq_attr "type" "fmov")))) | |
375 | "lua_decoder0,lua_p0,lua_p45") | |
376 | ||
377 | (define_insn_reservation "lua_fmov_XF_store" 1 | |
378 | (and (eq_attr "cpu" "lujiazui") | |
379 | (and (eq_attr "memory" "store") | |
380 | (and (eq_attr "mode" "XF") | |
381 | (eq_attr "type" "fmov")))) | |
382 | "lua_decoder0,lua_p0,lua_p45") | |
383 | ||
384 | (define_insn_reservation "lua_fmul" 4 | |
385 | (and (eq_attr "cpu" "lujiazui") | |
386 | (and (eq_attr "memory" "none") | |
387 | (eq_attr "type" "fmul"))) | |
388 | "lua_decodern,lua_p3") | |
389 | ||
390 | (define_insn_reservation "lua_fmul_load" 8 | |
391 | (and (eq_attr "cpu" "lujiazui") | |
392 | (and (eq_attr "fp_int_src" "false") | |
393 | (and (eq_attr "memory" "load") | |
394 | (eq_attr "type" "fmul")))) | |
395 | "lua_decoder01,lua_p45,lua_p3") | |
396 | ||
397 | (define_insn_reservation "lua_fimul_load" 8 | |
398 | (and (eq_attr "cpu" "lujiazui") | |
399 | (and (eq_attr "fp_int_src" "true") | |
400 | (and (eq_attr "memory" "load") | |
401 | (eq_attr "type" "fmul")))) | |
402 | "lua_decoder0,lua_p45,lua_p3") | |
403 | ||
404 | ;; fdiv instructions. | |
405 | ||
406 | (define_insn_reservation "lua_fdiv_SF" 15 | |
407 | (and (eq_attr "cpu" "lujiazui") | |
408 | (and (eq_attr "memory" "none") | |
409 | (and (eq_attr "mode" "SF") | |
410 | (eq_attr "type" "fdiv,fpspc")))) | |
ec1db901 | 411 | "lua_decodern,lua_p0,lua_div*15") |
a239aff8 M |
412 | |
413 | (define_insn_reservation "lua_fdiv_SF_load" 19 | |
414 | (and (eq_attr "cpu" "lujiazui") | |
415 | (and (eq_attr "memory" "load") | |
416 | (and (eq_attr "mode" "SF") | |
417 | (eq_attr "type" "fdiv,fpspc")))) | |
ec1db901 | 418 | "lua_decoder01,lua_p45,lua_p0,lua_div*15") |
a239aff8 M |
419 | |
420 | (define_insn_reservation "lua_fdiv_DF" 18 | |
421 | (and (eq_attr "cpu" "lujiazui") | |
422 | (and (eq_attr "memory" "none") | |
423 | (and (eq_attr "mode" "DF") | |
424 | (eq_attr "type" "fdiv,fpspc")))) | |
ec1db901 | 425 | "lua_decodern,lua_p0,lua_div*18") |
a239aff8 M |
426 | |
427 | (define_insn_reservation "lua_fdiv_DF_load" 22 | |
428 | (and (eq_attr "cpu" "lujiazui") | |
429 | (and (eq_attr "memory" "load") | |
430 | (and (eq_attr "mode" "DF") | |
431 | (eq_attr "type" "fdiv,fpspc")))) | |
ec1db901 | 432 | "lua_decoder01,lua_p45,lua_p0,lua_div*18") |
a239aff8 M |
433 | |
434 | (define_insn_reservation "lua_fdiv_XF" 22 | |
435 | (and (eq_attr "cpu" "lujiazui") | |
436 | (and (eq_attr "memory" "none") | |
437 | (and (eq_attr "mode" "XF") | |
438 | (eq_attr "type" "fdiv,fpspc")))) | |
ec1db901 | 439 | "lua_decoder0,lua_p0,lua_div*22") |
a239aff8 M |
440 | |
441 | (define_insn_reservation "lua_fdiv_XF_load" 26 | |
442 | (and (eq_attr "cpu" "lujiazui") | |
443 | (and (eq_attr "memory" "load") | |
444 | (and (eq_attr "mode" "XF") | |
445 | (eq_attr "type" "fdiv,fpspc")))) | |
ec1db901 | 446 | "lua_decoder0,lua_p45,lua_p0,lua_div*22") |
a239aff8 M |
447 | |
448 | ;; MMX instructions. | |
449 | ||
450 | (define_insn_reservation "lua_mmx_sse_add_shft" 1 | |
451 | (and (eq_attr "cpu" "lujiazui") | |
452 | (and (eq_attr "memory" "none") | |
453 | (eq_attr "type" "mmxadd,sseiadd,mmxshft,sseishft"))) | |
454 | "lua_decodern,lua_p0") | |
455 | ||
456 | (define_insn_reservation "lua_mmx_sse_add_shft_load" 5 | |
457 | (and (eq_attr "cpu" "lujiazui") | |
458 | (and (eq_attr "memory" "load") | |
459 | (eq_attr "type" "mmxadd,sseiadd,mmxshft,sseishft"))) | |
460 | "lua_decoder01,lua_p45,lua_p0") | |
461 | ||
462 | (define_insn_reservation "lua_mmx_sse_add_shft_store" 1 | |
463 | (and (eq_attr "cpu" "lujiazui") | |
464 | (and (eq_attr "memory" "store") | |
465 | (eq_attr "type" "mmxadd,sseiadd,mmxshft,sseishft"))) | |
466 | "lua_decodern,lua_p0,lua_p45") | |
467 | ||
468 | (define_insn_reservation "lua_mmx_mul" 5 | |
469 | (and (eq_attr "cpu" "lujiazui") | |
470 | (and (eq_attr "memory" "none") | |
471 | (eq_attr "type" "mmxmul,sseimul"))) | |
472 | "lua_decodern,lua_p3") | |
473 | ||
474 | (define_insn_reservation "lua_mmx_mul_load" 9 | |
475 | (and (eq_attr "cpu" "lujiazui") | |
476 | (and (eq_attr "memory" "load") | |
477 | (eq_attr "type" "mmxmul,sseimul"))) | |
478 | "lua_decoder01,lua_p45,lua_p3") | |
479 | ||
480 | (define_insn_reservation "lua_mmxcvt" 1 | |
481 | (and (eq_attr "cpu" "lujiazui") | |
482 | (and (eq_attr "memory" "none") | |
483 | (eq_attr "type" "mmxcvt"))) | |
484 | "lua_decodern,lua_p03") | |
485 | ||
486 | (define_insn_reservation "lua_mmxcvt_load" 5 | |
487 | (and (eq_attr "cpu" "lujiazui") | |
488 | (and (eq_attr "memory" "load") | |
489 | (eq_attr "type" "mmxcvt"))) | |
490 | "lua_decoder01,lua_p45,lua_p03") | |
491 | ||
492 | ;; The sfence instruction. | |
493 | (define_insn_reservation "lua_sse_sfence" 13 | |
494 | (and (eq_attr "cpu" "lujiazui") | |
495 | (and (eq_attr "memory" "unknown") | |
496 | (eq_attr "type" "sse"))) | |
497 | "lua_decoder0,lua_p45") | |
498 | ||
499 | (define_insn_reservation "lua_sse_SFDF" 5 | |
500 | (and (eq_attr "cpu" "lujiazui") | |
501 | (and (eq_attr "mode" "SF,DF") | |
502 | (eq_attr "type" "sse"))) | |
503 | "lua_decodern,lua_p0") | |
504 | ||
505 | (define_insn_reservation "lua_sse_V4SF" 13 | |
506 | (and (eq_attr "cpu" "lujiazui") | |
507 | (and (eq_attr "mode" "V4SF") | |
508 | (eq_attr "type" "sse"))) | |
509 | "lua_decodern,lua_p0") | |
510 | ||
511 | (define_insn_reservation "lua_sse_V8SF" 19 | |
512 | (and (eq_attr "cpu" "lujiazui") | |
513 | (and (eq_attr "mode" "V8SF,V4DF") | |
514 | (eq_attr "type" "sse"))) | |
515 | "lua_decodern,lua_p0") | |
516 | ||
517 | (define_insn_reservation "lua_sse_add1" 5 | |
518 | (and (eq_attr "cpu" "lujiazui") | |
519 | (and (eq_attr "memory" "none") | |
520 | (eq_attr "type" "sseadd1"))) | |
521 | "lua_decoder0,lua_p0") | |
522 | ||
523 | (define_insn_reservation "lua_sse_add1_load" 8 | |
524 | (and (eq_attr "cpu" "lujiazui") | |
525 | (and (eq_attr "memory" "load") | |
526 | (eq_attr "type" "sseadd1"))) | |
527 | "lua_decoder0,lua_p45,lua_p0") | |
528 | ||
529 | (define_insn_reservation "lua_sse_cmp" 3 | |
530 | (and (eq_attr "cpu" "lujiazui") | |
531 | (and (eq_attr "memory" "none") | |
532 | (eq_attr "type" "ssecmp,ssecomi"))) | |
533 | "lua_decodern,lua_p0") | |
534 | ||
535 | (define_insn_reservation "lua_sse_cmp_load" 7 | |
536 | (and (eq_attr "cpu" "lujiazui") | |
537 | (and (eq_attr "memory" "load") | |
538 | (eq_attr "type" "ssecmp,ssecomi"))) | |
539 | "lua_decoder01,lua_p45,lua_p0") | |
540 | ||
541 | (define_insn_reservation "lua_sse_logic" 1 | |
542 | (and (eq_attr "cpu" "lujiazui") | |
543 | (and (eq_attr "memory" "none") | |
544 | (eq_attr "type" "sselog,sselog1"))) | |
545 | "lua_decodern,lua_p03") | |
546 | ||
547 | (define_insn_reservation "lua_sse_logic_load" 5 | |
548 | (and (eq_attr "cpu" "lujiazui") | |
549 | (and (eq_attr "memory" "load") | |
550 | (eq_attr "type" "sselog,sselog1"))) | |
551 | "lua_decoder01,lua_p45,lua_p03") | |
552 | ||
553 | (define_insn_reservation "lua_sse_add" 3 | |
554 | (and (eq_attr "cpu" "lujiazui") | |
555 | (and (eq_attr "memory" "none") | |
556 | (eq_attr "type" "sseadd"))) | |
557 | "lua_decodern,lua_p0") | |
558 | ||
559 | (define_insn_reservation "lua_sse_add_load" 7 | |
560 | (and (eq_attr "cpu" "lujiazui") | |
561 | (and (eq_attr "memory" "load") | |
562 | (eq_attr "type" "sseadd"))) | |
563 | "lua_decoder01,lua_p45,lua_p0") | |
564 | ||
565 | (define_insn_reservation "lua_ssemul_ss_ps" 3 | |
566 | (and (eq_attr "cpu" "lujiazui") | |
567 | (and (eq_attr "memory" "none") | |
568 | (and (eq_attr "mode" "SF,V4SF,V8SF") | |
569 | (eq_attr "type" "ssemul")))) | |
570 | "lua_decodern,lua_p3") | |
571 | ||
572 | (define_insn_reservation "lua_ssemul_ss_ps_load" 7 | |
573 | (and (eq_attr "cpu" "lujiazui") | |
574 | (and (eq_attr "memory" "load") | |
575 | (and (eq_attr "mode" "SF,V4SF,V8SF") | |
576 | (eq_attr "type" "ssemul")))) | |
577 | "lua_decoder01,lua_p45,lua_p3") | |
578 | ||
579 | (define_insn_reservation "lua_ssemul_sd_pd" 4 | |
580 | (and (eq_attr "cpu" "lujiazui") | |
581 | (and (eq_attr "memory" "none") | |
582 | (and (eq_attr "mode" "DF,V2DF,V4DF") | |
583 | (eq_attr "type" "ssemul")))) | |
584 | "lua_decodern,lua_p3") | |
585 | ||
586 | (define_insn_reservation "lua_ssemul_sd_pd_load" 8 | |
587 | (and (eq_attr "cpu" "lujiazui") | |
588 | (and (eq_attr "memory" "load") | |
589 | (and (eq_attr "mode" "DF,V2DF,V4DF") | |
590 | (eq_attr "type" "ssemul")))) | |
591 | "lua_decoder01,lua_p45,lua_p3") | |
592 | ||
593 | (define_insn_reservation "lua_ssediv_SF" 13 | |
594 | (and (eq_attr "cpu" "lujiazui") | |
595 | (and (eq_attr "memory" "none") | |
596 | (and (eq_attr "mode" "SF") | |
597 | (eq_attr "type" "ssediv")))) | |
ec1db901 | 598 | "lua_decodern,lua_p0,lua_div*13") |
a239aff8 M |
599 | |
600 | (define_insn_reservation "lua_ssediv_load_SF" 17 | |
601 | (and (eq_attr "cpu" "lujiazui") | |
602 | (and (eq_attr "memory" "load") | |
603 | (and (eq_attr "mode" "SF") | |
604 | (eq_attr "type" "ssediv")))) | |
ec1db901 | 605 | "lua_decoder01,lua_p45,lua_p0,lua_div*13") |
a239aff8 M |
606 | |
607 | (define_insn_reservation "lua_ssediv_V4SF" 23 | |
608 | (and (eq_attr "cpu" "lujiazui") | |
609 | (and (eq_attr "memory" "none") | |
610 | (and (eq_attr "mode" "V4SF") | |
611 | (eq_attr "type" "ssediv")))) | |
ec1db901 | 612 | "lua_decodern,lua_p0,lua_div*23") |
a239aff8 M |
613 | |
614 | (define_insn_reservation "lua_ssediv_load_V4SF" 27 | |
615 | (and (eq_attr "cpu" "lujiazui") | |
616 | (and (eq_attr "memory" "load") | |
617 | (and (eq_attr "mode" "V4SF") | |
618 | (eq_attr "type" "ssediv")))) | |
ec1db901 | 619 | "lua_decoder01,lua_p45,lua_p0,lua_div*23") |
a239aff8 M |
620 | |
621 | (define_insn_reservation "lua_ssediv_V8SF" 47 | |
622 | (and (eq_attr "cpu" "lujiazui") | |
623 | (and (eq_attr "memory" "none") | |
624 | (and (eq_attr "mode" "V8SF") | |
625 | (eq_attr "type" "ssediv")))) | |
ec1db901 | 626 | "lua_decoder0,lua_p0,lua_div*47") |
a239aff8 M |
627 | |
628 | (define_insn_reservation "lua_ssediv_load_V8SF" 51 | |
629 | (and (eq_attr "cpu" "lujiazui") | |
630 | (and (eq_attr "memory" "load") | |
631 | (and (eq_attr "mode" "V8SF") | |
632 | (eq_attr "type" "ssediv")))) | |
ec1db901 | 633 | "lua_decoder0,lua_p45,lua_p0,lua_div*47") |
a239aff8 M |
634 | |
635 | (define_insn_reservation "lua_ssediv_SD" 17 | |
636 | (and (eq_attr "cpu" "lujiazui") | |
637 | (and (eq_attr "memory" "none") | |
638 | (and (eq_attr "mode" "DF") | |
639 | (eq_attr "type" "ssediv")))) | |
ec1db901 | 640 | "lua_decodern,lua_p0,lua_div*17") |
a239aff8 M |
641 | |
642 | (define_insn_reservation "lua_ssediv_load_SD" 21 | |
643 | (and (eq_attr "cpu" "lujiazui") | |
644 | (and (eq_attr "memory" "load") | |
645 | (and (eq_attr "mode" "DF") | |
646 | (eq_attr "type" "ssediv")))) | |
ec1db901 | 647 | "lua_decoder01,lua_p45,lua_p0,lua_div*17") |
a239aff8 M |
648 | |
649 | (define_insn_reservation "lua_ssediv_V2DF" 30 | |
650 | (and (eq_attr "cpu" "lujiazui") | |
651 | (and (eq_attr "memory" "none") | |
652 | (and (eq_attr "mode" "V2DF") | |
653 | (eq_attr "type" "ssediv")))) | |
ec1db901 | 654 | "lua_decodern,lua_p0,lua_div*30") |
a239aff8 M |
655 | |
656 | (define_insn_reservation "lua_ssediv_load_V2DF" 34 | |
657 | (and (eq_attr "cpu" "lujiazui") | |
658 | (and (eq_attr "memory" "load") | |
659 | (and (eq_attr "mode" "V2DF") | |
660 | (eq_attr "type" "ssediv")))) | |
ec1db901 | 661 | "lua_decoder01,lua_p45,lua_p0,lua_div*30") |
a239aff8 M |
662 | |
663 | (define_insn_reservation "lua_ssediv_V4DF" 56 | |
664 | (and (eq_attr "cpu" "lujiazui") | |
665 | (and (eq_attr "memory" "none") | |
666 | (and (eq_attr "mode" "V4DF") | |
667 | (eq_attr "type" "ssediv")))) | |
ec1db901 | 668 | "lua_decoder0,lua_p0,lua_div*56") |
a239aff8 M |
669 | |
670 | (define_insn_reservation "lua_ssediv_load_V4DF" 60 | |
671 | (and (eq_attr "cpu" "lujiazui") | |
672 | (and (eq_attr "memory" "load") | |
673 | (and (eq_attr "mode" "V4DF") | |
674 | (eq_attr "type" "ssediv")))) | |
ec1db901 | 675 | "lua_decoder0,lua_p4p5,lua_p0,lua_div*56") |
a239aff8 M |
676 | |
677 | ||
678 | (define_insn_reservation "lua_sseicvt_si" 2 | |
679 | (and (eq_attr "cpu" "lujiazui") | |
680 | (and (eq_attr "memory" "none") | |
681 | (and (eq_attr "mode" "SI") | |
682 | (and (match_operand:SF 1 "memory_operand") | |
683 | (eq_attr "type" "sseicvt"))))) | |
684 | "lua_decoder01,lua_p0") | |
685 | ||
686 | (define_insn_reservation "lua_sseicvt_si_load" 6 | |
687 | (and (eq_attr "cpu" "lujiazui") | |
688 | (and (eq_attr "memory" "load") | |
689 | (and (eq_attr "mode" "SI") | |
690 | (and (match_operand:SF 1 "memory_operand") | |
691 | (eq_attr "type" "sseicvt"))))) | |
692 | "lua_decoder0,lua_p45,lua_p0") | |
693 | ||
694 | (define_insn_reservation "lua_sseicvtdf_si" 3 | |
695 | (and (eq_attr "cpu" "lujiazui") | |
696 | (and (eq_attr "memory" "none") | |
697 | (and (eq_attr "mode" "SI") | |
698 | (and (match_operand:DF 1 "memory_operand") | |
699 | (eq_attr "type" "sseicvt"))))) | |
700 | "lua_decodern,lua_p0") | |
701 | ||
702 | (define_insn_reservation "lua_sseicvtdf_si_load" 7 | |
703 | (and (eq_attr "cpu" "lujiazui") | |
704 | (and (eq_attr "memory" "load") | |
705 | (and (eq_attr "mode" "SI") | |
706 | (and (match_operand:DF 1 "memory_operand") | |
707 | (eq_attr "type" "sseicvt"))))) | |
708 | "lua_decoder01,lua_p45,lua_p0") | |
709 | ||
710 | (define_insn_reservation "lua_ssecvt" 6 | |
711 | (and (eq_attr "cpu" "lujiazui") | |
712 | (and (eq_attr "memory" "none") | |
713 | (eq_attr "type" "ssecvt"))) | |
714 | "lua_decoder01,lua_p03") | |
715 | ||
716 | (define_insn_reservation "lua_ssecvt_load" 10 | |
717 | (and (eq_attr "cpu" "lujiazui") | |
718 | (and (eq_attr "memory" "load") | |
719 | (eq_attr "type" "ssecvt"))) | |
720 | "lua_decoder0,lua_p45,lua_p03") | |
721 | ||
722 | (define_insn_reservation "lua_sse_mov" 1 | |
723 | (and (eq_attr "cpu" "lujiazui") | |
724 | (and (eq_attr "memory" "none") | |
725 | (eq_attr "type" "ssemov"))) | |
726 | "lua_decodern,lua_p03") | |
727 | ||
728 | (define_insn_reservation "lua_sse_mov_load" 5 | |
729 | (and (eq_attr "cpu" "lujiazui") | |
730 | (and (eq_attr "memory" "load") | |
731 | (eq_attr "type" "ssemov"))) | |
732 | "lua_decoder01,lua_p45,lua_p03") | |
733 | ||
734 | (define_insn_reservation "lua_sse_mov_store" 1 | |
735 | (and (eq_attr "cpu" "lujiazui") | |
736 | (and (eq_attr "memory" "store") | |
737 | (eq_attr "type" "ssemov"))) | |
738 | "lua_decoder01,lua_p0,lua_p45") | |
739 | ||
740 | (define_insn_reservation "lua_insn_alu" 1 | |
741 | (and (eq_attr "cpu" "lujiazui") | |
742 | (and (eq_attr "memory" "none,unknown") | |
743 | (eq_attr "type" "alu"))) | |
744 | "lua_decodern,lua_p12") | |
745 | ||
746 | (define_insn_reservation "lua_insn_alu_load" 5 | |
747 | (and (eq_attr "cpu" "lujiazui") | |
748 | (and (eq_attr "memory" "load") | |
749 | (eq_attr "type" "alu"))) | |
750 | "lua_decoder01,lua_p45,lua_p12") | |
751 | ||
752 | (define_insn_reservation "lua_insn_alu_store" 1 | |
753 | (and (eq_attr "cpu" "lujiazui") | |
754 | (and (eq_attr "memory" "store") | |
755 | (eq_attr "type" "alu"))) | |
756 | "lua_decoder01,lua_p12,lua_p45") | |
757 | ||
758 | (define_insn_reservation "lua_insn_alu_both" 5 | |
759 | (and (eq_attr "cpu" "lujiazui") | |
760 | (and (eq_attr "memory" "both") | |
761 | (eq_attr "type" "alu"))) | |
762 | "lua_decoder0,lua_p45,lua_p12,lua_p45") | |
763 | ||
764 | (define_insn_reservation "lua_insn_alu1" 1 | |
765 | (and (eq_attr "cpu" "lujiazui") | |
766 | (and (eq_attr "memory" "none,unknown") | |
767 | (eq_attr "type" "alu1"))) | |
768 | "lua_decodern,lua_p12") | |
769 | ||
770 | (define_insn_reservation "lua_insn_alu1_load" 5 | |
771 | (and (eq_attr "cpu" "lujiazui") | |
772 | (and (eq_attr "memory" "load") | |
773 | (eq_attr "type" "alu1"))) | |
774 | "lua_decoder01,lua_p45,lua_p12") | |
775 | ||
776 | (define_insn_reservation "lua_insn_alu1_store" 1 | |
777 | (and (eq_attr "cpu" "lujiazui") | |
778 | (and (eq_attr "memory" "store") | |
779 | (eq_attr "type" "alu1"))) | |
780 | "lua_decoder01,lua_p12,lua_p45") | |
781 | ||
782 | (define_insn_reservation "lua_insn_alu1_both" 5 | |
783 | (and (eq_attr "cpu" "lujiazui") | |
784 | (and (eq_attr "memory" "both") | |
785 | (eq_attr "type" "alu1"))) | |
786 | "lua_decoder0,lua_p45,lua_p12,lua_p45") | |
787 | ||
788 | (define_insn_reservation "lua_insn_negnot_incdec" 1 | |
789 | (and (eq_attr "cpu" "lujiazui") | |
790 | (and (eq_attr "memory" "none") | |
791 | (eq_attr "type" "negnot,incdec"))) | |
792 | "lua_decodern,lua_p12") | |
793 | ||
794 | (define_insn_reservation "lua_insn_negnot_setcc" 1 | |
795 | (and (eq_attr "cpu" "lujiazui") | |
796 | (and (eq_attr "memory" "none") | |
797 | (eq_attr "type" "setcc"))) | |
798 | "lua_decodern,lua_p2") | |
799 | ||
800 | (define_insn_reservation "lua_insn_negnot_setcc_mem" 5 | |
801 | (and (eq_attr "cpu" "lujiazui") | |
802 | (and (eq_attr "memory" "!none") | |
803 | (eq_attr "type" "negnot,setcc"))) | |
804 | "lua_decoder01,lua_p45,lua_p2,lua_p45") | |
805 | ||
806 | (define_insn_reservation "lua_insn_incdec_mem" 5 | |
807 | (and (eq_attr "cpu" "lujiazui") | |
808 | (and (eq_attr "memory" "!none") | |
809 | (eq_attr "type" "incdec"))) | |
810 | "lua_decoder0,lua_p45,lua_p12,lua_p45") | |
811 | ||
812 | (define_insn_reservation "lua_insn_icmptest" 1 | |
813 | (and (eq_attr "cpu" "lujiazui") | |
814 | (and (eq_attr "memory" "none,unknown") | |
815 | (eq_attr "type" "icmp,test"))) | |
816 | "lua_decodern,lua_p12") | |
817 | ||
818 | (define_insn_reservation "lua_insn_icmptest_load" 5 | |
819 | (and (eq_attr "cpu" "lujiazui") | |
820 | (and (eq_attr "memory" "load") | |
821 | (eq_attr "type" "icmp,test"))) | |
822 | "lua_decoder01,lua_p45,lua_p12") | |
823 | ||
824 | (define_insn_reservation "lua_insn_icmptest_store" 1 | |
825 | (and (eq_attr "cpu" "lujiazui") | |
826 | (and (eq_attr "memory" "store") | |
827 | (eq_attr "type" "icmp,test"))) | |
828 | "lua_decoder01,lua_p12,lua_p45") | |
829 | ||
830 | (define_insn_reservation "lua_insn_icmptest_both" 5 | |
831 | (and (eq_attr "cpu" "lujiazui") | |
832 | (and (eq_attr "memory" "both") | |
833 | (eq_attr "type" "icmp,test"))) | |
834 | "lua_decoder0,lua_p45,lua_p12,lua_p45") | |
835 | ||
836 | (define_insn_reservation "lua_insn_sseishft1_mmx" 1 | |
837 | (and (eq_attr "cpu" "lujiazui") | |
838 | (and (eq_attr "memory" "none") | |
839 | (eq_attr "type" "sseishft1,mmx,mmxcmp"))) | |
840 | "lua_decodern,lua_p03") | |
841 | ||
842 | (define_insn_reservation "lua_insn_sseishft1_mmx_mem" 5 | |
843 | (and (eq_attr "cpu" "lujiazui") | |
844 | (and (eq_attr "memory" "load") | |
845 | (eq_attr "type" "sseishft1,mmx,mmxcmp"))) | |
846 | "lua_decoder01,lua_p45,lua_p03") |