1 /* -*- buffer-read-only: t -*- 2 Generated automatically by parsecpu.awk from arm-cpus.in. 3 Do not edit. 4 5 Copyright (C) 2011-2020 Free Software Foundation, Inc. 6 7 This file is part of GCC. 8 9 GCC is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as 11 published by the Free Software Foundation; either version 3, 12 or (at your option) any later version. 13 14 GCC is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public 20 License along with GCC; see the file COPYING3. If not see 21 <http://www.gnu.org/licenses/>. */ 22 23 enum isa_feature { 24 isa_nobit = 0, 25 isa_bit_fp16fml, 26 isa_bit_mve, 27 isa_bit_cmse, 28 isa_bit_quirk_armv6kz, 29 isa_bit_dotprod, 30 isa_bit_crc32, 31 isa_bit_xscale, 32 isa_bit_vfpv2, 33 isa_bit_vfpv3, 34 isa_bit_vfpv4, 35 isa_bit_lpae, 36 isa_bit_armv7em, 37 isa_bit_fp16, 38 isa_bit_adiv, 39 isa_bit_fp_d32, 40 isa_bit_be8, 41 isa_bit_fp16conv, 42 isa_bit_thumb2, 43 isa_bit_crypto, 44 isa_bit_mp, 45 isa_bit_sec, 46 isa_bit_sb, 47 isa_bit_bf16, 48 isa_bit_predres, 49 isa_bit_armv4, 50 isa_bit_quirk_cm3_ldrd, 51 isa_bit_smallmul, 52 isa_bit_armv5t, 53 isa_bit_armv8_1m_main, 54 isa_bit_armv6, 55 isa_bit_thumb, 56 isa_bit_quirk_no_asmcpu, 57 isa_bit_armv7, 58 isa_bit_armv8, 59 isa_bit_i8mm, 60 isa_bit_fp_dbl, 61 isa_bit_armv5te, 62 isa_bit_fpv5, 63 isa_bit_iwmmxt2, 64 isa_bit_notm, 65 isa_bit_cdecp0, 66 isa_bit_cdecp1, 67 isa_bit_cdecp2, 68 isa_bit_cdecp3, 69 isa_bit_iwmmxt, 70 isa_bit_cdecp4, 71 isa_bit_cdecp5, 72 isa_bit_cdecp6, 73 isa_bit_cdecp7, 74 isa_bit_mve_float, 75 isa_bit_armv8_1, 76 isa_bit_armv8_2, 77 isa_bit_armv8_3, 78 isa_bit_tdiv, 79 isa_bit_armv8_4, 80 isa_bit_armv8_5, 81 isa_bit_armv8_6, 82 isa_bit_neon, 83 isa_bit_quirk_no_volatile_ce, 84 isa_bit_armv6k, 85 isa_bit_vfp_base, 86 isa_num_bits 87 }; 88 89 #define ISA_ARMv8_6a \ 90 isa_bit_tdiv, \ 91 isa_bit_notm, \ 92 isa_bit_mp, \ 93 isa_bit_armv5t, \ 94 isa_bit_thumb2, \ 95 isa_bit_crc32, \ 96 isa_bit_armv6k, \ 97 isa_bit_armv5te, \ 98 isa_bit_sec, \ 99 isa_bit_be8, \ 100 isa_bit_sb, \ 101 isa_bit_armv4, \ 102 isa_bit_armv6, \ 103 isa_bit_armv7, \ 104 isa_bit_armv8, \ 105 isa_bit_adiv, \ 106 isa_bit_armv8_1, \ 107 isa_bit_armv8_2, \ 108 isa_bit_armv8_3, \ 109 isa_bit_armv8_4, \ 110 isa_bit_armv8_5, \ 111 isa_bit_armv8_6, \ 112 isa_bit_lpae, \ 113 isa_bit_thumb, \ 114 isa_bit_predres 115 116 #define ISA_ARMv8r \ 117 isa_bit_adiv, \ 118 isa_bit_mp, \ 119 isa_bit_lpae, \ 120 isa_bit_armv5te, \ 121 isa_bit_tdiv, \ 122 isa_bit_thumb2, \ 123 isa_bit_notm, \ 124 isa_bit_armv5t, \ 125 isa_bit_armv4, \ 126 isa_bit_armv6, \ 127 isa_bit_armv7, \ 128 isa_bit_armv8, \ 129 isa_bit_thumb, \ 130 isa_bit_armv6k, \ 131 isa_bit_sec, \ 132 isa_bit_be8 133 134 #define ISA_ARMv6z \ 135 isa_bit_armv4, \ 136 isa_bit_armv6, \ 137 isa_bit_be8, \ 138 isa_bit_thumb, \ 139 isa_bit_armv5te, \ 140 isa_bit_armv5t, \ 141 isa_bit_notm 142 143 #define ISA_DOTPROD \ 144 isa_bit_dotprod, \ 145 isa_bit_neon, \ 146 isa_bit_fp_dbl, \ 147 isa_bit_fp_d32 148 149 #define ISA_ALL_CRYPTO \ 150 isa_bit_crypto 151 152 #define ISA_ALL_FPU_EXTERNAL \ 153 isa_bit_fp16, \ 154 isa_bit_bf16 155 156 #define ISA_ALL_SIMD \ 157 isa_bit_fp_d32, \ 158 isa_bit_fp16fml, \ 159 isa_bit_dotprod, \ 160 isa_bit_neon, \ 161 isa_bit_crypto, \ 162 isa_bit_i8mm 163 164 #define ISA_ALL_QUIRKS \ 165 isa_bit_quirk_no_asmcpu, \ 166 isa_bit_xscale, \ 167 isa_bit_quirk_cm3_ldrd, \ 168 isa_bit_quirk_no_volatile_ce, \ 169 isa_bit_quirk_armv6kz 170 171 #define ISA_CRYPTO \ 172 isa_bit_neon, \ 173 isa_bit_fp_dbl, \ 174 isa_bit_fp_d32, \ 175 isa_bit_crypto 176 177 #define ISA_ARMv8m_base \ 178 isa_bit_be8, \ 179 isa_bit_thumb, \ 180 isa_bit_tdiv, \ 181 isa_bit_armv5t, \ 182 isa_bit_armv5te, \ 183 isa_bit_cmse, \ 184 isa_bit_armv4, \ 185 isa_bit_armv6, \ 186 isa_bit_armv8 187 188 #define ISA_ARMv6zk \ 189 isa_bit_armv4, \ 190 isa_bit_armv6, \ 191 isa_bit_thumb, \ 192 isa_bit_notm, \ 193 isa_bit_armv5t, \ 194 isa_bit_armv5te, \ 195 isa_bit_armv6k, \ 196 isa_bit_be8 197 198 #define ISA_VFPv2 \ 199 isa_bit_vfpv2 200 201 #define ISA_VFPv3 \ 202 isa_bit_vfpv2, \ 203 isa_bit_vfpv3 204 205 #define ISA_VFPv4 \ 206 isa_bit_fp16conv, \ 207 isa_bit_vfpv2, \ 208 isa_bit_vfpv3, \ 209 isa_bit_vfpv4 210 211 #define ISA_FP_D32 \ 212 isa_bit_fp_dbl, \ 213 isa_bit_fp_d32 214 215 #define ISA_ARMv7ve \ 216 isa_bit_armv5te, \ 217 isa_bit_be8, \ 218 isa_bit_thumb2, \ 219 isa_bit_armv5t, \ 220 isa_bit_adiv, \ 221 isa_bit_lpae, \ 222 isa_bit_tdiv, \ 223 isa_bit_armv6k, \ 224 isa_bit_notm, \ 225 isa_bit_mp, \ 226 isa_bit_armv4, \ 227 isa_bit_armv6, \ 228 isa_bit_armv7, \ 229 isa_bit_thumb, \ 230 isa_bit_sec 231 232 #define ISA_ARMv7a \ 233 isa_bit_armv5te, \ 234 isa_bit_armv4, \ 235 isa_bit_armv6, \ 236 isa_bit_armv7, \ 237 isa_bit_thumb, \ 238 isa_bit_be8, \ 239 isa_bit_thumb2, \ 240 isa_bit_armv5t, \ 241 isa_bit_notm, \ 242 isa_bit_armv6k 243 244 #define ISA_ALL_SIMD_INTERNAL \ 245 isa_bit_fp_d32, \ 246 isa_bit_crypto, \ 247 isa_bit_neon 248 249 #define ISA_ARMv8_1a \ 250 isa_bit_crc32, \ 251 isa_bit_tdiv, \ 252 isa_bit_armv8_1, \ 253 isa_bit_armv5t, \ 254 isa_bit_notm, \ 255 isa_bit_thumb2, \ 256 isa_bit_armv4, \ 257 isa_bit_armv6, \ 258 isa_bit_armv7, \ 259 isa_bit_armv8, \ 260 isa_bit_armv6k, \ 261 isa_bit_thumb, \ 262 isa_bit_armv5te, \ 263 isa_bit_sec, \ 264 isa_bit_be8, \ 265 isa_bit_adiv, \ 266 isa_bit_lpae, \ 267 isa_bit_mp 268 269 #define ISA_ARMv7em \ 270 isa_bit_armv5te, \ 271 isa_bit_be8, \ 272 isa_bit_armv4, \ 273 isa_bit_armv6, \ 274 isa_bit_armv7, \ 275 isa_bit_thumb2, \ 276 isa_bit_armv5t, \ 277 isa_bit_thumb, \ 278 isa_bit_armv7em, \ 279 isa_bit_tdiv 280 281 #define ISA_FP_DBL \ 282 isa_bit_fp_dbl 283 284 #define ISA_ARMv8_3a \ 285 isa_bit_armv5te, \ 286 isa_bit_thumb2, \ 287 isa_bit_armv5t, \ 288 isa_bit_sec, \ 289 isa_bit_mp, \ 290 isa_bit_be8, \ 291 isa_bit_crc32, \ 292 isa_bit_armv6k, \ 293 isa_bit_adiv, \ 294 isa_bit_lpae, \ 295 isa_bit_armv8_1, \ 296 isa_bit_armv8_2, \ 297 isa_bit_armv8_3, \ 298 isa_bit_tdiv, \ 299 isa_bit_notm, \ 300 isa_bit_armv4, \ 301 isa_bit_armv6, \ 302 isa_bit_armv7, \ 303 isa_bit_armv8, \ 304 isa_bit_thumb 305 306 #define ISA_ARMv5t \ 307 isa_bit_thumb, \ 308 isa_bit_notm, \ 309 isa_bit_armv5t, \ 310 isa_bit_armv4 311 312 #define ISA_ARMv7m \ 313 isa_bit_be8, \ 314 isa_bit_armv5te, \ 315 isa_bit_tdiv, \ 316 isa_bit_armv4, \ 317 isa_bit_armv6, \ 318 isa_bit_armv7, \ 319 isa_bit_thumb2, \ 320 isa_bit_armv5t, \ 321 isa_bit_thumb 322 323 #define ISA_ARMv4 \ 324 isa_bit_notm, \ 325 isa_bit_armv4 326 327 #define ISA_ARMv6kz \ 328 isa_bit_be8, \ 329 isa_bit_armv5te, \ 330 isa_bit_armv4, \ 331 isa_bit_armv6, \ 332 isa_bit_armv5t, \ 333 isa_bit_quirk_armv6kz, \ 334 isa_bit_notm, \ 335 isa_bit_thumb, \ 336 isa_bit_armv6k 337 338 #define ISA_ARMv6 \ 339 isa_bit_armv5t, \ 340 isa_bit_armv4, \ 341 isa_bit_armv6, \ 342 isa_bit_thumb, \ 343 isa_bit_armv5te, \ 344 isa_bit_notm, \ 345 isa_bit_be8 346 347 #define ISA_ALL_FP \ 348 isa_bit_fp_dbl, \ 349 isa_bit_fp16conv, \ 350 isa_bit_fp16, \ 351 isa_bit_fp_d32, \ 352 isa_bit_bf16, \ 353 isa_bit_fpv5, \ 354 isa_bit_neon, \ 355 isa_bit_fp16fml, \ 356 isa_bit_crypto, \ 357 isa_bit_i8mm, \ 358 isa_bit_dotprod, \ 359 isa_bit_vfpv2, \ 360 isa_bit_vfpv3, \ 361 isa_bit_vfpv4 362 363 #define ISA_ARMv7 \ 364 isa_bit_armv4, \ 365 isa_bit_armv6, \ 366 isa_bit_armv7, \ 367 isa_bit_thumb, \ 368 isa_bit_be8, \ 369 isa_bit_armv5te, \ 370 isa_bit_thumb2, \ 371 isa_bit_armv5t 372 373 #define ISA_ARMv8_5a \ 374 isa_bit_adiv, \ 375 isa_bit_armv4, \ 376 isa_bit_armv6, \ 377 isa_bit_armv7, \ 378 isa_bit_armv8, \ 379 isa_bit_lpae, \ 380 isa_bit_armv8_1, \ 381 isa_bit_armv8_2, \ 382 isa_bit_armv8_3, \ 383 isa_bit_armv8_4, \ 384 isa_bit_armv8_5, \ 385 isa_bit_thumb2, \ 386 isa_bit_armv5t, \ 387 isa_bit_thumb, \ 388 isa_bit_predres, \ 389 isa_bit_tdiv, \ 390 isa_bit_notm, \ 391 isa_bit_armv6k, \ 392 isa_bit_mp, \ 393 isa_bit_armv5te, \ 394 isa_bit_crc32, \ 395 isa_bit_sec, \ 396 isa_bit_be8, \ 397 isa_bit_sb 398 399 #define ISA_ARMv7r \ 400 isa_bit_be8, \ 401 isa_bit_thumb2, \ 402 isa_bit_armv5t, \ 403 isa_bit_tdiv, \ 404 isa_bit_armv5te, \ 405 isa_bit_notm, \ 406 isa_bit_armv6k, \ 407 isa_bit_armv4, \ 408 isa_bit_armv6, \ 409 isa_bit_armv7, \ 410 isa_bit_thumb 411 412 #define ISA_ALL_FPU_INTERNAL \ 413 isa_bit_fp16conv, \ 414 isa_bit_crypto, \ 415 isa_bit_vfpv2, \ 416 isa_bit_vfpv3, \ 417 isa_bit_vfpv4, \ 418 isa_bit_fpv5, \ 419 isa_bit_neon, \ 420 isa_bit_fp_dbl, \ 421 isa_bit_fp_d32 422 423 #define ISA_FPv5 \ 424 isa_bit_fpv5, \ 425 isa_bit_fp16conv, \ 426 isa_bit_vfpv2, \ 427 isa_bit_vfpv3, \ 428 isa_bit_vfpv4 429 430 #define ISA_ARMv6t2 \ 431 isa_bit_armv5te, \ 432 isa_bit_thumb2, \ 433 isa_bit_armv5t, \ 434 isa_bit_armv4, \ 435 isa_bit_armv6, \ 436 isa_bit_notm, \ 437 isa_bit_thumb, \ 438 isa_bit_be8 439 440 #define ISA_ARMv8m_main \ 441 isa_bit_tdiv, \ 442 isa_bit_armv4, \ 443 isa_bit_armv6, \ 444 isa_bit_armv7, \ 445 isa_bit_armv8, \ 446 isa_bit_be8, \ 447 isa_bit_armv5t, \ 448 isa_bit_thumb2, \ 449 isa_bit_thumb, \ 450 isa_bit_cmse, \ 451 isa_bit_armv5te 452 453 #define ISA_ARMv8_1m_main \ 454 isa_bit_be8, \ 455 isa_bit_armv5te, \ 456 isa_bit_cmse, \ 457 isa_bit_armv8_1m_main, \ 458 isa_bit_armv4, \ 459 isa_bit_armv6, \ 460 isa_bit_armv7, \ 461 isa_bit_armv8, \ 462 isa_bit_thumb2, \ 463 isa_bit_armv5t, \ 464 isa_bit_thumb, \ 465 isa_bit_tdiv 466 467 #define ISA_NEON \ 468 isa_bit_fp_d32, \ 469 isa_bit_neon, \ 470 isa_bit_fp_dbl 471 472 #define ISA_ARMv5te \ 473 isa_bit_armv4, \ 474 isa_bit_thumb, \ 475 isa_bit_notm, \ 476 isa_bit_armv5te, \ 477 isa_bit_armv5t 478 479 #define ISA_FP_ARMv8 \ 480 isa_bit_fp_dbl, \ 481 isa_bit_fp_d32, \ 482 isa_bit_vfpv2, \ 483 isa_bit_vfpv3, \ 484 isa_bit_vfpv4, \ 485 isa_bit_fp16conv, \ 486 isa_bit_fpv5 487 488 #define ISA_ARMv8a \ 489 isa_bit_armv5te, \ 490 isa_bit_thumb, \ 491 isa_bit_sec, \ 492 isa_bit_adiv, \ 493 isa_bit_be8, \ 494 isa_bit_lpae, \ 495 isa_bit_tdiv, \ 496 isa_bit_notm, \ 497 isa_bit_thumb2, \ 498 isa_bit_armv5t, \ 499 isa_bit_armv4, \ 500 isa_bit_armv6, \ 501 isa_bit_armv7, \ 502 isa_bit_armv8, \ 503 isa_bit_mp, \ 504 isa_bit_armv6k 505 506 #define ISA_MVE \ 507 isa_bit_armv7em, \ 508 isa_bit_mve 509 510 #define ISA_ALL_SIMD_EXTERNAL \ 511 isa_bit_fp16fml, \ 512 isa_bit_dotprod, \ 513 isa_bit_i8mm 514 515 #define ISA_ARMv8_2a \ 516 isa_bit_armv5t, \ 517 isa_bit_thumb, \ 518 isa_bit_thumb2, \ 519 isa_bit_armv6k, \ 520 isa_bit_armv5te, \ 521 isa_bit_sec, \ 522 isa_bit_be8, \ 523 isa_bit_mp, \ 524 isa_bit_crc32, \ 525 isa_bit_adiv, \ 526 isa_bit_lpae, \ 527 isa_bit_tdiv, \ 528 isa_bit_armv8_1, \ 529 isa_bit_armv8_2, \ 530 isa_bit_notm, \ 531 isa_bit_armv4, \ 532 isa_bit_armv6, \ 533 isa_bit_armv7, \ 534 isa_bit_armv8 535 536 #define ISA_ARMv6j \ 537 isa_bit_be8, \ 538 isa_bit_armv5te, \ 539 isa_bit_armv4, \ 540 isa_bit_armv6, \ 541 isa_bit_notm, \ 542 isa_bit_thumb, \ 543 isa_bit_armv5t 544 545 #define ISA_ARMv6k \ 546 isa_bit_be8, \ 547 isa_bit_notm, \ 548 isa_bit_armv4, \ 549 isa_bit_armv6, \ 550 isa_bit_armv5t, \ 551 isa_bit_armv5te, \ 552 isa_bit_thumb, \ 553 isa_bit_armv6k 554 555 #define ISA_ARMv4t \ 556 isa_bit_armv4, \ 557 isa_bit_thumb, \ 558 isa_bit_notm 559 560 #define ISA_ARMv6m \ 561 isa_bit_armv4, \ 562 isa_bit_armv6, \ 563 isa_bit_be8, \ 564 isa_bit_thumb, \ 565 isa_bit_armv5te, \ 566 isa_bit_armv5t 567 568 #define ISA_IGNORE_FOR_MULTILIB \ 569 isa_bit_cdecp0, \ 570 isa_bit_cdecp1, \ 571 isa_bit_cdecp2, \ 572 isa_bit_cdecp3, \ 573 isa_bit_cdecp4, \ 574 isa_bit_cdecp5, \ 575 isa_bit_cdecp6, \ 576 isa_bit_cdecp7 577 578 #define ISA_MVE_FP \ 579 isa_bit_fp16, \ 580 isa_bit_armv7em, \ 581 isa_bit_mve, \ 582 isa_bit_fpv5, \ 583 isa_bit_vfpv2, \ 584 isa_bit_vfpv3, \ 585 isa_bit_vfpv4, \ 586 isa_bit_fp16conv, \ 587 isa_bit_mve_float 588 589 #define ISA_ARMv5tej \ 590 isa_bit_armv4, \ 591 isa_bit_armv5te, \ 592 isa_bit_thumb, \ 593 isa_bit_notm, \ 594 isa_bit_armv5t 595 596 #define ISA_ARMv8_4a \ 597 isa_bit_sec, \ 598 isa_bit_crc32, \ 599 isa_bit_be8, \ 600 isa_bit_thumb2, \ 601 isa_bit_armv5t, \ 602 isa_bit_adiv, \ 603 isa_bit_lpae, \ 604 isa_bit_armv4, \ 605 isa_bit_armv6, \ 606 isa_bit_armv7, \ 607 isa_bit_armv8, \ 608 isa_bit_tdiv, \ 609 isa_bit_armv8_1, \ 610 isa_bit_armv8_2, \ 611 isa_bit_armv8_3, \ 612 isa_bit_armv8_4, \ 613 isa_bit_armv6k, \ 614 isa_bit_notm, \ 615 isa_bit_thumb, \ 616 isa_bit_mp, \ 617 isa_bit_armv5te 618 619 struct fbit_implication { 620 /* Represents a feature implication, where: 621 ante IMPLIES cons 622 meaning that if ante is enabled then we should 623 also implicitly enable cons. */ 624 enum isa_feature ante; 625 enum isa_feature cons; 626 }; 627 628 static const struct fbit_implication all_implied_fbits[] = 629 { 630 { isa_bit_neon, isa_bit_vfp_base }, 631 { isa_bit_vfpv4, isa_bit_vfp_base }, 632 { isa_bit_fp_d32, isa_bit_vfp_base }, 633 { isa_bit_fp_dbl, isa_bit_vfp_base }, 634 { isa_bit_mve_float, isa_bit_vfp_base }, 635 { isa_bit_mve, isa_bit_vfp_base }, 636 { isa_bit_dotprod, isa_bit_vfp_base }, 637 { isa_bit_crypto, isa_bit_vfp_base }, 638 { isa_bit_fp16, isa_bit_vfp_base }, 639 { isa_bit_armv7em, isa_bit_vfp_base }, 640 { isa_bit_i8mm, isa_bit_vfp_base }, 641 { isa_bit_fp16conv, isa_bit_vfp_base }, 642 { isa_bit_fpv5, isa_bit_vfp_base }, 643 { isa_bit_fp16fml, isa_bit_vfp_base }, 644 { isa_bit_bf16, isa_bit_vfp_base }, 645 { isa_bit_vfpv2, isa_bit_vfp_base }, 646 { isa_bit_vfpv3, isa_bit_vfp_base }, 647 { isa_nobit, isa_nobit } 648 }; 649 650