1 /* RTX cost tables shared between arm and aarch64. 2 3 Copyright (C) 2013-2022 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 */ 668