]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/config/i386/yongfeng.md
Update copyright years.
[thirdparty/gcc.git] / gcc / config / i386 / yongfeng.md
1 ;; Copyright (C) 2012-2024 Free Software Foundation, Inc.
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 ;; ZHAOXIN yongfeng processor Scheduling
21 ;; Modeling automatons for yongfeng decoders, integer execution pipes,
22 ;; FP execution pipes, AGU pipes, and dividers.
23 (define_automaton "yongfeng_decoder,yongfeng_ieu,yongfeng_fp,yongfeng_agu,yongfeng_idiv,yongfeng_fdiv")
24
25 ;; The rules for the decoder are simple:
26 ;; - an instruction with 1 uop can be decoded by any of the four
27 ;; decoders in one cycle.
28 ;; - an instruction with 2 uops can be decoded by decoder 0 or decoder 1
29 ;; or decoder 2 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 "yf_decoder0" "yongfeng_decoder")
36 (define_cpu_unit "yf_decoder1" "yongfeng_decoder")
37 (define_cpu_unit "yf_decoder2" "yongfeng_decoder")
38 (define_cpu_unit "yf_decoder3" "yongfeng_decoder")
39
40 ;; We first wish to find an instruction for yf_decoder0, so exclude
41 ;; other decoders from being reserved until yf_decoder0 is
42 ;; reserved
43 (presence_set "yf_decoder1" "yf_decoder0")
44 (presence_set "yf_decoder2" "yf_decoder0")
45 (presence_set "yf_decoder3" "yf_decoder0")
46
47 ;; Most instructions can be decoded on any of the three decoders.
48 (define_reservation "yf_decodern" "yf_decoder0|yf_decoder1|yf_decoder2|yf_decoder3")
49 (define_reservation "yf_decoder012" "yf_decoder0|yf_decoder1|yf_decoder2")
50
51 ;; The out-of-order core has ten pipelines. Port 0,1,2,3 are integer execution
52 ;; pipelines, port 4, 5 are responsible for address calculation, load and store,
53 ;; port 6,7,8,9 are FP pipelines.
54 (define_cpu_unit "yf_p0,yf_p1,yf_p2,yf_p3" "yongfeng_ieu")
55 (define_cpu_unit "yf_p4,yf_p5" "yongfeng_agu")
56 (define_cpu_unit "yf_p6,yf_p7,yf_p8,yf_p9" "yongfeng_fp")
57
58 (define_cpu_unit "yf_idiv" "yongfeng_idiv")
59 (define_cpu_unit "yf_fdiv" "yongfeng_fdiv")
60
61 (define_reservation "yf_ieu" "yf_p0|yf_p1|yf_p2|yf_p3")
62 (define_reservation "yf_p01" "yf_p0|yf_p1")
63 (define_reservation "yf_agu" "yf_p4|yf_p5")
64 (define_reservation "yf_feu" "yf_p6|yf_p7|yf_p8|yf_p9")
65
66 ;; Only the irregular instructions have to be modeled here.
67
68 ;; Complex instruction.
69 (define_insn_reservation "yongfeng_complex_insn" 6
70 (and (eq_attr "cpu" "yongfeng")
71 (eq_attr "type" "other,multi,str"))
72 "yf_decoder0")
73
74 ;; Call instruction.
75 (define_insn_reservation "yongfeng_call" 3
76 (and (eq_attr "cpu" "yongfeng")
77 (eq_attr "type" "call,callv"))
78 "yf_decoder012,yf_agu,yf_ieu*3")
79 ;; Push and pop.
80 (define_insn_reservation "yongfeng_push_reg" 1
81 (and (eq_attr "cpu" "yongfeng")
82 (and (eq_attr "memory" "store")
83 (eq_attr "type" "push")))
84 "yf_decodern,yf_agu,yf_ieu")
85
86 (define_insn_reservation "yongfeng_push_mem" 4
87 (and (eq_attr "cpu" "yongfeng")
88 (and (eq_attr "memory" "both")
89 (eq_attr "type" "push")))
90 "yf_decoder012,yf_agu,yf_ieu")
91
92 (define_insn_reservation "yongfeng_pop_reg" 4
93 (and (eq_attr "cpu" "yongfeng")
94 (and (eq_attr "memory" "load")
95 (eq_attr "type" "pop")))
96 "yf_decoder012,yf_p01,yf_agu")
97
98 (define_insn_reservation "yongfeng_pop_mem" 4
99 (and (eq_attr "cpu" "yongfeng")
100 (and (eq_attr "memory" "both")
101 (eq_attr "type" "pop")))
102 "yf_decoder0,yf_agu,yf_ieu")
103
104 (define_insn_reservation "yongfeng_leave" 3
105 (and (eq_attr "cpu" "yongfeng")
106 (eq_attr "type" "leave"))
107 "yf_decoder0,yf_agu,yf_p01*3")
108
109 ;; MOV - integer moves.
110 (define_insn_reservation "yongfeng_imov" 1
111 (and (eq_attr "cpu" "yongfeng")
112 (and (eq_attr "memory" "none")
113 (eq_attr "type" "imov,imovx")))
114 "yf_decodern,yf_ieu")
115
116 (define_insn_reservation "yongfeng_imov_load" 4
117 (and (eq_attr "cpu" "yongfeng")
118 (and (eq_attr "memory" "load")
119 (eq_attr "type" "imov")))
120 "yf_decodern,yf_agu")
121
122 (define_insn_reservation "yongfeng_imovx_load" 4
123 (and (eq_attr "cpu" "yongfeng")
124 (and (eq_attr "memory" "load")
125 (eq_attr "type" "imovx")))
126 "yf_decoder012,yf_agu,yf_ieu|yf_ieu")
127
128 (define_insn_reservation "yongfeng_imov_store" 1
129 (and (eq_attr "cpu" "yongfeng")
130 (and (eq_attr "memory" "store")
131 (eq_attr "type" "imov")))
132 "yf_decodern,yf_agu,yf_ieu")
133
134 (define_insn_reservation "yongfeng_int_insn" 1
135 (and (eq_attr "cpu" "yongfeng")
136 (and (eq_attr "memory" "none,unknown")
137 (eq_attr "type" "alu,alu1,icmov,icmp,test,lea,ishift1,rotate,rotate1,setcc,incdec")))
138 "yf_decodern,yf_ieu")
139
140 (define_insn_reservation "yongfeng_int_insn_load" 5
141 (and (eq_attr "cpu" "yongfeng")
142 (and (eq_attr "memory" "load")
143 (eq_attr "type" "alu,alu1,icmov,icmp,test,ishift1,rotate,rotate1,setcc")))
144 "yf_decoder012,yf_agu,yf_ieu")
145
146 (define_insn_reservation "yongfeng_int_insn_store" 1
147 (and (eq_attr "cpu" "yongfeng")
148 (and (eq_attr "memory" "store")
149 (eq_attr "type" "alu,alu1,icmp,test,ishift1,rotate,rotate1,setcc")))
150 "yf_decoder012,yf_agu,yf_ieu")
151
152 (define_insn_reservation "yongfeng_int_insn_both" 5
153 (and (eq_attr "cpu" "yongfeng")
154 (and (eq_attr "memory" "both")
155 (eq_attr "type" "alu,alu1,icmp,test,ishift1,rotate,rotate1,setcc,incdec")))
156 "yf_decoder012,yf_agu,yf_ieu")
157
158 (define_insn_reservation "yongfeng_shift_HI" 5
159 (and (eq_attr "cpu" "yongfeng")
160 (and (eq_attr "memory" "none,unknown")
161 (and (eq_attr "mode" "HI")
162 (eq_attr "type" "ishift"))))
163 "yf_decoder0,yf_ieu")
164
165 (define_insn_reservation "yongfeng_shift_SIDI" 2
166 (and (eq_attr "cpu" "yongfeng")
167 (and (eq_attr "memory" "none,unknown")
168 (and (eq_attr "mode" "SI,DI")
169 (eq_attr "type" "ishift"))))
170 "yf_decoder0,yf_ieu")
171
172 (define_insn_reservation "yongfeng_shift_HI_mem" 9
173 (and (eq_attr "cpu" "yongfeng")
174 (and (eq_attr "memory" "!none")
175 (and (eq_attr "mode" "HI")
176 (eq_attr "type" "ishift"))))
177 "yf_decoder0,yf_agu,yf_ieu")
178
179 (define_insn_reservation "yongfeng_shift_SIDI_mem" 6
180 (and (eq_attr "cpu" "yongfeng")
181 (and (eq_attr "memory" "!none")
182 (and (eq_attr "mode" "SI,DI")
183 (eq_attr "type" "ishift"))))
184 "yf_decoder0,yf_agu,yf_ieu")
185
186 (define_insn_reservation "yongfeng_negnot_QIHI" 2
187 (and (eq_attr "cpu" "yongfeng")
188 (and (eq_attr "memory" "none,unknown")
189 (and (eq_attr "mode" "QI,HI")
190 (eq_attr "type" "negnot"))))
191 "yf_decoder012,yf_ieu|yf_ieu")
192
193 (define_insn_reservation "yongfeng_negnot_SIDI" 1
194 (and (eq_attr "cpu" "yongfeng")
195 (and (eq_attr "memory" "none,unknown")
196 (and (eq_attr "mode" "SI,DI")
197 (eq_attr "type" "negnot"))))
198 "yf_decodern,yf_ieu")
199
200 (define_insn_reservation "yongfeng_negnot_QIHI_mem" 6
201 (and (eq_attr "cpu" "yongfeng")
202 (and (eq_attr "memory" "!none")
203 (and (eq_attr "mode" "QI,HI")
204 (eq_attr "type" "negnot"))))
205 "yf_decoder012,yf_agu,yf_ieu")
206
207 (define_insn_reservation "yongfeng_negnot_SIDI_mem" 5
208 (and (eq_attr "cpu" "yongfeng")
209 (and (eq_attr "memory" "!none")
210 (and (eq_attr "mode" "SI,DI")
211 (eq_attr "type" "negnot"))))
212 "yf_decoder012,yf_agu,yf_ieu")
213
214 ;; branch instruction
215 (define_insn_reservation "yongfeng_branch" 3
216 (and (eq_attr "cpu" "yongfeng")
217 (and (eq_attr "memory" "none")
218 (eq_attr "type" "ibr")))
219 "yf_decodern,yf_p2*3")
220
221 (define_insn_reservation "yongfeng_branch_mem" 7
222 (and (eq_attr "cpu" "yongfeng")
223 (and (eq_attr "memory" "!none")
224 (eq_attr "type" "ibr")))
225 "yf_decodern,yf_agu,yf_p2")
226
227 ;; Integer Multiplication instructions.
228
229 (define_insn_reservation "yongfeng_imul_QI" 2
230 (and (eq_attr "cpu" "yongfeng")
231 (and (eq_attr "memory" "none")
232 (and (eq_attr "mode" "QI")
233 (eq_attr "type" "imul"))))
234 "yf_decodern,yf_ieu|yf_ieu")
235
236 (define_insn_reservation "yongfeng_imul_HI" 3
237 (and (eq_attr "cpu" "yongfeng")
238 (and (eq_attr "memory" "none")
239 (and (eq_attr "mode" "HI")
240 (eq_attr "type" "imul"))))
241 "yf_decoder0,yf_ieu")
242
243 (define_insn_reservation "yongfeng_imul_SIDI" 2
244 (and (eq_attr "cpu" "yongfeng")
245 (and (eq_attr "memory" "none")
246 (and (eq_attr "mode" "SI,DI")
247 (eq_attr "type" "imul"))))
248 "yf_decoder0,yf_ieu|yf_ieu")
249
250 (define_insn_reservation "yongfeng_imul_QI_mem" 6
251 (and (eq_attr "cpu" "yongfeng")
252 (and (eq_attr "memory" "!none")
253 (and (eq_attr "mode" "QI")
254 (eq_attr "type" "imul"))))
255 "yf_decoder012,yf_agu,yf_ieu")
256
257 (define_insn_reservation "yongfeng_imul_SIDI_mem" 6
258 (and (eq_attr "cpu" "yongfeng")
259 (and (eq_attr "memory" "!none")
260 (and (eq_attr "mode" "SI,DI")
261 (eq_attr "type" "imul"))))
262 "yf_decoder0,yf_agu,yf_ieu")
263
264 (define_insn_reservation "yongfeng_imul_HI_mem" 7
265 (and (eq_attr "cpu" "yongfeng")
266 (and (eq_attr "memory" "!none")
267 (and (eq_attr "mode" "HI")
268 (eq_attr "type" "imul"))))
269 "yf_decoder0,yf_agu,yf_ieu")
270
271 ;; Integer Division instructions.
272
273 (define_insn_reservation "yongfeng_idiv_DI" 41
274 (and (eq_attr "cpu" "yongfeng")
275 (and (eq_attr "memory" "none")
276 (and (eq_attr "mode" "DI")
277 (eq_attr "type" "idiv"))))
278 "yf_decoder0,yf_ieu,yf_feu,yf_idiv*41")
279
280 (define_insn_reservation "yongfeng_idiv_HI" 9
281 (and (eq_attr "cpu" "yongfeng")
282 (and (eq_attr "memory" "none")
283 (and (eq_attr "mode" "HI")
284 (eq_attr "type" "idiv"))))
285 "yf_decoder0,yf_ieu,yf_feu,yf_idiv*3")
286
287 (define_insn_reservation "yongfeng_idiv_QISI" 8
288 (and (eq_attr "cpu" "yongfeng")
289 (and (eq_attr "memory" "none")
290 (and (eq_attr "mode" "QI,SI")
291 (eq_attr "type" "idiv"))))
292 "yf_decoder0,yf_ieu,yf_feu,yf_idiv*3")
293
294
295 (define_insn_reservation "yongfeng_idiv_mem_DI" 45
296 (and (eq_attr "cpu" "yongfeng")
297 (and (eq_attr "memory" "load")
298 (and (eq_attr "mode" "DI")
299 (eq_attr "type" "idiv"))))
300 "yf_decoder0,yf_agu,yf_ieu,yf_feu,yf_idiv*41")
301
302 (define_insn_reservation "yongfeng_idiv_HI_mem" 13
303 (and (eq_attr "cpu" "yongfeng")
304 (and (eq_attr "memory" "load")
305 (and (eq_attr "mode" "HI")
306 (eq_attr "type" "idiv"))))
307 "yf_decoder0,yf_agu,yf_ieu,yf_feu,yf_idiv*3")
308
309
310 (define_insn_reservation "yongfeng_idiv_QISI_mem" 12
311 (and (eq_attr "cpu" "yongfeng")
312 (and (eq_attr "memory" "load")
313 (and (eq_attr "mode" "QI,SI")
314 (eq_attr "type" "idiv"))))
315 "yf_decoder0,yf_agu,yf_ieu,yf_feu,yf_idiv*3")
316
317 ;; MMX,SSE,AVX,AVX2 instructions
318 ;; sse moves
319
320 (define_insn_reservation "yongfeng_sse_mov" 1
321 (and (eq_attr "cpu" "yongfeng")
322 (and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
323 (and (eq_attr "memory" "none")
324 (eq_attr "type" "ssemov"))))
325 "yf_decodern,yf_feu")
326
327 (define_insn_reservation "yongfeng_sse_mov_store" 1
328 (and (eq_attr "cpu" "yongfeng")
329 (and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
330 (and (eq_attr "memory" "store")
331 (eq_attr "type" "ssemov"))))
332 "yf_decodern,yf_agu,yf_feu")
333
334 (define_insn_reservation "yongfeng_sse_mov_load" 5
335 (and (eq_attr "cpu" "yongfeng")
336 (and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
337 (and (eq_attr "memory" "load")
338 (eq_attr "type" "ssemov"))))
339 "yf_decodern,yf_agu,yf_feu")
340
341 (define_insn_reservation "yongfeng_avx256_mov" 1
342 (and (eq_attr "cpu" "yongfeng")
343 (and (eq_attr "mode" "V8SF,V4DF,OI")
344 (and (eq_attr "memory" "none")
345 (eq_attr "type" "ssemov"))))
346 "yf_decoder012,yf_feu")
347
348 (define_insn_reservation "yongfeng_avx256_mov_store" 1
349 (and (eq_attr "cpu" "yongfeng")
350 (and (eq_attr "mode" "V8SF,V4DF,OI")
351 (and (eq_attr "memory" "store")
352 (eq_attr "type" "ssemov"))))
353 "yf_decoder012,yf_agu,yf_feu")
354
355 (define_insn_reservation "yongfeng_avx256_mov_load" 6
356 (and (eq_attr "cpu" "yongfeng")
357 (and (eq_attr "mode" "V8SF,V4DF,OI")
358 (and (eq_attr "memory" "load")
359 (eq_attr "type" "ssemov"))))
360 "yf_decoder012,yf_agu,yf_feu")
361
362 ;;sse general instructions
363 (define_insn_reservation "yongfeng_sse_insns" 3
364 (and (eq_attr "cpu" "yongfeng")
365 (and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
366 (and (eq_attr "memory" "none")
367 (eq_attr "type" "sseadd,sseadd1,ssemul,ssecmp"))))
368 "yf_decodern,yf_feu|yf_feu")
369
370 (define_insn_reservation "yongfeng_sse_insns_load" 7
371 (and (eq_attr "cpu" "yongfeng")
372 (and (eq_attr "mode" "SF,DF,V4SF,V2DF,TI")
373 (and (eq_attr "memory" "load")
374 (eq_attr "type" "sseadd,sseadd1,ssemul,ssecmp"))))
375 "yf_decodern,yf_agu,yf_feu")
376
377 (define_insn_reservation "yongfeng_avx256_insns" 3
378 (and (eq_attr "cpu" "yongfeng")
379 (and (eq_attr "mode" "V8SF,V4DF,OI")
380 (and (eq_attr "memory" "none")
381 (eq_attr "type" "sseadd,sseadd1,ssemul,ssecmp"))))
382 "yf_decoder012,yf_feu")
383
384 (define_insn_reservation "yongfeng_avx256_insns_load" 8
385 (and (eq_attr "cpu" "yongfeng")
386 (and (eq_attr "mode" "V8SF,V4DF,OI")
387 (and (eq_attr "memory" "load")
388 (eq_attr "type" "sseadd,sseadd1,ssemul,ssecmp"))))
389 "yf_decoder012,yf_agu,yf_feu")
390
391 (define_insn_reservation "yongfeng_sse_iadd" 1
392 (and (eq_attr "cpu" "yongfeng")
393 (and (eq_attr "mode" "DI,TI")
394 (and (eq_attr "memory" "none")
395 (eq_attr "type" "sseiadd"))))
396 "yf_decodern,yf_feu")
397
398 (define_insn_reservation "yongfeng_sse_iadd_load" 5
399 (and (eq_attr "cpu" "yongfeng")
400 (and (eq_attr "mode" "DI,TI")
401 (and (eq_attr "memory" "load")
402 (eq_attr "type" "sseiadd"))))
403 "yf_decodern,yf_agu,yf_feu")
404
405 (define_insn_reservation "yongfeng_avx256_iadd" 1
406 (and (eq_attr "cpu" "yongfeng")
407 (and (eq_attr "mode" "OI")
408 (and (eq_attr "memory" "none")
409 (eq_attr "type" "sseiadd"))))
410 "yf_decoder012,yf_feu")
411
412 (define_insn_reservation "yongfeng_avx256_iadd_load" 6
413 (and (eq_attr "cpu" "yongfeng")
414 (and (eq_attr "mode" "OI")
415 (and (eq_attr "memory" "load")
416 (eq_attr "type" "sseiadd"))))
417 "yf_decoder0,yf_agu,yf_feu")
418
419 (define_insn_reservation "yongfeng_sse_iadd1" 2
420 (and (eq_attr "cpu" "yongfeng")
421 (and (eq_attr "memory" "none")
422 (eq_attr "type" "sseiadd1")))
423 "yf_decoder0,yf_feu")
424
425 (define_insn_reservation "yongfeng_sse_iadd1_load" 6
426 (and (eq_attr "cpu" "yongfeng")
427 (and (eq_attr "memory" "load")
428 (eq_attr "type" "sseiadd1")))
429 "yf_decoder0,yf_agu,yf_feu")
430
431 ;;sse imul
432 (define_insn_reservation "yongfeng_sse_imul" 2
433 (and (eq_attr "cpu" "yongfeng")
434 (and (eq_attr "mode" "DI,TI")
435 (and (eq_attr "memory" "none")
436 (eq_attr "type" "sseimul"))))
437 "yf_decodern,yf_feu")
438
439 (define_insn_reservation "yongfeng_sse_imul_load" 6
440 (and (eq_attr "cpu" "yongfeng")
441 (and (eq_attr "mode" "DI,TI")
442 (and (eq_attr "memory" "load")
443 (eq_attr "type" "sseimul"))))
444 "yf_decoder012,yf_agu,yf_feu")
445
446 (define_insn_reservation "yongfeng_avx256_imul" 2
447 (and (eq_attr "cpu" "yongfeng")
448 (and (eq_attr "mode" "OI")
449 (and (eq_attr "memory" "none")
450 (eq_attr "type" "sseimul"))))
451 "yf_decoder012,yf_feu")
452
453 (define_insn_reservation "yongfeng_avx256_imul_load" 7
454 (and (eq_attr "cpu" "yongfeng")
455 (and (eq_attr "mode" "OI")
456 (and (eq_attr "memory" "load")
457 (eq_attr "type" "sseimul"))))
458 "yf_decoder0,yf_agu,yf_feu")
459
460 ;; sse FMA
461 (define_insn_reservation "yongfeng_sse_fma" 5
462 (and (eq_attr "cpu" "yongfeng")
463 (and (eq_attr "mode" "SF,DF,V4SF,V2DF")
464 (and (eq_attr "memory" "none")
465 (eq_attr "type" "ssemuladd"))))
466 "yf_decodern,yf_feu")
467
468 (define_insn_reservation "yongfeng_sse_fma_load" 9
469 (and (eq_attr "cpu" "yongfeng")
470 (and (eq_attr "mode" "SF,DF,V4SF,V2DF")
471 (and (eq_attr "memory" "load")
472 (eq_attr "type" "ssemuladd"))))
473 "yf_decoder012,yf_agu,yf_feu")
474
475 (define_insn_reservation "yongfeng_avx256_fma" 5
476 (and (eq_attr "cpu" "yongfeng")
477 (and (eq_attr "mode" "V8SF,V4DF")
478 (and (eq_attr "memory" "none")
479 (eq_attr "type" "ssemuladd"))))
480 "yf_decoder012,yf_feu")
481
482 (define_insn_reservation "yongfeng_avx256_fma_load" 10
483 (and (eq_attr "cpu" "yongfeng")
484 (and (eq_attr "mode" "V8SF,V4DF")
485 (and (eq_attr "memory" "load")
486 (eq_attr "type" "ssemuladd"))))
487 "yf_decoder0,yf_agu,yf_feu")
488 ;; sse div
489 (define_insn_reservation "yongfeng_ssediv_s" 10
490 (and (eq_attr "cpu" "yongfeng")
491 (and (eq_attr "mode" "SF,V4SF")
492 (and (eq_attr "memory" "none")
493 (eq_attr "type" "ssediv"))))
494 "yf_decodern,yf_fdiv*2")
495
496 (define_insn_reservation "yongfeng_ssediv_s_load" 14
497 (and (eq_attr "cpu" "yongfeng")
498 (and (eq_attr "mode" "SF,V4SF")
499 (and (eq_attr "memory" "load")
500 (eq_attr "type" "ssediv"))))
501 "yf_decodern,yf_agu,yf_fdiv*2")
502
503 (define_insn_reservation "yongfeng_ssediv_d" 14
504 (and (eq_attr "cpu" "yongfeng")
505 (and (eq_attr "mode" "DF,V2DF")
506 (and (eq_attr "memory" "none")
507 (eq_attr "type" "ssediv"))))
508 "yf_decodern,yf_fdiv*3")
509
510 (define_insn_reservation "yongfeng_ssediv_d_load" 18
511 (and (eq_attr "cpu" "yongfeng")
512 (and (eq_attr "mode" "DF,V2DF")
513 (and (eq_attr "memory" "load")
514 (eq_attr "type" "ssediv"))))
515 "yf_decodern,yf_agu,yf_fdiv*3")
516
517 (define_insn_reservation "yongfeng_ssediv_avx256_s" 10
518 (and (eq_attr "cpu" "yongfeng")
519 (and (eq_attr "mode" "V8SF")
520 (and (eq_attr "memory" "none")
521 (eq_attr "type" "ssediv"))))
522 "yf_decoder012,yf_fdiv*10")
523
524 (define_insn_reservation "yongfeng_ssediv_avx256_s_load" 15
525 (and (eq_attr "cpu" "yongfeng")
526 (and (eq_attr "mode" "V8SF")
527 (and (eq_attr "memory" "none")
528 (eq_attr "type" "ssediv"))))
529 "yf_decoder012,yf_agu,yf_fdiv*10")
530
531 (define_insn_reservation "yongfeng_ssediv_avx256_d" 14
532 (and (eq_attr "cpu" "yongfeng")
533 (and (eq_attr "mode" "V4DF")
534 (and (eq_attr "memory" "none")
535 (eq_attr "type" "ssediv"))))
536 "yf_decoder012,yf_fdiv*14")
537
538 (define_insn_reservation "yongfeng_ssediv_avx256_d_load" 19
539 (and (eq_attr "cpu" "yongfeng")
540 (and (eq_attr "mode" "V4DF")
541 (and (eq_attr "memory" "load")
542 (eq_attr "type" "ssediv"))))
543 "yf_decoder012,yf_fdiv*14")
544
545 ;;sse logical and shuffle instructions
546 (define_insn_reservation "yongfeng_avx256_log_shuf" 1
547 (and (eq_attr "cpu" "yongfeng")
548 (and (eq_attr "mode" "V8SF,V4DF,OI")
549 (and (eq_attr "memory" "none")
550 (eq_attr "type" "sselog,sselog1,sseshuf,sseshuf1"))))
551 "yf_decoder012,yf_feu")
552
553 (define_insn_reservation "yongfeng_avx256_log_shuf_load" 6
554 (and (eq_attr "cpu" "yongfeng")
555 (and (eq_attr "mode" "V8SF,V4DF,OI")
556 (and (eq_attr "memory" "load")
557 (eq_attr "type" "sselog,sselog1,sseshuf,sseshuf1"))))
558 "yf_decoder012,yf_agu,yf_feu")
559
560 (define_insn_reservation "yongfeng_sse_log_shuf" 1
561 (and (eq_attr "cpu" "yongfeng")
562 (and (eq_attr "memory" "none")
563 (eq_attr "type" "sselog,sselog1,sseshuf,sseshuf1")))
564 "yf_decodern,yf_feu")
565
566 (define_insn_reservation "yongfeng_sse_log_shuf_load" 5
567 (and (eq_attr "cpu" "yongfeng")
568 (and (eq_attr "memory" "load")
569 (eq_attr "type" "sselog,sselog1,sseshuf,sseshuf1")))
570 "yf_decodern,yf_agu,yf_feu")
571 ;;sse shift
572
573 (define_insn_reservation "yongfeng_avx256_shift" 1
574 (and (eq_attr "cpu" "yongfeng")
575 (and (eq_attr "mode" "V8SF,V4DF,OI")
576 (and (eq_attr "memory" "none")
577 (eq_attr "type" "sseishft,sseishft1"))))
578 "yf_decoder012,yf_feu")
579
580 (define_insn_reservation "yongfeng_avx256_shift_load" 6
581 (and (eq_attr "cpu" "yongfeng")
582 (and (eq_attr "mode" "V8SF,V4DF,OI")
583 (and (eq_attr "memory" "load")
584 (eq_attr "type" "sseishft,sseishft1"))))
585 "yf_decoder0,yf_agu,yf_feu")
586
587 (define_insn_reservation "yongfeng_sse_shift" 1
588 (and (eq_attr "cpu" "yongfeng")
589 (and (eq_attr "memory" "none")
590 (eq_attr "type" "sseishft,sseishft1")))
591 "yf_decodern,yf_feu")
592
593 (define_insn_reservation "yongfeng_sse_shift_load" 5
594 (and (eq_attr "cpu" "yongfeng")
595 (and (eq_attr "memory" "load")
596 (eq_attr "type" "sseishft,sseishft1")))
597 "yf_decodern,yf_agu,yf_feu")
598 ;;sse comi
599 (define_insn_reservation "yongfeng_avx256_test" 4
600 (and (eq_attr "cpu" "yongfeng")
601 (and (eq_attr "mode" "V8SF,V4DF,OI")
602 (and (eq_attr "prefix_extra" "1")
603 (and (eq_attr "memory" "none")
604 (eq_attr "type" "ssecomi")))))
605 "yf_decoder012,yf_ieu*3")
606
607 (define_insn_reservation "yongfeng_avx256_test_load" 9
608 (and (eq_attr "cpu" "yongfeng")
609 (and (eq_attr "mode" "V8SF,V4DF,OI")
610 (and (eq_attr "prefix_extra" "1")
611 (and (eq_attr "memory" "load")
612 (eq_attr "type" "ssecomi")))))
613 "yf_decoder012,yf_agu,yf_ieu,yf_p6*3")
614
615 (define_insn_reservation "yongfeng_sse_test" 3
616 (and (eq_attr "cpu" "yongfeng")
617 (and (eq_attr "prefix_extra" "1")
618 (and (eq_attr "memory" "none")
619 (eq_attr "type" "ssecomi"))))
620 "yf_decodern,yf_feu|yf_feu")
621
622 (define_insn_reservation "yongfeng_sse_test_load" 7
623 (and (eq_attr "cpu" "yongfeng")
624 (and (eq_attr "prefix_extra" "1")
625 (and (eq_attr "memory" "load")
626 (eq_attr "type" "ssecomi"))))
627 "yf_decodern,yf_agu,yf_feu")
628
629 (define_insn_reservation "yongfeng_sse_comi" 1
630 (and (eq_attr "cpu" "yongfeng")
631 (and (eq_attr "prefix_extra" "0")
632 (and (eq_attr "memory" "none")
633 (eq_attr "type" "ssecomi"))))
634 "yf_decodern,yf_feu|yf_feu")
635
636 (define_insn_reservation "yongfeng_sse_comi_load" 4
637 (and (eq_attr "cpu" "yongfeng")
638 (and (eq_attr "prefix_extra" "0")
639 (and (eq_attr "memory" "load")
640 (eq_attr "type" "ssecomi"))))
641 "yf_decodern,yf_agu,yf_feu")
642
643 ;;sse conversion
644 (define_insn_reservation "yongfeng_avx_cvt_ps" 4
645 (and (eq_attr "cpu" "yongfeng")
646 (and (eq_attr "mode" "V4SF")
647 (and (eq_attr "memory" "none")
648 (eq_attr "type" "ssecvt"))))
649 "yf_decoder0,yf_feu")
650
651 (define_insn_reservation "yongfeng_avx_cvt_ps_load" 8
652 (and (eq_attr "cpu" "yongfeng")
653 (and (eq_attr "mode" "V4SF")
654 (and (eq_attr "memory" "load")
655 (eq_attr "type" "ssecvt"))))
656 "yf_decoder0,yf_agu,yf_feu")
657
658 (define_insn_reservation "yongfeng_avx_cvt_pd" 3
659 (and (eq_attr "cpu" "yongfeng")
660 (and (eq_attr "mode" "V4DF")
661 (and (eq_attr "memory" "none")
662 (eq_attr "type" "ssecvt"))))
663 "yf_decoder0,yf_feu")
664
665 (define_insn_reservation "yongfeng_avx_cvt_pd_load" 7
666 (and (eq_attr "cpu" "yongfeng")
667 (and (eq_attr "mode" "V4DF")
668 (and (eq_attr "memory" "load")
669 (eq_attr "type" "ssecvt"))))
670 "yf_decoder0,yf_agu,yf_feu")
671
672 (define_insn_reservation "yongfeng_sse_cvt" 3
673 (and (eq_attr "cpu" "yongfeng")
674 (and (eq_attr "memory" "none")
675 (eq_attr "type" "ssecvt")))
676 "yf_decodern,yf_feu|yf_feu")
677
678 (define_insn_reservation "yongfeng_sse_cvt_load" 7
679 (and (eq_attr "cpu" "yongfeng")
680 (and (eq_attr "memory" "load")
681 (eq_attr "type" "ssecvt")))
682 "yf_decoder012,yf_agu,yf_feu")
683
684 (define_insn_reservation "yongfeng_sse_icvt" 3
685 (and (eq_attr "cpu" "yongfeng")
686 (and (eq_attr "memory" "none")
687 (eq_attr "type" "sseicvt")))
688 "yf_decodern,yf_feu|yf_feu")
689
690 (define_insn_reservation "yongfeng_sse_icvt_load" 7
691 (and (eq_attr "cpu" "yongfeng")
692 (and (eq_attr "memory" "load")
693 (eq_attr "type" "sseicvt")))
694 "yf_decoder012,yf_agu,yf_feu")
695
696 (define_insn_reservation "yongfeng_sse_icvt_SI" 1
697 (and (eq_attr "cpu" "yongfeng")
698 (and (eq_attr "mode" "SI")
699 (and (eq_attr "memory" "none")
700 (eq_attr "type" "sseicvt"))))
701 "yf_decoder012,yf_feu")
702
703 (define_insn_reservation "yongfeng_sse_icvt_SI_load" 5
704 (and (eq_attr "cpu" "yongfeng")
705 (and (eq_attr "mode" "SI")
706 (and (eq_attr "memory" "load")
707 (eq_attr "type" "sseicvt"))))
708 "yf_decoder012,yf_agu,yf_feu")
709
710 (define_insn_reservation "yongfeng_sse_icvt_DI" 2
711 (and (eq_attr "cpu" "yongfeng")
712 (and (eq_attr "mode" "DI")
713 (and (eq_attr "memory" "none")
714 (eq_attr "type" "sseicvt"))))
715 "yf_decoder0,yf_feu")
716
717 (define_insn_reservation "yongfeng_sse_icvt_DI_load" 6
718 (and (eq_attr "cpu" "yongfeng")
719 (and (eq_attr "mode" "DI")
720 (and (eq_attr "memory" "load")
721 (eq_attr "type" "sseicvt"))))
722 "yf_decoder0,yf_agu,yf_feu")
723 ;; MMX
724 (define_insn_reservation "yongfeng_mmx_move" 1
725 (and (eq_attr "cpu" "yongfeng")
726 (and (eq_attr "memory" "none")
727 (eq_attr "type" "mmxmov")))
728 "yf_decodern,yf_p0")
729
730 (define_insn_reservation "yongfeng_mmx_move_load" 5
731 (and (eq_attr "cpu" "yongfeng")
732 (and (eq_attr "memory" "load")
733 (eq_attr "type" "mmxmov")))
734 "yf_decodern,yf_agu,yf_p0")
735
736 (define_insn_reservation "yongfeng_mmx_move_store" 1
737 (and (eq_attr "cpu" "yongfeng")
738 (and (eq_attr "memory" "store")
739 (eq_attr "type" "mmxmov")))
740 "yf_decodern,yf_agu,yf_p0")
741
742 (define_insn_reservation "yongfeng_mmx_mul" 2
743 (and (eq_attr "cpu" "yongfeng")
744 (and (eq_attr "memory" "none")
745 (eq_attr "type" "mmxmul")))
746 "yf_decodern,yf_feu")
747
748 (define_insn_reservation "yongfeng_mmx_mul_load" 6
749 (and (eq_attr "cpu" "yongfeng")
750 (and (eq_attr "memory" "load")
751 (eq_attr "type" "mmxmul")))
752 "yf_decoder012,yf_agu,yf_feu")
753
754 ;; MMX general instructions
755 (define_insn_reservation "yongfeng_mmx_insns" 1
756 (and (eq_attr "cpu" "yongfeng")
757 (and (eq_attr "memory" "none")
758 (eq_attr "type" "mmxadd,mmxshft,mmxcmp,mmx,mmxcvt")))
759 "yf_decodern,yf_feu|yf_feu")
760
761 (define_insn_reservation "yongfeng_mmx_insns_load" 5
762 (and (eq_attr "cpu" "yongfeng")
763 (and (eq_attr "memory" "load")
764 (eq_attr "type" "mmxadd,mmxshft,mmxcmp,mmx,mmxcvt")))
765 "yf_decodern,yf_agu,yf_feu|yf_feu")
766
767 (define_insn_reservation "yongfeng_mmx_insns_store" 1
768 (and (eq_attr "cpu" "yongfeng")
769 (and (eq_attr "memory" "store")
770 (eq_attr "type" "mmxadd,mmxshft,mmxcmp,mmx,mmxcvt")))
771 "yf_decodern,yf_agu,yf_feu")
772
773 ;; x87 floating point operations.
774
775 (define_insn_reservation "yongfeng_fxch" 1
776 (and (eq_attr "cpu" "yongfeng")
777 (eq_attr "type" "fxch"))
778 "yf_decodern,yf_p0|yf_p1")
779
780 (define_insn_reservation "yongfeng_fcmov_sgn" 1
781 (and (eq_attr "cpu" "yongfeng")
782 (eq_attr "type" "fcmov,fsgn"))
783 "yf_decodern,yf_p0|yf_p1,yf_feu")
784
785 (define_insn_reservation "yongfeng_fcmp" 1
786 (and (eq_attr "cpu" "yongfeng")
787 (and (eq_attr "memory" "none")
788 (eq_attr "type" "fcmp")))
789 "yf_decodern,yf_feu")
790
791 (define_insn_reservation "yongfeng_fcmp_load" 5
792 (and (eq_attr "cpu" "yongfeng")
793 (and (eq_attr "memory" "load")
794 (eq_attr "type" "fcmp")))
795 "yf_decodern,yf_agu,yf_feu")
796
797 (define_insn_reservation "yongfeng_fmov" 1
798 (and (eq_attr "cpu" "yongfeng")
799 (and (eq_attr "memory" "none")
800 (eq_attr "type" "fmov")))
801 "yf_decodern,yf_feu")
802
803 (define_insn_reservation "yongfeng_fmov_store" 1
804 (and (eq_attr "cpu" "yongfeng")
805 (and (eq_attr "memory" "store")
806 (eq_attr "type" "fmov")))
807 "yf_decoder0,yf_agu,yf_feu")
808
809 (define_insn_reservation "yongfeng_fmov_load" 5
810 (and (eq_attr "cpu" "yongfeng")
811 (and (eq_attr "memory" "load")
812 (eq_attr "type" "fmov")))
813 "yf_decoder0,yf_agu,yf_feu")
814
815 (define_insn_reservation "yongfeng_fistp" 5
816 (and (eq_attr "cpu" "yongfeng")
817 (eq_attr "type" "fistp,fisttp"))
818 "yf_decoder012,yf_agu,yf_feu")
819
820 (define_insn_reservation "yongfeng_fop_mul" 3
821 (and (eq_attr "cpu" "yongfeng")
822 (and (eq_attr "memory" "none,unknown")
823 (eq_attr "type" "fop,fmul")))
824 "yf_decodern,yf_feu")
825
826 (define_insn_reservation "yongfeng_fop_mul_load" 7
827 (and (eq_attr "cpu" "yongfeng")
828 (and (eq_attr "memory" "load,both")
829 (eq_attr "type" "fop,fmul")))
830 "yf_decoder012,yf_agu,yf_feu")
831
832 (define_insn_reservation "yf_fop_store" 3
833 (and (eq_attr "cpu" "yongfeng")
834 (and (eq_attr "memory" "store")
835 (eq_attr "type" "fop")))
836 "yf_decodern,yf_agu,yf_feu")
837
838 (define_insn_reservation "yongfeng_fdiv_fpspc" 14
839 (and (eq_attr "cpu" "yongfeng")
840 (and (eq_attr "memory" "none")
841 (eq_attr "type" "fdiv,fpspc")))
842 "yf_decodern,yf_fdiv*7")
843
844 (define_insn_reservation "yongfeng_fdiv_fpspc_load" 18
845 (and (eq_attr "cpu" "yongfeng")
846 (and (eq_attr "memory" "load")
847 (eq_attr "type" "fdiv,fpspc")))
848 "yf_decoder012,yf_agu,yf_fdiv*7")