Mercurial > hg > CbC > CbC_gcc
annotate gcc/config/rs6000/power6.md @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | 04ced10e8804 |
rev | line source |
---|---|
0 | 1 ;; Scheduling description for IBM POWER6 processor. |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2 ;; Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. |
0 | 3 ;; Contributed by Peter Steinmetz (steinmtz@us.ibm.com) |
4 ;; | |
5 ;; This file is part of GCC. | |
6 ;; | |
7 ;; GCC is free software; you can redistribute it and/or modify it | |
8 ;; under the terms of the GNU General Public License as published | |
9 ;; by the Free Software Foundation; either version 3, or (at your | |
10 ;; option) any later version. | |
11 ;; | |
12 ;; GCC is distributed in the hope that it will be useful, but WITHOUT | |
13 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
14 ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public | |
15 ;; License for more details. | |
16 ;; | |
17 ;; You should have received a copy of the GNU General Public License | |
18 ;; along with GCC; see the file COPYING3. If not see | |
19 ;; <http://www.gnu.org/licenses/>. | |
20 | |
21 ;; Sources: | |
22 | |
23 ;; The POWER6 has 2 iu, 2 fpu, 2 lsu, and 1 bu/cru unit per engine | |
24 ;; (2 engines per chip). The chip can issue up to 5 internal ops | |
25 ;; per cycle. | |
26 | |
27 (define_automaton "power6iu,power6lsu,power6fpu,power6bu") | |
28 | |
29 (define_cpu_unit "iu1_power6,iu2_power6" "power6iu") | |
30 (define_cpu_unit "lsu1_power6,lsu2_power6" "power6lsu") | |
31 (define_cpu_unit "bpu_power6" "power6bu") | |
32 (define_cpu_unit "fpu1_power6,fpu2_power6" "power6fpu") | |
33 | |
34 (define_reservation "LS2_power6" | |
35 "lsu1_power6+lsu2_power6") | |
36 | |
37 (define_reservation "FPU_power6" | |
38 "fpu1_power6|fpu2_power6") | |
39 | |
40 (define_reservation "BRU_power6" | |
41 "bpu_power6") | |
42 | |
43 (define_reservation "LSU_power6" | |
44 "lsu1_power6|lsu2_power6") | |
45 | |
46 (define_reservation "LSF_power6" | |
47 "(lsu1_power6+fpu1_power6)\ | |
48 |(lsu1_power6+fpu2_power6)\ | |
49 |(lsu2_power6+fpu1_power6)\ | |
50 |(lsu2_power6+fpu2_power6)") | |
51 | |
52 (define_reservation "LX2_power6" | |
53 "(iu1_power6+iu2_power6+lsu1_power6)\ | |
54 |(iu1_power6+iu2_power6+lsu2_power6)") | |
55 | |
56 (define_reservation "FX2_power6" | |
57 "iu1_power6+iu2_power6") | |
58 | |
59 (define_reservation "X2F_power6" | |
60 "(iu1_power6+iu2_power6+fpu1_power6)\ | |
61 |(iu1_power6+iu2_power6+fpu2_power6)") | |
62 | |
63 (define_reservation "BX2_power6" | |
64 "iu1_power6+iu2_power6+bpu_power6") | |
65 | |
66 (define_reservation "LSX_power6" | |
67 "(iu1_power6+lsu1_power6)\ | |
68 |(iu1_power6+lsu2_power6)\ | |
69 |(iu2_power6+lsu1_power6)\ | |
70 |(iu2_power6+lsu2_power6)") | |
71 | |
72 (define_reservation "FXU_power6" | |
73 "iu1_power6|iu2_power6") | |
74 | |
75 (define_reservation "XLF_power6" | |
76 "(iu1_power6+lsu1_power6+fpu1_power6)\ | |
77 |(iu1_power6+lsu1_power6+fpu2_power6)\ | |
78 |(iu1_power6+lsu2_power6+fpu1_power6)\ | |
79 |(iu1_power6+lsu2_power6+fpu2_power6)\ | |
80 |(iu2_power6+lsu1_power6+fpu1_power6)\ | |
81 |(iu2_power6+lsu1_power6+fpu2_power6)\ | |
82 |(iu2_power6+lsu2_power6+fpu1_power6)\ | |
83 |(iu2_power6+lsu2_power6+fpu2_power6)") | |
84 | |
85 (define_reservation "BRX_power6" | |
86 "(bpu_power6+iu1_power6)\ | |
87 |(bpu_power6+iu2_power6)") | |
88 | |
89 ; Load/store | |
90 | |
91 ; The default for a value written by a fixed point load | |
92 ; that is read/written by a subsequent fixed point op. | |
93 (define_insn_reservation "power6-load" 2 ; fx | |
94 (and (eq_attr "type" "load") | |
95 (eq_attr "cpu" "power6")) | |
96 "LSU_power6") | |
97 | |
98 ; define the bypass for the case where the value written | |
99 ; by a fixed point load is used as the source value on | |
100 ; a store. | |
101 (define_bypass 1 "power6-load,\ | |
102 power6-load-update,\ | |
103 power6-load-update-indexed" | |
104 "power6-store,\ | |
105 power6-store-update,\ | |
106 power6-store-update-indexed,\ | |
107 power6-fpstore,\ | |
108 power6-fpstore-update" | |
109 "store_data_bypass_p") | |
110 | |
111 (define_insn_reservation "power6-load-ext" 4 ; fx | |
112 (and (eq_attr "type" "load_ext") | |
113 (eq_attr "cpu" "power6")) | |
114 "LSU_power6") | |
115 | |
116 ; define the bypass for the case where the value written | |
117 ; by a fixed point load ext is used as the source value on | |
118 ; a store. | |
119 (define_bypass 1 "power6-load-ext,\ | |
120 power6-load-ext-update,\ | |
121 power6-load-ext-update-indexed" | |
122 "power6-store,\ | |
123 power6-store-update,\ | |
124 power6-store-update-indexed,\ | |
125 power6-fpstore,\ | |
126 power6-fpstore-update" | |
127 "store_data_bypass_p") | |
128 | |
129 (define_insn_reservation "power6-load-update" 2 ; fx | |
130 (and (eq_attr "type" "load_u") | |
131 (eq_attr "cpu" "power6")) | |
132 "LSX_power6") | |
133 | |
134 (define_insn_reservation "power6-load-update-indexed" 2 ; fx | |
135 (and (eq_attr "type" "load_ux") | |
136 (eq_attr "cpu" "power6")) | |
137 "LSX_power6") | |
138 | |
139 (define_insn_reservation "power6-load-ext-update" 4 ; fx | |
140 (and (eq_attr "type" "load_ext_u") | |
141 (eq_attr "cpu" "power6")) | |
142 "LSX_power6") | |
143 | |
144 (define_insn_reservation "power6-load-ext-update-indexed" 4 ; fx | |
145 (and (eq_attr "type" "load_ext_ux") | |
146 (eq_attr "cpu" "power6")) | |
147 "LSX_power6") | |
148 | |
149 (define_insn_reservation "power6-fpload" 1 | |
150 (and (eq_attr "type" "fpload") | |
151 (eq_attr "cpu" "power6")) | |
152 "LSU_power6") | |
153 | |
154 (define_insn_reservation "power6-fpload-update" 1 | |
155 (and (eq_attr "type" "fpload_u,fpload_ux") | |
156 (eq_attr "cpu" "power6")) | |
157 "LSX_power6") | |
158 | |
159 (define_insn_reservation "power6-store" 14 | |
160 (and (eq_attr "type" "store") | |
161 (eq_attr "cpu" "power6")) | |
162 "LSU_power6") | |
163 | |
164 (define_insn_reservation "power6-store-update" 14 | |
165 (and (eq_attr "type" "store_u") | |
166 (eq_attr "cpu" "power6")) | |
167 "LSX_power6") | |
168 | |
169 (define_insn_reservation "power6-store-update-indexed" 14 | |
170 (and (eq_attr "type" "store_ux") | |
171 (eq_attr "cpu" "power6")) | |
172 "LX2_power6") | |
173 | |
174 (define_insn_reservation "power6-fpstore" 14 | |
175 (and (eq_attr "type" "fpstore") | |
176 (eq_attr "cpu" "power6")) | |
177 "LSF_power6") | |
178 | |
179 (define_insn_reservation "power6-fpstore-update" 14 | |
180 (and (eq_attr "type" "fpstore_u,fpstore_ux") | |
181 (eq_attr "cpu" "power6")) | |
182 "XLF_power6") | |
183 | |
184 (define_insn_reservation "power6-larx" 3 | |
185 (and (eq_attr "type" "load_l") | |
186 (eq_attr "cpu" "power6")) | |
187 "LS2_power6") | |
188 | |
189 (define_insn_reservation "power6-stcx" 10 ; best case | |
190 (and (eq_attr "type" "store_c") | |
191 (eq_attr "cpu" "power6")) | |
192 "LSX_power6") | |
193 | |
194 (define_insn_reservation "power6-sync" 11 ; N/A | |
195 (and (eq_attr "type" "sync") | |
196 (eq_attr "cpu" "power6")) | |
197 "LSU_power6") | |
198 | |
199 (define_insn_reservation "power6-integer" 1 | |
200 (and (eq_attr "type" "integer") | |
201 (eq_attr "cpu" "power6")) | |
202 "FXU_power6") | |
203 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
204 (define_insn_reservation "power6-isel" 1 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
205 (and (eq_attr "type" "isel") |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
206 (eq_attr "cpu" "power6")) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
207 "FXU_power6") |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
208 |
0 | 209 (define_insn_reservation "power6-exts" 1 |
210 (and (eq_attr "type" "exts") | |
211 (eq_attr "cpu" "power6")) | |
212 "FXU_power6") | |
213 | |
214 (define_insn_reservation "power6-shift" 1 | |
215 (and (eq_attr "type" "shift") | |
216 (eq_attr "cpu" "power6")) | |
217 "FXU_power6") | |
218 | |
219 (define_insn_reservation "power6-insert" 1 | |
220 (and (eq_attr "type" "insert_word") | |
221 (eq_attr "cpu" "power6")) | |
222 "FX2_power6") | |
223 | |
224 (define_insn_reservation "power6-insert-dword" 1 | |
225 (and (eq_attr "type" "insert_dword") | |
226 (eq_attr "cpu" "power6")) | |
227 "FX2_power6") | |
228 | |
229 ; define the bypass for the case where the value written | |
230 ; by a fixed point op is used as the source value on a | |
231 ; store. | |
232 (define_bypass 1 "power6-integer,\ | |
233 power6-exts,\ | |
234 power6-shift,\ | |
235 power6-insert,\ | |
236 power6-insert-dword" | |
237 "power6-store,\ | |
238 power6-store-update,\ | |
239 power6-store-update-indexed,\ | |
240 power6-fpstore,\ | |
241 power6-fpstore-update" | |
242 "store_data_bypass_p") | |
243 | |
244 (define_insn_reservation "power6-cntlz" 2 | |
245 (and (eq_attr "type" "cntlz") | |
246 (eq_attr "cpu" "power6")) | |
247 "FXU_power6") | |
248 | |
249 (define_bypass 1 "power6-cntlz" | |
250 "power6-store,\ | |
251 power6-store-update,\ | |
252 power6-store-update-indexed,\ | |
253 power6-fpstore,\ | |
254 power6-fpstore-update" | |
255 "store_data_bypass_p") | |
256 | |
257 (define_insn_reservation "power6-var-rotate" 4 | |
258 (and (eq_attr "type" "var_shift_rotate") | |
259 (eq_attr "cpu" "power6")) | |
260 "FXU_power6") | |
261 | |
262 (define_insn_reservation "power6-trap" 1 ; N/A | |
263 (and (eq_attr "type" "trap") | |
264 (eq_attr "cpu" "power6")) | |
265 "BRX_power6") | |
266 | |
267 (define_insn_reservation "power6-two" 1 | |
268 (and (eq_attr "type" "two") | |
269 (eq_attr "cpu" "power6")) | |
270 "(iu1_power6,iu1_power6)\ | |
271 |(iu1_power6+iu2_power6,nothing)\ | |
272 |(iu1_power6,iu2_power6)\ | |
273 |(iu2_power6,iu1_power6)\ | |
274 |(iu2_power6,iu2_power6)") | |
275 | |
276 (define_insn_reservation "power6-three" 1 | |
277 (and (eq_attr "type" "three") | |
278 (eq_attr "cpu" "power6")) | |
279 "(iu1_power6,iu1_power6,iu1_power6)\ | |
280 |(iu1_power6,iu1_power6,iu2_power6)\ | |
281 |(iu1_power6,iu2_power6,iu1_power6)\ | |
282 |(iu1_power6,iu2_power6,iu2_power6)\ | |
283 |(iu2_power6,iu1_power6,iu1_power6)\ | |
284 |(iu2_power6,iu1_power6,iu2_power6)\ | |
285 |(iu2_power6,iu2_power6,iu1_power6)\ | |
286 |(iu2_power6,iu2_power6,iu2_power6)\ | |
287 |(iu1_power6+iu2_power6,iu1_power6)\ | |
288 |(iu1_power6+iu2_power6,iu2_power6)\ | |
289 |(iu1_power6,iu1_power6+iu2_power6)\ | |
290 |(iu2_power6,iu1_power6+iu2_power6)") | |
291 | |
292 (define_insn_reservation "power6-cmp" 1 | |
293 (and (eq_attr "type" "cmp") | |
294 (eq_attr "cpu" "power6")) | |
295 "FXU_power6") | |
296 | |
297 (define_insn_reservation "power6-compare" 1 | |
298 (and (eq_attr "type" "compare") | |
299 (eq_attr "cpu" "power6")) | |
300 "FXU_power6") | |
301 | |
302 (define_insn_reservation "power6-fast-compare" 1 | |
303 (and (eq_attr "type" "fast_compare") | |
304 (eq_attr "cpu" "power6")) | |
305 "FXU_power6") | |
306 | |
307 ; define the bypass for the case where the value written | |
308 ; by a fixed point rec form op is used as the source value | |
309 ; on a store. | |
310 (define_bypass 1 "power6-compare,\ | |
311 power6-fast-compare" | |
312 "power6-store,\ | |
313 power6-store-update,\ | |
314 power6-store-update-indexed,\ | |
315 power6-fpstore,\ | |
316 power6-fpstore-update" | |
317 "store_data_bypass_p") | |
318 | |
319 (define_insn_reservation "power6-delayed-compare" 2 ; N/A | |
320 (and (eq_attr "type" "delayed_compare") | |
321 (eq_attr "cpu" "power6")) | |
322 "FXU_power6") | |
323 | |
324 (define_insn_reservation "power6-var-delayed-compare" 4 | |
325 (and (eq_attr "type" "var_delayed_compare") | |
326 (eq_attr "cpu" "power6")) | |
327 "FXU_power6") | |
328 | |
329 (define_insn_reservation "power6-lmul-cmp" 16 | |
330 (and (eq_attr "type" "lmul_compare") | |
331 (eq_attr "cpu" "power6")) | |
332 "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\ | |
333 |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)"); | |
334 | |
335 (define_insn_reservation "power6-imul-cmp" 16 | |
336 (and (eq_attr "type" "imul_compare") | |
337 (eq_attr "cpu" "power6")) | |
338 "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\ | |
339 |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)"); | |
340 | |
341 (define_insn_reservation "power6-lmul" 16 | |
342 (and (eq_attr "type" "lmul") | |
343 (eq_attr "cpu" "power6")) | |
344 "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\ | |
345 |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)"); | |
346 | |
347 (define_insn_reservation "power6-imul" 16 | |
348 (and (eq_attr "type" "imul") | |
349 (eq_attr "cpu" "power6")) | |
350 "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\ | |
351 |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)"); | |
352 | |
353 (define_insn_reservation "power6-imul3" 16 | |
354 (and (eq_attr "type" "imul2,imul3") | |
355 (eq_attr "cpu" "power6")) | |
356 "(iu1_power6*16+iu2_power6*16+fpu1_power6*16)\ | |
357 |(iu1_power6*16+iu2_power6*16+fpu2_power6*16)"); | |
358 | |
359 (define_bypass 9 "power6-imul,\ | |
360 power6-lmul,\ | |
361 power6-imul-cmp,\ | |
362 power6-lmul-cmp,\ | |
363 power6-imul3" | |
364 "power6-store,\ | |
365 power6-store-update,\ | |
366 power6-store-update-indexed,\ | |
367 power6-fpstore,\ | |
368 power6-fpstore-update" | |
369 "store_data_bypass_p") | |
370 | |
371 (define_insn_reservation "power6-idiv" 44 | |
372 (and (eq_attr "type" "idiv") | |
373 (eq_attr "cpu" "power6")) | |
374 "(iu1_power6*44+iu2_power6*44+fpu1_power6*44)\ | |
375 |(iu1_power6*44+iu2_power6*44+fpu2_power6*44)"); | |
376 | |
377 ; The latency for this bypass is yet to be defined | |
378 ;(define_bypass ? "power6-idiv" | |
379 ; "power6-store,\ | |
380 ; power6-store-update,\ | |
381 ; power6-store-update-indexed,\ | |
382 ; power6-fpstore,\ | |
383 ; power6-fpstore-update" | |
384 ; "store_data_bypass_p") | |
385 | |
386 (define_insn_reservation "power6-ldiv" 56 | |
387 (and (eq_attr "type" "ldiv") | |
388 (eq_attr "cpu" "power6")) | |
389 "(iu1_power6*56+iu2_power6*56+fpu1_power6*56)\ | |
390 |(iu1_power6*56+iu2_power6*56+fpu2_power6*56)"); | |
391 | |
392 ; The latency for this bypass is yet to be defined | |
393 ;(define_bypass ? "power6-ldiv" | |
394 ; "power6-store,\ | |
395 ; power6-store-update,\ | |
396 ; power6-store-update-indexed,\ | |
397 ; power6-fpstore,\ | |
398 ; power6-fpstore-update" | |
399 ; "store_data_bypass_p") | |
400 | |
401 (define_insn_reservation "power6-mtjmpr" 2 | |
402 (and (eq_attr "type" "mtjmpr,mfjmpr") | |
403 (eq_attr "cpu" "power6")) | |
404 "BX2_power6") | |
405 | |
406 (define_bypass 5 "power6-mtjmpr" "power6-branch") | |
407 | |
408 (define_insn_reservation "power6-branch" 2 | |
409 (and (eq_attr "type" "jmpreg,branch") | |
410 (eq_attr "cpu" "power6")) | |
411 "BRU_power6") | |
412 | |
413 (define_bypass 5 "power6-branch" "power6-mtjmpr") | |
414 | |
415 (define_insn_reservation "power6-crlogical" 3 | |
416 (and (eq_attr "type" "cr_logical") | |
417 (eq_attr "cpu" "power6")) | |
418 "BRU_power6") | |
419 | |
420 (define_bypass 3 "power6-crlogical" "power6-branch") | |
421 | |
422 (define_insn_reservation "power6-delayedcr" 3 | |
423 (and (eq_attr "type" "delayed_cr") | |
424 (eq_attr "cpu" "power6")) | |
425 "BRU_power6") | |
426 | |
427 (define_insn_reservation "power6-mfcr" 6 ; N/A | |
428 (and (eq_attr "type" "mfcr") | |
429 (eq_attr "cpu" "power6")) | |
430 "BX2_power6") | |
431 | |
432 ; mfcrf (1 field) | |
433 (define_insn_reservation "power6-mfcrf" 3 ; N/A | |
434 (and (eq_attr "type" "mfcrf") | |
435 (eq_attr "cpu" "power6")) | |
436 "BX2_power6") ; | |
437 | |
438 ; mtcrf (1 field) | |
439 (define_insn_reservation "power6-mtcr" 4 ; N/A | |
440 (and (eq_attr "type" "mtcr") | |
441 (eq_attr "cpu" "power6")) | |
442 "BX2_power6") | |
443 | |
444 (define_bypass 9 "power6-mtcr" "power6-branch") | |
445 | |
446 (define_insn_reservation "power6-fp" 6 | |
447 (and (eq_attr "type" "fp,dmul") | |
448 (eq_attr "cpu" "power6")) | |
449 "FPU_power6") | |
450 | |
451 ; Any fp instruction that updates a CR has a latency | |
452 ; of 6 to a dependent branch | |
453 (define_bypass 6 "power6-fp" "power6-branch") | |
454 | |
455 (define_bypass 1 "power6-fp" | |
456 "power6-fpstore,power6-fpstore-update" | |
457 "store_data_bypass_p") | |
458 | |
459 (define_insn_reservation "power6-fpcompare" 8 | |
460 (and (eq_attr "type" "fpcompare") | |
461 (eq_attr "cpu" "power6")) | |
462 "FPU_power6") | |
463 | |
464 (define_bypass 12 "power6-fpcompare" | |
465 "power6-branch,power6-crlogical") | |
466 | |
467 (define_insn_reservation "power6-sdiv" 26 | |
468 (and (eq_attr "type" "sdiv") | |
469 (eq_attr "cpu" "power6")) | |
470 "FPU_power6") | |
471 | |
472 (define_insn_reservation "power6-ddiv" 32 | |
473 (and (eq_attr "type" "ddiv") | |
474 (eq_attr "cpu" "power6")) | |
475 "FPU_power6") | |
476 | |
477 (define_insn_reservation "power6-sqrt" 30 | |
478 (and (eq_attr "type" "ssqrt") | |
479 (eq_attr "cpu" "power6")) | |
480 "FPU_power6") | |
481 | |
482 (define_insn_reservation "power6-dsqrt" 42 | |
483 (and (eq_attr "type" "dsqrt") | |
484 (eq_attr "cpu" "power6")) | |
485 "FPU_power6") | |
486 | |
487 (define_insn_reservation "power6-isync" 2 ; N/A | |
488 (and (eq_attr "type" "isync") | |
489 (eq_attr "cpu" "power6")) | |
490 "FXU_power6") | |
491 | |
492 (define_insn_reservation "power6-vecload" 1 | |
493 (and (eq_attr "type" "vecload") | |
494 (eq_attr "cpu" "power6")) | |
495 "LSU_power6") | |
496 | |
497 (define_insn_reservation "power6-vecstore" 1 | |
498 (and (eq_attr "type" "vecstore") | |
499 (eq_attr "cpu" "power6")) | |
500 "LSF_power6") | |
501 | |
502 (define_insn_reservation "power6-vecsimple" 3 | |
503 (and (eq_attr "type" "vecsimple") | |
504 (eq_attr "cpu" "power6")) | |
505 "FPU_power6") | |
506 | |
507 (define_bypass 6 "power6-vecsimple" "power6-veccomplex,\ | |
508 power6-vecperm") | |
509 | |
510 (define_bypass 5 "power6-vecsimple" "power6-vecfloat") | |
511 | |
512 (define_bypass 4 "power6-vecsimple" "power6-vecstore" ) | |
513 | |
514 (define_insn_reservation "power6-veccmp" 1 | |
515 (and (eq_attr "type" "veccmp") | |
516 (eq_attr "cpu" "power6")) | |
517 "FPU_power6") | |
518 | |
519 (define_bypass 10 "power6-veccmp" "power6-branch") | |
520 | |
521 (define_insn_reservation "power6-vecfloat" 7 | |
522 (and (eq_attr "type" "vecfloat") | |
523 (eq_attr "cpu" "power6")) | |
524 "FPU_power6") | |
525 | |
526 (define_bypass 10 "power6-vecfloat" "power6-vecsimple") | |
527 | |
528 (define_bypass 11 "power6-vecfloat" "power6-veccomplex,\ | |
529 power6-vecperm") | |
530 | |
531 (define_bypass 9 "power6-vecfloat" "power6-vecstore" ) | |
532 | |
533 (define_insn_reservation "power6-veccomplex" 7 | |
534 (and (eq_attr "type" "vecsimple") | |
535 (eq_attr "cpu" "power6")) | |
536 "FPU_power6") | |
537 | |
538 (define_bypass 10 "power6-veccomplex" "power6-vecsimple,\ | |
539 power6-vecfloat" ) | |
540 | |
541 (define_bypass 9 "power6-veccomplex" "power6-vecperm" ) | |
542 | |
543 (define_bypass 8 "power6-veccomplex" "power6-vecstore" ) | |
544 | |
545 (define_insn_reservation "power6-vecperm" 4 | |
546 (and (eq_attr "type" "vecperm") | |
547 (eq_attr "cpu" "power6")) | |
548 "FPU_power6") | |
549 | |
550 (define_bypass 7 "power6-vecperm" "power6-vecsimple,\ | |
551 power6-vecfloat" ) | |
552 | |
553 (define_bypass 6 "power6-vecperm" "power6-veccomplex" ) | |
554 | |
555 (define_bypass 5 "power6-vecperm" "power6-vecstore" ) | |
556 | |
557 (define_insn_reservation "power6-mftgpr" 8 | |
558 (and (eq_attr "type" "mftgpr") | |
559 (eq_attr "cpu" "power6")) | |
560 "X2F_power6") | |
561 | |
562 (define_insn_reservation "power6-mffgpr" 14 | |
563 (and (eq_attr "type" "mffgpr") | |
564 (eq_attr "cpu" "power6")) | |
565 "LX2_power6") | |
566 | |
567 (define_bypass 4 "power6-mftgpr" "power6-imul,\ | |
568 power6-lmul,\ | |
569 power6-imul-cmp,\ | |
570 power6-lmul-cmp,\ | |
571 power6-imul3,\ | |
572 power6-idiv,\ | |
573 power6-ldiv" ) |