[PR testsuite/116860] Testsuite adjustment for recently added tests
[official-gcc.git] / gcc / config / aarch64 / aarch64-cost-tables.h
blobc49ff7f62ef284f5539d9693c8bde84c731a5ecb
1 /* RTX cost tables for AArch64.
3 Copyright (C) 2014-2025 Free Software Foundation, Inc.
5 This file is part of GCC.
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.
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.
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/>. */
21 #ifndef GCC_AARCH64_COST_TABLES_H
22 #define GCC_AARCH64_COST_TABLES_H
24 #include "config/arm/aarch-cost-tables.h"
26 /* QDF24xx does not implement AArch32. */
27 const struct cpu_cost_table qdf24xx_extra_costs =
29 /* ALU */
31 0, /* arith. */
32 0, /* logical. */
33 0, /* shift. */
34 0, /* shift_reg. */
35 COSTS_N_INSNS (1), /* arith_shift. */
36 COSTS_N_INSNS (1), /* arith_shift_reg. */
37 0, /* log_shift. */
38 0, /* log_shift_reg. */
39 0, /* extend. */
40 0, /* extend_arith. */
41 0, /* bfi. */
42 0, /* bfx. */
43 0, /* clz. */
44 0, /* rev. */
45 0, /* non_exec. */
46 true /* non_exec_costs_exec. */
49 /* MULT SImode */
51 COSTS_N_INSNS (2), /* simple. */
52 COSTS_N_INSNS (2), /* flag_setting. */
53 COSTS_N_INSNS (2), /* extend. */
54 COSTS_N_INSNS (2), /* add. */
55 COSTS_N_INSNS (2), /* extend_add. */
56 COSTS_N_INSNS (4) /* idiv. */
58 /* MULT DImode */
60 COSTS_N_INSNS (3), /* simple. */
61 0, /* flag_setting (N/A). */
62 COSTS_N_INSNS (3), /* extend. */
63 COSTS_N_INSNS (3), /* add. */
64 COSTS_N_INSNS (3), /* extend_add. */
65 COSTS_N_INSNS (9) /* idiv. */
68 /* LD/ST */
70 COSTS_N_INSNS (2), /* load. */
71 COSTS_N_INSNS (2), /* load_sign_extend. */
72 COSTS_N_INSNS (2), /* ldrd. */
73 COSTS_N_INSNS (2), /* ldm_1st. */
74 1, /* ldm_regs_per_insn_1st. */
75 2, /* ldm_regs_per_insn_subsequent. */
76 COSTS_N_INSNS (2), /* loadf. */
77 COSTS_N_INSNS (2), /* loadd. */
78 COSTS_N_INSNS (3), /* load_unaligned. */
79 0, /* store. */
80 0, /* strd. */
81 0, /* stm_1st. */
82 1, /* stm_regs_per_insn_1st. */
83 2, /* stm_regs_per_insn_subsequent. */
84 0, /* storef. */
85 0, /* stored. */
86 COSTS_N_INSNS (1), /* store_unaligned. */
87 COSTS_N_INSNS (1), /* loadv. */
88 COSTS_N_INSNS (1) /* storev. */
91 /* FP SFmode */
93 COSTS_N_INSNS (6), /* div. */
94 COSTS_N_INSNS (5), /* mult. */
95 COSTS_N_INSNS (5), /* mult_addsub. */
96 COSTS_N_INSNS (5), /* fma. */
97 COSTS_N_INSNS (3), /* addsub. */
98 COSTS_N_INSNS (1), /* fpconst. */
99 COSTS_N_INSNS (1), /* neg. */
100 COSTS_N_INSNS (2), /* compare. */
101 COSTS_N_INSNS (4), /* widen. */
102 COSTS_N_INSNS (4), /* narrow. */
103 COSTS_N_INSNS (4), /* toint. */
104 COSTS_N_INSNS (4), /* fromint. */
105 COSTS_N_INSNS (2) /* roundint. */
107 /* FP DFmode */
109 COSTS_N_INSNS (11), /* div. */
110 COSTS_N_INSNS (6), /* mult. */
111 COSTS_N_INSNS (6), /* mult_addsub. */
112 COSTS_N_INSNS (6), /* fma. */
113 COSTS_N_INSNS (3), /* addsub. */
114 COSTS_N_INSNS (1), /* fpconst. */
115 COSTS_N_INSNS (1), /* neg. */
116 COSTS_N_INSNS (2), /* compare. */
117 COSTS_N_INSNS (4), /* widen. */
118 COSTS_N_INSNS (4), /* narrow. */
119 COSTS_N_INSNS (4), /* toint. */
120 COSTS_N_INSNS (4), /* fromint. */
121 COSTS_N_INSNS (2) /* roundint. */
124 /* Vector */
126 COSTS_N_INSNS (1), /* alu. */
127 COSTS_N_INSNS (4), /* mult. */
128 COSTS_N_INSNS (1), /* movi. */
129 COSTS_N_INSNS (2), /* dup. */
130 COSTS_N_INSNS (2) /* extract. */
134 /* ThunderX does not implement AArch32. */
135 const struct cpu_cost_table thunderx_extra_costs =
137 /* ALU */
139 0, /* Arith. */
140 0, /* Logical. */
141 0, /* Shift. */
142 0, /* Shift_reg. */
143 COSTS_N_INSNS (1)+1, /* Arith_shift. */
144 COSTS_N_INSNS (1)+1, /* Arith_shift_reg. */
145 COSTS_N_INSNS (1), /* UNUSED: Log_shift. */
146 COSTS_N_INSNS (1), /* UNUSED: Log_shift_reg. */
147 0, /* Extend. */
148 COSTS_N_INSNS (1), /* Extend_arith. */
149 0, /* Bfi. */
150 0, /* Bfx. */
151 COSTS_N_INSNS (5), /* Clz. */
152 0, /* rev. */
153 0, /* UNUSED: non_exec. */
154 false /* UNUSED: non_exec_costs_exec. */
157 /* MULT SImode */
159 COSTS_N_INSNS (3), /* Simple. */
160 0, /* Flag_setting. */
161 0, /* Extend. */
162 0, /* Add. */
163 COSTS_N_INSNS (1), /* Extend_add. */
164 COSTS_N_INSNS (21) /* Idiv. */
166 /* MULT DImode */
168 COSTS_N_INSNS (3), /* Simple. */
169 0, /* Flag_setting. */
170 0, /* Extend. */
171 0, /* Add. */
172 COSTS_N_INSNS (1), /* Extend_add. */
173 COSTS_N_INSNS (37) /* Idiv. */
176 /* LD/ST */
178 COSTS_N_INSNS (2), /* Load. */
179 COSTS_N_INSNS (2), /* Load_sign_extend. */
180 COSTS_N_INSNS (2), /* Ldrd. */
181 0, /* N/A: Ldm_1st. */
182 0, /* N/A: Ldm_regs_per_insn_1st. */
183 0, /* N/A: Ldm_regs_per_insn_subsequent. */
184 COSTS_N_INSNS (3), /* Loadf. */
185 COSTS_N_INSNS (3), /* Loadd. */
186 0, /* N/A: Load_unaligned. */
187 0, /* Store. */
188 0, /* Strd. */
189 0, /* N/A: Stm_1st. */
190 0, /* N/A: Stm_regs_per_insn_1st. */
191 0, /* N/A: Stm_regs_per_insn_subsequent. */
192 0, /* Storef. */
193 0, /* Stored. */
194 COSTS_N_INSNS (1), /* Store_unaligned. */
195 COSTS_N_INSNS (1), /* Loadv. */
196 COSTS_N_INSNS (1) /* Storev. */
199 /* FP SFmode */
201 COSTS_N_INSNS (11), /* Div. */
202 COSTS_N_INSNS (5), /* Mult. */
203 COSTS_N_INSNS (5), /* Mult_addsub. */
204 COSTS_N_INSNS (5), /* Fma. */
205 COSTS_N_INSNS (3), /* Addsub. */
206 0, /* Fpconst. */
207 COSTS_N_INSNS (1), /* Neg. */
208 0, /* Compare. */
209 COSTS_N_INSNS (5), /* Widen. */
210 COSTS_N_INSNS (5), /* Narrow. */
211 COSTS_N_INSNS (5), /* Toint. */
212 COSTS_N_INSNS (5), /* Fromint. */
213 COSTS_N_INSNS (1) /* Roundint. */
215 /* FP DFmode */
217 COSTS_N_INSNS (21), /* Div. */
218 COSTS_N_INSNS (5), /* Mult. */
219 COSTS_N_INSNS (5), /* Mult_addsub. */
220 COSTS_N_INSNS (5), /* Fma. */
221 COSTS_N_INSNS (3), /* Addsub. */
222 0, /* Fpconst. */
223 COSTS_N_INSNS (1), /* Neg. */
224 0, /* Compare. */
225 COSTS_N_INSNS (5), /* Widen. */
226 COSTS_N_INSNS (5), /* Narrow. */
227 COSTS_N_INSNS (5), /* Toint. */
228 COSTS_N_INSNS (5), /* Fromint. */
229 COSTS_N_INSNS (1) /* Roundint. */
232 /* Vector */
234 COSTS_N_INSNS (1), /* Alu. */
235 COSTS_N_INSNS (4), /* mult. */
236 COSTS_N_INSNS (1), /* movi. */
237 COSTS_N_INSNS (2), /* dup. */
238 COSTS_N_INSNS (2) /* extract. */
242 const struct cpu_cost_table thunderx2t99_extra_costs =
244 /* ALU */
246 0, /* Arith. */
247 0, /* Logical. */
248 0, /* Shift. */
249 0, /* Shift_reg. */
250 COSTS_N_INSNS (1), /* Arith_shift. */
251 COSTS_N_INSNS (1), /* Arith_shift_reg. */
252 COSTS_N_INSNS (1), /* Log_shift. */
253 COSTS_N_INSNS (1), /* Log_shift_reg. */
254 0, /* Extend. */
255 COSTS_N_INSNS (1), /* Extend_arith. */
256 0, /* Bfi. */
257 0, /* Bfx. */
258 COSTS_N_INSNS (3), /* Clz. */
259 0, /* Rev. */
260 0, /* Non_exec. */
261 true /* Non_exec_costs_exec. */
264 /* MULT SImode */
266 COSTS_N_INSNS (4), /* Simple. */
267 COSTS_N_INSNS (4), /* Flag_setting. */
268 COSTS_N_INSNS (4), /* Extend. */
269 COSTS_N_INSNS (5), /* Add. */
270 COSTS_N_INSNS (5), /* Extend_add. */
271 COSTS_N_INSNS (18) /* Idiv. */
273 /* MULT DImode */
275 COSTS_N_INSNS (4), /* Simple. */
276 0, /* Flag_setting. */
277 COSTS_N_INSNS (4), /* Extend. */
278 COSTS_N_INSNS (5), /* Add. */
279 COSTS_N_INSNS (5), /* Extend_add. */
280 COSTS_N_INSNS (26) /* Idiv. */
283 /* LD/ST */
285 COSTS_N_INSNS (4), /* Load. */
286 COSTS_N_INSNS (4), /* Load_sign_extend. */
287 COSTS_N_INSNS (5), /* Ldrd. */
288 COSTS_N_INSNS (4), /* Ldm_1st. */
289 1, /* Ldm_regs_per_insn_1st. */
290 1, /* Ldm_regs_per_insn_subsequent. */
291 COSTS_N_INSNS (4), /* Loadf. */
292 COSTS_N_INSNS (4), /* Loadd. */
293 COSTS_N_INSNS (4), /* Load_unaligned. */
294 0, /* Store. */
295 0, /* Strd. */
296 0, /* Stm_1st. */
297 1, /* Stm_regs_per_insn_1st. */
298 1, /* Stm_regs_per_insn_subsequent. */
299 0, /* Storef. */
300 0, /* Stored. */
301 0, /* Store_unaligned. */
302 COSTS_N_INSNS (1), /* Loadv. */
303 COSTS_N_INSNS (1) /* Storev. */
306 /* FP SFmode */
308 COSTS_N_INSNS (4), /* Div. */
309 COSTS_N_INSNS (1), /* Mult. */
310 COSTS_N_INSNS (1), /* Mult_addsub. */
311 COSTS_N_INSNS (1), /* Fma. */
312 COSTS_N_INSNS (1), /* Addsub. */
313 COSTS_N_INSNS (1), /* Fpconst. */
314 COSTS_N_INSNS (1), /* Neg. */
315 COSTS_N_INSNS (1), /* Compare. */
316 COSTS_N_INSNS (2), /* Widen. */
317 COSTS_N_INSNS (2), /* Narrow. */
318 COSTS_N_INSNS (2), /* Toint. */
319 COSTS_N_INSNS (2), /* Fromint. */
320 COSTS_N_INSNS (2) /* Roundint. */
322 /* FP DFmode */
324 COSTS_N_INSNS (6), /* Div. */
325 COSTS_N_INSNS (1), /* Mult. */
326 COSTS_N_INSNS (1), /* Mult_addsub. */
327 COSTS_N_INSNS (1), /* Fma. */
328 COSTS_N_INSNS (1), /* Addsub. */
329 COSTS_N_INSNS (1), /* Fpconst. */
330 COSTS_N_INSNS (1), /* Neg. */
331 COSTS_N_INSNS (1), /* Compare. */
332 COSTS_N_INSNS (2), /* Widen. */
333 COSTS_N_INSNS (2), /* Narrow. */
334 COSTS_N_INSNS (2), /* Toint. */
335 COSTS_N_INSNS (2), /* Fromint. */
336 COSTS_N_INSNS (2) /* Roundint. */
339 /* Vector */
341 COSTS_N_INSNS (1), /* Alu. */
342 COSTS_N_INSNS (4), /* Mult. */
343 COSTS_N_INSNS (1), /* movi. */
344 COSTS_N_INSNS (2), /* dup. */
345 COSTS_N_INSNS (2) /* extract. */
349 const struct cpu_cost_table thunderx3t110_extra_costs =
351 /* ALU */
353 0, /* Arith. */
354 0, /* Logical. */
355 0, /* Shift. */
356 0, /* Shift_reg. */
357 COSTS_N_INSNS (1), /* Arith_shift. */
358 COSTS_N_INSNS (1), /* Arith_shift_reg. */
359 COSTS_N_INSNS (1), /* Log_shift. */
360 COSTS_N_INSNS (1), /* Log_shift_reg. */
361 0, /* Extend. */
362 COSTS_N_INSNS (1), /* Extend_arith. */
363 0, /* Bfi. */
364 0, /* Bfx. */
365 COSTS_N_INSNS (3), /* Clz. */
366 0, /* Rev. */
367 0, /* Non_exec. */
368 true /* Non_exec_costs_exec. */
371 /* MULT SImode */
373 COSTS_N_INSNS (4), /* Simple. */
374 COSTS_N_INSNS (4), /* Flag_setting. */
375 COSTS_N_INSNS (4), /* Extend. */
376 COSTS_N_INSNS (5), /* Add. */
377 COSTS_N_INSNS (5), /* Extend_add. */
378 COSTS_N_INSNS (18) /* Idiv. */
380 /* MULT DImode */
382 COSTS_N_INSNS (4), /* Simple. */
383 0, /* Flag_setting. */
384 COSTS_N_INSNS (4), /* Extend. */
385 COSTS_N_INSNS (5), /* Add. */
386 COSTS_N_INSNS (5), /* Extend_add. */
387 COSTS_N_INSNS (26) /* Idiv. */
390 /* LD/ST */
392 COSTS_N_INSNS (4), /* Load. */
393 COSTS_N_INSNS (4), /* Load_sign_extend. */
394 COSTS_N_INSNS (5), /* Ldrd. */
395 COSTS_N_INSNS (4), /* Ldm_1st. */
396 1, /* Ldm_regs_per_insn_1st. */
397 1, /* Ldm_regs_per_insn_subsequent. */
398 COSTS_N_INSNS (4), /* Loadf. */
399 COSTS_N_INSNS (4), /* Loadd. */
400 COSTS_N_INSNS (4), /* Load_unaligned. */
401 0, /* Store. */
402 0, /* Strd. */
403 0, /* Stm_1st. */
404 1, /* Stm_regs_per_insn_1st. */
405 1, /* Stm_regs_per_insn_subsequent. */
406 0, /* Storef. */
407 0, /* Stored. */
408 0, /* Store_unaligned. */
409 COSTS_N_INSNS (1), /* Loadv. */
410 COSTS_N_INSNS (1) /* Storev. */
413 /* FP SFmode */
415 COSTS_N_INSNS (4), /* Div. */
416 COSTS_N_INSNS (1), /* Mult. */
417 COSTS_N_INSNS (1), /* Mult_addsub. */
418 COSTS_N_INSNS (1), /* Fma. */
419 COSTS_N_INSNS (1), /* Addsub. */
420 COSTS_N_INSNS (1), /* Fpconst. */
421 COSTS_N_INSNS (1), /* Neg. */
422 COSTS_N_INSNS (1), /* Compare. */
423 COSTS_N_INSNS (2), /* Widen. */
424 COSTS_N_INSNS (2), /* Narrow. */
425 COSTS_N_INSNS (2), /* Toint. */
426 COSTS_N_INSNS (2), /* Fromint. */
427 COSTS_N_INSNS (2) /* Roundint. */
429 /* FP DFmode */
431 COSTS_N_INSNS (6), /* Div. */
432 COSTS_N_INSNS (1), /* Mult. */
433 COSTS_N_INSNS (1), /* Mult_addsub. */
434 COSTS_N_INSNS (1), /* Fma. */
435 COSTS_N_INSNS (1), /* Addsub. */
436 COSTS_N_INSNS (1), /* Fpconst. */
437 COSTS_N_INSNS (1), /* Neg. */
438 COSTS_N_INSNS (1), /* Compare. */
439 COSTS_N_INSNS (2), /* Widen. */
440 COSTS_N_INSNS (2), /* Narrow. */
441 COSTS_N_INSNS (2), /* Toint. */
442 COSTS_N_INSNS (2), /* Fromint. */
443 COSTS_N_INSNS (2) /* Roundint. */
446 /* Vector */
448 COSTS_N_INSNS (1), /* Alu. */
449 COSTS_N_INSNS (4), /* Mult. */
450 COSTS_N_INSNS (1), /* movi. */
451 COSTS_N_INSNS (2), /* dup. */
452 COSTS_N_INSNS (2) /* extract. */
456 const struct cpu_cost_table tsv110_extra_costs =
458 /* ALU */
460 0, /* arith. */
461 0, /* logical. */
462 0, /* shift. */
463 0, /* shift_reg. */
464 COSTS_N_INSNS (1), /* arith_shift. */
465 COSTS_N_INSNS (1), /* arith_shift_reg. */
466 COSTS_N_INSNS (1), /* log_shift. */
467 COSTS_N_INSNS (1), /* log_shift_reg. */
468 0, /* extend. */
469 COSTS_N_INSNS (1), /* extend_arith. */
470 0, /* bfi. */
471 0, /* bfx. */
472 0, /* clz. */
473 0, /* rev. */
474 0, /* non_exec. */
475 true /* non_exec_costs_exec. */
479 /* MULT SImode */
481 COSTS_N_INSNS (2), /* simple. */
482 COSTS_N_INSNS (2), /* flag_setting. */
483 COSTS_N_INSNS (2), /* extend. */
484 COSTS_N_INSNS (2), /* add. */
485 COSTS_N_INSNS (2), /* extend_add. */
486 COSTS_N_INSNS (11) /* idiv. */
488 /* MULT DImode */
490 COSTS_N_INSNS (3), /* simple. */
491 0, /* flag_setting (N/A). */
492 COSTS_N_INSNS (3), /* extend. */
493 COSTS_N_INSNS (3), /* add. */
494 COSTS_N_INSNS (3), /* extend_add. */
495 COSTS_N_INSNS (19) /* idiv. */
498 /* LD/ST */
500 COSTS_N_INSNS (3), /* load. */
501 COSTS_N_INSNS (4), /* load_sign_extend. */
502 COSTS_N_INSNS (3), /* ldrd. */
503 COSTS_N_INSNS (3), /* ldm_1st. */
504 1, /* ldm_regs_per_insn_1st. */
505 2, /* ldm_regs_per_insn_subsequent. */
506 COSTS_N_INSNS (4), /* loadf. */
507 COSTS_N_INSNS (4), /* loadd. */
508 COSTS_N_INSNS (4), /* load_unaligned. */
509 0, /* store. */
510 0, /* strd. */
511 0, /* stm_1st. */
512 1, /* stm_regs_per_insn_1st. */
513 2, /* stm_regs_per_insn_subsequent. */
514 0, /* storef. */
515 0, /* stored. */
516 COSTS_N_INSNS (1), /* store_unaligned. */
517 COSTS_N_INSNS (4), /* loadv. */
518 COSTS_N_INSNS (4) /* storev. */
521 /* FP SFmode */
523 COSTS_N_INSNS (10), /* div. */
524 COSTS_N_INSNS (4), /* mult. */
525 COSTS_N_INSNS (4), /* mult_addsub. */
526 COSTS_N_INSNS (4), /* fma. */
527 COSTS_N_INSNS (4), /* addsub. */
528 COSTS_N_INSNS (1), /* fpconst. */
529 COSTS_N_INSNS (1), /* neg. */
530 COSTS_N_INSNS (1), /* compare. */
531 COSTS_N_INSNS (2), /* widen. */
532 COSTS_N_INSNS (2), /* narrow. */
533 COSTS_N_INSNS (2), /* toint. */
534 COSTS_N_INSNS (1), /* fromint. */
535 COSTS_N_INSNS (2) /* roundint. */
537 /* FP DFmode */
539 COSTS_N_INSNS (17), /* div. */
540 COSTS_N_INSNS (4), /* mult. */
541 COSTS_N_INSNS (6), /* mult_addsub. */
542 COSTS_N_INSNS (6), /* fma. */
543 COSTS_N_INSNS (3), /* addsub. */
544 COSTS_N_INSNS (1), /* fpconst. */
545 COSTS_N_INSNS (1), /* neg. */
546 COSTS_N_INSNS (1), /* compare. */
547 COSTS_N_INSNS (2), /* widen. */
548 COSTS_N_INSNS (2), /* narrow. */
549 COSTS_N_INSNS (2), /* toint. */
550 COSTS_N_INSNS (1), /* fromint. */
551 COSTS_N_INSNS (2) /* roundint. */
554 /* Vector */
556 COSTS_N_INSNS (1), /* alu. */
557 COSTS_N_INSNS (4), /* mult. */
558 COSTS_N_INSNS (1), /* movi. */
559 COSTS_N_INSNS (2), /* dup. */
560 COSTS_N_INSNS (2) /* extract. */
564 const struct cpu_cost_table a64fx_extra_costs =
566 /* ALU */
568 0, /* arith. */
569 0, /* logical. */
570 0, /* shift. */
571 0, /* shift_reg. */
572 COSTS_N_INSNS (1), /* arith_shift. */
573 COSTS_N_INSNS (1), /* arith_shift_reg. */
574 COSTS_N_INSNS (1), /* log_shift. */
575 COSTS_N_INSNS (1), /* log_shift_reg. */
576 0, /* extend. */
577 COSTS_N_INSNS (1), /* extend_arith. */
578 0, /* bfi. */
579 0, /* bfx. */
580 0, /* clz. */
581 0, /* rev. */
582 0, /* non_exec. */
583 true /* non_exec_costs_exec. */
586 /* MULT SImode */
588 COSTS_N_INSNS (4), /* simple. */
589 COSTS_N_INSNS (4), /* flag_setting. */
590 COSTS_N_INSNS (4), /* extend. */
591 COSTS_N_INSNS (5), /* add. */
592 COSTS_N_INSNS (5), /* extend_add. */
593 COSTS_N_INSNS (18) /* idiv. */
595 /* MULT DImode */
597 COSTS_N_INSNS (4), /* simple. */
598 0, /* flag_setting (N/A). */
599 COSTS_N_INSNS (4), /* extend. */
600 COSTS_N_INSNS (5), /* add. */
601 COSTS_N_INSNS (5), /* extend_add. */
602 COSTS_N_INSNS (26) /* idiv. */
605 /* LD/ST */
607 COSTS_N_INSNS (4), /* load. */
608 COSTS_N_INSNS (4), /* load_sign_extend. */
609 COSTS_N_INSNS (5), /* ldrd. */
610 COSTS_N_INSNS (4), /* ldm_1st. */
611 1, /* ldm_regs_per_insn_1st. */
612 2, /* ldm_regs_per_insn_subsequent. */
613 COSTS_N_INSNS (4), /* loadf. */
614 COSTS_N_INSNS (4), /* loadd. */
615 COSTS_N_INSNS (5), /* load_unaligned. */
616 0, /* store. */
617 0, /* strd. */
618 0, /* stm_1st. */
619 1, /* stm_regs_per_insn_1st. */
620 2, /* stm_regs_per_insn_subsequent. */
621 0, /* storef. */
622 0, /* stored. */
623 0, /* store_unaligned. */
624 COSTS_N_INSNS (1), /* loadv. */
625 COSTS_N_INSNS (1) /* storev. */
628 /* FP SFmode */
630 COSTS_N_INSNS (6), /* div. */
631 COSTS_N_INSNS (1), /* mult. */
632 COSTS_N_INSNS (1), /* mult_addsub. */
633 COSTS_N_INSNS (2), /* fma. */
634 COSTS_N_INSNS (1), /* addsub. */
635 COSTS_N_INSNS (1), /* fpconst. */
636 COSTS_N_INSNS (1), /* neg. */
637 COSTS_N_INSNS (1), /* compare. */
638 COSTS_N_INSNS (2), /* widen. */
639 COSTS_N_INSNS (2), /* narrow. */
640 COSTS_N_INSNS (2), /* toint. */
641 COSTS_N_INSNS (2), /* fromint. */
642 COSTS_N_INSNS (2) /* roundint. */
644 /* FP DFmode */
646 COSTS_N_INSNS (11), /* div. */
647 COSTS_N_INSNS (1), /* mult. */
648 COSTS_N_INSNS (1), /* mult_addsub. */
649 COSTS_N_INSNS (2), /* fma. */
650 COSTS_N_INSNS (1), /* addsub. */
651 COSTS_N_INSNS (1), /* fpconst. */
652 COSTS_N_INSNS (1), /* neg. */
653 COSTS_N_INSNS (1), /* compare. */
654 COSTS_N_INSNS (2), /* widen. */
655 COSTS_N_INSNS (2), /* narrow. */
656 COSTS_N_INSNS (2), /* toint. */
657 COSTS_N_INSNS (2), /* fromint. */
658 COSTS_N_INSNS (2) /* roundint. */
661 /* Vector */
663 COSTS_N_INSNS (1), /* alu. */
664 COSTS_N_INSNS (4), /* mult. */
665 COSTS_N_INSNS (1), /* movi. */
666 COSTS_N_INSNS (2), /* dup. */
667 COSTS_N_INSNS (2) /* extract. */
671 const struct cpu_cost_table ampere1_extra_costs =
673 /* ALU */
675 0, /* arith. */
676 0, /* logical. */
677 0, /* shift. */
678 COSTS_N_INSNS (1), /* shift_reg. */
679 0, /* arith_shift. */
680 COSTS_N_INSNS (1), /* arith_shift_reg. */
681 0, /* log_shift. */
682 COSTS_N_INSNS (1), /* log_shift_reg. */
683 0, /* extend. */
684 COSTS_N_INSNS (1), /* extend_arith. */
685 0, /* bfi. */
686 0, /* bfx. */
687 0, /* clz. */
688 0, /* rev. */
689 0, /* non_exec. */
690 true /* non_exec_costs_exec. */
693 /* MULT SImode */
695 COSTS_N_INSNS (3), /* simple. */
696 COSTS_N_INSNS (3), /* flag_setting. */
697 COSTS_N_INSNS (3), /* extend. */
698 COSTS_N_INSNS (4), /* add. */
699 COSTS_N_INSNS (4), /* extend_add. */
700 COSTS_N_INSNS (18) /* idiv. */
702 /* MULT DImode */
704 COSTS_N_INSNS (3), /* simple. */
705 0, /* flag_setting (N/A). */
706 COSTS_N_INSNS (3), /* extend. */
707 COSTS_N_INSNS (4), /* add. */
708 COSTS_N_INSNS (4), /* extend_add. */
709 COSTS_N_INSNS (34) /* idiv. */
712 /* LD/ST */
714 COSTS_N_INSNS (4), /* load. */
715 COSTS_N_INSNS (4), /* load_sign_extend. */
716 0, /* ldrd (n/a). */
717 0, /* ldm_1st. */
718 0, /* ldm_regs_per_insn_1st. */
719 0, /* ldm_regs_per_insn_subsequent. */
720 COSTS_N_INSNS (5), /* loadf. */
721 COSTS_N_INSNS (5), /* loadd. */
722 COSTS_N_INSNS (5), /* load_unaligned. */
723 0, /* store. */
724 0, /* strd. */
725 0, /* stm_1st. */
726 0, /* stm_regs_per_insn_1st. */
727 0, /* stm_regs_per_insn_subsequent. */
728 COSTS_N_INSNS (2), /* storef. */
729 COSTS_N_INSNS (2), /* stored. */
730 COSTS_N_INSNS (2), /* store_unaligned. */
731 COSTS_N_INSNS (3), /* loadv. */
732 COSTS_N_INSNS (3) /* storev. */
735 /* FP SFmode */
737 COSTS_N_INSNS (25), /* div. */
738 COSTS_N_INSNS (4), /* mult. */
739 COSTS_N_INSNS (4), /* mult_addsub. */
740 COSTS_N_INSNS (4), /* fma. */
741 COSTS_N_INSNS (4), /* addsub. */
742 COSTS_N_INSNS (2), /* fpconst. */
743 COSTS_N_INSNS (4), /* neg. */
744 COSTS_N_INSNS (4), /* compare. */
745 COSTS_N_INSNS (4), /* widen. */
746 COSTS_N_INSNS (4), /* narrow. */
747 COSTS_N_INSNS (4), /* toint. */
748 COSTS_N_INSNS (4), /* fromint. */
749 COSTS_N_INSNS (4) /* roundint. */
751 /* FP DFmode */
753 COSTS_N_INSNS (34), /* div. */
754 COSTS_N_INSNS (5), /* mult. */
755 COSTS_N_INSNS (5), /* mult_addsub. */
756 COSTS_N_INSNS (5), /* fma. */
757 COSTS_N_INSNS (5), /* addsub. */
758 COSTS_N_INSNS (2), /* fpconst. */
759 COSTS_N_INSNS (5), /* neg. */
760 COSTS_N_INSNS (5), /* compare. */
761 COSTS_N_INSNS (5), /* widen. */
762 COSTS_N_INSNS (5), /* narrow. */
763 COSTS_N_INSNS (6), /* toint. */
764 COSTS_N_INSNS (6), /* fromint. */
765 COSTS_N_INSNS (5) /* roundint. */
768 /* Vector */
770 COSTS_N_INSNS (3), /* alu. */
771 COSTS_N_INSNS (3), /* mult. */
772 COSTS_N_INSNS (2), /* movi. */
773 COSTS_N_INSNS (2), /* dup. */
774 COSTS_N_INSNS (2) /* extract. */
778 const struct cpu_cost_table ampere1a_extra_costs =
780 /* ALU */
782 0, /* arith. */
783 0, /* logical. */
784 0, /* shift. */
785 COSTS_N_INSNS (1), /* shift_reg. */
786 0, /* arith_shift. */
787 COSTS_N_INSNS (1), /* arith_shift_reg. */
788 0, /* log_shift. */
789 COSTS_N_INSNS (1), /* log_shift_reg. */
790 0, /* extend. */
791 COSTS_N_INSNS (1), /* extend_arith. */
792 0, /* bfi. */
793 0, /* bfx. */
794 0, /* clz. */
795 0, /* rev. */
796 0, /* non_exec. */
797 true /* non_exec_costs_exec. */
800 /* MULT SImode */
802 COSTS_N_INSNS (3), /* simple. */
803 COSTS_N_INSNS (3), /* flag_setting. */
804 COSTS_N_INSNS (3), /* extend. */
805 COSTS_N_INSNS (4), /* add. */
806 COSTS_N_INSNS (4), /* extend_add. */
807 COSTS_N_INSNS (19) /* idiv. */
809 /* MULT DImode */
811 COSTS_N_INSNS (3), /* simple. */
812 0, /* flag_setting (N/A). */
813 COSTS_N_INSNS (3), /* extend. */
814 COSTS_N_INSNS (4), /* add. */
815 COSTS_N_INSNS (4), /* extend_add. */
816 COSTS_N_INSNS (35) /* idiv. */
819 /* LD/ST */
821 COSTS_N_INSNS (4), /* load. */
822 COSTS_N_INSNS (4), /* load_sign_extend. */
823 0, /* ldrd (n/a). */
824 0, /* ldm_1st. */
825 0, /* ldm_regs_per_insn_1st. */
826 0, /* ldm_regs_per_insn_subsequent. */
827 COSTS_N_INSNS (5), /* loadf. */
828 COSTS_N_INSNS (5), /* loadd. */
829 COSTS_N_INSNS (5), /* load_unaligned. */
830 0, /* store. */
831 0, /* strd. */
832 0, /* stm_1st. */
833 0, /* stm_regs_per_insn_1st. */
834 0, /* stm_regs_per_insn_subsequent. */
835 COSTS_N_INSNS (2), /* storef. */
836 COSTS_N_INSNS (2), /* stored. */
837 COSTS_N_INSNS (2), /* store_unaligned. */
838 COSTS_N_INSNS (3), /* loadv. */
839 COSTS_N_INSNS (3) /* storev. */
842 /* FP SFmode */
844 COSTS_N_INSNS (25), /* div. */
845 COSTS_N_INSNS (4), /* mult. */
846 COSTS_N_INSNS (4), /* mult_addsub. */
847 COSTS_N_INSNS (4), /* fma. */
848 COSTS_N_INSNS (4), /* addsub. */
849 COSTS_N_INSNS (2), /* fpconst. */
850 COSTS_N_INSNS (4), /* neg. */
851 COSTS_N_INSNS (4), /* compare. */
852 COSTS_N_INSNS (4), /* widen. */
853 COSTS_N_INSNS (4), /* narrow. */
854 COSTS_N_INSNS (4), /* toint. */
855 COSTS_N_INSNS (4), /* fromint. */
856 COSTS_N_INSNS (4) /* roundint. */
858 /* FP DFmode */
860 COSTS_N_INSNS (34), /* div. */
861 COSTS_N_INSNS (5), /* mult. */
862 COSTS_N_INSNS (5), /* mult_addsub. */
863 COSTS_N_INSNS (5), /* fma. */
864 COSTS_N_INSNS (5), /* addsub. */
865 COSTS_N_INSNS (2), /* fpconst. */
866 COSTS_N_INSNS (5), /* neg. */
867 COSTS_N_INSNS (5), /* compare. */
868 COSTS_N_INSNS (5), /* widen. */
869 COSTS_N_INSNS (5), /* narrow. */
870 COSTS_N_INSNS (6), /* toint. */
871 COSTS_N_INSNS (6), /* fromint. */
872 COSTS_N_INSNS (5) /* roundint. */
875 /* Vector */
877 COSTS_N_INSNS (3), /* alu. */
878 COSTS_N_INSNS (3), /* mult. */
879 COSTS_N_INSNS (2), /* movi. */
880 COSTS_N_INSNS (2), /* dup. */
881 COSTS_N_INSNS (2) /* extract. */
885 const struct cpu_cost_table ampere1b_extra_costs =
887 /* ALU */
889 0, /* arith. */
890 0, /* logical. */
891 0, /* shift. */
892 COSTS_N_INSNS (1), /* shift_reg. */
893 0, /* arith_shift. */
894 COSTS_N_INSNS (1), /* arith_shift_reg. */
895 0, /* log_shift. */
896 COSTS_N_INSNS (1), /* log_shift_reg. */
897 0, /* extend. */
898 COSTS_N_INSNS (1), /* extend_arith. */
899 0, /* bfi. */
900 0, /* bfx. */
901 0, /* clz. */
902 0, /* rev. */
903 0, /* non_exec. */
904 true /* non_exec_costs_exec. */
907 /* MULT SImode */
909 COSTS_N_INSNS (2), /* simple. */
910 COSTS_N_INSNS (2), /* flag_setting. */
911 COSTS_N_INSNS (2), /* extend. */
912 COSTS_N_INSNS (3), /* add. */
913 COSTS_N_INSNS (3), /* extend_add. */
914 COSTS_N_INSNS (12) /* idiv. */
916 /* MULT DImode */
918 COSTS_N_INSNS (2), /* simple. */
919 0, /* flag_setting (N/A). */
920 COSTS_N_INSNS (2), /* extend. */
921 COSTS_N_INSNS (3), /* add. */
922 COSTS_N_INSNS (3), /* extend_add. */
923 COSTS_N_INSNS (18) /* idiv. */
926 /* LD/ST */
928 COSTS_N_INSNS (2), /* load. */
929 COSTS_N_INSNS (2), /* load_sign_extend. */
930 0, /* ldrd (n/a). */
931 0, /* ldm_1st. */
932 0, /* ldm_regs_per_insn_1st. */
933 0, /* ldm_regs_per_insn_subsequent. */
934 COSTS_N_INSNS (3), /* loadf. */
935 COSTS_N_INSNS (3), /* loadd. */
936 COSTS_N_INSNS (3), /* load_unaligned. */
937 0, /* store. */
938 0, /* strd. */
939 0, /* stm_1st. */
940 0, /* stm_regs_per_insn_1st. */
941 0, /* stm_regs_per_insn_subsequent. */
942 COSTS_N_INSNS (1), /* storef. */
943 COSTS_N_INSNS (1), /* stored. */
944 COSTS_N_INSNS (1), /* store_unaligned. */
945 COSTS_N_INSNS (3), /* loadv. */
946 COSTS_N_INSNS (3) /* storev. */
949 /* FP SFmode */
951 COSTS_N_INSNS (18), /* div. */
952 COSTS_N_INSNS (3), /* mult. */
953 COSTS_N_INSNS (3), /* mult_addsub. */
954 COSTS_N_INSNS (3), /* fma. */
955 COSTS_N_INSNS (2), /* addsub. */
956 COSTS_N_INSNS (1), /* fpconst. */
957 COSTS_N_INSNS (2), /* neg. */
958 COSTS_N_INSNS (2), /* compare. */
959 COSTS_N_INSNS (2), /* widen. */
960 COSTS_N_INSNS (2), /* narrow. */
961 COSTS_N_INSNS (6), /* toint. */
962 COSTS_N_INSNS (4), /* fromint. */
963 COSTS_N_INSNS (2) /* roundint. */
965 /* FP DFmode */
967 COSTS_N_INSNS (18), /* div. */
968 COSTS_N_INSNS (3), /* mult. */
969 COSTS_N_INSNS (3), /* mult_addsub. */
970 COSTS_N_INSNS (3), /* fma. */
971 COSTS_N_INSNS (2), /* addsub. */
972 COSTS_N_INSNS (1), /* fpconst. */
973 COSTS_N_INSNS (2), /* neg. */
974 COSTS_N_INSNS (2), /* compare. */
975 COSTS_N_INSNS (2), /* widen. */
976 COSTS_N_INSNS (2), /* narrow. */
977 COSTS_N_INSNS (6), /* toint. */
978 COSTS_N_INSNS (4), /* fromint. */
979 COSTS_N_INSNS (2) /* roundint. */
982 /* Vector */
984 COSTS_N_INSNS (1), /* alu. */
985 COSTS_N_INSNS (2), /* mult. */
986 COSTS_N_INSNS (1), /* movi. */
987 COSTS_N_INSNS (1), /* dup. */
988 COSTS_N_INSNS (1) /* extract. */
992 #endif