]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/config/arm/aarch-cost-tables.h
Update copyright years.
[thirdparty/gcc.git] / gcc / config / arm / aarch-cost-tables.h
1 /* RTX cost tables shared between arm and aarch64.
2
3 Copyright (C) 2013-2024 Free Software Foundation, Inc.
4 Contributed by ARM Ltd.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published
10 by the Free Software Foundation; either version 3, or (at your
11 option) any later version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
21
22 #ifndef GCC_AARCH_COST_TABLES_H
23 #define GCC_AARCH_COST_TABLES_H
24
25 const struct cpu_cost_table generic_extra_costs =
26 {
27 /* ALU */
28 {
29 0, /* arith. */
30 0, /* logical. */
31 0, /* shift. */
32 COSTS_N_INSNS (1), /* shift_reg. */
33 0, /* arith_shift. */
34 COSTS_N_INSNS (1), /* arith_shift_reg. */
35 0, /* log_shift. */
36 COSTS_N_INSNS (1), /* log_shift_reg. */
37 0, /* extend. */
38 COSTS_N_INSNS (1), /* extend_arith. */
39 0, /* bfi. */
40 0, /* bfx. */
41 0, /* clz. */
42 0, /* rev. */
43 COSTS_N_INSNS (1), /* non_exec. */
44 false /* non_exec_costs_exec. */
45 },
46 {
47 /* MULT SImode */
48 {
49 COSTS_N_INSNS (2), /* simple. */
50 COSTS_N_INSNS (1), /* flag_setting. */
51 COSTS_N_INSNS (2), /* extend. */
52 COSTS_N_INSNS (3), /* add. */
53 COSTS_N_INSNS (3), /* extend_add. */
54 COSTS_N_INSNS (8) /* idiv. */
55 },
56 /* MULT DImode */
57 {
58 0, /* simple (N/A). */
59 0, /* flag_setting (N/A). */
60 COSTS_N_INSNS (2), /* extend. */
61 0, /* add (N/A). */
62 COSTS_N_INSNS (3), /* extend_add. */
63 0 /* idiv (N/A). */
64 }
65 },
66 /* LD/ST */
67 {
68 COSTS_N_INSNS (2), /* load. */
69 COSTS_N_INSNS (2), /* load_sign_extend. */
70 COSTS_N_INSNS (3), /* ldrd. */
71 COSTS_N_INSNS (2), /* ldm_1st. */
72 1, /* ldm_regs_per_insn_1st. */
73 1, /* ldm_regs_per_insn_subsequent. */
74 COSTS_N_INSNS (2), /* loadf. */
75 COSTS_N_INSNS (3), /* loadd. */
76 COSTS_N_INSNS (1), /* load_unaligned. */
77 COSTS_N_INSNS (2), /* store. */
78 COSTS_N_INSNS (3), /* strd. */
79 COSTS_N_INSNS (2), /* stm_1st. */
80 1, /* stm_regs_per_insn_1st. */
81 1, /* stm_regs_per_insn_subsequent. */
82 COSTS_N_INSNS (2), /* storef. */
83 COSTS_N_INSNS (3), /* stored. */
84 COSTS_N_INSNS (1), /* store_unaligned. */
85 COSTS_N_INSNS (1), /* loadv. */
86 COSTS_N_INSNS (1) /* storev. */
87 },
88 {
89 /* FP SFmode */
90 {
91 COSTS_N_INSNS (7), /* div. */
92 COSTS_N_INSNS (2), /* mult. */
93 COSTS_N_INSNS (3), /* mult_addsub. */
94 COSTS_N_INSNS (3), /* fma. */
95 COSTS_N_INSNS (1), /* addsub. */
96 0, /* fpconst. */
97 0, /* neg. */
98 0, /* compare. */
99 0, /* widen. */
100 0, /* narrow. */
101 0, /* toint. */
102 0, /* fromint. */
103 0 /* roundint. */
104 },
105 /* FP DFmode */
106 {
107 COSTS_N_INSNS (15), /* div. */
108 COSTS_N_INSNS (5), /* mult. */
109 COSTS_N_INSNS (7), /* mult_addsub. */
110 COSTS_N_INSNS (7), /* fma. */
111 COSTS_N_INSNS (3), /* addsub. */
112 0, /* fpconst. */
113 0, /* neg. */
114 0, /* compare. */
115 0, /* widen. */
116 0, /* narrow. */
117 0, /* toint. */
118 0, /* fromint. */
119 0 /* roundint. */
120 }
121 },
122 /* Vector */
123 {
124 COSTS_N_INSNS (1), /* alu. */
125 COSTS_N_INSNS (4), /* mult. */
126 COSTS_N_INSNS (1), /* movi. */
127 COSTS_N_INSNS (2), /* dup. */
128 COSTS_N_INSNS (2) /* extract. */
129 }
130 };
131
132 const struct cpu_cost_table cortexa53_extra_costs =
133 {
134 /* ALU */
135 {
136 0, /* arith. */
137 0, /* logical. */
138 COSTS_N_INSNS (1), /* shift. */
139 0, /* shift_reg. */
140 COSTS_N_INSNS (1), /* arith_shift. */
141 COSTS_N_INSNS (1), /* arith_shift_reg. */
142 COSTS_N_INSNS (1), /* log_shift. */
143 COSTS_N_INSNS (1), /* log_shift_reg. */
144 COSTS_N_INSNS (1), /* extend. */
145 COSTS_N_INSNS (1), /* extend_arith. */
146 COSTS_N_INSNS (1), /* bfi. */
147 COSTS_N_INSNS (1), /* bfx. */
148 0, /* clz. */
149 0, /* rev. */
150 0, /* non_exec. */
151 true /* non_exec_costs_exec. */
152 },
153 {
154 /* MULT SImode */
155 {
156 COSTS_N_INSNS (1), /* simple. */
157 COSTS_N_INSNS (2), /* flag_setting. */
158 COSTS_N_INSNS (1), /* extend. */
159 COSTS_N_INSNS (1), /* add. */
160 COSTS_N_INSNS (1), /* extend_add. */
161 COSTS_N_INSNS (9) /* idiv. */
162 },
163 /* MULT DImode */
164 {
165 COSTS_N_INSNS (2), /* simple. */
166 0, /* flag_setting (N/A). */
167 COSTS_N_INSNS (2), /* extend. */
168 COSTS_N_INSNS (2), /* add. */
169 COSTS_N_INSNS (2), /* extend_add. */
170 COSTS_N_INSNS (15) /* idiv. */
171 }
172 },
173 /* LD/ST */
174 {
175 COSTS_N_INSNS (1), /* load. */
176 COSTS_N_INSNS (1), /* load_sign_extend. */
177 COSTS_N_INSNS (1), /* ldrd. */
178 COSTS_N_INSNS (1), /* ldm_1st. */
179 1, /* ldm_regs_per_insn_1st. */
180 2, /* ldm_regs_per_insn_subsequent. */
181 COSTS_N_INSNS (1), /* loadf. */
182 COSTS_N_INSNS (1), /* loadd. */
183 COSTS_N_INSNS (1), /* load_unaligned. */
184 0, /* store. */
185 0, /* strd. */
186 0, /* stm_1st. */
187 1, /* stm_regs_per_insn_1st. */
188 2, /* stm_regs_per_insn_subsequent. */
189 0, /* storef. */
190 0, /* stored. */
191 COSTS_N_INSNS (1), /* store_unaligned. */
192 COSTS_N_INSNS (1), /* loadv. */
193 COSTS_N_INSNS (1) /* storev. */
194 },
195 {
196 /* FP SFmode */
197 {
198 COSTS_N_INSNS (5), /* div. */
199 COSTS_N_INSNS (1), /* mult. */
200 COSTS_N_INSNS (2), /* mult_addsub. */
201 COSTS_N_INSNS (2), /* fma. */
202 COSTS_N_INSNS (1), /* addsub. */
203 0, /* fpconst. */
204 COSTS_N_INSNS (1), /* neg. */
205 0, /* compare. */
206 COSTS_N_INSNS (1), /* widen. */
207 COSTS_N_INSNS (1), /* narrow. */
208 COSTS_N_INSNS (1), /* toint. */
209 COSTS_N_INSNS (1), /* fromint. */
210 COSTS_N_INSNS (1) /* roundint. */
211 },
212 /* FP DFmode */
213 {
214 COSTS_N_INSNS (10), /* div. */
215 COSTS_N_INSNS (1), /* mult. */
216 COSTS_N_INSNS (2), /* mult_addsub. */
217 COSTS_N_INSNS (2), /* fma. */
218 COSTS_N_INSNS (1), /* addsub. */
219 0, /* fpconst. */
220 COSTS_N_INSNS (1), /* neg. */
221 0, /* compare. */
222 COSTS_N_INSNS (1), /* widen. */
223 COSTS_N_INSNS (1), /* narrow. */
224 COSTS_N_INSNS (1), /* toint. */
225 COSTS_N_INSNS (1), /* fromint. */
226 COSTS_N_INSNS (1) /* roundint. */
227 }
228 },
229 /* Vector */
230 {
231 COSTS_N_INSNS (1), /* alu. */
232 COSTS_N_INSNS (4), /* mult. */
233 COSTS_N_INSNS (1), /* movi. */
234 COSTS_N_INSNS (2), /* dup. */
235 COSTS_N_INSNS (2) /* extract. */
236 }
237 };
238
239 const struct cpu_cost_table cortexa57_extra_costs =
240 {
241 /* ALU */
242 {
243 0, /* arith. */
244 0, /* logical. */
245 0, /* shift. */
246 0, /* shift_reg. */
247 COSTS_N_INSNS (1), /* arith_shift. */
248 COSTS_N_INSNS (1), /* arith_shift_reg. */
249 COSTS_N_INSNS (1), /* log_shift. */
250 COSTS_N_INSNS (1), /* log_shift_reg. */
251 0, /* extend. */
252 COSTS_N_INSNS (1), /* extend_arith. */
253 COSTS_N_INSNS (1), /* bfi. */
254 0, /* bfx. */
255 0, /* clz. */
256 0, /* rev. */
257 0, /* non_exec. */
258 true /* non_exec_costs_exec. */
259 },
260 {
261 /* MULT SImode */
262 {
263 COSTS_N_INSNS (2), /* simple. */
264 COSTS_N_INSNS (3), /* flag_setting. */
265 COSTS_N_INSNS (2), /* extend. */
266 COSTS_N_INSNS (2), /* add. */
267 COSTS_N_INSNS (2), /* extend_add. */
268 COSTS_N_INSNS (18) /* idiv. */
269 },
270 /* MULT DImode */
271 {
272 COSTS_N_INSNS (4), /* simple. */
273 0, /* flag_setting (N/A). */
274 COSTS_N_INSNS (2), /* extend. */
275 COSTS_N_INSNS (4), /* add. */
276 COSTS_N_INSNS (2), /* extend_add. */
277 COSTS_N_INSNS (34) /* idiv. */
278 }
279 },
280 /* LD/ST */
281 {
282 COSTS_N_INSNS (3), /* load. */
283 COSTS_N_INSNS (3), /* load_sign_extend. */
284 COSTS_N_INSNS (3), /* ldrd. */
285 COSTS_N_INSNS (2), /* ldm_1st. */
286 1, /* ldm_regs_per_insn_1st. */
287 2, /* ldm_regs_per_insn_subsequent. */
288 COSTS_N_INSNS (4), /* loadf. */
289 COSTS_N_INSNS (4), /* loadd. */
290 COSTS_N_INSNS (5), /* load_unaligned. */
291 0, /* store. */
292 0, /* strd. */
293 0, /* stm_1st. */
294 1, /* stm_regs_per_insn_1st. */
295 2, /* stm_regs_per_insn_subsequent. */
296 0, /* storef. */
297 0, /* stored. */
298 COSTS_N_INSNS (1), /* store_unaligned. */
299 COSTS_N_INSNS (1), /* loadv. */
300 COSTS_N_INSNS (1) /* storev. */
301 },
302 {
303 /* FP SFmode */
304 {
305 COSTS_N_INSNS (6), /* div. */
306 COSTS_N_INSNS (1), /* mult. */
307 COSTS_N_INSNS (2), /* mult_addsub. */
308 COSTS_N_INSNS (2), /* fma. */
309 COSTS_N_INSNS (1), /* addsub. */
310 0, /* fpconst. */
311 0, /* neg. */
312 0, /* compare. */
313 COSTS_N_INSNS (1), /* widen. */
314 COSTS_N_INSNS (1), /* narrow. */
315 COSTS_N_INSNS (1), /* toint. */
316 COSTS_N_INSNS (1), /* fromint. */
317 COSTS_N_INSNS (1) /* roundint. */
318 },
319 /* FP DFmode */
320 {
321 COSTS_N_INSNS (11), /* div. */
322 COSTS_N_INSNS (1), /* mult. */
323 COSTS_N_INSNS (2), /* mult_addsub. */
324 COSTS_N_INSNS (2), /* fma. */
325 COSTS_N_INSNS (1), /* addsub. */
326 0, /* fpconst. */
327 0, /* neg. */
328 0, /* compare. */
329 COSTS_N_INSNS (1), /* widen. */
330 COSTS_N_INSNS (1), /* narrow. */
331 COSTS_N_INSNS (1), /* toint. */
332 COSTS_N_INSNS (1), /* fromint. */
333 COSTS_N_INSNS (1) /* roundint. */
334 }
335 },
336 /* Vector */
337 {
338 COSTS_N_INSNS (1), /* alu. */
339 COSTS_N_INSNS (4), /* mult. */
340 COSTS_N_INSNS (1), /* movi. */
341 COSTS_N_INSNS (2), /* dup. */
342 COSTS_N_INSNS (2) /* extract. */
343 }
344 };
345
346 const struct cpu_cost_table cortexa76_extra_costs =
347 {
348 /* ALU */
349 {
350 0, /* arith. */
351 0, /* logical. */
352 0, /* shift. */
353 0, /* shift_reg. */
354 COSTS_N_INSNS (1), /* arith_shift. */
355 COSTS_N_INSNS (1), /* arith_shift_reg. */
356 0, /* log_shift. */
357 COSTS_N_INSNS (1), /* log_shift_reg. */
358 0, /* extend. */
359 COSTS_N_INSNS (1), /* extend_arith. */
360 COSTS_N_INSNS (1), /* bfi. */
361 0, /* bfx. */
362 0, /* clz. */
363 0, /* rev. */
364 0, /* non_exec. */
365 true /* non_exec_costs_exec. */
366 },
367 {
368 /* MULT SImode */
369 {
370 COSTS_N_INSNS (1), /* simple. */
371 COSTS_N_INSNS (2), /* flag_setting. */
372 COSTS_N_INSNS (1), /* extend. */
373 COSTS_N_INSNS (1), /* add. */
374 COSTS_N_INSNS (1), /* extend_add. */
375 COSTS_N_INSNS (6) /* idiv. */
376 },
377 /* MULT DImode */
378 {
379 COSTS_N_INSNS (3), /* simple. */
380 0, /* flag_setting (N/A). */
381 COSTS_N_INSNS (1), /* extend. */
382 COSTS_N_INSNS (3), /* add. */
383 COSTS_N_INSNS (1), /* extend_add. */
384 COSTS_N_INSNS (10) /* idiv. */
385 }
386 },
387 /* LD/ST */
388 {
389 COSTS_N_INSNS (3), /* load. */
390 COSTS_N_INSNS (3), /* load_sign_extend. */
391 COSTS_N_INSNS (3), /* ldrd. */
392 COSTS_N_INSNS (2), /* ldm_1st. */
393 1, /* ldm_regs_per_insn_1st. */
394 2, /* ldm_regs_per_insn_subsequent. */
395 COSTS_N_INSNS (4), /* loadf. */
396 COSTS_N_INSNS (4), /* loadd. */
397 COSTS_N_INSNS (5), /* load_unaligned. */
398 0, /* store. */
399 0, /* strd. */
400 0, /* stm_1st. */
401 1, /* stm_regs_per_insn_1st. */
402 2, /* stm_regs_per_insn_subsequent. */
403 0, /* storef. */
404 0, /* stored. */
405 COSTS_N_INSNS (1), /* store_unaligned. */
406 COSTS_N_INSNS (1), /* loadv. */
407 COSTS_N_INSNS (1) /* storev. */
408 },
409 {
410 /* FP SFmode */
411 {
412 COSTS_N_INSNS (10), /* div. */
413 COSTS_N_INSNS (2), /* mult. */
414 COSTS_N_INSNS (3), /* mult_addsub. */
415 COSTS_N_INSNS (3), /* fma. */
416 COSTS_N_INSNS (1), /* addsub. */
417 0, /* fpconst. */
418 0, /* neg. */
419 0, /* compare. */
420 COSTS_N_INSNS (1), /* widen. */
421 COSTS_N_INSNS (1), /* narrow. */
422 COSTS_N_INSNS (1), /* toint. */
423 COSTS_N_INSNS (1), /* fromint. */
424 COSTS_N_INSNS (1) /* roundint. */
425 },
426 /* FP DFmode */
427 {
428 COSTS_N_INSNS (15), /* div. */
429 COSTS_N_INSNS (2), /* mult. */
430 COSTS_N_INSNS (3), /* mult_addsub. */
431 COSTS_N_INSNS (3), /* fma. */
432 COSTS_N_INSNS (1), /* addsub. */
433 0, /* fpconst. */
434 0, /* neg. */
435 0, /* compare. */
436 COSTS_N_INSNS (1), /* widen. */
437 COSTS_N_INSNS (1), /* narrow. */
438 COSTS_N_INSNS (1), /* toint. */
439 COSTS_N_INSNS (1), /* fromint. */
440 COSTS_N_INSNS (1) /* roundint. */
441 }
442 },
443 /* Vector */
444 {
445 COSTS_N_INSNS (1), /* alu. */
446 COSTS_N_INSNS (4), /* mult. */
447 COSTS_N_INSNS (1), /* movi. */
448 COSTS_N_INSNS (2), /* dup. */
449 COSTS_N_INSNS (2) /* extract. */
450 }
451 };
452
453 const struct cpu_cost_table exynosm1_extra_costs =
454 {
455 /* ALU */
456 {
457 0, /* arith. */
458 0, /* logical. */
459 0, /* shift. */
460 COSTS_N_INSNS (0), /* shift_reg. */
461 0, /* arith_shift. */
462 COSTS_N_INSNS (1), /* arith_shift_reg. */
463 0, /* log_shift. */
464 COSTS_N_INSNS (1), /* log_shift_reg. */
465 0, /* extend. */
466 COSTS_N_INSNS (1), /* extend_arith. */
467 0, /* bfi. */
468 0, /* bfx. */
469 0, /* clz. */
470 0, /* rev. */
471 0, /* non_exec. */
472 true /* non_exec_costs_exec. */
473 },
474 {
475 /* MULT SImode */
476 {
477 COSTS_N_INSNS (2), /* simple. */
478 COSTS_N_INSNS (3), /* flag_setting. */
479 COSTS_N_INSNS (4), /* extend. */
480 COSTS_N_INSNS (2), /* add. */
481 COSTS_N_INSNS (4), /* extend_add. */
482 COSTS_N_INSNS (19) /* idiv. */
483 },
484 /* MULT DImode */
485 {
486 COSTS_N_INSNS (3), /* simple. */
487 0, /* flag_setting (N/A). */
488 COSTS_N_INSNS (4), /* extend. */
489 COSTS_N_INSNS (3), /* add. */
490 COSTS_N_INSNS (4), /* extend_add. */
491 COSTS_N_INSNS (35) /* idiv. */
492 }
493 },
494 /* LD/ST */
495 {
496 COSTS_N_INSNS (3), /* load. */
497 COSTS_N_INSNS (4), /* load_sign_extend. */
498 COSTS_N_INSNS (3), /* ldrd. */
499 COSTS_N_INSNS (2), /* ldm_1st. */
500 1, /* ldm_regs_per_insn_1st. */
501 2, /* ldm_regs_per_insn_subsequent. */
502 COSTS_N_INSNS (4), /* loadf. */
503 COSTS_N_INSNS (4), /* loadd. */
504 COSTS_N_INSNS (4), /* load_unaligned. */
505 0, /* store. */
506 0, /* strd. */
507 0, /* stm_1st. */
508 1, /* stm_regs_per_insn_1st. */
509 2, /* stm_regs_per_insn_subsequent. */
510 0, /* storef. */
511 0, /* stored. */
512 0, /* store_unaligned. */
513 COSTS_N_INSNS (1), /* loadv. */
514 COSTS_N_INSNS (1) /* storev. */
515 },
516 {
517 /* FP SFmode */
518 {
519 COSTS_N_INSNS (21), /* div. */
520 COSTS_N_INSNS (3), /* mult. */
521 COSTS_N_INSNS (4), /* mult_addsub. */
522 COSTS_N_INSNS (4), /* fma. */
523 COSTS_N_INSNS (2), /* addsub. */
524 COSTS_N_INSNS (0), /* fpconst. */
525 COSTS_N_INSNS (0), /* neg. */
526 COSTS_N_INSNS (3), /* compare. */
527 COSTS_N_INSNS (2), /* widen. */
528 COSTS_N_INSNS (2), /* narrow. */
529 COSTS_N_INSNS (12), /* toint. */
530 COSTS_N_INSNS (7), /* fromint. */
531 COSTS_N_INSNS (2) /* roundint. */
532 },
533 /* FP DFmode */
534 {
535 COSTS_N_INSNS (34), /* div. */
536 COSTS_N_INSNS (3), /* mult. */
537 COSTS_N_INSNS (4), /* mult_addsub. */
538 COSTS_N_INSNS (4), /* fma. */
539 COSTS_N_INSNS (2), /* addsub. */
540 COSTS_N_INSNS (0), /* fpconst. */
541 COSTS_N_INSNS (0), /* neg. */
542 COSTS_N_INSNS (3), /* compare. */
543 COSTS_N_INSNS (2), /* widen. */
544 COSTS_N_INSNS (2), /* narrow. */
545 COSTS_N_INSNS (12), /* toint. */
546 COSTS_N_INSNS (7), /* fromint. */
547 COSTS_N_INSNS (2) /* roundint. */
548 }
549 },
550 /* Vector */
551 {
552 COSTS_N_INSNS (0), /* alu. */
553 COSTS_N_INSNS (4), /* mult. */
554 COSTS_N_INSNS (1), /* movi. */
555 COSTS_N_INSNS (2), /* dup. */
556 COSTS_N_INSNS (2) /* extract. */
557 }
558 };
559
560 const struct cpu_cost_table xgene1_extra_costs =
561 {
562 /* ALU */
563 {
564 0, /* arith. */
565 0, /* logical. */
566 COSTS_N_INSNS (1), /* shift. */
567 COSTS_N_INSNS (1), /* shift_reg. */
568 COSTS_N_INSNS (2), /* arith_shift. */
569 COSTS_N_INSNS (2), /* arith_shift_reg. */
570 COSTS_N_INSNS (2), /* log_shift. */
571 COSTS_N_INSNS (2), /* log_shift_reg. */
572 0, /* extend. */
573 COSTS_N_INSNS (1), /* extend_arithm. */
574 0, /* bfi. */
575 0, /* bfx. */
576 0, /* clz. */
577 0, /* rev. */
578 0, /* non_exec. */
579 true /* non_exec_costs_exec. */
580 },
581 {
582 /* MULT SImode */
583 {
584 COSTS_N_INSNS (3), /* simple. */
585 COSTS_N_INSNS (3), /* flag_setting. */
586 COSTS_N_INSNS (4), /* extend. */
587 COSTS_N_INSNS (4), /* add. */
588 COSTS_N_INSNS (4), /* extend_add. */
589 COSTS_N_INSNS (20) /* idiv. */
590 },
591 /* MULT DImode */
592 {
593 COSTS_N_INSNS (4), /* simple. */
594 COSTS_N_INSNS (4), /* flag_setting (N/A). */
595 COSTS_N_INSNS (5), /* extend. */
596 COSTS_N_INSNS (5), /* add. */
597 COSTS_N_INSNS (5), /* extend_add. */
598 COSTS_N_INSNS (21) /* idiv. */
599 }
600 },
601 /* LD/ST */
602 {
603 COSTS_N_INSNS (4), /* load. */
604 COSTS_N_INSNS (5), /* load_sign_extend. */
605 COSTS_N_INSNS (4), /* ldrd. */
606 COSTS_N_INSNS (5), /* ldm_1st. */
607 1, /* ldm_regs_per_insn_1st. */
608 1, /* ldm_regs_per_insn_subsequent. */
609 COSTS_N_INSNS (9), /* loadf. */
610 COSTS_N_INSNS (9), /* loadd. */
611 0, /* load_unaligned. */
612 0, /* store. */
613 0, /* strd. */
614 0, /* stm_1st. */
615 1, /* stm_regs_per_insn_1st. */
616 1, /* stm_regs_per_insn_subsequent. */
617 COSTS_N_INSNS (3), /* storef. */
618 COSTS_N_INSNS (3), /* stored. */
619 0, /* store_unaligned. */
620 COSTS_N_INSNS (9), /* loadv. */
621 COSTS_N_INSNS (3) /* storev. */
622 },
623 {
624 /* FP SFmode */
625 {
626 COSTS_N_INSNS (22), /* div. */
627 COSTS_N_INSNS (4), /* mult. */
628 COSTS_N_INSNS (4), /* mult_addsub. */
629 COSTS_N_INSNS (4), /* fma. */
630 COSTS_N_INSNS (4), /* addsub. */
631 COSTS_N_INSNS (1), /* fpconst. */
632 COSTS_N_INSNS (4), /* neg. */
633 COSTS_N_INSNS (9), /* compare. */
634 COSTS_N_INSNS (4), /* widen. */
635 COSTS_N_INSNS (4), /* narrow. */
636 COSTS_N_INSNS (4), /* toint. */
637 COSTS_N_INSNS (4), /* fromint. */
638 COSTS_N_INSNS (4) /* roundint. */
639 },
640 /* FP DFmode */
641 {
642 COSTS_N_INSNS (27), /* div. */
643 COSTS_N_INSNS (4), /* mult. */
644 COSTS_N_INSNS (4), /* mult_addsub. */
645 COSTS_N_INSNS (4), /* fma. */
646 COSTS_N_INSNS (4), /* addsub. */
647 COSTS_N_INSNS (1), /* fpconst. */
648 COSTS_N_INSNS (4), /* neg. */
649 COSTS_N_INSNS (9), /* compare. */
650 COSTS_N_INSNS (4), /* widen. */
651 COSTS_N_INSNS (4), /* narrow. */
652 COSTS_N_INSNS (4), /* toint. */
653 COSTS_N_INSNS (4), /* fromint. */
654 COSTS_N_INSNS (4) /* roundint. */
655 }
656 },
657 /* Vector */
658 {
659 COSTS_N_INSNS (2), /* alu. */
660 COSTS_N_INSNS (8), /* mult. */
661 COSTS_N_INSNS (1), /* movi. */
662 COSTS_N_INSNS (2), /* dup. */
663 COSTS_N_INSNS (2) /* extract. */
664 }
665 };
666
667 #endif /* GCC_AARCH_COST_TABLES_H */