| author | |
| committer | |
| log | da8b7fb0c01f3b71af99eee6fcff6b1a9d216f13 |
| tree | 2e0c314c3f636e279b19455de39d5fd59db8f17a |
| parent | 662683cafd552404fb704e9d0a8caf1eaaf35af8 |
11 files changed, 2156 insertions(+), 584 deletions(-)
lib/std/Target/aarch64.zig+701-379| ... | ... | @@ -5,15 +5,7 @@ const CpuFeature = std.Target.Cpu.Feature; |
| 5 | 5 | const CpuModel = std.Target.Cpu.Model; |
| 6 | 6 | |
| 7 | 7 | pub const Feature = enum { |
| 8 | a510, | |
| 9 | a520, | |
| 10 | a65, | |
| 11 | a710, | |
| 12 | a720, | |
| 13 | a76, | |
| 14 | a78, | |
| 15 | a78c, | |
| 16 | addr_lsl_fast, | |
| 8 | addr_lsl_slow_14, | |
| 17 | 9 | aes, |
| 18 | 10 | aggressive_fma, |
| 19 | 11 | alternate_sextload_cvt_f32_pattern, |
| ... | ... | @@ -46,7 +38,6 @@ pub const Feature = enum { |
| 46 | 38 | cmp_bcc_fusion, |
| 47 | 39 | complxnum, |
| 48 | 40 | contextidr_el2, |
| 49 | cortex_r82, | |
| 50 | 41 | cpa, |
| 51 | 42 | crc, |
| 52 | 43 | crypto, |
| ... | ... | @@ -77,7 +68,7 @@ pub const Feature = enum { |
| 77 | 68 | fp8dot4, |
| 78 | 69 | fp8fma, |
| 79 | 70 | fp_armv8, |
| 80 | fpmr, | |
| 71 | fpac, | |
| 81 | 72 | fptoint, |
| 82 | 73 | fullfp16, |
| 83 | 74 | fuse_address, |
| ... | ... | @@ -131,6 +122,7 @@ pub const Feature = enum { |
| 131 | 122 | rcpc3, |
| 132 | 123 | rcpc_immo, |
| 133 | 124 | rdm, |
| 125 | reserve_lr_for_ra, | |
| 134 | 126 | reserve_x1, |
| 135 | 127 | reserve_x10, |
| 136 | 128 | reserve_x11, |
| ... | ... | @@ -150,7 +142,6 @@ pub const Feature = enum { |
| 150 | 142 | reserve_x27, |
| 151 | 143 | reserve_x28, |
| 152 | 144 | reserve_x3, |
| 153 | reserve_x30, | |
| 154 | 145 | reserve_x4, |
| 155 | 146 | reserve_x5, |
| 156 | 147 | reserve_x6, |
| ... | ... | @@ -168,6 +159,7 @@ pub const Feature = enum { |
| 168 | 159 | sme, |
| 169 | 160 | sme2, |
| 170 | 161 | sme2p1, |
| 162 | sme_b16b16, | |
| 171 | 163 | sme_f16f16, |
| 172 | 164 | sme_f64f64, |
| 173 | 165 | sme_f8f16, |
| ... | ... | @@ -193,6 +185,7 @@ pub const Feature = enum { |
| 193 | 185 | sve2_sha3, |
| 194 | 186 | sve2_sm4, |
| 195 | 187 | sve2p1, |
| 188 | sve_b16b16, | |
| 196 | 189 | tagged_globals, |
| 197 | 190 | the, |
| 198 | 191 | tlb_rmi, |
| ... | ... | @@ -206,6 +199,7 @@ pub const Feature = enum { |
| 206 | 199 | trbe, |
| 207 | 200 | uaops, |
| 208 | 201 | use_experimental_zeroing_pseudos, |
| 202 | use_fixed_over_scalable_if_equal_cost, | |
| 209 | 203 | use_postra_scheduler, |
| 210 | 204 | use_reciprocal_square_root, |
| 211 | 205 | use_scalar_inc_vl, |
| ... | ... | @@ -245,112 +239,14 @@ pub const all_features = blk: { |
| 245 | 239 | const len = @typeInfo(Feature).@"enum".fields.len; |
| 246 | 240 | std.debug.assert(len <= CpuFeature.Set.needed_bit_count); |
| 247 | 241 | var result: [len]CpuFeature = undefined; |
| 248 | result[@intFromEnum(Feature.a510)] = .{ | |
| 249 | .llvm_name = "a510", | |
| 250 | .description = "Cortex-A510 ARM processors", | |
| 251 | .dependencies = featureSet(&[_]Feature{ | |
| 252 | .fuse_adrp_add, | |
| 253 | .fuse_aes, | |
| 254 | .use_postra_scheduler, | |
| 255 | }), | |
| 256 | }; | |
| 257 | result[@intFromEnum(Feature.a520)] = .{ | |
| 258 | .llvm_name = "a520", | |
| 259 | .description = "Cortex-A520 ARM processors", | |
| 260 | .dependencies = featureSet(&[_]Feature{ | |
| 261 | .fuse_adrp_add, | |
| 262 | .fuse_aes, | |
| 263 | .use_postra_scheduler, | |
| 264 | }), | |
| 265 | }; | |
| 266 | result[@intFromEnum(Feature.a65)] = .{ | |
| 267 | .llvm_name = "a65", | |
| 268 | .description = "Cortex-A65 ARM processors", | |
| 269 | .dependencies = featureSet(&[_]Feature{ | |
| 270 | .enable_select_opt, | |
| 271 | .fuse_address, | |
| 272 | .fuse_adrp_add, | |
| 273 | .fuse_aes, | |
| 274 | .fuse_literals, | |
| 275 | .predictable_select_expensive, | |
| 276 | }), | |
| 277 | }; | |
| 278 | result[@intFromEnum(Feature.a710)] = .{ | |
| 279 | .llvm_name = "a710", | |
| 280 | .description = "Cortex-A710 ARM processors", | |
| 281 | .dependencies = featureSet(&[_]Feature{ | |
| 282 | .addr_lsl_fast, | |
| 283 | .alu_lsl_fast, | |
| 284 | .cmp_bcc_fusion, | |
| 285 | .enable_select_opt, | |
| 286 | .fuse_adrp_add, | |
| 287 | .fuse_aes, | |
| 288 | .predictable_select_expensive, | |
| 289 | .use_postra_scheduler, | |
| 290 | }), | |
| 291 | }; | |
| 292 | result[@intFromEnum(Feature.a720)] = .{ | |
| 293 | .llvm_name = "a720", | |
| 294 | .description = "Cortex-A720 ARM processors", | |
| 295 | .dependencies = featureSet(&[_]Feature{ | |
| 296 | .addr_lsl_fast, | |
| 297 | .alu_lsl_fast, | |
| 298 | .cmp_bcc_fusion, | |
| 299 | .enable_select_opt, | |
| 300 | .fuse_adrp_add, | |
| 301 | .fuse_aes, | |
| 302 | .predictable_select_expensive, | |
| 303 | .use_postra_scheduler, | |
| 304 | }), | |
| 305 | }; | |
| 306 | result[@intFromEnum(Feature.a76)] = .{ | |
| 307 | .llvm_name = "a76", | |
| 308 | .description = "Cortex-A76 ARM processors", | |
| 309 | .dependencies = featureSet(&[_]Feature{ | |
| 310 | .addr_lsl_fast, | |
| 311 | .alu_lsl_fast, | |
| 312 | .enable_select_opt, | |
| 313 | .fuse_adrp_add, | |
| 314 | .fuse_aes, | |
| 315 | .predictable_select_expensive, | |
| 316 | }), | |
| 317 | }; | |
| 318 | result[@intFromEnum(Feature.a78)] = .{ | |
| 319 | .llvm_name = "a78", | |
| 320 | .description = "Cortex-A78 ARM processors", | |
| 321 | .dependencies = featureSet(&[_]Feature{ | |
| 322 | .addr_lsl_fast, | |
| 323 | .alu_lsl_fast, | |
| 324 | .cmp_bcc_fusion, | |
| 325 | .enable_select_opt, | |
| 326 | .fuse_adrp_add, | |
| 327 | .fuse_aes, | |
| 328 | .predictable_select_expensive, | |
| 329 | .use_postra_scheduler, | |
| 330 | }), | |
| 331 | }; | |
| 332 | result[@intFromEnum(Feature.a78c)] = .{ | |
| 333 | .llvm_name = "a78c", | |
| 334 | .description = "Cortex-A78C ARM processors", | |
| 335 | .dependencies = featureSet(&[_]Feature{ | |
| 336 | .addr_lsl_fast, | |
| 337 | .alu_lsl_fast, | |
| 338 | .cmp_bcc_fusion, | |
| 339 | .enable_select_opt, | |
| 340 | .fuse_adrp_add, | |
| 341 | .fuse_aes, | |
| 342 | .predictable_select_expensive, | |
| 343 | .use_postra_scheduler, | |
| 344 | }), | |
| 345 | }; | |
| 346 | result[@intFromEnum(Feature.addr_lsl_fast)] = .{ | |
| 347 | .llvm_name = "addr-lsl-fast", | |
| 348 | .description = "Address operands with logical shift of up to 3 places are cheap", | |
| 242 | result[@intFromEnum(Feature.addr_lsl_slow_14)] = .{ | |
| 243 | .llvm_name = "addr-lsl-slow-14", | |
| 244 | .description = "Address operands with shift amount of 1 or 4 are slow", | |
| 349 | 245 | .dependencies = featureSet(&[_]Feature{}), |
| 350 | 246 | }; |
| 351 | 247 | result[@intFromEnum(Feature.aes)] = .{ |
| 352 | 248 | .llvm_name = "aes", |
| 353 | .description = "Enable AES support (FEAT_AES, FEAT_PMULL)", | |
| 249 | .description = "Enable AES support", | |
| 354 | 250 | .dependencies = featureSet(&[_]Feature{ |
| 355 | 251 | .neon, |
| 356 | 252 | }), |
| ... | ... | @@ -367,7 +263,7 @@ pub const all_features = blk: { |
| 367 | 263 | }; |
| 368 | 264 | result[@intFromEnum(Feature.altnzcv)] = .{ |
| 369 | 265 | .llvm_name = "altnzcv", |
| 370 | .description = "Enable alternative NZCV format for floating point comparisons (FEAT_FlagM2)", | |
| 266 | .description = "Enable alternative NZCV format for floating point comparisons", | |
| 371 | 267 | .dependencies = featureSet(&[_]Feature{}), |
| 372 | 268 | }; |
| 373 | 269 | result[@intFromEnum(Feature.alu_lsl_fast)] = .{ |
| ... | ... | @@ -377,12 +273,12 @@ pub const all_features = blk: { |
| 377 | 273 | }; |
| 378 | 274 | result[@intFromEnum(Feature.am)] = .{ |
| 379 | 275 | .llvm_name = "am", |
| 380 | .description = "Enable v8.4-A Activity Monitors extension (FEAT_AMUv1)", | |
| 276 | .description = "Enable Armv8.4-A Activity Monitors extension", | |
| 381 | 277 | .dependencies = featureSet(&[_]Feature{}), |
| 382 | 278 | }; |
| 383 | 279 | result[@intFromEnum(Feature.amvs)] = .{ |
| 384 | 280 | .llvm_name = "amvs", |
| 385 | .description = "Enable v8.6-A Activity Monitors Virtualization support (FEAT_AMUv1p1)", | |
| 281 | .description = "Enable Armv8.6-A Activity Monitors Virtualization support", | |
| 386 | 282 | .dependencies = featureSet(&[_]Feature{ |
| 387 | 283 | .am, |
| 388 | 284 | }), |
| ... | ... | @@ -404,7 +300,7 @@ pub const all_features = blk: { |
| 404 | 300 | }; |
| 405 | 301 | result[@intFromEnum(Feature.b16b16)] = .{ |
| 406 | 302 | .llvm_name = "b16b16", |
| 407 | .description = "Enable SVE2.1 or SME2.1 non-widening BFloat16 to BFloat16 instructions (FEAT_B16B16)", | |
| 303 | .description = "Enable SVE2.1 or SME2.1 non-widening BFloat16 to BFloat16 instructions", | |
| 408 | 304 | .dependencies = featureSet(&[_]Feature{ |
| 409 | 305 | .bf16, |
| 410 | 306 | }), |
| ... | ... | @@ -416,17 +312,17 @@ pub const all_features = blk: { |
| 416 | 312 | }; |
| 417 | 313 | result[@intFromEnum(Feature.bf16)] = .{ |
| 418 | 314 | .llvm_name = "bf16", |
| 419 | .description = "Enable BFloat16 Extension (FEAT_BF16)", | |
| 315 | .description = "Enable BFloat16 Extension", | |
| 420 | 316 | .dependencies = featureSet(&[_]Feature{}), |
| 421 | 317 | }; |
| 422 | 318 | result[@intFromEnum(Feature.brbe)] = .{ |
| 423 | 319 | .llvm_name = "brbe", |
| 424 | .description = "Enable Branch Record Buffer Extension (FEAT_BRBE)", | |
| 320 | .description = "Enable Branch Record Buffer Extension", | |
| 425 | 321 | .dependencies = featureSet(&[_]Feature{}), |
| 426 | 322 | }; |
| 427 | 323 | result[@intFromEnum(Feature.bti)] = .{ |
| 428 | 324 | .llvm_name = "bti", |
| 429 | .description = "Enable Branch Target Identification (FEAT_BTI)", | |
| 325 | .description = "Enable Branch Target Identification", | |
| 430 | 326 | .dependencies = featureSet(&[_]Feature{}), |
| 431 | 327 | }; |
| 432 | 328 | result[@intFromEnum(Feature.call_saved_x10)] = .{ |
| ... | ... | @@ -476,27 +372,27 @@ pub const all_features = blk: { |
| 476 | 372 | }; |
| 477 | 373 | result[@intFromEnum(Feature.ccdp)] = .{ |
| 478 | 374 | .llvm_name = "ccdp", |
| 479 | .description = "Enable v8.5 Cache Clean to Point of Deep Persistence (FEAT_DPB2)", | |
| 375 | .description = "Enable Armv8.5-A Cache Clean to Point of Deep Persistence", | |
| 480 | 376 | .dependencies = featureSet(&[_]Feature{}), |
| 481 | 377 | }; |
| 482 | 378 | result[@intFromEnum(Feature.ccidx)] = .{ |
| 483 | 379 | .llvm_name = "ccidx", |
| 484 | .description = "Enable v8.3-A Extend of the CCSIDR number of sets (FEAT_CCIDX)", | |
| 380 | .description = "Enable Armv8.3-A Extend of the CCSIDR number of sets", | |
| 485 | 381 | .dependencies = featureSet(&[_]Feature{}), |
| 486 | 382 | }; |
| 487 | 383 | result[@intFromEnum(Feature.ccpp)] = .{ |
| 488 | 384 | .llvm_name = "ccpp", |
| 489 | .description = "Enable v8.2 data Cache Clean to Point of Persistence (FEAT_DPB)", | |
| 385 | .description = "Enable Armv8.2-A data Cache Clean to Point of Persistence", | |
| 490 | 386 | .dependencies = featureSet(&[_]Feature{}), |
| 491 | 387 | }; |
| 492 | 388 | result[@intFromEnum(Feature.chk)] = .{ |
| 493 | 389 | .llvm_name = "chk", |
| 494 | .description = "Enable Armv8.0-A Check Feature Status Extension (FEAT_CHK)", | |
| 390 | .description = "Enable Armv8.0-A Check Feature Status Extension", | |
| 495 | 391 | .dependencies = featureSet(&[_]Feature{}), |
| 496 | 392 | }; |
| 497 | 393 | result[@intFromEnum(Feature.clrbhb)] = .{ |
| 498 | 394 | .llvm_name = "clrbhb", |
| 499 | .description = "Enable Clear BHB instruction (FEAT_CLRBHB)", | |
| 395 | .description = "Enable Clear BHB instruction", | |
| 500 | 396 | .dependencies = featureSet(&[_]Feature{}), |
| 501 | 397 | }; |
| 502 | 398 | result[@intFromEnum(Feature.cmp_bcc_fusion)] = .{ |
| ... | ... | @@ -506,7 +402,7 @@ pub const all_features = blk: { |
| 506 | 402 | }; |
| 507 | 403 | result[@intFromEnum(Feature.complxnum)] = .{ |
| 508 | 404 | .llvm_name = "complxnum", |
| 509 | .description = "Enable v8.3-A Floating-point complex number support (FEAT_FCMA)", | |
| 405 | .description = "Enable Armv8.3-A Floating-point complex number support", | |
| 510 | 406 | .dependencies = featureSet(&[_]Feature{ |
| 511 | 407 | .neon, |
| 512 | 408 | }), |
| ... | ... | @@ -516,21 +412,14 @@ pub const all_features = blk: { |
| 516 | 412 | .description = "Enable RW operand Context ID Register (EL2)", |
| 517 | 413 | .dependencies = featureSet(&[_]Feature{}), |
| 518 | 414 | }; |
| 519 | result[@intFromEnum(Feature.cortex_r82)] = .{ | |
| 520 | .llvm_name = "cortex-r82", | |
| 521 | .description = "Cortex-R82 ARM processors", | |
| 522 | .dependencies = featureSet(&[_]Feature{ | |
| 523 | .use_postra_scheduler, | |
| 524 | }), | |
| 525 | }; | |
| 526 | 415 | result[@intFromEnum(Feature.cpa)] = .{ |
| 527 | 416 | .llvm_name = "cpa", |
| 528 | .description = "Enable Armv9.5-A Checked Pointer Arithmetic (FEAT_CPA)", | |
| 417 | .description = "Enable Armv9.5-A Checked Pointer Arithmetic", | |
| 529 | 418 | .dependencies = featureSet(&[_]Feature{}), |
| 530 | 419 | }; |
| 531 | 420 | result[@intFromEnum(Feature.crc)] = .{ |
| 532 | 421 | .llvm_name = "crc", |
| 533 | .description = "Enable ARMv8 CRC-32 checksum instructions (FEAT_CRC32)", | |
| 422 | .description = "Enable Armv8.0-A CRC-32 checksum instructions", | |
| 534 | 423 | .dependencies = featureSet(&[_]Feature{}), |
| 535 | 424 | }; |
| 536 | 425 | result[@intFromEnum(Feature.crypto)] = .{ |
| ... | ... | @@ -543,12 +432,12 @@ pub const all_features = blk: { |
| 543 | 432 | }; |
| 544 | 433 | result[@intFromEnum(Feature.cssc)] = .{ |
| 545 | 434 | .llvm_name = "cssc", |
| 546 | .description = "Enable Common Short Sequence Compression (CSSC) instructions (FEAT_CSSC)", | |
| 435 | .description = "Enable Common Short Sequence Compression (CSSC) instructions", | |
| 547 | 436 | .dependencies = featureSet(&[_]Feature{}), |
| 548 | 437 | }; |
| 549 | 438 | result[@intFromEnum(Feature.d128)] = .{ |
| 550 | 439 | .llvm_name = "d128", |
| 551 | .description = "Enable Armv9.4-A 128-bit Page Table Descriptors, System Registers and Instructions (FEAT_D128, FEAT_LVA3, FEAT_SYSREG128, FEAT_SYSINSTR128)", | |
| 440 | .description = "Enable Armv9.4-A 128-bit Page Table Descriptors, System Registers and instructions", | |
| 552 | 441 | .dependencies = featureSet(&[_]Feature{ |
| 553 | 442 | .lse128, |
| 554 | 443 | }), |
| ... | ... | @@ -570,17 +459,19 @@ pub const all_features = blk: { |
| 570 | 459 | }; |
| 571 | 460 | result[@intFromEnum(Feature.dit)] = .{ |
| 572 | 461 | .llvm_name = "dit", |
| 573 | .description = "Enable v8.4-A Data Independent Timing instructions (FEAT_DIT)", | |
| 462 | .description = "Enable Armv8.4-A Data Independent Timing instructions", | |
| 574 | 463 | .dependencies = featureSet(&[_]Feature{}), |
| 575 | 464 | }; |
| 576 | 465 | result[@intFromEnum(Feature.dotprod)] = .{ |
| 577 | 466 | .llvm_name = "dotprod", |
| 578 | .description = "Enable dot product support (FEAT_DotProd)", | |
| 579 | .dependencies = featureSet(&[_]Feature{}), | |
| 467 | .description = "Enable dot product support", | |
| 468 | .dependencies = featureSet(&[_]Feature{ | |
| 469 | .neon, | |
| 470 | }), | |
| 580 | 471 | }; |
| 581 | 472 | result[@intFromEnum(Feature.ecv)] = .{ |
| 582 | 473 | .llvm_name = "ecv", |
| 583 | .description = "Enable enhanced counter virtualization extension (FEAT_ECV)", | |
| 474 | .description = "Enable enhanced counter virtualization extension", | |
| 584 | 475 | .dependencies = featureSet(&[_]Feature{}), |
| 585 | 476 | }; |
| 586 | 477 | result[@intFromEnum(Feature.el2vmsa)] = .{ |
| ... | ... | @@ -600,7 +491,7 @@ pub const all_features = blk: { |
| 600 | 491 | }; |
| 601 | 492 | result[@intFromEnum(Feature.ete)] = .{ |
| 602 | 493 | .llvm_name = "ete", |
| 603 | .description = "Enable Embedded Trace Extension (FEAT_ETE)", | |
| 494 | .description = "Enable Embedded Trace Extension", | |
| 604 | 495 | .dependencies = featureSet(&[_]Feature{ |
| 605 | 496 | .trbe, |
| 606 | 497 | }), |
| ... | ... | @@ -612,26 +503,26 @@ pub const all_features = blk: { |
| 612 | 503 | }; |
| 613 | 504 | result[@intFromEnum(Feature.f32mm)] = .{ |
| 614 | 505 | .llvm_name = "f32mm", |
| 615 | .description = "Enable Matrix Multiply FP32 Extension (FEAT_F32MM)", | |
| 506 | .description = "Enable Matrix Multiply FP32 Extension", | |
| 616 | 507 | .dependencies = featureSet(&[_]Feature{ |
| 617 | 508 | .sve, |
| 618 | 509 | }), |
| 619 | 510 | }; |
| 620 | 511 | result[@intFromEnum(Feature.f64mm)] = .{ |
| 621 | 512 | .llvm_name = "f64mm", |
| 622 | .description = "Enable Matrix Multiply FP64 Extension (FEAT_F64MM)", | |
| 513 | .description = "Enable Matrix Multiply FP64 Extension", | |
| 623 | 514 | .dependencies = featureSet(&[_]Feature{ |
| 624 | 515 | .sve, |
| 625 | 516 | }), |
| 626 | 517 | }; |
| 627 | 518 | result[@intFromEnum(Feature.faminmax)] = .{ |
| 628 | 519 | .llvm_name = "faminmax", |
| 629 | .description = "Enable FAMIN and FAMAX instructions (FEAT_FAMINMAX)", | |
| 520 | .description = "Enable FAMIN and FAMAX instructions", | |
| 630 | 521 | .dependencies = featureSet(&[_]Feature{}), |
| 631 | 522 | }; |
| 632 | 523 | result[@intFromEnum(Feature.fgt)] = .{ |
| 633 | 524 | .llvm_name = "fgt", |
| 634 | .description = "Enable fine grained virtualization traps extension (FEAT_FGT)", | |
| 525 | .description = "Enable fine grained virtualization traps extension", | |
| 635 | 526 | .dependencies = featureSet(&[_]Feature{}), |
| 636 | 527 | }; |
| 637 | 528 | result[@intFromEnum(Feature.fix_cortex_a53_835769)] = .{ |
| ... | ... | @@ -641,7 +532,7 @@ pub const all_features = blk: { |
| 641 | 532 | }; |
| 642 | 533 | result[@intFromEnum(Feature.flagm)] = .{ |
| 643 | 534 | .llvm_name = "flagm", |
| 644 | .description = "Enable v8.4-A Flag Manipulation Instructions (FEAT_FlagM)", | |
| 535 | .description = "Enable Armv8.4-A Flag Manipulation instructions", | |
| 645 | 536 | .dependencies = featureSet(&[_]Feature{}), |
| 646 | 537 | }; |
| 647 | 538 | result[@intFromEnum(Feature.fmv)] = .{ |
| ... | ... | @@ -656,49 +547,59 @@ pub const all_features = blk: { |
| 656 | 547 | }; |
| 657 | 548 | result[@intFromEnum(Feature.fp16fml)] = .{ |
| 658 | 549 | .llvm_name = "fp16fml", |
| 659 | .description = "Enable FP16 FML instructions (FEAT_FHM)", | |
| 550 | .description = "Enable FP16 FML instructions", | |
| 660 | 551 | .dependencies = featureSet(&[_]Feature{ |
| 661 | 552 | .fullfp16, |
| 662 | 553 | }), |
| 663 | 554 | }; |
| 664 | 555 | result[@intFromEnum(Feature.fp8)] = .{ |
| 665 | 556 | .llvm_name = "fp8", |
| 666 | .description = "Enable FP8 instructions (FEAT_FP8)", | |
| 667 | .dependencies = featureSet(&[_]Feature{}), | |
| 557 | .description = "Enable FP8 instructions", | |
| 558 | .dependencies = featureSet(&[_]Feature{ | |
| 559 | .bf16, | |
| 560 | .faminmax, | |
| 561 | .lut, | |
| 562 | }), | |
| 668 | 563 | }; |
| 669 | 564 | result[@intFromEnum(Feature.fp8dot2)] = .{ |
| 670 | 565 | .llvm_name = "fp8dot2", |
| 671 | .description = "Enable fp8 2-way dot instructions (FEAT_FP8DOT2)", | |
| 672 | .dependencies = featureSet(&[_]Feature{}), | |
| 566 | .description = "Enable FP8 2-way dot instructions", | |
| 567 | .dependencies = featureSet(&[_]Feature{ | |
| 568 | .fp8dot4, | |
| 569 | }), | |
| 673 | 570 | }; |
| 674 | 571 | result[@intFromEnum(Feature.fp8dot4)] = .{ |
| 675 | 572 | .llvm_name = "fp8dot4", |
| 676 | .description = "Enable fp8 4-way dot instructions (FEAT_FP8DOT4)", | |
| 677 | .dependencies = featureSet(&[_]Feature{}), | |
| 573 | .description = "Enable FP8 4-way dot instructions", | |
| 574 | .dependencies = featureSet(&[_]Feature{ | |
| 575 | .fp8fma, | |
| 576 | }), | |
| 678 | 577 | }; |
| 679 | 578 | result[@intFromEnum(Feature.fp8fma)] = .{ |
| 680 | 579 | .llvm_name = "fp8fma", |
| 681 | .description = "Enable fp8 multiply-add instructions (FEAT_FP8FMA)", | |
| 682 | .dependencies = featureSet(&[_]Feature{}), | |
| 580 | .description = "Enable Armv9.5-A FP8 multiply-add instructions", | |
| 581 | .dependencies = featureSet(&[_]Feature{ | |
| 582 | .fp8, | |
| 583 | }), | |
| 683 | 584 | }; |
| 684 | 585 | result[@intFromEnum(Feature.fp_armv8)] = .{ |
| 685 | 586 | .llvm_name = "fp-armv8", |
| 686 | .description = "Enable ARMv8 FP (FEAT_FP)", | |
| 587 | .description = "Enable Armv8.0-A Floating Point Extensions", | |
| 687 | 588 | .dependencies = featureSet(&[_]Feature{}), |
| 688 | 589 | }; |
| 689 | result[@intFromEnum(Feature.fpmr)] = .{ | |
| 690 | .llvm_name = "fpmr", | |
| 691 | .description = "Enable FPMR Register (FEAT_FPMR)", | |
| 590 | result[@intFromEnum(Feature.fpac)] = .{ | |
| 591 | .llvm_name = "fpac", | |
| 592 | .description = "Enable v8.3-A Pointer Authentication Faulting enhancement", | |
| 692 | 593 | .dependencies = featureSet(&[_]Feature{}), |
| 693 | 594 | }; |
| 694 | 595 | result[@intFromEnum(Feature.fptoint)] = .{ |
| 695 | 596 | .llvm_name = "fptoint", |
| 696 | .description = "Enable FRInt[32|64][Z|X] instructions that round a floating-point number to an integer (in FP format) forcing it to fit into a 32- or 64-bit int (FEAT_FRINTTS)", | |
| 597 | .description = "Enable FRInt[32|64][Z|X] instructions that round a floating-point number to an integer (in FP format) forcing it to fit into a 32- or 64-bit int", | |
| 697 | 598 | .dependencies = featureSet(&[_]Feature{}), |
| 698 | 599 | }; |
| 699 | 600 | result[@intFromEnum(Feature.fullfp16)] = .{ |
| 700 | 601 | .llvm_name = "fullfp16", |
| 701 | .description = "Full FP16 (FEAT_FP16)", | |
| 602 | .description = "Enable half-precision floating-point data processing", | |
| 702 | 603 | .dependencies = featureSet(&[_]Feature{ |
| 703 | 604 | .fp_armv8, |
| 704 | 605 | }), |
| ... | ... | @@ -767,29 +668,29 @@ pub const all_features = blk: { |
| 767 | 668 | }; |
| 768 | 669 | result[@intFromEnum(Feature.hbc)] = .{ |
| 769 | 670 | .llvm_name = "hbc", |
| 770 | .description = "Enable Armv8.8-A Hinted Conditional Branches Extension (FEAT_HBC)", | |
| 671 | .description = "Enable Armv8.8-A Hinted Conditional Branches Extension", | |
| 771 | 672 | .dependencies = featureSet(&[_]Feature{}), |
| 772 | 673 | }; |
| 773 | 674 | result[@intFromEnum(Feature.hcx)] = .{ |
| 774 | 675 | .llvm_name = "hcx", |
| 775 | .description = "Enable Armv8.7-A HCRX_EL2 system register (FEAT_HCX)", | |
| 676 | .description = "Enable Armv8.7-A HCRX_EL2 system register", | |
| 776 | 677 | .dependencies = featureSet(&[_]Feature{}), |
| 777 | 678 | }; |
| 778 | 679 | result[@intFromEnum(Feature.i8mm)] = .{ |
| 779 | 680 | .llvm_name = "i8mm", |
| 780 | .description = "Enable Matrix Multiply Int8 Extension (FEAT_I8MM)", | |
| 681 | .description = "Enable Matrix Multiply Int8 Extension", | |
| 781 | 682 | .dependencies = featureSet(&[_]Feature{}), |
| 782 | 683 | }; |
| 783 | 684 | result[@intFromEnum(Feature.ite)] = .{ |
| 784 | 685 | .llvm_name = "ite", |
| 785 | .description = "Enable Armv9.4-A Instrumentation Extension FEAT_ITE", | |
| 686 | .description = "Enable Armv9.4-A Instrumentation Extension", | |
| 786 | 687 | .dependencies = featureSet(&[_]Feature{ |
| 787 | 688 | .ete, |
| 788 | 689 | }), |
| 789 | 690 | }; |
| 790 | 691 | result[@intFromEnum(Feature.jsconv)] = .{ |
| 791 | 692 | .llvm_name = "jsconv", |
| 792 | .description = "Enable v8.3-A JavaScript FP conversion instructions (FEAT_JSCVT)", | |
| 693 | .description = "Enable Armv8.3-A JavaScript FP conversion instructions", | |
| 793 | 694 | .dependencies = featureSet(&[_]Feature{ |
| 794 | 695 | .fp_armv8, |
| 795 | 696 | }), |
| ... | ... | @@ -801,34 +702,34 @@ pub const all_features = blk: { |
| 801 | 702 | }; |
| 802 | 703 | result[@intFromEnum(Feature.lor)] = .{ |
| 803 | 704 | .llvm_name = "lor", |
| 804 | .description = "Enables ARM v8.1 Limited Ordering Regions extension (FEAT_LOR)", | |
| 705 | .description = "Enable Armv8.1-A Limited Ordering Regions extension", | |
| 805 | 706 | .dependencies = featureSet(&[_]Feature{}), |
| 806 | 707 | }; |
| 807 | 708 | result[@intFromEnum(Feature.ls64)] = .{ |
| 808 | 709 | .llvm_name = "ls64", |
| 809 | .description = "Enable Armv8.7-A LD64B/ST64B Accelerator Extension (FEAT_LS64, FEAT_LS64_V, FEAT_LS64_ACCDATA)", | |
| 710 | .description = "Enable Armv8.7-A LD64B/ST64B Accelerator Extension", | |
| 810 | 711 | .dependencies = featureSet(&[_]Feature{}), |
| 811 | 712 | }; |
| 812 | 713 | result[@intFromEnum(Feature.lse)] = .{ |
| 813 | 714 | .llvm_name = "lse", |
| 814 | .description = "Enable ARMv8.1 Large System Extension (LSE) atomic instructions (FEAT_LSE)", | |
| 715 | .description = "Enable Armv8.1-A Large System Extension (LSE) atomic instructions", | |
| 815 | 716 | .dependencies = featureSet(&[_]Feature{}), |
| 816 | 717 | }; |
| 817 | 718 | result[@intFromEnum(Feature.lse128)] = .{ |
| 818 | 719 | .llvm_name = "lse128", |
| 819 | .description = "Enable Armv9.4-A 128-bit Atomic Instructions (FEAT_LSE128)", | |
| 720 | .description = "Enable Armv9.4-A 128-bit Atomic instructions", | |
| 820 | 721 | .dependencies = featureSet(&[_]Feature{ |
| 821 | 722 | .lse, |
| 822 | 723 | }), |
| 823 | 724 | }; |
| 824 | 725 | result[@intFromEnum(Feature.lse2)] = .{ |
| 825 | 726 | .llvm_name = "lse2", |
| 826 | .description = "Enable ARMv8.4 Large System Extension 2 (LSE2) atomicity rules (FEAT_LSE2)", | |
| 727 | .description = "Enable Armv8.4-A Large System Extension 2 (LSE2) atomicity rules", | |
| 827 | 728 | .dependencies = featureSet(&[_]Feature{}), |
| 828 | 729 | }; |
| 829 | 730 | result[@intFromEnum(Feature.lut)] = .{ |
| 830 | 731 | .llvm_name = "lut", |
| 831 | .description = "Enable Lookup Table instructions (FEAT_LUT)", | |
| 732 | .description = "Enable Lookup Table instructions", | |
| 832 | 733 | .dependencies = featureSet(&[_]Feature{}), |
| 833 | 734 | }; |
| 834 | 735 | result[@intFromEnum(Feature.mec)] = .{ |
| ... | ... | @@ -840,29 +741,29 @@ pub const all_features = blk: { |
| 840 | 741 | }; |
| 841 | 742 | result[@intFromEnum(Feature.mops)] = .{ |
| 842 | 743 | .llvm_name = "mops", |
| 843 | .description = "Enable Armv8.8-A memcpy and memset acceleration instructions (FEAT_MOPS)", | |
| 744 | .description = "Enable Armv8.8-A memcpy and memset acceleration instructions", | |
| 844 | 745 | .dependencies = featureSet(&[_]Feature{}), |
| 845 | 746 | }; |
| 846 | 747 | result[@intFromEnum(Feature.mpam)] = .{ |
| 847 | 748 | .llvm_name = "mpam", |
| 848 | .description = "Enable v8.4-A Memory system Partitioning and Monitoring extension (FEAT_MPAM)", | |
| 749 | .description = "Enable Armv8.4-A Memory system Partitioning and Monitoring extension", | |
| 849 | 750 | .dependencies = featureSet(&[_]Feature{}), |
| 850 | 751 | }; |
| 851 | 752 | result[@intFromEnum(Feature.mte)] = .{ |
| 852 | 753 | .llvm_name = "mte", |
| 853 | .description = "Enable Memory Tagging Extension (FEAT_MTE, FEAT_MTE2)", | |
| 754 | .description = "Enable Memory Tagging Extension", | |
| 854 | 755 | .dependencies = featureSet(&[_]Feature{}), |
| 855 | 756 | }; |
| 856 | 757 | result[@intFromEnum(Feature.neon)] = .{ |
| 857 | 758 | .llvm_name = "neon", |
| 858 | .description = "Enable Advanced SIMD instructions (FEAT_AdvSIMD)", | |
| 759 | .description = "Enable Advanced SIMD instructions", | |
| 859 | 760 | .dependencies = featureSet(&[_]Feature{ |
| 860 | 761 | .fp_armv8, |
| 861 | 762 | }), |
| 862 | 763 | }; |
| 863 | 764 | result[@intFromEnum(Feature.nmi)] = .{ |
| 864 | 765 | .llvm_name = "nmi", |
| 865 | .description = "Enable Armv8.8-A Non-maskable Interrupts (FEAT_NMI, FEAT_GICv3_NMI)", | |
| 766 | .description = "Enable Armv8.8-A Non-maskable Interrupts", | |
| 866 | 767 | .dependencies = featureSet(&[_]Feature{}), |
| 867 | 768 | }; |
| 868 | 769 | result[@intFromEnum(Feature.no_bti_at_return_twice)] = .{ |
| ... | ... | @@ -887,7 +788,7 @@ pub const all_features = blk: { |
| 887 | 788 | }; |
| 888 | 789 | result[@intFromEnum(Feature.nv)] = .{ |
| 889 | 790 | .llvm_name = "nv", |
| 890 | .description = "Enable v8.4-A Nested Virtualization Enhancement (FEAT_NV, FEAT_NV2)", | |
| 791 | .description = "Enable Armv8.4-A Nested Virtualization Enchancement", | |
| 891 | 792 | .dependencies = featureSet(&[_]Feature{}), |
| 892 | 793 | }; |
| 893 | 794 | result[@intFromEnum(Feature.outline_atomics)] = .{ |
| ... | ... | @@ -897,29 +798,29 @@ pub const all_features = blk: { |
| 897 | 798 | }; |
| 898 | 799 | result[@intFromEnum(Feature.pan)] = .{ |
| 899 | 800 | .llvm_name = "pan", |
| 900 | .description = "Enables ARM v8.1 Privileged Access-Never extension (FEAT_PAN)", | |
| 801 | .description = "Enable Armv8.1-A Privileged Access-Never extension", | |
| 901 | 802 | .dependencies = featureSet(&[_]Feature{}), |
| 902 | 803 | }; |
| 903 | 804 | result[@intFromEnum(Feature.pan_rwv)] = .{ |
| 904 | 805 | .llvm_name = "pan-rwv", |
| 905 | .description = "Enable v8.2 PAN s1e1R and s1e1W Variants (FEAT_PAN2)", | |
| 806 | .description = "Enable Armv8.2-A PAN s1e1R and s1e1W Variants", | |
| 906 | 807 | .dependencies = featureSet(&[_]Feature{ |
| 907 | 808 | .pan, |
| 908 | 809 | }), |
| 909 | 810 | }; |
| 910 | 811 | result[@intFromEnum(Feature.pauth)] = .{ |
| 911 | 812 | .llvm_name = "pauth", |
| 912 | .description = "Enable v8.3-A Pointer Authentication extension (FEAT_PAuth)", | |
| 813 | .description = "Enable Armv8.3-A Pointer Authentication extension", | |
| 913 | 814 | .dependencies = featureSet(&[_]Feature{}), |
| 914 | 815 | }; |
| 915 | 816 | result[@intFromEnum(Feature.pauth_lr)] = .{ |
| 916 | 817 | .llvm_name = "pauth-lr", |
| 917 | .description = "Enable Armv9.5-A PAC enhancements (FEAT_PAuth_LR)", | |
| 818 | .description = "Enable Armv9.5-A PAC enhancements", | |
| 918 | 819 | .dependencies = featureSet(&[_]Feature{}), |
| 919 | 820 | }; |
| 920 | 821 | result[@intFromEnum(Feature.perfmon)] = .{ |
| 921 | 822 | .llvm_name = "perfmon", |
| 922 | .description = "Enable Code Generation for ARMv8 PMUv3 Performance Monitors extension (FEAT_PMUv3)", | |
| 823 | .description = "Enable Armv8.0-A PMUv3 Performance Monitors extension", | |
| 923 | 824 | .dependencies = featureSet(&[_]Feature{}), |
| 924 | 825 | }; |
| 925 | 826 | result[@intFromEnum(Feature.predictable_select_expensive)] = .{ |
| ... | ... | @@ -929,7 +830,7 @@ pub const all_features = blk: { |
| 929 | 830 | }; |
| 930 | 831 | result[@intFromEnum(Feature.predres)] = .{ |
| 931 | 832 | .llvm_name = "predres", |
| 932 | .description = "Enable v8.5a execution and data prediction invalidation instructions (FEAT_SPECRES)", | |
| 833 | .description = "Enable Armv8.5-A execution and data prediction invalidation instructions", | |
| 933 | 834 | .dependencies = featureSet(&[_]Feature{}), |
| 934 | 835 | }; |
| 935 | 836 | result[@intFromEnum(Feature.prfm_slc_target)] = .{ |
| ... | ... | @@ -939,43 +840,50 @@ pub const all_features = blk: { |
| 939 | 840 | }; |
| 940 | 841 | result[@intFromEnum(Feature.rand)] = .{ |
| 941 | 842 | .llvm_name = "rand", |
| 942 | .description = "Enable Random Number generation instructions (FEAT_RNG)", | |
| 843 | .description = "Enable Random Number generation instructions", | |
| 943 | 844 | .dependencies = featureSet(&[_]Feature{}), |
| 944 | 845 | }; |
| 945 | 846 | result[@intFromEnum(Feature.ras)] = .{ |
| 946 | 847 | .llvm_name = "ras", |
| 947 | .description = "Enable ARMv8 Reliability, Availability and Serviceability Extensions (FEAT_RAS, FEAT_RASv1p1)", | |
| 848 | .description = "Enable Armv8.0-A Reliability, Availability and Serviceability Extensions", | |
| 948 | 849 | .dependencies = featureSet(&[_]Feature{}), |
| 949 | 850 | }; |
| 950 | 851 | result[@intFromEnum(Feature.rasv2)] = .{ |
| 951 | 852 | .llvm_name = "rasv2", |
| 952 | .description = "Enable ARMv8.9-A Reliability, Availability and Serviceability Extensions (FEAT_RASv2)", | |
| 853 | .description = "Enable Armv8.9-A Reliability, Availability and Serviceability Extensions", | |
| 953 | 854 | .dependencies = featureSet(&[_]Feature{ |
| 954 | 855 | .ras, |
| 955 | 856 | }), |
| 956 | 857 | }; |
| 957 | 858 | result[@intFromEnum(Feature.rcpc)] = .{ |
| 958 | 859 | .llvm_name = "rcpc", |
| 959 | .description = "Enable support for RCPC extension (FEAT_LRCPC)", | |
| 860 | .description = "Enable support for RCPC extension", | |
| 960 | 861 | .dependencies = featureSet(&[_]Feature{}), |
| 961 | 862 | }; |
| 962 | 863 | result[@intFromEnum(Feature.rcpc3)] = .{ |
| 963 | 864 | .llvm_name = "rcpc3", |
| 964 | .description = "Enable Armv8.9-A RCPC instructions for A64 and Advanced SIMD and floating-point instruction set (FEAT_LRCPC3)", | |
| 865 | .description = "Enable Armv8.9-A RCPC instructions for A64 and Advanced SIMD and floating-point instruction set", | |
| 965 | 866 | .dependencies = featureSet(&[_]Feature{ |
| 966 | 867 | .rcpc_immo, |
| 967 | 868 | }), |
| 968 | 869 | }; |
| 969 | 870 | result[@intFromEnum(Feature.rcpc_immo)] = .{ |
| 970 | 871 | .llvm_name = "rcpc-immo", |
| 971 | .description = "Enable v8.4-A RCPC instructions with Immediate Offsets (FEAT_LRCPC2)", | |
| 872 | .description = "Enable Armv8.4-A RCPC instructions with Immediate Offsets", | |
| 972 | 873 | .dependencies = featureSet(&[_]Feature{ |
| 973 | 874 | .rcpc, |
| 974 | 875 | }), |
| 975 | 876 | }; |
| 976 | 877 | result[@intFromEnum(Feature.rdm)] = .{ |
| 977 | 878 | .llvm_name = "rdm", |
| 978 | .description = "Enable ARMv8.1 Rounding Double Multiply Add/Subtract instructions (FEAT_RDM)", | |
| 879 | .description = "Enable Armv8.1-A Rounding Double Multiply Add/Subtract instructions", | |
| 880 | .dependencies = featureSet(&[_]Feature{ | |
| 881 | .neon, | |
| 882 | }), | |
| 883 | }; | |
| 884 | result[@intFromEnum(Feature.reserve_lr_for_ra)] = .{ | |
| 885 | .llvm_name = "reserve-lr-for-ra", | |
| 886 | .description = "Reserve LR for call use only", | |
| 979 | 887 | .dependencies = featureSet(&[_]Feature{}), |
| 980 | 888 | }; |
| 981 | 889 | result[@intFromEnum(Feature.reserve_x1)] = .{ |
| ... | ... | @@ -1073,11 +981,6 @@ pub const all_features = blk: { |
| 1073 | 981 | .description = "Reserve X3, making it unavailable as a GPR", |
| 1074 | 982 | .dependencies = featureSet(&[_]Feature{}), |
| 1075 | 983 | }; |
| 1076 | result[@intFromEnum(Feature.reserve_x30)] = .{ | |
| 1077 | .llvm_name = "reserve-x30", | |
| 1078 | .description = "Reserve X30, making it unavailable as a GPR", | |
| 1079 | .dependencies = featureSet(&[_]Feature{}), | |
| 1080 | }; | |
| 1081 | 984 | result[@intFromEnum(Feature.reserve_x4)] = .{ |
| 1082 | 985 | .llvm_name = "reserve-x4", |
| 1083 | 986 | .description = "Reserve X4, making it unavailable as a GPR", |
| ... | ... | @@ -1105,29 +1008,29 @@ pub const all_features = blk: { |
| 1105 | 1008 | }; |
| 1106 | 1009 | result[@intFromEnum(Feature.rme)] = .{ |
| 1107 | 1010 | .llvm_name = "rme", |
| 1108 | .description = "Enable Realm Management Extension (FEAT_RME)", | |
| 1011 | .description = "Enable Realm Management Extension", | |
| 1109 | 1012 | .dependencies = featureSet(&[_]Feature{}), |
| 1110 | 1013 | }; |
| 1111 | 1014 | result[@intFromEnum(Feature.sb)] = .{ |
| 1112 | 1015 | .llvm_name = "sb", |
| 1113 | .description = "Enable v8.5 Speculation Barrier (FEAT_SB)", | |
| 1016 | .description = "Enable Armv8.5-A Speculation Barrier", | |
| 1114 | 1017 | .dependencies = featureSet(&[_]Feature{}), |
| 1115 | 1018 | }; |
| 1116 | 1019 | result[@intFromEnum(Feature.sel2)] = .{ |
| 1117 | 1020 | .llvm_name = "sel2", |
| 1118 | .description = "Enable v8.4-A Secure Exception Level 2 extension (FEAT_SEL2)", | |
| 1021 | .description = "Enable Armv8.4-A Secure Exception Level 2 extension", | |
| 1119 | 1022 | .dependencies = featureSet(&[_]Feature{}), |
| 1120 | 1023 | }; |
| 1121 | 1024 | result[@intFromEnum(Feature.sha2)] = .{ |
| 1122 | 1025 | .llvm_name = "sha2", |
| 1123 | .description = "Enable SHA1 and SHA256 support (FEAT_SHA1, FEAT_SHA256)", | |
| 1026 | .description = "Enable SHA1 and SHA256 support", | |
| 1124 | 1027 | .dependencies = featureSet(&[_]Feature{ |
| 1125 | 1028 | .neon, |
| 1126 | 1029 | }), |
| 1127 | 1030 | }; |
| 1128 | 1031 | result[@intFromEnum(Feature.sha3)] = .{ |
| 1129 | 1032 | .llvm_name = "sha3", |
| 1130 | .description = "Enable SHA512 and SHA3 support (FEAT_SHA3, FEAT_SHA512)", | |
| 1033 | .description = "Enable SHA512 and SHA3 support", | |
| 1131 | 1034 | .dependencies = featureSet(&[_]Feature{ |
| 1132 | 1035 | .sha2, |
| 1133 | 1036 | }), |
| ... | ... | @@ -1149,14 +1052,14 @@ pub const all_features = blk: { |
| 1149 | 1052 | }; |
| 1150 | 1053 | result[@intFromEnum(Feature.sm4)] = .{ |
| 1151 | 1054 | .llvm_name = "sm4", |
| 1152 | .description = "Enable SM3 and SM4 support (FEAT_SM4, FEAT_SM3)", | |
| 1055 | .description = "Enable SM3 and SM4 support", | |
| 1153 | 1056 | .dependencies = featureSet(&[_]Feature{ |
| 1154 | 1057 | .neon, |
| 1155 | 1058 | }), |
| 1156 | 1059 | }; |
| 1157 | 1060 | result[@intFromEnum(Feature.sme)] = .{ |
| 1158 | 1061 | .llvm_name = "sme", |
| 1159 | .description = "Enable Scalable Matrix Extension (SME) (FEAT_SME)", | |
| 1062 | .description = "Enable Scalable Matrix Extension (SME)", | |
| 1160 | 1063 | .dependencies = featureSet(&[_]Feature{ |
| 1161 | 1064 | .bf16, |
| 1162 | 1065 | .use_scalar_inc_vl, |
| ... | ... | @@ -1171,34 +1074,43 @@ pub const all_features = blk: { |
| 1171 | 1074 | }; |
| 1172 | 1075 | result[@intFromEnum(Feature.sme2p1)] = .{ |
| 1173 | 1076 | .llvm_name = "sme2p1", |
| 1174 | .description = "Enable Scalable Matrix Extension 2.1 (FEAT_SME2p1) instructions", | |
| 1077 | .description = "Enable Scalable Matrix Extension 2.1 instructions", | |
| 1078 | .dependencies = featureSet(&[_]Feature{ | |
| 1079 | .sme2, | |
| 1080 | }), | |
| 1081 | }; | |
| 1082 | result[@intFromEnum(Feature.sme_b16b16)] = .{ | |
| 1083 | .llvm_name = "sme-b16b16", | |
| 1084 | .description = "Enable SME2.1 ZA-targeting non-widening BFloat16 instructions", | |
| 1175 | 1085 | .dependencies = featureSet(&[_]Feature{ |
| 1086 | .b16b16, | |
| 1176 | 1087 | .sme2, |
| 1177 | 1088 | }), |
| 1178 | 1089 | }; |
| 1179 | 1090 | result[@intFromEnum(Feature.sme_f16f16)] = .{ |
| 1180 | 1091 | .llvm_name = "sme-f16f16", |
| 1181 | .description = "Enable SME2.1 non-widening Float16 instructions (FEAT_SME_F16F16)", | |
| 1182 | .dependencies = featureSet(&[_]Feature{}), | |
| 1092 | .description = "Enable SME non-widening Float16 instructions", | |
| 1093 | .dependencies = featureSet(&[_]Feature{ | |
| 1094 | .sme2, | |
| 1095 | }), | |
| 1183 | 1096 | }; |
| 1184 | 1097 | result[@intFromEnum(Feature.sme_f64f64)] = .{ |
| 1185 | 1098 | .llvm_name = "sme-f64f64", |
| 1186 | .description = "Enable Scalable Matrix Extension (SME) F64F64 instructions (FEAT_SME_F64F64)", | |
| 1099 | .description = "Enable Scalable Matrix Extension (SME) F64F64 instructions", | |
| 1187 | 1100 | .dependencies = featureSet(&[_]Feature{ |
| 1188 | 1101 | .sme, |
| 1189 | 1102 | }), |
| 1190 | 1103 | }; |
| 1191 | 1104 | result[@intFromEnum(Feature.sme_f8f16)] = .{ |
| 1192 | 1105 | .llvm_name = "sme-f8f16", |
| 1193 | .description = "Enable Scalable Matrix Extension (SME) F8F16 instructions(FEAT_SME_F8F16)", | |
| 1106 | .description = "Enable Scalable Matrix Extension (SME) F8F16 instructions", | |
| 1194 | 1107 | .dependencies = featureSet(&[_]Feature{ |
| 1195 | .fp8, | |
| 1196 | .sme2, | |
| 1108 | .sme_f8f32, | |
| 1197 | 1109 | }), |
| 1198 | 1110 | }; |
| 1199 | 1111 | result[@intFromEnum(Feature.sme_f8f32)] = .{ |
| 1200 | 1112 | .llvm_name = "sme-f8f32", |
| 1201 | .description = "Enable Scalable Matrix Extension (SME) F8F32 instructions (FEAT_SME_F8F32)", | |
| 1113 | .description = "Enable Scalable Matrix Extension (SME) F8F32 instructions", | |
| 1202 | 1114 | .dependencies = featureSet(&[_]Feature{ |
| 1203 | 1115 | .fp8, |
| 1204 | 1116 | .sme2, |
| ... | ... | @@ -1206,7 +1118,7 @@ pub const all_features = blk: { |
| 1206 | 1118 | }; |
| 1207 | 1119 | result[@intFromEnum(Feature.sme_fa64)] = .{ |
| 1208 | 1120 | .llvm_name = "sme-fa64", |
| 1209 | .description = "Enable the full A64 instruction set in streaming SVE mode (FEAT_SME_FA64)", | |
| 1121 | .description = "Enable the full A64 instruction set in streaming SVE mode", | |
| 1210 | 1122 | .dependencies = featureSet(&[_]Feature{ |
| 1211 | 1123 | .sme, |
| 1212 | 1124 | .sve2, |
| ... | ... | @@ -1214,61 +1126,62 @@ pub const all_features = blk: { |
| 1214 | 1126 | }; |
| 1215 | 1127 | result[@intFromEnum(Feature.sme_i16i64)] = .{ |
| 1216 | 1128 | .llvm_name = "sme-i16i64", |
| 1217 | .description = "Enable Scalable Matrix Extension (SME) I16I64 instructions (FEAT_SME_I16I64)", | |
| 1129 | .description = "Enable Scalable Matrix Extension (SME) I16I64 instructions", | |
| 1218 | 1130 | .dependencies = featureSet(&[_]Feature{ |
| 1219 | 1131 | .sme, |
| 1220 | 1132 | }), |
| 1221 | 1133 | }; |
| 1222 | 1134 | result[@intFromEnum(Feature.sme_lutv2)] = .{ |
| 1223 | 1135 | .llvm_name = "sme-lutv2", |
| 1224 | .description = "Enable Scalable Matrix Extension (SME) LUTv2 instructions (FEAT_SME_LUTv2)", | |
| 1136 | .description = "Enable Scalable Matrix Extension (SME) LUTv2 instructions", | |
| 1225 | 1137 | .dependencies = featureSet(&[_]Feature{}), |
| 1226 | 1138 | }; |
| 1227 | 1139 | result[@intFromEnum(Feature.spe)] = .{ |
| 1228 | 1140 | .llvm_name = "spe", |
| 1229 | .description = "Enable Statistical Profiling extension (FEAT_SPE)", | |
| 1141 | .description = "Enable Statistical Profiling extension", | |
| 1230 | 1142 | .dependencies = featureSet(&[_]Feature{}), |
| 1231 | 1143 | }; |
| 1232 | 1144 | result[@intFromEnum(Feature.spe_eef)] = .{ |
| 1233 | 1145 | .llvm_name = "spe-eef", |
| 1234 | .description = "Enable extra register in the Statistical Profiling Extension (FEAT_SPEv1p2)", | |
| 1146 | .description = "Enable extra register in the Statistical Profiling Extension", | |
| 1235 | 1147 | .dependencies = featureSet(&[_]Feature{}), |
| 1236 | 1148 | }; |
| 1237 | 1149 | result[@intFromEnum(Feature.specres2)] = .{ |
| 1238 | 1150 | .llvm_name = "specres2", |
| 1239 | .description = "Enable Speculation Restriction Instruction (FEAT_SPECRES2)", | |
| 1151 | .description = "Enable Speculation Restriction Instruction", | |
| 1240 | 1152 | .dependencies = featureSet(&[_]Feature{ |
| 1241 | 1153 | .predres, |
| 1242 | 1154 | }), |
| 1243 | 1155 | }; |
| 1244 | 1156 | result[@intFromEnum(Feature.specrestrict)] = .{ |
| 1245 | 1157 | .llvm_name = "specrestrict", |
| 1246 | .description = "Enable architectural speculation restriction (FEAT_CSV2_2)", | |
| 1158 | .description = "Enable architectural speculation restriction", | |
| 1247 | 1159 | .dependencies = featureSet(&[_]Feature{}), |
| 1248 | 1160 | }; |
| 1249 | 1161 | result[@intFromEnum(Feature.ssbs)] = .{ |
| 1250 | 1162 | .llvm_name = "ssbs", |
| 1251 | .description = "Enable Speculative Store Bypass Safe bit (FEAT_SSBS, FEAT_SSBS2)", | |
| 1163 | .description = "Enable Speculative Store Bypass Safe bit", | |
| 1252 | 1164 | .dependencies = featureSet(&[_]Feature{}), |
| 1253 | 1165 | }; |
| 1254 | 1166 | result[@intFromEnum(Feature.ssve_fp8dot2)] = .{ |
| 1255 | 1167 | .llvm_name = "ssve-fp8dot2", |
| 1256 | .description = "Enable SVE2 fp8 2-way dot product instructions (FEAT_SSVE_FP8DOT2)", | |
| 1168 | .description = "Enable SVE2 FP8 2-way dot product instructions", | |
| 1257 | 1169 | .dependencies = featureSet(&[_]Feature{ |
| 1258 | .sme2, | |
| 1170 | .ssve_fp8dot4, | |
| 1259 | 1171 | }), |
| 1260 | 1172 | }; |
| 1261 | 1173 | result[@intFromEnum(Feature.ssve_fp8dot4)] = .{ |
| 1262 | 1174 | .llvm_name = "ssve-fp8dot4", |
| 1263 | .description = "Enable SVE2 fp8 4-way dot product instructions (FEAT_SSVE_FP8DOT4)", | |
| 1175 | .description = "Enable SVE2 FP8 4-way dot product instructions", | |
| 1264 | 1176 | .dependencies = featureSet(&[_]Feature{ |
| 1265 | .sme2, | |
| 1177 | .ssve_fp8fma, | |
| 1266 | 1178 | }), |
| 1267 | 1179 | }; |
| 1268 | 1180 | result[@intFromEnum(Feature.ssve_fp8fma)] = .{ |
| 1269 | 1181 | .llvm_name = "ssve-fp8fma", |
| 1270 | .description = "Enable SVE2 fp8 multiply-add instructions (FEAT_SSVE_FP8FMA)", | |
| 1182 | .description = "Enable SVE2 FP8 multiply-add instructions", | |
| 1271 | 1183 | .dependencies = featureSet(&[_]Feature{ |
| 1184 | .fp8, | |
| 1272 | 1185 | .sme2, |
| 1273 | 1186 | }), |
| 1274 | 1187 | }; |
| ... | ... | @@ -1289,14 +1202,14 @@ pub const all_features = blk: { |
| 1289 | 1202 | }; |
| 1290 | 1203 | result[@intFromEnum(Feature.sve)] = .{ |
| 1291 | 1204 | .llvm_name = "sve", |
| 1292 | .description = "Enable Scalable Vector Extension (SVE) instructions (FEAT_SVE)", | |
| 1205 | .description = "Enable Scalable Vector Extension (SVE) instructions", | |
| 1293 | 1206 | .dependencies = featureSet(&[_]Feature{ |
| 1294 | 1207 | .fullfp16, |
| 1295 | 1208 | }), |
| 1296 | 1209 | }; |
| 1297 | 1210 | result[@intFromEnum(Feature.sve2)] = .{ |
| 1298 | 1211 | .llvm_name = "sve2", |
| 1299 | .description = "Enable Scalable Vector Extension 2 (SVE2) instructions (FEAT_SVE2)", | |
| 1212 | .description = "Enable Scalable Vector Extension 2 (SVE2) instructions", | |
| 1300 | 1213 | .dependencies = featureSet(&[_]Feature{ |
| 1301 | 1214 | .sve, |
| 1302 | 1215 | .use_scalar_inc_vl, |
| ... | ... | @@ -1304,7 +1217,7 @@ pub const all_features = blk: { |
| 1304 | 1217 | }; |
| 1305 | 1218 | result[@intFromEnum(Feature.sve2_aes)] = .{ |
| 1306 | 1219 | .llvm_name = "sve2-aes", |
| 1307 | .description = "Enable AES SVE2 instructions (FEAT_SVE_AES, FEAT_SVE_PMULL128)", | |
| 1220 | .description = "Enable AES SVE2 instructions", | |
| 1308 | 1221 | .dependencies = featureSet(&[_]Feature{ |
| 1309 | 1222 | .aes, |
| 1310 | 1223 | .sve2, |
| ... | ... | @@ -1312,14 +1225,14 @@ pub const all_features = blk: { |
| 1312 | 1225 | }; |
| 1313 | 1226 | result[@intFromEnum(Feature.sve2_bitperm)] = .{ |
| 1314 | 1227 | .llvm_name = "sve2-bitperm", |
| 1315 | .description = "Enable bit permutation SVE2 instructions (FEAT_SVE_BitPerm)", | |
| 1228 | .description = "Enable bit permutation SVE2 instructions", | |
| 1316 | 1229 | .dependencies = featureSet(&[_]Feature{ |
| 1317 | 1230 | .sve2, |
| 1318 | 1231 | }), |
| 1319 | 1232 | }; |
| 1320 | 1233 | result[@intFromEnum(Feature.sve2_sha3)] = .{ |
| 1321 | 1234 | .llvm_name = "sve2-sha3", |
| 1322 | .description = "Enable SHA3 SVE2 instructions (FEAT_SVE_SHA3)", | |
| 1235 | .description = "Enable SHA3 SVE2 instructions", | |
| 1323 | 1236 | .dependencies = featureSet(&[_]Feature{ |
| 1324 | 1237 | .sha3, |
| 1325 | 1238 | .sve2, |
| ... | ... | @@ -1327,7 +1240,7 @@ pub const all_features = blk: { |
| 1327 | 1240 | }; |
| 1328 | 1241 | result[@intFromEnum(Feature.sve2_sm4)] = .{ |
| 1329 | 1242 | .llvm_name = "sve2-sm4", |
| 1330 | .description = "Enable SM4 SVE2 instructions (FEAT_SVE_SM4)", | |
| 1243 | .description = "Enable SM4 SVE2 instructions", | |
| 1331 | 1244 | .dependencies = featureSet(&[_]Feature{ |
| 1332 | 1245 | .sm4, |
| 1333 | 1246 | .sve2, |
| ... | ... | @@ -1340,6 +1253,13 @@ pub const all_features = blk: { |
| 1340 | 1253 | .sve2, |
| 1341 | 1254 | }), |
| 1342 | 1255 | }; |
| 1256 | result[@intFromEnum(Feature.sve_b16b16)] = .{ | |
| 1257 | .llvm_name = "sve-b16b16", | |
| 1258 | .description = "Enable SVE2 non-widening and SME2 Z-targeting non-widening BFloat16 instructions", | |
| 1259 | .dependencies = featureSet(&[_]Feature{ | |
| 1260 | .b16b16, | |
| 1261 | }), | |
| 1262 | }; | |
| 1343 | 1263 | result[@intFromEnum(Feature.tagged_globals)] = .{ |
| 1344 | 1264 | .llvm_name = "tagged-globals", |
| 1345 | 1265 | .description = "Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits", |
| ... | ... | @@ -1347,22 +1267,22 @@ pub const all_features = blk: { |
| 1347 | 1267 | }; |
| 1348 | 1268 | result[@intFromEnum(Feature.the)] = .{ |
| 1349 | 1269 | .llvm_name = "the", |
| 1350 | .description = "Enable Armv8.9-A Translation Hardening Extension (FEAT_THE)", | |
| 1270 | .description = "Enable Armv8.9-A Translation Hardening Extension", | |
| 1351 | 1271 | .dependencies = featureSet(&[_]Feature{}), |
| 1352 | 1272 | }; |
| 1353 | 1273 | result[@intFromEnum(Feature.tlb_rmi)] = .{ |
| 1354 | 1274 | .llvm_name = "tlb-rmi", |
| 1355 | .description = "Enable v8.4-A TLB Range and Maintenance Instructions (FEAT_TLBIOS, FEAT_TLBIRANGE)", | |
| 1275 | .description = "Enable Armv8.4-A TLB Range and Maintenance instructions", | |
| 1356 | 1276 | .dependencies = featureSet(&[_]Feature{}), |
| 1357 | 1277 | }; |
| 1358 | 1278 | result[@intFromEnum(Feature.tlbiw)] = .{ |
| 1359 | 1279 | .llvm_name = "tlbiw", |
| 1360 | .description = "Enable ARMv9.5-A TLBI VMALL for Dirty State (FEAT_TLBIW)", | |
| 1280 | .description = "Enable Armv9.5-A TLBI VMALL for Dirty State", | |
| 1361 | 1281 | .dependencies = featureSet(&[_]Feature{}), |
| 1362 | 1282 | }; |
| 1363 | 1283 | result[@intFromEnum(Feature.tme)] = .{ |
| 1364 | 1284 | .llvm_name = "tme", |
| 1365 | .description = "Enable Transactional Memory Extension (FEAT_TME)", | |
| 1285 | .description = "Enable Transactional Memory Extension", | |
| 1366 | 1286 | .dependencies = featureSet(&[_]Feature{}), |
| 1367 | 1287 | }; |
| 1368 | 1288 | result[@intFromEnum(Feature.tpidr_el1)] = .{ |
| ... | ... | @@ -1387,17 +1307,17 @@ pub const all_features = blk: { |
| 1387 | 1307 | }; |
| 1388 | 1308 | result[@intFromEnum(Feature.tracev8_4)] = .{ |
| 1389 | 1309 | .llvm_name = "tracev8.4", |
| 1390 | .description = "Enable v8.4-A Trace extension (FEAT_TRF)", | |
| 1310 | .description = "Enable Armv8.4-A Trace extension", | |
| 1391 | 1311 | .dependencies = featureSet(&[_]Feature{}), |
| 1392 | 1312 | }; |
| 1393 | 1313 | result[@intFromEnum(Feature.trbe)] = .{ |
| 1394 | 1314 | .llvm_name = "trbe", |
| 1395 | .description = "Enable Trace Buffer Extension (FEAT_TRBE)", | |
| 1315 | .description = "Enable Trace Buffer Extension", | |
| 1396 | 1316 | .dependencies = featureSet(&[_]Feature{}), |
| 1397 | 1317 | }; |
| 1398 | 1318 | result[@intFromEnum(Feature.uaops)] = .{ |
| 1399 | 1319 | .llvm_name = "uaops", |
| 1400 | .description = "Enable v8.2 UAO PState (FEAT_UAO)", | |
| 1320 | .description = "Enable Armv8.2-A UAO PState", | |
| 1401 | 1321 | .dependencies = featureSet(&[_]Feature{}), |
| 1402 | 1322 | }; |
| 1403 | 1323 | result[@intFromEnum(Feature.use_experimental_zeroing_pseudos)] = .{ |
| ... | ... | @@ -1405,6 +1325,11 @@ pub const all_features = blk: { |
| 1405 | 1325 | .description = "Hint to the compiler that the MOVPRFX instruction is merged with destructive operations", |
| 1406 | 1326 | .dependencies = featureSet(&[_]Feature{}), |
| 1407 | 1327 | }; |
| 1328 | result[@intFromEnum(Feature.use_fixed_over_scalable_if_equal_cost)] = .{ | |
| 1329 | .llvm_name = "use-fixed-over-scalable-if-equal-cost", | |
| 1330 | .description = "Prefer fixed width loop vectorization over scalable if the cost-model assigns equal costs", | |
| 1331 | .dependencies = featureSet(&[_]Feature{}), | |
| 1332 | }; | |
| 1408 | 1333 | result[@intFromEnum(Feature.use_postra_scheduler)] = .{ |
| 1409 | 1334 | .llvm_name = "use-postra-scheduler", |
| 1410 | 1335 | .description = "Schedule again after register allocation", |
| ... | ... | @@ -1422,7 +1347,7 @@ pub const all_features = blk: { |
| 1422 | 1347 | }; |
| 1423 | 1348 | result[@intFromEnum(Feature.v8_1a)] = .{ |
| 1424 | 1349 | .llvm_name = "v8.1a", |
| 1425 | .description = "Support ARM v8.1a instructions", | |
| 1350 | .description = "Support ARM v8.1a architecture", | |
| 1426 | 1351 | .dependencies = featureSet(&[_]Feature{ |
| 1427 | 1352 | .crc, |
| 1428 | 1353 | .lor, |
| ... | ... | @@ -1435,7 +1360,7 @@ pub const all_features = blk: { |
| 1435 | 1360 | }; |
| 1436 | 1361 | result[@intFromEnum(Feature.v8_2a)] = .{ |
| 1437 | 1362 | .llvm_name = "v8.2a", |
| 1438 | .description = "Support ARM v8.2a instructions", | |
| 1363 | .description = "Support ARM v8.2a architecture", | |
| 1439 | 1364 | .dependencies = featureSet(&[_]Feature{ |
| 1440 | 1365 | .ccpp, |
| 1441 | 1366 | .pan_rwv, |
| ... | ... | @@ -1446,9 +1371,8 @@ pub const all_features = blk: { |
| 1446 | 1371 | }; |
| 1447 | 1372 | result[@intFromEnum(Feature.v8_3a)] = .{ |
| 1448 | 1373 | .llvm_name = "v8.3a", |
| 1449 | .description = "Support ARM v8.3a instructions", | |
| 1374 | .description = "Support ARM v8.3a architecture", | |
| 1450 | 1375 | .dependencies = featureSet(&[_]Feature{ |
| 1451 | .ccidx, | |
| 1452 | 1376 | .complxnum, |
| 1453 | 1377 | .jsconv, |
| 1454 | 1378 | .pauth, |
| ... | ... | @@ -1458,7 +1382,7 @@ pub const all_features = blk: { |
| 1458 | 1382 | }; |
| 1459 | 1383 | result[@intFromEnum(Feature.v8_4a)] = .{ |
| 1460 | 1384 | .llvm_name = "v8.4a", |
| 1461 | .description = "Support ARM v8.4a instructions", | |
| 1385 | .description = "Support ARM v8.4a architecture", | |
| 1462 | 1386 | .dependencies = featureSet(&[_]Feature{ |
| 1463 | 1387 | .am, |
| 1464 | 1388 | .dit, |
| ... | ... | @@ -1476,7 +1400,7 @@ pub const all_features = blk: { |
| 1476 | 1400 | }; |
| 1477 | 1401 | result[@intFromEnum(Feature.v8_5a)] = .{ |
| 1478 | 1402 | .llvm_name = "v8.5a", |
| 1479 | .description = "Support ARM v8.5a instructions", | |
| 1403 | .description = "Support ARM v8.5a architecture", | |
| 1480 | 1404 | .dependencies = featureSet(&[_]Feature{ |
| 1481 | 1405 | .altnzcv, |
| 1482 | 1406 | .bti, |
| ... | ... | @@ -1485,13 +1409,12 @@ pub const all_features = blk: { |
| 1485 | 1409 | .predres, |
| 1486 | 1410 | .sb, |
| 1487 | 1411 | .specrestrict, |
| 1488 | .ssbs, | |
| 1489 | 1412 | .v8_4a, |
| 1490 | 1413 | }), |
| 1491 | 1414 | }; |
| 1492 | 1415 | result[@intFromEnum(Feature.v8_6a)] = .{ |
| 1493 | 1416 | .llvm_name = "v8.6a", |
| 1494 | .description = "Support ARM v8.6a instructions", | |
| 1417 | .description = "Support ARM v8.6a architecture", | |
| 1495 | 1418 | .dependencies = featureSet(&[_]Feature{ |
| 1496 | 1419 | .amvs, |
| 1497 | 1420 | .bf16, |
| ... | ... | @@ -1503,7 +1426,7 @@ pub const all_features = blk: { |
| 1503 | 1426 | }; |
| 1504 | 1427 | result[@intFromEnum(Feature.v8_7a)] = .{ |
| 1505 | 1428 | .llvm_name = "v8.7a", |
| 1506 | .description = "Support ARM v8.7a instructions", | |
| 1429 | .description = "Support ARM v8.7a architecture", | |
| 1507 | 1430 | .dependencies = featureSet(&[_]Feature{ |
| 1508 | 1431 | .hcx, |
| 1509 | 1432 | .v8_6a, |
| ... | ... | @@ -1513,7 +1436,7 @@ pub const all_features = blk: { |
| 1513 | 1436 | }; |
| 1514 | 1437 | result[@intFromEnum(Feature.v8_8a)] = .{ |
| 1515 | 1438 | .llvm_name = "v8.8a", |
| 1516 | .description = "Support ARM v8.8a instructions", | |
| 1439 | .description = "Support ARM v8.8a architecture", | |
| 1517 | 1440 | .dependencies = featureSet(&[_]Feature{ |
| 1518 | 1441 | .hbc, |
| 1519 | 1442 | .mops, |
| ... | ... | @@ -1523,7 +1446,7 @@ pub const all_features = blk: { |
| 1523 | 1446 | }; |
| 1524 | 1447 | result[@intFromEnum(Feature.v8_9a)] = .{ |
| 1525 | 1448 | .llvm_name = "v8.9a", |
| 1526 | .description = "Support ARM v8.9a instructions", | |
| 1449 | .description = "Support ARM v8.9a architecture", | |
| 1527 | 1450 | .dependencies = featureSet(&[_]Feature{ |
| 1528 | 1451 | .chk, |
| 1529 | 1452 | .clrbhb, |
| ... | ... | @@ -1536,7 +1459,7 @@ pub const all_features = blk: { |
| 1536 | 1459 | }; |
| 1537 | 1460 | result[@intFromEnum(Feature.v8a)] = .{ |
| 1538 | 1461 | .llvm_name = "v8a", |
| 1539 | .description = "Support ARM v8.0a instructions", | |
| 1462 | .description = "Support ARM v8a architecture", | |
| 1540 | 1463 | .dependencies = featureSet(&[_]Feature{ |
| 1541 | 1464 | .el2vmsa, |
| 1542 | 1465 | .el3, |
| ... | ... | @@ -1545,23 +1468,18 @@ pub const all_features = blk: { |
| 1545 | 1468 | }; |
| 1546 | 1469 | result[@intFromEnum(Feature.v8r)] = .{ |
| 1547 | 1470 | .llvm_name = "v8r", |
| 1548 | .description = "Support ARM v8r instructions", | |
| 1471 | .description = "Support ARM v8r architecture", | |
| 1549 | 1472 | .dependencies = featureSet(&[_]Feature{ |
| 1550 | .ccidx, | |
| 1551 | 1473 | .ccpp, |
| 1552 | .complxnum, | |
| 1553 | 1474 | .contextidr_el2, |
| 1554 | 1475 | .crc, |
| 1555 | 1476 | .dit, |
| 1556 | .dotprod, | |
| 1557 | 1477 | .flagm, |
| 1558 | .jsconv, | |
| 1559 | 1478 | .lse, |
| 1560 | 1479 | .pan_rwv, |
| 1561 | 1480 | .pauth, |
| 1562 | 1481 | .ras, |
| 1563 | 1482 | .rcpc_immo, |
| 1564 | .rdm, | |
| 1565 | 1483 | .sel2, |
| 1566 | 1484 | .specrestrict, |
| 1567 | 1485 | .tlb_rmi, |
| ... | ... | @@ -1571,7 +1489,7 @@ pub const all_features = blk: { |
| 1571 | 1489 | }; |
| 1572 | 1490 | result[@intFromEnum(Feature.v9_1a)] = .{ |
| 1573 | 1491 | .llvm_name = "v9.1a", |
| 1574 | .description = "Support ARM v9.1a instructions", | |
| 1492 | .description = "Support ARM v9.1a architecture", | |
| 1575 | 1493 | .dependencies = featureSet(&[_]Feature{ |
| 1576 | 1494 | .v8_6a, |
| 1577 | 1495 | .v9a, |
| ... | ... | @@ -1579,7 +1497,7 @@ pub const all_features = blk: { |
| 1579 | 1497 | }; |
| 1580 | 1498 | result[@intFromEnum(Feature.v9_2a)] = .{ |
| 1581 | 1499 | .llvm_name = "v9.2a", |
| 1582 | .description = "Support ARM v9.2a instructions", | |
| 1500 | .description = "Support ARM v9.2a architecture", | |
| 1583 | 1501 | .dependencies = featureSet(&[_]Feature{ |
| 1584 | 1502 | .v8_7a, |
| 1585 | 1503 | .v9_1a, |
| ... | ... | @@ -1587,7 +1505,7 @@ pub const all_features = blk: { |
| 1587 | 1505 | }; |
| 1588 | 1506 | result[@intFromEnum(Feature.v9_3a)] = .{ |
| 1589 | 1507 | .llvm_name = "v9.3a", |
| 1590 | .description = "Support ARM v9.3a instructions", | |
| 1508 | .description = "Support ARM v9.3a architecture", | |
| 1591 | 1509 | .dependencies = featureSet(&[_]Feature{ |
| 1592 | 1510 | .v8_8a, |
| 1593 | 1511 | .v9_2a, |
| ... | ... | @@ -1595,7 +1513,7 @@ pub const all_features = blk: { |
| 1595 | 1513 | }; |
| 1596 | 1514 | result[@intFromEnum(Feature.v9_4a)] = .{ |
| 1597 | 1515 | .llvm_name = "v9.4a", |
| 1598 | .description = "Support ARM v9.4a instructions", | |
| 1516 | .description = "Support ARM v9.4a architecture", | |
| 1599 | 1517 | .dependencies = featureSet(&[_]Feature{ |
| 1600 | 1518 | .v8_9a, |
| 1601 | 1519 | .v9_3a, |
| ... | ... | @@ -1603,7 +1521,7 @@ pub const all_features = blk: { |
| 1603 | 1521 | }; |
| 1604 | 1522 | result[@intFromEnum(Feature.v9_5a)] = .{ |
| 1605 | 1523 | .llvm_name = "v9.5a", |
| 1606 | .description = "Support ARM v9.5a instructions", | |
| 1524 | .description = "Support ARM v9.5a architecture", | |
| 1607 | 1525 | .dependencies = featureSet(&[_]Feature{ |
| 1608 | 1526 | .cpa, |
| 1609 | 1527 | .v9_4a, |
| ... | ... | @@ -1611,28 +1529,26 @@ pub const all_features = blk: { |
| 1611 | 1529 | }; |
| 1612 | 1530 | result[@intFromEnum(Feature.v9a)] = .{ |
| 1613 | 1531 | .llvm_name = "v9a", |
| 1614 | .description = "Support ARM v9a instructions", | |
| 1532 | .description = "Support ARM v9a architecture", | |
| 1615 | 1533 | .dependencies = featureSet(&[_]Feature{ |
| 1616 | .mec, | |
| 1617 | .sve2, | |
| 1618 | 1534 | .v8_5a, |
| 1619 | 1535 | }), |
| 1620 | 1536 | }; |
| 1621 | 1537 | result[@intFromEnum(Feature.vh)] = .{ |
| 1622 | 1538 | .llvm_name = "vh", |
| 1623 | .description = "Enables ARM v8.1 Virtual Host extension (FEAT_VHE)", | |
| 1539 | .description = "Enable Armv8.1-A Virtual Host extension", | |
| 1624 | 1540 | .dependencies = featureSet(&[_]Feature{ |
| 1625 | 1541 | .contextidr_el2, |
| 1626 | 1542 | }), |
| 1627 | 1543 | }; |
| 1628 | 1544 | result[@intFromEnum(Feature.wfxt)] = .{ |
| 1629 | 1545 | .llvm_name = "wfxt", |
| 1630 | .description = "Enable Armv8.7-A WFET and WFIT instruction (FEAT_WFxT)", | |
| 1546 | .description = "Enable Armv8.7-A WFET and WFIT instruction", | |
| 1631 | 1547 | .dependencies = featureSet(&[_]Feature{}), |
| 1632 | 1548 | }; |
| 1633 | 1549 | result[@intFromEnum(Feature.xs)] = .{ |
| 1634 | 1550 | .llvm_name = "xs", |
| 1635 | .description = "Enable Armv8.7-A limited-TLB-maintenance instruction (FEAT_XS)", | |
| 1551 | .description = "Enable Armv8.7-A limited-TLB-maintenance instruction", | |
| 1636 | 1552 | .dependencies = featureSet(&[_]Feature{}), |
| 1637 | 1553 | }; |
| 1638 | 1554 | result[@intFromEnum(Feature.zcm)] = .{ |
| ... | ... | @@ -1670,6 +1586,7 @@ pub const cpu = struct { |
| 1670 | 1586 | .name = "a64fx", |
| 1671 | 1587 | .llvm_name = "a64fx", |
| 1672 | 1588 | .features = featureSet(&[_]Feature{ |
| 1589 | .aes, | |
| 1673 | 1590 | .aggressive_fma, |
| 1674 | 1591 | .arith_bcc_fusion, |
| 1675 | 1592 | .complxnum, |
| ... | ... | @@ -1686,19 +1603,22 @@ pub const cpu = struct { |
| 1686 | 1603 | .name = "ampere1", |
| 1687 | 1604 | .llvm_name = "ampere1", |
| 1688 | 1605 | .features = featureSet(&[_]Feature{ |
| 1689 | .addr_lsl_fast, | |
| 1690 | 1606 | .aes, |
| 1691 | 1607 | .aggressive_fma, |
| 1692 | 1608 | .alu_lsl_fast, |
| 1693 | 1609 | .arith_bcc_fusion, |
| 1610 | .ccidx, | |
| 1694 | 1611 | .cmp_bcc_fusion, |
| 1612 | .fullfp16, | |
| 1695 | 1613 | .fuse_address, |
| 1614 | .fuse_adrp_add, | |
| 1696 | 1615 | .fuse_aes, |
| 1697 | 1616 | .fuse_literals, |
| 1698 | 1617 | .ldp_aligned_only, |
| 1699 | 1618 | .perfmon, |
| 1700 | 1619 | .rand, |
| 1701 | 1620 | .sha3, |
| 1621 | .ssbs, | |
| 1702 | 1622 | .store_pair_suppress, |
| 1703 | 1623 | .stp_aligned_only, |
| 1704 | 1624 | .use_postra_scheduler, |
| ... | ... | @@ -1709,13 +1629,16 @@ pub const cpu = struct { |
| 1709 | 1629 | .name = "ampere1a", |
| 1710 | 1630 | .llvm_name = "ampere1a", |
| 1711 | 1631 | .features = featureSet(&[_]Feature{ |
| 1712 | .addr_lsl_fast, | |
| 1713 | 1632 | .aes, |
| 1714 | 1633 | .aggressive_fma, |
| 1715 | 1634 | .alu_lsl_fast, |
| 1716 | 1635 | .arith_bcc_fusion, |
| 1636 | .ccidx, | |
| 1717 | 1637 | .cmp_bcc_fusion, |
| 1638 | .fullfp16, | |
| 1718 | 1639 | .fuse_address, |
| 1640 | .fuse_addsub_2reg_const1, | |
| 1641 | .fuse_adrp_add, | |
| 1719 | 1642 | .fuse_aes, |
| 1720 | 1643 | .fuse_literals, |
| 1721 | 1644 | .ldp_aligned_only, |
| ... | ... | @@ -1724,6 +1647,7 @@ pub const cpu = struct { |
| 1724 | 1647 | .rand, |
| 1725 | 1648 | .sha3, |
| 1726 | 1649 | .sm4, |
| 1650 | .ssbs, | |
| 1727 | 1651 | .store_pair_suppress, |
| 1728 | 1652 | .stp_aligned_only, |
| 1729 | 1653 | .use_postra_scheduler, |
| ... | ... | @@ -1734,11 +1658,11 @@ pub const cpu = struct { |
| 1734 | 1658 | .name = "ampere1b", |
| 1735 | 1659 | .llvm_name = "ampere1b", |
| 1736 | 1660 | .features = featureSet(&[_]Feature{ |
| 1737 | .addr_lsl_fast, | |
| 1738 | 1661 | .aes, |
| 1739 | 1662 | .aggressive_fma, |
| 1740 | 1663 | .alu_lsl_fast, |
| 1741 | 1664 | .arith_bcc_fusion, |
| 1665 | .ccidx, | |
| 1742 | 1666 | .cmp_bcc_fusion, |
| 1743 | 1667 | .cssc, |
| 1744 | 1668 | .enable_select_opt, |
| ... | ... | @@ -1754,6 +1678,7 @@ pub const cpu = struct { |
| 1754 | 1678 | .rand, |
| 1755 | 1679 | .sha3, |
| 1756 | 1680 | .sm4, |
| 1681 | .ssbs, | |
| 1757 | 1682 | .store_pair_suppress, |
| 1758 | 1683 | .stp_aligned_only, |
| 1759 | 1684 | .use_postra_scheduler, |
| ... | ... | @@ -1764,11 +1689,11 @@ pub const cpu = struct { |
| 1764 | 1689 | .name = "apple_a10", |
| 1765 | 1690 | .llvm_name = "apple-a10", |
| 1766 | 1691 | .features = featureSet(&[_]Feature{ |
| 1692 | .aes, | |
| 1767 | 1693 | .alternate_sextload_cvt_f32_pattern, |
| 1768 | 1694 | .arith_bcc_fusion, |
| 1769 | 1695 | .arith_cbz_fusion, |
| 1770 | 1696 | .crc, |
| 1771 | .crypto, | |
| 1772 | 1697 | .disable_latency_sched_heuristic, |
| 1773 | 1698 | .fuse_aes, |
| 1774 | 1699 | .fuse_crypto_eor, |
| ... | ... | @@ -1776,6 +1701,7 @@ pub const cpu = struct { |
| 1776 | 1701 | .pan, |
| 1777 | 1702 | .perfmon, |
| 1778 | 1703 | .rdm, |
| 1704 | .sha2, | |
| 1779 | 1705 | .store_pair_suppress, |
| 1780 | 1706 | .v8a, |
| 1781 | 1707 | .vh, |
| ... | ... | @@ -1787,15 +1713,16 @@ pub const cpu = struct { |
| 1787 | 1713 | .name = "apple_a11", |
| 1788 | 1714 | .llvm_name = "apple-a11", |
| 1789 | 1715 | .features = featureSet(&[_]Feature{ |
| 1716 | .aes, | |
| 1790 | 1717 | .alternate_sextload_cvt_f32_pattern, |
| 1791 | 1718 | .arith_bcc_fusion, |
| 1792 | 1719 | .arith_cbz_fusion, |
| 1793 | .crypto, | |
| 1794 | 1720 | .disable_latency_sched_heuristic, |
| 1795 | 1721 | .fullfp16, |
| 1796 | 1722 | .fuse_aes, |
| 1797 | 1723 | .fuse_crypto_eor, |
| 1798 | 1724 | .perfmon, |
| 1725 | .sha2, | |
| 1799 | 1726 | .store_pair_suppress, |
| 1800 | 1727 | .v8_2a, |
| 1801 | 1728 | .zcm, |
| ... | ... | @@ -1806,15 +1733,16 @@ pub const cpu = struct { |
| 1806 | 1733 | .name = "apple_a12", |
| 1807 | 1734 | .llvm_name = "apple-a12", |
| 1808 | 1735 | .features = featureSet(&[_]Feature{ |
| 1736 | .aes, | |
| 1809 | 1737 | .alternate_sextload_cvt_f32_pattern, |
| 1810 | 1738 | .arith_bcc_fusion, |
| 1811 | 1739 | .arith_cbz_fusion, |
| 1812 | .crypto, | |
| 1813 | 1740 | .disable_latency_sched_heuristic, |
| 1814 | 1741 | .fullfp16, |
| 1815 | 1742 | .fuse_aes, |
| 1816 | 1743 | .fuse_crypto_eor, |
| 1817 | 1744 | .perfmon, |
| 1745 | .sha2, | |
| 1818 | 1746 | .store_pair_suppress, |
| 1819 | 1747 | .v8_3a, |
| 1820 | 1748 | .zcm, |
| ... | ... | @@ -1825,10 +1753,10 @@ pub const cpu = struct { |
| 1825 | 1753 | .name = "apple_a13", |
| 1826 | 1754 | .llvm_name = "apple-a13", |
| 1827 | 1755 | .features = featureSet(&[_]Feature{ |
| 1756 | .aes, | |
| 1828 | 1757 | .alternate_sextload_cvt_f32_pattern, |
| 1829 | 1758 | .arith_bcc_fusion, |
| 1830 | 1759 | .arith_cbz_fusion, |
| 1831 | .crypto, | |
| 1832 | 1760 | .disable_latency_sched_heuristic, |
| 1833 | 1761 | .fp16fml, |
| 1834 | 1762 | .fuse_aes, |
| ... | ... | @@ -1845,18 +1773,17 @@ pub const cpu = struct { |
| 1845 | 1773 | .name = "apple_a14", |
| 1846 | 1774 | .llvm_name = "apple-a14", |
| 1847 | 1775 | .features = featureSet(&[_]Feature{ |
| 1776 | .aes, | |
| 1848 | 1777 | .aggressive_fma, |
| 1849 | 1778 | .alternate_sextload_cvt_f32_pattern, |
| 1850 | 1779 | .altnzcv, |
| 1851 | 1780 | .arith_bcc_fusion, |
| 1852 | 1781 | .arith_cbz_fusion, |
| 1853 | 1782 | .ccdp, |
| 1854 | .crypto, | |
| 1855 | 1783 | .disable_latency_sched_heuristic, |
| 1856 | 1784 | .fp16fml, |
| 1857 | 1785 | .fptoint, |
| 1858 | 1786 | .fuse_address, |
| 1859 | .fuse_adrp_add, | |
| 1860 | 1787 | .fuse_aes, |
| 1861 | 1788 | .fuse_arith_logic, |
| 1862 | 1789 | .fuse_crypto_eor, |
| ... | ... | @@ -1878,10 +1805,10 @@ pub const cpu = struct { |
| 1878 | 1805 | .name = "apple_a15", |
| 1879 | 1806 | .llvm_name = "apple-a15", |
| 1880 | 1807 | .features = featureSet(&[_]Feature{ |
| 1808 | .aes, | |
| 1881 | 1809 | .alternate_sextload_cvt_f32_pattern, |
| 1882 | 1810 | .arith_bcc_fusion, |
| 1883 | 1811 | .arith_cbz_fusion, |
| 1884 | .crypto, | |
| 1885 | 1812 | .disable_latency_sched_heuristic, |
| 1886 | 1813 | .fp16fml, |
| 1887 | 1814 | .fuse_address, |
| ... | ... | @@ -1892,6 +1819,7 @@ pub const cpu = struct { |
| 1892 | 1819 | .fuse_literals, |
| 1893 | 1820 | .perfmon, |
| 1894 | 1821 | .sha3, |
| 1822 | .ssbs, | |
| 1895 | 1823 | .store_pair_suppress, |
| 1896 | 1824 | .v8_6a, |
| 1897 | 1825 | .zcm, |
| ... | ... | @@ -1902,13 +1830,14 @@ pub const cpu = struct { |
| 1902 | 1830 | .name = "apple_a16", |
| 1903 | 1831 | .llvm_name = "apple-a16", |
| 1904 | 1832 | .features = featureSet(&[_]Feature{ |
| 1833 | .aes, | |
| 1905 | 1834 | .alternate_sextload_cvt_f32_pattern, |
| 1906 | 1835 | .arith_bcc_fusion, |
| 1907 | 1836 | .arith_cbz_fusion, |
| 1908 | .crypto, | |
| 1909 | 1837 | .disable_latency_sched_heuristic, |
| 1910 | 1838 | .fp16fml, |
| 1911 | 1839 | .fuse_address, |
| 1840 | .fuse_adrp_add, | |
| 1912 | 1841 | .fuse_aes, |
| 1913 | 1842 | .fuse_arith_logic, |
| 1914 | 1843 | .fuse_crypto_eor, |
| ... | ... | @@ -1917,6 +1846,7 @@ pub const cpu = struct { |
| 1917 | 1846 | .hcx, |
| 1918 | 1847 | .perfmon, |
| 1919 | 1848 | .sha3, |
| 1849 | .ssbs, | |
| 1920 | 1850 | .store_pair_suppress, |
| 1921 | 1851 | .v8_6a, |
| 1922 | 1852 | .zcm, |
| ... | ... | @@ -1927,13 +1857,14 @@ pub const cpu = struct { |
| 1927 | 1857 | .name = "apple_a17", |
| 1928 | 1858 | .llvm_name = "apple-a17", |
| 1929 | 1859 | .features = featureSet(&[_]Feature{ |
| 1860 | .aes, | |
| 1930 | 1861 | .alternate_sextload_cvt_f32_pattern, |
| 1931 | 1862 | .arith_bcc_fusion, |
| 1932 | 1863 | .arith_cbz_fusion, |
| 1933 | .crypto, | |
| 1934 | 1864 | .disable_latency_sched_heuristic, |
| 1935 | 1865 | .fp16fml, |
| 1936 | 1866 | .fuse_address, |
| 1867 | .fuse_adrp_add, | |
| 1937 | 1868 | .fuse_aes, |
| 1938 | 1869 | .fuse_arith_logic, |
| 1939 | 1870 | .fuse_crypto_eor, |
| ... | ... | @@ -1942,6 +1873,7 @@ pub const cpu = struct { |
| 1942 | 1873 | .hcx, |
| 1943 | 1874 | .perfmon, |
| 1944 | 1875 | .sha3, |
| 1876 | .ssbs, | |
| 1945 | 1877 | .store_pair_suppress, |
| 1946 | 1878 | .v8_6a, |
| 1947 | 1879 | .zcm, |
| ... | ... | @@ -1952,14 +1884,15 @@ pub const cpu = struct { |
| 1952 | 1884 | .name = "apple_a7", |
| 1953 | 1885 | .llvm_name = "apple-a7", |
| 1954 | 1886 | .features = featureSet(&[_]Feature{ |
| 1887 | .aes, | |
| 1955 | 1888 | .alternate_sextload_cvt_f32_pattern, |
| 1956 | 1889 | .arith_bcc_fusion, |
| 1957 | 1890 | .arith_cbz_fusion, |
| 1958 | .crypto, | |
| 1959 | 1891 | .disable_latency_sched_heuristic, |
| 1960 | 1892 | .fuse_aes, |
| 1961 | 1893 | .fuse_crypto_eor, |
| 1962 | 1894 | .perfmon, |
| 1895 | .sha2, | |
| 1963 | 1896 | .store_pair_suppress, |
| 1964 | 1897 | .v8a, |
| 1965 | 1898 | .zcm, |
| ... | ... | @@ -1971,14 +1904,15 @@ pub const cpu = struct { |
| 1971 | 1904 | .name = "apple_a8", |
| 1972 | 1905 | .llvm_name = "apple-a8", |
| 1973 | 1906 | .features = featureSet(&[_]Feature{ |
| 1907 | .aes, | |
| 1974 | 1908 | .alternate_sextload_cvt_f32_pattern, |
| 1975 | 1909 | .arith_bcc_fusion, |
| 1976 | 1910 | .arith_cbz_fusion, |
| 1977 | .crypto, | |
| 1978 | 1911 | .disable_latency_sched_heuristic, |
| 1979 | 1912 | .fuse_aes, |
| 1980 | 1913 | .fuse_crypto_eor, |
| 1981 | 1914 | .perfmon, |
| 1915 | .sha2, | |
| 1982 | 1916 | .store_pair_suppress, |
| 1983 | 1917 | .v8a, |
| 1984 | 1918 | .zcm, |
| ... | ... | @@ -1990,14 +1924,15 @@ pub const cpu = struct { |
| 1990 | 1924 | .name = "apple_a9", |
| 1991 | 1925 | .llvm_name = "apple-a9", |
| 1992 | 1926 | .features = featureSet(&[_]Feature{ |
| 1927 | .aes, | |
| 1993 | 1928 | .alternate_sextload_cvt_f32_pattern, |
| 1994 | 1929 | .arith_bcc_fusion, |
| 1995 | 1930 | .arith_cbz_fusion, |
| 1996 | .crypto, | |
| 1997 | 1931 | .disable_latency_sched_heuristic, |
| 1998 | 1932 | .fuse_aes, |
| 1999 | 1933 | .fuse_crypto_eor, |
| 2000 | 1934 | .perfmon, |
| 1935 | .sha2, | |
| 2001 | 1936 | .store_pair_suppress, |
| 2002 | 1937 | .v8a, |
| 2003 | 1938 | .zcm, |
| ... | ... | @@ -2005,47 +1940,21 @@ pub const cpu = struct { |
| 2005 | 1940 | .zcz_fp_workaround, |
| 2006 | 1941 | }), |
| 2007 | 1942 | }; |
| 2008 | pub const apple_latest = CpuModel{ | |
| 2009 | .name = "apple_latest", | |
| 2010 | .llvm_name = "apple-latest", | |
| 2011 | .features = featureSet(&[_]Feature{ | |
| 2012 | .alternate_sextload_cvt_f32_pattern, | |
| 2013 | .arith_bcc_fusion, | |
| 2014 | .arith_cbz_fusion, | |
| 2015 | .crypto, | |
| 2016 | .disable_latency_sched_heuristic, | |
| 2017 | .fp16fml, | |
| 2018 | .fuse_address, | |
| 2019 | .fuse_aes, | |
| 2020 | .fuse_arith_logic, | |
| 2021 | .fuse_crypto_eor, | |
| 2022 | .fuse_csel, | |
| 2023 | .fuse_literals, | |
| 2024 | .hcx, | |
| 2025 | .perfmon, | |
| 2026 | .sha3, | |
| 2027 | .store_pair_suppress, | |
| 2028 | .v8_6a, | |
| 2029 | .zcm, | |
| 2030 | .zcz, | |
| 2031 | }), | |
| 2032 | }; | |
| 2033 | 1943 | pub const apple_m1 = CpuModel{ |
| 2034 | 1944 | .name = "apple_m1", |
| 2035 | 1945 | .llvm_name = "apple-m1", |
| 2036 | 1946 | .features = featureSet(&[_]Feature{ |
| 1947 | .aes, | |
| 2037 | 1948 | .aggressive_fma, |
| 2038 | 1949 | .alternate_sextload_cvt_f32_pattern, |
| 2039 | 1950 | .altnzcv, |
| 2040 | 1951 | .arith_bcc_fusion, |
| 2041 | 1952 | .arith_cbz_fusion, |
| 2042 | 1953 | .ccdp, |
| 2043 | .crypto, | |
| 2044 | 1954 | .disable_latency_sched_heuristic, |
| 2045 | 1955 | .fp16fml, |
| 2046 | 1956 | .fptoint, |
| 2047 | 1957 | .fuse_address, |
| 2048 | .fuse_adrp_add, | |
| 2049 | 1958 | .fuse_aes, |
| 2050 | 1959 | .fuse_arith_logic, |
| 2051 | 1960 | .fuse_crypto_eor, |
| ... | ... | @@ -2067,10 +1976,10 @@ pub const cpu = struct { |
| 2067 | 1976 | .name = "apple_m2", |
| 2068 | 1977 | .llvm_name = "apple-m2", |
| 2069 | 1978 | .features = featureSet(&[_]Feature{ |
| 1979 | .aes, | |
| 2070 | 1980 | .alternate_sextload_cvt_f32_pattern, |
| 2071 | 1981 | .arith_bcc_fusion, |
| 2072 | 1982 | .arith_cbz_fusion, |
| 2073 | .crypto, | |
| 2074 | 1983 | .disable_latency_sched_heuristic, |
| 2075 | 1984 | .fp16fml, |
| 2076 | 1985 | .fuse_address, |
| ... | ... | @@ -2081,6 +1990,7 @@ pub const cpu = struct { |
| 2081 | 1990 | .fuse_literals, |
| 2082 | 1991 | .perfmon, |
| 2083 | 1992 | .sha3, |
| 1993 | .ssbs, | |
| 2084 | 1994 | .store_pair_suppress, |
| 2085 | 1995 | .v8_6a, |
| 2086 | 1996 | .zcm, |
| ... | ... | @@ -2091,13 +2001,14 @@ pub const cpu = struct { |
| 2091 | 2001 | .name = "apple_m3", |
| 2092 | 2002 | .llvm_name = "apple-m3", |
| 2093 | 2003 | .features = featureSet(&[_]Feature{ |
| 2004 | .aes, | |
| 2094 | 2005 | .alternate_sextload_cvt_f32_pattern, |
| 2095 | 2006 | .arith_bcc_fusion, |
| 2096 | 2007 | .arith_cbz_fusion, |
| 2097 | .crypto, | |
| 2098 | 2008 | .disable_latency_sched_heuristic, |
| 2099 | 2009 | .fp16fml, |
| 2100 | 2010 | .fuse_address, |
| 2011 | .fuse_adrp_add, | |
| 2101 | 2012 | .fuse_aes, |
| 2102 | 2013 | .fuse_arith_logic, |
| 2103 | 2014 | .fuse_crypto_eor, |
| ... | ... | @@ -2106,25 +2017,53 @@ pub const cpu = struct { |
| 2106 | 2017 | .hcx, |
| 2107 | 2018 | .perfmon, |
| 2108 | 2019 | .sha3, |
| 2020 | .ssbs, | |
| 2109 | 2021 | .store_pair_suppress, |
| 2110 | 2022 | .v8_6a, |
| 2111 | 2023 | .zcm, |
| 2112 | 2024 | .zcz, |
| 2113 | 2025 | }), |
| 2114 | 2026 | }; |
| 2027 | pub const apple_m4 = CpuModel{ | |
| 2028 | .name = "apple_m4", | |
| 2029 | .llvm_name = "apple-m4", | |
| 2030 | .features = featureSet(&[_]Feature{ | |
| 2031 | .aes, | |
| 2032 | .alternate_sextload_cvt_f32_pattern, | |
| 2033 | .arith_bcc_fusion, | |
| 2034 | .arith_cbz_fusion, | |
| 2035 | .disable_latency_sched_heuristic, | |
| 2036 | .fp16fml, | |
| 2037 | .fuse_address, | |
| 2038 | .fuse_aes, | |
| 2039 | .fuse_arith_logic, | |
| 2040 | .fuse_crypto_eor, | |
| 2041 | .fuse_csel, | |
| 2042 | .fuse_literals, | |
| 2043 | .perfmon, | |
| 2044 | .sha3, | |
| 2045 | .sme2, | |
| 2046 | .sme_f64f64, | |
| 2047 | .sme_i16i64, | |
| 2048 | .v9_2a, | |
| 2049 | .zcm, | |
| 2050 | .zcz, | |
| 2051 | }), | |
| 2052 | }; | |
| 2115 | 2053 | pub const apple_s4 = CpuModel{ |
| 2116 | 2054 | .name = "apple_s4", |
| 2117 | 2055 | .llvm_name = "apple-s4", |
| 2118 | 2056 | .features = featureSet(&[_]Feature{ |
| 2057 | .aes, | |
| 2119 | 2058 | .alternate_sextload_cvt_f32_pattern, |
| 2120 | 2059 | .arith_bcc_fusion, |
| 2121 | 2060 | .arith_cbz_fusion, |
| 2122 | .crypto, | |
| 2123 | 2061 | .disable_latency_sched_heuristic, |
| 2124 | 2062 | .fullfp16, |
| 2125 | 2063 | .fuse_aes, |
| 2126 | 2064 | .fuse_crypto_eor, |
| 2127 | 2065 | .perfmon, |
| 2066 | .sha2, | |
| 2128 | 2067 | .store_pair_suppress, |
| 2129 | 2068 | .v8_3a, |
| 2130 | 2069 | .zcm, |
| ... | ... | @@ -2135,15 +2074,16 @@ pub const cpu = struct { |
| 2135 | 2074 | .name = "apple_s5", |
| 2136 | 2075 | .llvm_name = "apple-s5", |
| 2137 | 2076 | .features = featureSet(&[_]Feature{ |
| 2077 | .aes, | |
| 2138 | 2078 | .alternate_sextload_cvt_f32_pattern, |
| 2139 | 2079 | .arith_bcc_fusion, |
| 2140 | 2080 | .arith_cbz_fusion, |
| 2141 | .crypto, | |
| 2142 | 2081 | .disable_latency_sched_heuristic, |
| 2143 | 2082 | .fullfp16, |
| 2144 | 2083 | .fuse_aes, |
| 2145 | 2084 | .fuse_crypto_eor, |
| 2146 | 2085 | .perfmon, |
| 2086 | .sha2, | |
| 2147 | 2087 | .store_pair_suppress, |
| 2148 | 2088 | .v8_3a, |
| 2149 | 2089 | .zcm, |
| ... | ... | @@ -2154,18 +2094,42 @@ pub const cpu = struct { |
| 2154 | 2094 | .name = "carmel", |
| 2155 | 2095 | .llvm_name = "carmel", |
| 2156 | 2096 | .features = featureSet(&[_]Feature{ |
| 2157 | .crypto, | |
| 2097 | .aes, | |
| 2158 | 2098 | .fullfp16, |
| 2099 | .sha2, | |
| 2159 | 2100 | .v8_2a, |
| 2160 | 2101 | }), |
| 2161 | 2102 | }; |
| 2103 | pub const cobalt_100 = CpuModel{ | |
| 2104 | .name = "cobalt_100", | |
| 2105 | .llvm_name = "cobalt-100", | |
| 2106 | .features = featureSet(&[_]Feature{ | |
| 2107 | .alu_lsl_fast, | |
| 2108 | .bf16, | |
| 2109 | .ccidx, | |
| 2110 | .enable_select_opt, | |
| 2111 | .ete, | |
| 2112 | .fp16fml, | |
| 2113 | .fuse_adrp_add, | |
| 2114 | .fuse_aes, | |
| 2115 | .i8mm, | |
| 2116 | .mte, | |
| 2117 | .perfmon, | |
| 2118 | .predictable_select_expensive, | |
| 2119 | .ssbs, | |
| 2120 | .sve2_bitperm, | |
| 2121 | .use_postra_scheduler, | |
| 2122 | .v9a, | |
| 2123 | }), | |
| 2124 | }; | |
| 2162 | 2125 | pub const cortex_a34 = CpuModel{ |
| 2163 | 2126 | .name = "cortex_a34", |
| 2164 | 2127 | .llvm_name = "cortex-a34", |
| 2165 | 2128 | .features = featureSet(&[_]Feature{ |
| 2129 | .aes, | |
| 2166 | 2130 | .crc, |
| 2167 | .crypto, | |
| 2168 | 2131 | .perfmon, |
| 2132 | .sha2, | |
| 2169 | 2133 | .v8a, |
| 2170 | 2134 | }), |
| 2171 | 2135 | }; |
| ... | ... | @@ -2173,9 +2137,10 @@ pub const cpu = struct { |
| 2173 | 2137 | .name = "cortex_a35", |
| 2174 | 2138 | .llvm_name = "cortex-a35", |
| 2175 | 2139 | .features = featureSet(&[_]Feature{ |
| 2140 | .aes, | |
| 2176 | 2141 | .crc, |
| 2177 | .crypto, | |
| 2178 | 2142 | .perfmon, |
| 2143 | .sha2, | |
| 2179 | 2144 | .v8a, |
| 2180 | 2145 | }), |
| 2181 | 2146 | }; |
| ... | ... | @@ -2183,14 +2148,18 @@ pub const cpu = struct { |
| 2183 | 2148 | .name = "cortex_a510", |
| 2184 | 2149 | .llvm_name = "cortex-a510", |
| 2185 | 2150 | .features = featureSet(&[_]Feature{ |
| 2186 | .a510, | |
| 2187 | 2151 | .bf16, |
| 2152 | .ccidx, | |
| 2188 | 2153 | .ete, |
| 2189 | 2154 | .fp16fml, |
| 2155 | .fuse_adrp_add, | |
| 2156 | .fuse_aes, | |
| 2190 | 2157 | .i8mm, |
| 2191 | 2158 | .mte, |
| 2192 | 2159 | .perfmon, |
| 2160 | .ssbs, | |
| 2193 | 2161 | .sve2_bitperm, |
| 2162 | .use_postra_scheduler, | |
| 2194 | 2163 | .v9a, |
| 2195 | 2164 | }), |
| 2196 | 2165 | }; |
| ... | ... | @@ -2198,12 +2167,33 @@ pub const cpu = struct { |
| 2198 | 2167 | .name = "cortex_a520", |
| 2199 | 2168 | .llvm_name = "cortex-a520", |
| 2200 | 2169 | .features = featureSet(&[_]Feature{ |
| 2201 | .a520, | |
| 2170 | .ccidx, | |
| 2202 | 2171 | .ete, |
| 2203 | 2172 | .fp16fml, |
| 2173 | .fuse_adrp_add, | |
| 2174 | .fuse_aes, | |
| 2204 | 2175 | .mte, |
| 2205 | 2176 | .perfmon, |
| 2177 | .ssbs, | |
| 2206 | 2178 | .sve2_bitperm, |
| 2179 | .use_postra_scheduler, | |
| 2180 | .v9_2a, | |
| 2181 | }), | |
| 2182 | }; | |
| 2183 | pub const cortex_a520ae = CpuModel{ | |
| 2184 | .name = "cortex_a520ae", | |
| 2185 | .llvm_name = "cortex-a520ae", | |
| 2186 | .features = featureSet(&[_]Feature{ | |
| 2187 | .ccidx, | |
| 2188 | .ete, | |
| 2189 | .fp16fml, | |
| 2190 | .fuse_adrp_add, | |
| 2191 | .fuse_aes, | |
| 2192 | .mte, | |
| 2193 | .perfmon, | |
| 2194 | .ssbs, | |
| 2195 | .sve2_bitperm, | |
| 2196 | .use_postra_scheduler, | |
| 2207 | 2197 | .v9_2a, |
| 2208 | 2198 | }), |
| 2209 | 2199 | }; |
| ... | ... | @@ -2211,12 +2201,13 @@ pub const cpu = struct { |
| 2211 | 2201 | .name = "cortex_a53", |
| 2212 | 2202 | .llvm_name = "cortex-a53", |
| 2213 | 2203 | .features = featureSet(&[_]Feature{ |
| 2204 | .aes, | |
| 2214 | 2205 | .balance_fp_ops, |
| 2215 | 2206 | .crc, |
| 2216 | .crypto, | |
| 2217 | 2207 | .fuse_adrp_add, |
| 2218 | 2208 | .fuse_aes, |
| 2219 | 2209 | .perfmon, |
| 2210 | .sha2, | |
| 2220 | 2211 | .use_postra_scheduler, |
| 2221 | 2212 | .v8a, |
| 2222 | 2213 | }), |
| ... | ... | @@ -2225,7 +2216,7 @@ pub const cpu = struct { |
| 2225 | 2216 | .name = "cortex_a55", |
| 2226 | 2217 | .llvm_name = "cortex-a55", |
| 2227 | 2218 | .features = featureSet(&[_]Feature{ |
| 2228 | .crypto, | |
| 2219 | .aes, | |
| 2229 | 2220 | .dotprod, |
| 2230 | 2221 | .fullfp16, |
| 2231 | 2222 | .fuse_address, |
| ... | ... | @@ -2233,6 +2224,7 @@ pub const cpu = struct { |
| 2233 | 2224 | .fuse_aes, |
| 2234 | 2225 | .perfmon, |
| 2235 | 2226 | .rcpc, |
| 2227 | .sha2, | |
| 2236 | 2228 | .use_postra_scheduler, |
| 2237 | 2229 | .v8_2a, |
| 2238 | 2230 | }), |
| ... | ... | @@ -2241,15 +2233,17 @@ pub const cpu = struct { |
| 2241 | 2233 | .name = "cortex_a57", |
| 2242 | 2234 | .llvm_name = "cortex-a57", |
| 2243 | 2235 | .features = featureSet(&[_]Feature{ |
| 2236 | .addr_lsl_slow_14, | |
| 2237 | .aes, | |
| 2244 | 2238 | .balance_fp_ops, |
| 2245 | 2239 | .crc, |
| 2246 | .crypto, | |
| 2247 | 2240 | .enable_select_opt, |
| 2248 | 2241 | .fuse_adrp_add, |
| 2249 | 2242 | .fuse_aes, |
| 2250 | 2243 | .fuse_literals, |
| 2251 | 2244 | .perfmon, |
| 2252 | 2245 | .predictable_select_expensive, |
| 2246 | .sha2, | |
| 2253 | 2247 | .use_postra_scheduler, |
| 2254 | 2248 | .v8a, |
| 2255 | 2249 | }), |
| ... | ... | @@ -2258,12 +2252,18 @@ pub const cpu = struct { |
| 2258 | 2252 | .name = "cortex_a65", |
| 2259 | 2253 | .llvm_name = "cortex-a65", |
| 2260 | 2254 | .features = featureSet(&[_]Feature{ |
| 2261 | .a65, | |
| 2262 | .crypto, | |
| 2255 | .aes, | |
| 2263 | 2256 | .dotprod, |
| 2257 | .enable_select_opt, | |
| 2264 | 2258 | .fullfp16, |
| 2259 | .fuse_address, | |
| 2260 | .fuse_adrp_add, | |
| 2261 | .fuse_aes, | |
| 2262 | .fuse_literals, | |
| 2265 | 2263 | .perfmon, |
| 2264 | .predictable_select_expensive, | |
| 2266 | 2265 | .rcpc, |
| 2266 | .sha2, | |
| 2267 | 2267 | .ssbs, |
| 2268 | 2268 | .v8_2a, |
| 2269 | 2269 | }), |
| ... | ... | @@ -2272,12 +2272,18 @@ pub const cpu = struct { |
| 2272 | 2272 | .name = "cortex_a65ae", |
| 2273 | 2273 | .llvm_name = "cortex-a65ae", |
| 2274 | 2274 | .features = featureSet(&[_]Feature{ |
| 2275 | .a65, | |
| 2276 | .crypto, | |
| 2275 | .aes, | |
| 2277 | 2276 | .dotprod, |
| 2277 | .enable_select_opt, | |
| 2278 | 2278 | .fullfp16, |
| 2279 | .fuse_address, | |
| 2280 | .fuse_adrp_add, | |
| 2281 | .fuse_aes, | |
| 2282 | .fuse_literals, | |
| 2279 | 2283 | .perfmon, |
| 2284 | .predictable_select_expensive, | |
| 2280 | 2285 | .rcpc, |
| 2286 | .sha2, | |
| 2281 | 2287 | .ssbs, |
| 2282 | 2288 | .v8_2a, |
| 2283 | 2289 | }), |
| ... | ... | @@ -2286,14 +2292,22 @@ pub const cpu = struct { |
| 2286 | 2292 | .name = "cortex_a710", |
| 2287 | 2293 | .llvm_name = "cortex-a710", |
| 2288 | 2294 | .features = featureSet(&[_]Feature{ |
| 2289 | .a710, | |
| 2295 | .alu_lsl_fast, | |
| 2290 | 2296 | .bf16, |
| 2297 | .ccidx, | |
| 2298 | .cmp_bcc_fusion, | |
| 2299 | .enable_select_opt, | |
| 2291 | 2300 | .ete, |
| 2292 | 2301 | .fp16fml, |
| 2302 | .fuse_adrp_add, | |
| 2303 | .fuse_aes, | |
| 2293 | 2304 | .i8mm, |
| 2294 | 2305 | .mte, |
| 2295 | 2306 | .perfmon, |
| 2307 | .predictable_select_expensive, | |
| 2308 | .ssbs, | |
| 2296 | 2309 | .sve2_bitperm, |
| 2310 | .use_postra_scheduler, | |
| 2297 | 2311 | .v9a, |
| 2298 | 2312 | }), |
| 2299 | 2313 | }; |
| ... | ... | @@ -2301,9 +2315,9 @@ pub const cpu = struct { |
| 2301 | 2315 | .name = "cortex_a715", |
| 2302 | 2316 | .llvm_name = "cortex-a715", |
| 2303 | 2317 | .features = featureSet(&[_]Feature{ |
| 2304 | .addr_lsl_fast, | |
| 2305 | 2318 | .alu_lsl_fast, |
| 2306 | 2319 | .bf16, |
| 2320 | .ccidx, | |
| 2307 | 2321 | .cmp_bcc_fusion, |
| 2308 | 2322 | .enable_select_opt, |
| 2309 | 2323 | .ete, |
| ... | ... | @@ -2315,6 +2329,7 @@ pub const cpu = struct { |
| 2315 | 2329 | .perfmon, |
| 2316 | 2330 | .predictable_select_expensive, |
| 2317 | 2331 | .spe, |
| 2332 | .ssbs, | |
| 2318 | 2333 | .sve2_bitperm, |
| 2319 | 2334 | .use_postra_scheduler, |
| 2320 | 2335 | .v9a, |
| ... | ... | @@ -2324,14 +2339,16 @@ pub const cpu = struct { |
| 2324 | 2339 | .name = "cortex_a72", |
| 2325 | 2340 | .llvm_name = "cortex-a72", |
| 2326 | 2341 | .features = featureSet(&[_]Feature{ |
| 2342 | .addr_lsl_slow_14, | |
| 2343 | .aes, | |
| 2327 | 2344 | .crc, |
| 2328 | .crypto, | |
| 2329 | 2345 | .enable_select_opt, |
| 2330 | 2346 | .fuse_adrp_add, |
| 2331 | 2347 | .fuse_aes, |
| 2332 | 2348 | .fuse_literals, |
| 2333 | 2349 | .perfmon, |
| 2334 | 2350 | .predictable_select_expensive, |
| 2351 | .sha2, | |
| 2335 | 2352 | .v8a, |
| 2336 | 2353 | }), |
| 2337 | 2354 | }; |
| ... | ... | @@ -2339,14 +2356,68 @@ pub const cpu = struct { |
| 2339 | 2356 | .name = "cortex_a720", |
| 2340 | 2357 | .llvm_name = "cortex-a720", |
| 2341 | 2358 | .features = featureSet(&[_]Feature{ |
| 2342 | .a720, | |
| 2359 | .alu_lsl_fast, | |
| 2360 | .ccidx, | |
| 2361 | .cmp_bcc_fusion, | |
| 2362 | .enable_select_opt, | |
| 2363 | .ete, | |
| 2364 | .fp16fml, | |
| 2365 | .fuse_adrp_add, | |
| 2366 | .fuse_aes, | |
| 2367 | .mte, | |
| 2368 | .perfmon, | |
| 2369 | .predictable_select_expensive, | |
| 2370 | .spe, | |
| 2371 | .spe_eef, | |
| 2372 | .ssbs, | |
| 2373 | .sve2_bitperm, | |
| 2374 | .use_postra_scheduler, | |
| 2375 | .v9_2a, | |
| 2376 | }), | |
| 2377 | }; | |
| 2378 | pub const cortex_a720ae = CpuModel{ | |
| 2379 | .name = "cortex_a720ae", | |
| 2380 | .llvm_name = "cortex-a720ae", | |
| 2381 | .features = featureSet(&[_]Feature{ | |
| 2382 | .alu_lsl_fast, | |
| 2383 | .ccidx, | |
| 2384 | .cmp_bcc_fusion, | |
| 2385 | .enable_select_opt, | |
| 2386 | .ete, | |
| 2387 | .fp16fml, | |
| 2388 | .fuse_adrp_add, | |
| 2389 | .fuse_aes, | |
| 2390 | .mte, | |
| 2391 | .perfmon, | |
| 2392 | .predictable_select_expensive, | |
| 2393 | .spe, | |
| 2394 | .spe_eef, | |
| 2395 | .ssbs, | |
| 2396 | .sve2_bitperm, | |
| 2397 | .use_postra_scheduler, | |
| 2398 | .v9_2a, | |
| 2399 | }), | |
| 2400 | }; | |
| 2401 | pub const cortex_a725 = CpuModel{ | |
| 2402 | .name = "cortex_a725", | |
| 2403 | .llvm_name = "cortex-a725", | |
| 2404 | .features = featureSet(&[_]Feature{ | |
| 2405 | .alu_lsl_fast, | |
| 2406 | .ccidx, | |
| 2407 | .cmp_bcc_fusion, | |
| 2408 | .enable_select_opt, | |
| 2343 | 2409 | .ete, |
| 2344 | 2410 | .fp16fml, |
| 2411 | .fuse_adrp_add, | |
| 2412 | .fuse_aes, | |
| 2345 | 2413 | .mte, |
| 2346 | 2414 | .perfmon, |
| 2415 | .predictable_select_expensive, | |
| 2347 | 2416 | .spe, |
| 2348 | 2417 | .spe_eef, |
| 2418 | .ssbs, | |
| 2349 | 2419 | .sve2_bitperm, |
| 2420 | .use_postra_scheduler, | |
| 2350 | 2421 | .v9_2a, |
| 2351 | 2422 | }), |
| 2352 | 2423 | }; |
| ... | ... | @@ -2354,13 +2425,15 @@ pub const cpu = struct { |
| 2354 | 2425 | .name = "cortex_a73", |
| 2355 | 2426 | .llvm_name = "cortex-a73", |
| 2356 | 2427 | .features = featureSet(&[_]Feature{ |
| 2428 | .addr_lsl_slow_14, | |
| 2429 | .aes, | |
| 2357 | 2430 | .crc, |
| 2358 | .crypto, | |
| 2359 | 2431 | .enable_select_opt, |
| 2360 | 2432 | .fuse_adrp_add, |
| 2361 | 2433 | .fuse_aes, |
| 2362 | 2434 | .perfmon, |
| 2363 | 2435 | .predictable_select_expensive, |
| 2436 | .sha2, | |
| 2364 | 2437 | .v8a, |
| 2365 | 2438 | }), |
| 2366 | 2439 | }; |
| ... | ... | @@ -2368,7 +2441,8 @@ pub const cpu = struct { |
| 2368 | 2441 | .name = "cortex_a75", |
| 2369 | 2442 | .llvm_name = "cortex-a75", |
| 2370 | 2443 | .features = featureSet(&[_]Feature{ |
| 2371 | .crypto, | |
| 2444 | .addr_lsl_slow_14, | |
| 2445 | .aes, | |
| 2372 | 2446 | .dotprod, |
| 2373 | 2447 | .enable_select_opt, |
| 2374 | 2448 | .fullfp16, |
| ... | ... | @@ -2377,6 +2451,7 @@ pub const cpu = struct { |
| 2377 | 2451 | .perfmon, |
| 2378 | 2452 | .predictable_select_expensive, |
| 2379 | 2453 | .rcpc, |
| 2454 | .sha2, | |
| 2380 | 2455 | .v8_2a, |
| 2381 | 2456 | }), |
| 2382 | 2457 | }; |
| ... | ... | @@ -2384,12 +2459,18 @@ pub const cpu = struct { |
| 2384 | 2459 | .name = "cortex_a76", |
| 2385 | 2460 | .llvm_name = "cortex-a76", |
| 2386 | 2461 | .features = featureSet(&[_]Feature{ |
| 2387 | .a76, | |
| 2388 | .crypto, | |
| 2462 | .addr_lsl_slow_14, | |
| 2463 | .aes, | |
| 2464 | .alu_lsl_fast, | |
| 2389 | 2465 | .dotprod, |
| 2466 | .enable_select_opt, | |
| 2390 | 2467 | .fullfp16, |
| 2468 | .fuse_adrp_add, | |
| 2469 | .fuse_aes, | |
| 2391 | 2470 | .perfmon, |
| 2471 | .predictable_select_expensive, | |
| 2392 | 2472 | .rcpc, |
| 2473 | .sha2, | |
| 2393 | 2474 | .ssbs, |
| 2394 | 2475 | .v8_2a, |
| 2395 | 2476 | }), |
| ... | ... | @@ -2398,12 +2479,18 @@ pub const cpu = struct { |
| 2398 | 2479 | .name = "cortex_a76ae", |
| 2399 | 2480 | .llvm_name = "cortex-a76ae", |
| 2400 | 2481 | .features = featureSet(&[_]Feature{ |
| 2401 | .a76, | |
| 2402 | .crypto, | |
| 2482 | .addr_lsl_slow_14, | |
| 2483 | .aes, | |
| 2484 | .alu_lsl_fast, | |
| 2403 | 2485 | .dotprod, |
| 2486 | .enable_select_opt, | |
| 2404 | 2487 | .fullfp16, |
| 2488 | .fuse_adrp_add, | |
| 2489 | .fuse_aes, | |
| 2405 | 2490 | .perfmon, |
| 2491 | .predictable_select_expensive, | |
| 2406 | 2492 | .rcpc, |
| 2493 | .sha2, | |
| 2407 | 2494 | .ssbs, |
| 2408 | 2495 | .v8_2a, |
| 2409 | 2496 | }), |
| ... | ... | @@ -2412,10 +2499,10 @@ pub const cpu = struct { |
| 2412 | 2499 | .name = "cortex_a77", |
| 2413 | 2500 | .llvm_name = "cortex-a77", |
| 2414 | 2501 | .features = featureSet(&[_]Feature{ |
| 2415 | .addr_lsl_fast, | |
| 2502 | .addr_lsl_slow_14, | |
| 2503 | .aes, | |
| 2416 | 2504 | .alu_lsl_fast, |
| 2417 | 2505 | .cmp_bcc_fusion, |
| 2418 | .crypto, | |
| 2419 | 2506 | .dotprod, |
| 2420 | 2507 | .enable_select_opt, |
| 2421 | 2508 | .fullfp16, |
| ... | ... | @@ -2424,6 +2511,7 @@ pub const cpu = struct { |
| 2424 | 2511 | .perfmon, |
| 2425 | 2512 | .predictable_select_expensive, |
| 2426 | 2513 | .rcpc, |
| 2514 | .sha2, | |
| 2427 | 2515 | .ssbs, |
| 2428 | 2516 | .v8_2a, |
| 2429 | 2517 | }), |
| ... | ... | @@ -2432,14 +2520,45 @@ pub const cpu = struct { |
| 2432 | 2520 | .name = "cortex_a78", |
| 2433 | 2521 | .llvm_name = "cortex-a78", |
| 2434 | 2522 | .features = featureSet(&[_]Feature{ |
| 2435 | .a78, | |
| 2436 | .crypto, | |
| 2523 | .addr_lsl_slow_14, | |
| 2524 | .aes, | |
| 2525 | .alu_lsl_fast, | |
| 2526 | .cmp_bcc_fusion, | |
| 2527 | .dotprod, | |
| 2528 | .enable_select_opt, | |
| 2529 | .fullfp16, | |
| 2530 | .fuse_adrp_add, | |
| 2531 | .fuse_aes, | |
| 2532 | .perfmon, | |
| 2533 | .predictable_select_expensive, | |
| 2534 | .rcpc, | |
| 2535 | .sha2, | |
| 2536 | .spe, | |
| 2537 | .ssbs, | |
| 2538 | .use_postra_scheduler, | |
| 2539 | .v8_2a, | |
| 2540 | }), | |
| 2541 | }; | |
| 2542 | pub const cortex_a78ae = CpuModel{ | |
| 2543 | .name = "cortex_a78ae", | |
| 2544 | .llvm_name = "cortex-a78ae", | |
| 2545 | .features = featureSet(&[_]Feature{ | |
| 2546 | .addr_lsl_slow_14, | |
| 2547 | .aes, | |
| 2548 | .alu_lsl_fast, | |
| 2549 | .cmp_bcc_fusion, | |
| 2437 | 2550 | .dotprod, |
| 2551 | .enable_select_opt, | |
| 2438 | 2552 | .fullfp16, |
| 2553 | .fuse_adrp_add, | |
| 2554 | .fuse_aes, | |
| 2439 | 2555 | .perfmon, |
| 2556 | .predictable_select_expensive, | |
| 2440 | 2557 | .rcpc, |
| 2558 | .sha2, | |
| 2441 | 2559 | .spe, |
| 2442 | 2560 | .ssbs, |
| 2561 | .use_postra_scheduler, | |
| 2443 | 2562 | .v8_2a, |
| 2444 | 2563 | }), |
| 2445 | 2564 | }; |
| ... | ... | @@ -2447,16 +2566,24 @@ pub const cpu = struct { |
| 2447 | 2566 | .name = "cortex_a78c", |
| 2448 | 2567 | .llvm_name = "cortex-a78c", |
| 2449 | 2568 | .features = featureSet(&[_]Feature{ |
| 2450 | .a78c, | |
| 2451 | .crypto, | |
| 2569 | .addr_lsl_slow_14, | |
| 2570 | .aes, | |
| 2571 | .alu_lsl_fast, | |
| 2572 | .cmp_bcc_fusion, | |
| 2452 | 2573 | .dotprod, |
| 2574 | .enable_select_opt, | |
| 2453 | 2575 | .flagm, |
| 2454 | 2576 | .fullfp16, |
| 2577 | .fuse_adrp_add, | |
| 2578 | .fuse_aes, | |
| 2455 | 2579 | .pauth, |
| 2456 | 2580 | .perfmon, |
| 2581 | .predictable_select_expensive, | |
| 2457 | 2582 | .rcpc, |
| 2583 | .sha2, | |
| 2458 | 2584 | .spe, |
| 2459 | 2585 | .ssbs, |
| 2586 | .use_postra_scheduler, | |
| 2460 | 2587 | .v8_2a, |
| 2461 | 2588 | }), |
| 2462 | 2589 | }; |
| ... | ... | @@ -2464,12 +2591,35 @@ pub const cpu = struct { |
| 2464 | 2591 | .name = "cortex_r82", |
| 2465 | 2592 | .llvm_name = "cortex-r82", |
| 2466 | 2593 | .features = featureSet(&[_]Feature{ |
| 2467 | .cortex_r82, | |
| 2594 | .ccdp, | |
| 2595 | .complxnum, | |
| 2596 | .dotprod, | |
| 2468 | 2597 | .fp16fml, |
| 2598 | .jsconv, | |
| 2469 | 2599 | .perfmon, |
| 2470 | 2600 | .predres, |
| 2601 | .rdm, | |
| 2471 | 2602 | .sb, |
| 2472 | 2603 | .ssbs, |
| 2604 | .use_postra_scheduler, | |
| 2605 | .v8r, | |
| 2606 | }), | |
| 2607 | }; | |
| 2608 | pub const cortex_r82ae = CpuModel{ | |
| 2609 | .name = "cortex_r82ae", | |
| 2610 | .llvm_name = "cortex-r82ae", | |
| 2611 | .features = featureSet(&[_]Feature{ | |
| 2612 | .ccdp, | |
| 2613 | .complxnum, | |
| 2614 | .dotprod, | |
| 2615 | .fp16fml, | |
| 2616 | .jsconv, | |
| 2617 | .perfmon, | |
| 2618 | .predres, | |
| 2619 | .rdm, | |
| 2620 | .sb, | |
| 2621 | .ssbs, | |
| 2622 | .use_postra_scheduler, | |
| 2473 | 2623 | .v8r, |
| 2474 | 2624 | }), |
| 2475 | 2625 | }; |
| ... | ... | @@ -2477,10 +2627,10 @@ pub const cpu = struct { |
| 2477 | 2627 | .name = "cortex_x1", |
| 2478 | 2628 | .llvm_name = "cortex-x1", |
| 2479 | 2629 | .features = featureSet(&[_]Feature{ |
| 2480 | .addr_lsl_fast, | |
| 2630 | .addr_lsl_slow_14, | |
| 2631 | .aes, | |
| 2481 | 2632 | .alu_lsl_fast, |
| 2482 | 2633 | .cmp_bcc_fusion, |
| 2483 | .crypto, | |
| 2484 | 2634 | .dotprod, |
| 2485 | 2635 | .enable_select_opt, |
| 2486 | 2636 | .fullfp16, |
| ... | ... | @@ -2489,6 +2639,7 @@ pub const cpu = struct { |
| 2489 | 2639 | .perfmon, |
| 2490 | 2640 | .predictable_select_expensive, |
| 2491 | 2641 | .rcpc, |
| 2642 | .sha2, | |
| 2492 | 2643 | .spe, |
| 2493 | 2644 | .ssbs, |
| 2494 | 2645 | .use_postra_scheduler, |
| ... | ... | @@ -2499,10 +2650,10 @@ pub const cpu = struct { |
| 2499 | 2650 | .name = "cortex_x1c", |
| 2500 | 2651 | .llvm_name = "cortex-x1c", |
| 2501 | 2652 | .features = featureSet(&[_]Feature{ |
| 2502 | .addr_lsl_fast, | |
| 2653 | .addr_lsl_slow_14, | |
| 2654 | .aes, | |
| 2503 | 2655 | .alu_lsl_fast, |
| 2504 | 2656 | .cmp_bcc_fusion, |
| 2505 | .crypto, | |
| 2506 | 2657 | .dotprod, |
| 2507 | 2658 | .enable_select_opt, |
| 2508 | 2659 | .flagm, |
| ... | ... | @@ -2514,6 +2665,7 @@ pub const cpu = struct { |
| 2514 | 2665 | .perfmon, |
| 2515 | 2666 | .predictable_select_expensive, |
| 2516 | 2667 | .rcpc_immo, |
| 2668 | .sha2, | |
| 2517 | 2669 | .spe, |
| 2518 | 2670 | .ssbs, |
| 2519 | 2671 | .use_postra_scheduler, |
| ... | ... | @@ -2524,9 +2676,9 @@ pub const cpu = struct { |
| 2524 | 2676 | .name = "cortex_x2", |
| 2525 | 2677 | .llvm_name = "cortex-x2", |
| 2526 | 2678 | .features = featureSet(&[_]Feature{ |
| 2527 | .addr_lsl_fast, | |
| 2528 | 2679 | .alu_lsl_fast, |
| 2529 | 2680 | .bf16, |
| 2681 | .ccidx, | |
| 2530 | 2682 | .cmp_bcc_fusion, |
| 2531 | 2683 | .enable_select_opt, |
| 2532 | 2684 | .ete, |
| ... | ... | @@ -2537,6 +2689,7 @@ pub const cpu = struct { |
| 2537 | 2689 | .mte, |
| 2538 | 2690 | .perfmon, |
| 2539 | 2691 | .predictable_select_expensive, |
| 2692 | .ssbs, | |
| 2540 | 2693 | .sve2_bitperm, |
| 2541 | 2694 | .use_postra_scheduler, |
| 2542 | 2695 | .v9a, |
| ... | ... | @@ -2546,9 +2699,9 @@ pub const cpu = struct { |
| 2546 | 2699 | .name = "cortex_x3", |
| 2547 | 2700 | .llvm_name = "cortex-x3", |
| 2548 | 2701 | .features = featureSet(&[_]Feature{ |
| 2549 | .addr_lsl_fast, | |
| 2550 | 2702 | .alu_lsl_fast, |
| 2551 | 2703 | .bf16, |
| 2704 | .ccidx, | |
| 2552 | 2705 | .enable_select_opt, |
| 2553 | 2706 | .ete, |
| 2554 | 2707 | .fp16fml, |
| ... | ... | @@ -2559,6 +2712,7 @@ pub const cpu = struct { |
| 2559 | 2712 | .perfmon, |
| 2560 | 2713 | .predictable_select_expensive, |
| 2561 | 2714 | .spe, |
| 2715 | .ssbs, | |
| 2562 | 2716 | .sve2_bitperm, |
| 2563 | 2717 | .use_postra_scheduler, |
| 2564 | 2718 | .v9a, |
| ... | ... | @@ -2568,8 +2722,30 @@ pub const cpu = struct { |
| 2568 | 2722 | .name = "cortex_x4", |
| 2569 | 2723 | .llvm_name = "cortex-x4", |
| 2570 | 2724 | .features = featureSet(&[_]Feature{ |
| 2571 | .addr_lsl_fast, | |
| 2572 | 2725 | .alu_lsl_fast, |
| 2726 | .ccidx, | |
| 2727 | .enable_select_opt, | |
| 2728 | .ete, | |
| 2729 | .fp16fml, | |
| 2730 | .fuse_adrp_add, | |
| 2731 | .fuse_aes, | |
| 2732 | .mte, | |
| 2733 | .perfmon, | |
| 2734 | .predictable_select_expensive, | |
| 2735 | .spe, | |
| 2736 | .spe_eef, | |
| 2737 | .ssbs, | |
| 2738 | .sve2_bitperm, | |
| 2739 | .use_postra_scheduler, | |
| 2740 | .v9_2a, | |
| 2741 | }), | |
| 2742 | }; | |
| 2743 | pub const cortex_x925 = CpuModel{ | |
| 2744 | .name = "cortex_x925", | |
| 2745 | .llvm_name = "cortex-x925", | |
| 2746 | .features = featureSet(&[_]Feature{ | |
| 2747 | .alu_lsl_fast, | |
| 2748 | .ccidx, | |
| 2573 | 2749 | .enable_select_opt, |
| 2574 | 2750 | .ete, |
| 2575 | 2751 | .fp16fml, |
| ... | ... | @@ -2580,6 +2756,7 @@ pub const cpu = struct { |
| 2580 | 2756 | .predictable_select_expensive, |
| 2581 | 2757 | .spe, |
| 2582 | 2758 | .spe_eef, |
| 2759 | .ssbs, | |
| 2583 | 2760 | .sve2_bitperm, |
| 2584 | 2761 | .use_postra_scheduler, |
| 2585 | 2762 | .v9_2a, |
| ... | ... | @@ -2589,14 +2766,15 @@ pub const cpu = struct { |
| 2589 | 2766 | .name = "cyclone", |
| 2590 | 2767 | .llvm_name = "cyclone", |
| 2591 | 2768 | .features = featureSet(&[_]Feature{ |
| 2769 | .aes, | |
| 2592 | 2770 | .alternate_sextload_cvt_f32_pattern, |
| 2593 | 2771 | .arith_bcc_fusion, |
| 2594 | 2772 | .arith_cbz_fusion, |
| 2595 | .crypto, | |
| 2596 | 2773 | .disable_latency_sched_heuristic, |
| 2597 | 2774 | .fuse_aes, |
| 2598 | 2775 | .fuse_crypto_eor, |
| 2599 | 2776 | .perfmon, |
| 2777 | .sha2, | |
| 2600 | 2778 | .store_pair_suppress, |
| 2601 | 2779 | .v8a, |
| 2602 | 2780 | .zcm, |
| ... | ... | @@ -2651,10 +2829,9 @@ pub const cpu = struct { |
| 2651 | 2829 | .name = "exynos_m3", |
| 2652 | 2830 | .llvm_name = "exynos-m3", |
| 2653 | 2831 | .features = featureSet(&[_]Feature{ |
| 2654 | .addr_lsl_fast, | |
| 2832 | .aes, | |
| 2655 | 2833 | .alu_lsl_fast, |
| 2656 | 2834 | .crc, |
| 2657 | .crypto, | |
| 2658 | 2835 | .exynos_cheap_as_move, |
| 2659 | 2836 | .force_32bit_jump_tables, |
| 2660 | 2837 | .fuse_address, |
| ... | ... | @@ -2664,6 +2841,7 @@ pub const cpu = struct { |
| 2664 | 2841 | .fuse_literals, |
| 2665 | 2842 | .perfmon, |
| 2666 | 2843 | .predictable_select_expensive, |
| 2844 | .sha2, | |
| 2667 | 2845 | .store_pair_suppress, |
| 2668 | 2846 | .use_postra_scheduler, |
| 2669 | 2847 | .v8a, |
| ... | ... | @@ -2673,11 +2851,10 @@ pub const cpu = struct { |
| 2673 | 2851 | .name = "exynos_m4", |
| 2674 | 2852 | .llvm_name = "exynos-m4", |
| 2675 | 2853 | .features = featureSet(&[_]Feature{ |
| 2676 | .addr_lsl_fast, | |
| 2854 | .aes, | |
| 2677 | 2855 | .alu_lsl_fast, |
| 2678 | 2856 | .arith_bcc_fusion, |
| 2679 | 2857 | .arith_cbz_fusion, |
| 2680 | .crypto, | |
| 2681 | 2858 | .dotprod, |
| 2682 | 2859 | .exynos_cheap_as_move, |
| 2683 | 2860 | .force_32bit_jump_tables, |
| ... | ... | @@ -2689,6 +2866,7 @@ pub const cpu = struct { |
| 2689 | 2866 | .fuse_csel, |
| 2690 | 2867 | .fuse_literals, |
| 2691 | 2868 | .perfmon, |
| 2869 | .sha2, | |
| 2692 | 2870 | .store_pair_suppress, |
| 2693 | 2871 | .use_postra_scheduler, |
| 2694 | 2872 | .v8_2a, |
| ... | ... | @@ -2699,11 +2877,10 @@ pub const cpu = struct { |
| 2699 | 2877 | .name = "exynos_m5", |
| 2700 | 2878 | .llvm_name = "exynos-m5", |
| 2701 | 2879 | .features = featureSet(&[_]Feature{ |
| 2702 | .addr_lsl_fast, | |
| 2880 | .aes, | |
| 2703 | 2881 | .alu_lsl_fast, |
| 2704 | 2882 | .arith_bcc_fusion, |
| 2705 | 2883 | .arith_cbz_fusion, |
| 2706 | .crypto, | |
| 2707 | 2884 | .dotprod, |
| 2708 | 2885 | .exynos_cheap_as_move, |
| 2709 | 2886 | .force_32bit_jump_tables, |
| ... | ... | @@ -2715,6 +2892,7 @@ pub const cpu = struct { |
| 2715 | 2892 | .fuse_csel, |
| 2716 | 2893 | .fuse_literals, |
| 2717 | 2894 | .perfmon, |
| 2895 | .sha2, | |
| 2718 | 2896 | .store_pair_suppress, |
| 2719 | 2897 | .use_postra_scheduler, |
| 2720 | 2898 | .v8_2a, |
| ... | ... | @@ -2725,13 +2903,13 @@ pub const cpu = struct { |
| 2725 | 2903 | .name = "falkor", |
| 2726 | 2904 | .llvm_name = "falkor", |
| 2727 | 2905 | .features = featureSet(&[_]Feature{ |
| 2728 | .addr_lsl_fast, | |
| 2906 | .aes, | |
| 2729 | 2907 | .alu_lsl_fast, |
| 2730 | 2908 | .crc, |
| 2731 | .crypto, | |
| 2732 | 2909 | .perfmon, |
| 2733 | 2910 | .predictable_select_expensive, |
| 2734 | 2911 | .rdm, |
| 2912 | .sha2, | |
| 2735 | 2913 | .slow_strqro_store, |
| 2736 | 2914 | .store_pair_suppress, |
| 2737 | 2915 | .use_postra_scheduler, |
| ... | ... | @@ -2751,16 +2929,42 @@ pub const cpu = struct { |
| 2751 | 2929 | .use_postra_scheduler, |
| 2752 | 2930 | }), |
| 2753 | 2931 | }; |
| 2932 | pub const grace = CpuModel{ | |
| 2933 | .name = "grace", | |
| 2934 | .llvm_name = "grace", | |
| 2935 | .features = featureSet(&[_]Feature{ | |
| 2936 | .alu_lsl_fast, | |
| 2937 | .bf16, | |
| 2938 | .ccidx, | |
| 2939 | .cmp_bcc_fusion, | |
| 2940 | .enable_select_opt, | |
| 2941 | .ete, | |
| 2942 | .fp16fml, | |
| 2943 | .fuse_adrp_add, | |
| 2944 | .fuse_aes, | |
| 2945 | .i8mm, | |
| 2946 | .mte, | |
| 2947 | .perfmon, | |
| 2948 | .predictable_select_expensive, | |
| 2949 | .rand, | |
| 2950 | .spe, | |
| 2951 | .ssbs, | |
| 2952 | .sve2_bitperm, | |
| 2953 | .use_fixed_over_scalable_if_equal_cost, | |
| 2954 | .use_postra_scheduler, | |
| 2955 | .v9a, | |
| 2956 | }), | |
| 2957 | }; | |
| 2754 | 2958 | pub const kryo = CpuModel{ |
| 2755 | 2959 | .name = "kryo", |
| 2756 | 2960 | .llvm_name = "kryo", |
| 2757 | 2961 | .features = featureSet(&[_]Feature{ |
| 2758 | .addr_lsl_fast, | |
| 2962 | .aes, | |
| 2759 | 2963 | .alu_lsl_fast, |
| 2760 | 2964 | .crc, |
| 2761 | .crypto, | |
| 2762 | 2965 | .perfmon, |
| 2763 | 2966 | .predictable_select_expensive, |
| 2967 | .sha2, | |
| 2764 | 2968 | .store_pair_suppress, |
| 2765 | 2969 | .use_postra_scheduler, |
| 2766 | 2970 | .v8a, |
| ... | ... | @@ -2771,11 +2975,11 @@ pub const cpu = struct { |
| 2771 | 2975 | .name = "neoverse_512tvb", |
| 2772 | 2976 | .llvm_name = "neoverse-512tvb", |
| 2773 | 2977 | .features = featureSet(&[_]Feature{ |
| 2774 | .addr_lsl_fast, | |
| 2978 | .aes, | |
| 2775 | 2979 | .alu_lsl_fast, |
| 2776 | 2980 | .bf16, |
| 2777 | 2981 | .ccdp, |
| 2778 | .crypto, | |
| 2982 | .ccidx, | |
| 2779 | 2983 | .enable_select_opt, |
| 2780 | 2984 | .fp16fml, |
| 2781 | 2985 | .fuse_adrp_add, |
| ... | ... | @@ -2784,6 +2988,8 @@ pub const cpu = struct { |
| 2784 | 2988 | .perfmon, |
| 2785 | 2989 | .predictable_select_expensive, |
| 2786 | 2990 | .rand, |
| 2991 | .sha3, | |
| 2992 | .sm4, | |
| 2787 | 2993 | .spe, |
| 2788 | 2994 | .ssbs, |
| 2789 | 2995 | .sve, |
| ... | ... | @@ -2795,13 +3001,14 @@ pub const cpu = struct { |
| 2795 | 3001 | .name = "neoverse_e1", |
| 2796 | 3002 | .llvm_name = "neoverse-e1", |
| 2797 | 3003 | .features = featureSet(&[_]Feature{ |
| 2798 | .crypto, | |
| 3004 | .aes, | |
| 2799 | 3005 | .dotprod, |
| 2800 | 3006 | .fullfp16, |
| 2801 | 3007 | .fuse_adrp_add, |
| 2802 | 3008 | .fuse_aes, |
| 2803 | 3009 | .perfmon, |
| 2804 | 3010 | .rcpc, |
| 3011 | .sha2, | |
| 2805 | 3012 | .ssbs, |
| 2806 | 3013 | .use_postra_scheduler, |
| 2807 | 3014 | .v8_2a, |
| ... | ... | @@ -2811,9 +3018,9 @@ pub const cpu = struct { |
| 2811 | 3018 | .name = "neoverse_n1", |
| 2812 | 3019 | .llvm_name = "neoverse-n1", |
| 2813 | 3020 | .features = featureSet(&[_]Feature{ |
| 2814 | .addr_lsl_fast, | |
| 3021 | .addr_lsl_slow_14, | |
| 3022 | .aes, | |
| 2815 | 3023 | .alu_lsl_fast, |
| 2816 | .crypto, | |
| 2817 | 3024 | .dotprod, |
| 2818 | 3025 | .enable_select_opt, |
| 2819 | 3026 | .fullfp16, |
| ... | ... | @@ -2822,6 +3029,7 @@ pub const cpu = struct { |
| 2822 | 3029 | .perfmon, |
| 2823 | 3030 | .predictable_select_expensive, |
| 2824 | 3031 | .rcpc, |
| 3032 | .sha2, | |
| 2825 | 3033 | .spe, |
| 2826 | 3034 | .ssbs, |
| 2827 | 3035 | .use_postra_scheduler, |
| ... | ... | @@ -2832,31 +3040,57 @@ pub const cpu = struct { |
| 2832 | 3040 | .name = "neoverse_n2", |
| 2833 | 3041 | .llvm_name = "neoverse-n2", |
| 2834 | 3042 | .features = featureSet(&[_]Feature{ |
| 2835 | .addr_lsl_fast, | |
| 2836 | 3043 | .alu_lsl_fast, |
| 2837 | 3044 | .bf16, |
| 3045 | .ccidx, | |
| 2838 | 3046 | .enable_select_opt, |
| 2839 | 3047 | .ete, |
| 3048 | .fp16fml, | |
| 2840 | 3049 | .fuse_adrp_add, |
| 2841 | 3050 | .fuse_aes, |
| 2842 | 3051 | .i8mm, |
| 2843 | 3052 | .mte, |
| 2844 | 3053 | .perfmon, |
| 2845 | 3054 | .predictable_select_expensive, |
| 3055 | .ssbs, | |
| 2846 | 3056 | .sve2_bitperm, |
| 2847 | 3057 | .use_postra_scheduler, |
| 2848 | 3058 | .v9a, |
| 2849 | 3059 | }), |
| 2850 | 3060 | }; |
| 3061 | pub const neoverse_n3 = CpuModel{ | |
| 3062 | .name = "neoverse_n3", | |
| 3063 | .llvm_name = "neoverse-n3", | |
| 3064 | .features = featureSet(&[_]Feature{ | |
| 3065 | .alu_lsl_fast, | |
| 3066 | .ccidx, | |
| 3067 | .enable_select_opt, | |
| 3068 | .ete, | |
| 3069 | .fp16fml, | |
| 3070 | .fuse_adrp_add, | |
| 3071 | .fuse_aes, | |
| 3072 | .mte, | |
| 3073 | .perfmon, | |
| 3074 | .predictable_select_expensive, | |
| 3075 | .rand, | |
| 3076 | .spe, | |
| 3077 | .spe_eef, | |
| 3078 | .ssbs, | |
| 3079 | .sve2_bitperm, | |
| 3080 | .use_postra_scheduler, | |
| 3081 | .v9_2a, | |
| 3082 | }), | |
| 3083 | }; | |
| 2851 | 3084 | pub const neoverse_v1 = CpuModel{ |
| 2852 | 3085 | .name = "neoverse_v1", |
| 2853 | 3086 | .llvm_name = "neoverse-v1", |
| 2854 | 3087 | .features = featureSet(&[_]Feature{ |
| 2855 | .addr_lsl_fast, | |
| 3088 | .addr_lsl_slow_14, | |
| 3089 | .aes, | |
| 2856 | 3090 | .alu_lsl_fast, |
| 2857 | 3091 | .bf16, |
| 2858 | 3092 | .ccdp, |
| 2859 | .crypto, | |
| 3093 | .ccidx, | |
| 2860 | 3094 | .enable_select_opt, |
| 2861 | 3095 | .fp16fml, |
| 2862 | 3096 | .fuse_adrp_add, |
| ... | ... | @@ -2866,6 +3100,8 @@ pub const cpu = struct { |
| 2866 | 3100 | .perfmon, |
| 2867 | 3101 | .predictable_select_expensive, |
| 2868 | 3102 | .rand, |
| 3103 | .sha3, | |
| 3104 | .sm4, | |
| 2869 | 3105 | .spe, |
| 2870 | 3106 | .ssbs, |
| 2871 | 3107 | .sve, |
| ... | ... | @@ -2877,9 +3113,10 @@ pub const cpu = struct { |
| 2877 | 3113 | .name = "neoverse_v2", |
| 2878 | 3114 | .llvm_name = "neoverse-v2", |
| 2879 | 3115 | .features = featureSet(&[_]Feature{ |
| 2880 | .addr_lsl_fast, | |
| 2881 | 3116 | .alu_lsl_fast, |
| 2882 | 3117 | .bf16, |
| 3118 | .ccidx, | |
| 3119 | .cmp_bcc_fusion, | |
| 2883 | 3120 | .enable_select_opt, |
| 2884 | 3121 | .ete, |
| 2885 | 3122 | .fp16fml, |
| ... | ... | @@ -2891,20 +3128,97 @@ pub const cpu = struct { |
| 2891 | 3128 | .predictable_select_expensive, |
| 2892 | 3129 | .rand, |
| 2893 | 3130 | .spe, |
| 3131 | .ssbs, | |
| 2894 | 3132 | .sve2_bitperm, |
| 3133 | .use_fixed_over_scalable_if_equal_cost, | |
| 2895 | 3134 | .use_postra_scheduler, |
| 2896 | 3135 | .v9a, |
| 2897 | 3136 | }), |
| 2898 | 3137 | }; |
| 3138 | pub const neoverse_v3 = CpuModel{ | |
| 3139 | .name = "neoverse_v3", | |
| 3140 | .llvm_name = "neoverse-v3", | |
| 3141 | .features = featureSet(&[_]Feature{ | |
| 3142 | .alu_lsl_fast, | |
| 3143 | .brbe, | |
| 3144 | .ccidx, | |
| 3145 | .enable_select_opt, | |
| 3146 | .ete, | |
| 3147 | .fp16fml, | |
| 3148 | .fuse_adrp_add, | |
| 3149 | .fuse_aes, | |
| 3150 | .ls64, | |
| 3151 | .mte, | |
| 3152 | .perfmon, | |
| 3153 | .predictable_select_expensive, | |
| 3154 | .rand, | |
| 3155 | .rme, | |
| 3156 | .spe, | |
| 3157 | .spe_eef, | |
| 3158 | .ssbs, | |
| 3159 | .sve2_bitperm, | |
| 3160 | .use_postra_scheduler, | |
| 3161 | .v9_2a, | |
| 3162 | }), | |
| 3163 | }; | |
| 3164 | pub const neoverse_v3ae = CpuModel{ | |
| 3165 | .name = "neoverse_v3ae", | |
| 3166 | .llvm_name = "neoverse-v3ae", | |
| 3167 | .features = featureSet(&[_]Feature{ | |
| 3168 | .alu_lsl_fast, | |
| 3169 | .brbe, | |
| 3170 | .ccidx, | |
| 3171 | .enable_select_opt, | |
| 3172 | .ete, | |
| 3173 | .fp16fml, | |
| 3174 | .fuse_adrp_add, | |
| 3175 | .fuse_aes, | |
| 3176 | .ls64, | |
| 3177 | .mte, | |
| 3178 | .perfmon, | |
| 3179 | .predictable_select_expensive, | |
| 3180 | .rand, | |
| 3181 | .rme, | |
| 3182 | .spe, | |
| 3183 | .spe_eef, | |
| 3184 | .ssbs, | |
| 3185 | .sve2_bitperm, | |
| 3186 | .use_postra_scheduler, | |
| 3187 | .v9_2a, | |
| 3188 | }), | |
| 3189 | }; | |
| 3190 | pub const oryon_1 = CpuModel{ | |
| 3191 | .name = "oryon_1", | |
| 3192 | .llvm_name = "oryon-1", | |
| 3193 | .features = featureSet(&[_]Feature{ | |
| 3194 | .aes, | |
| 3195 | .ccidx, | |
| 3196 | .enable_select_opt, | |
| 3197 | .fp16fml, | |
| 3198 | .fuse_address, | |
| 3199 | .fuse_adrp_add, | |
| 3200 | .fuse_aes, | |
| 3201 | .fuse_crypto_eor, | |
| 3202 | .perfmon, | |
| 3203 | .rand, | |
| 3204 | .sha3, | |
| 3205 | .sm4, | |
| 3206 | .spe, | |
| 3207 | .ssbs, | |
| 3208 | .use_postra_scheduler, | |
| 3209 | .v8_6a, | |
| 3210 | }), | |
| 3211 | }; | |
| 2899 | 3212 | pub const saphira = CpuModel{ |
| 2900 | 3213 | .name = "saphira", |
| 2901 | 3214 | .llvm_name = "saphira", |
| 2902 | 3215 | .features = featureSet(&[_]Feature{ |
| 2903 | .addr_lsl_fast, | |
| 3216 | .aes, | |
| 2904 | 3217 | .alu_lsl_fast, |
| 2905 | .crypto, | |
| 3218 | .ccidx, | |
| 2906 | 3219 | .perfmon, |
| 2907 | 3220 | .predictable_select_expensive, |
| 3221 | .sha2, | |
| 2908 | 3222 | .spe, |
| 2909 | 3223 | .store_pair_suppress, |
| 2910 | 3224 | .use_postra_scheduler, |
| ... | ... | @@ -2916,10 +3230,11 @@ pub const cpu = struct { |
| 2916 | 3230 | .name = "thunderx", |
| 2917 | 3231 | .llvm_name = "thunderx", |
| 2918 | 3232 | .features = featureSet(&[_]Feature{ |
| 3233 | .aes, | |
| 2919 | 3234 | .crc, |
| 2920 | .crypto, | |
| 2921 | 3235 | .perfmon, |
| 2922 | 3236 | .predictable_select_expensive, |
| 3237 | .sha2, | |
| 2923 | 3238 | .store_pair_suppress, |
| 2924 | 3239 | .use_postra_scheduler, |
| 2925 | 3240 | .v8a, |
| ... | ... | @@ -2929,10 +3244,11 @@ pub const cpu = struct { |
| 2929 | 3244 | .name = "thunderx2t99", |
| 2930 | 3245 | .llvm_name = "thunderx2t99", |
| 2931 | 3246 | .features = featureSet(&[_]Feature{ |
| 3247 | .aes, | |
| 2932 | 3248 | .aggressive_fma, |
| 2933 | 3249 | .arith_bcc_fusion, |
| 2934 | .crypto, | |
| 2935 | 3250 | .predictable_select_expensive, |
| 3251 | .sha2, | |
| 2936 | 3252 | .store_pair_suppress, |
| 2937 | 3253 | .use_postra_scheduler, |
| 2938 | 3254 | .v8_1a, |
| ... | ... | @@ -2942,12 +3258,14 @@ pub const cpu = struct { |
| 2942 | 3258 | .name = "thunderx3t110", |
| 2943 | 3259 | .llvm_name = "thunderx3t110", |
| 2944 | 3260 | .features = featureSet(&[_]Feature{ |
| 3261 | .aes, | |
| 2945 | 3262 | .aggressive_fma, |
| 2946 | 3263 | .arith_bcc_fusion, |
| 2947 | 3264 | .balance_fp_ops, |
| 2948 | .crypto, | |
| 3265 | .ccidx, | |
| 2949 | 3266 | .perfmon, |
| 2950 | 3267 | .predictable_select_expensive, |
| 3268 | .sha2, | |
| 2951 | 3269 | .store_pair_suppress, |
| 2952 | 3270 | .strict_align, |
| 2953 | 3271 | .use_postra_scheduler, |
| ... | ... | @@ -2958,10 +3276,11 @@ pub const cpu = struct { |
| 2958 | 3276 | .name = "thunderxt81", |
| 2959 | 3277 | .llvm_name = "thunderxt81", |
| 2960 | 3278 | .features = featureSet(&[_]Feature{ |
| 3279 | .aes, | |
| 2961 | 3280 | .crc, |
| 2962 | .crypto, | |
| 2963 | 3281 | .perfmon, |
| 2964 | 3282 | .predictable_select_expensive, |
| 3283 | .sha2, | |
| 2965 | 3284 | .store_pair_suppress, |
| 2966 | 3285 | .use_postra_scheduler, |
| 2967 | 3286 | .v8a, |
| ... | ... | @@ -2971,10 +3290,11 @@ pub const cpu = struct { |
| 2971 | 3290 | .name = "thunderxt83", |
| 2972 | 3291 | .llvm_name = "thunderxt83", |
| 2973 | 3292 | .features = featureSet(&[_]Feature{ |
| 3293 | .aes, | |
| 2974 | 3294 | .crc, |
| 2975 | .crypto, | |
| 2976 | 3295 | .perfmon, |
| 2977 | 3296 | .predictable_select_expensive, |
| 3297 | .sha2, | |
| 2978 | 3298 | .store_pair_suppress, |
| 2979 | 3299 | .use_postra_scheduler, |
| 2980 | 3300 | .v8a, |
| ... | ... | @@ -2984,10 +3304,11 @@ pub const cpu = struct { |
| 2984 | 3304 | .name = "thunderxt88", |
| 2985 | 3305 | .llvm_name = "thunderxt88", |
| 2986 | 3306 | .features = featureSet(&[_]Feature{ |
| 3307 | .aes, | |
| 2987 | 3308 | .crc, |
| 2988 | .crypto, | |
| 2989 | 3309 | .perfmon, |
| 2990 | 3310 | .predictable_select_expensive, |
| 3311 | .sha2, | |
| 2991 | 3312 | .store_pair_suppress, |
| 2992 | 3313 | .use_postra_scheduler, |
| 2993 | 3314 | .v8a, |
| ... | ... | @@ -2997,13 +3318,14 @@ pub const cpu = struct { |
| 2997 | 3318 | .name = "tsv110", |
| 2998 | 3319 | .llvm_name = "tsv110", |
| 2999 | 3320 | .features = featureSet(&[_]Feature{ |
| 3321 | .aes, | |
| 3000 | 3322 | .complxnum, |
| 3001 | .crypto, | |
| 3002 | 3323 | .dotprod, |
| 3003 | 3324 | .fp16fml, |
| 3004 | 3325 | .fuse_aes, |
| 3005 | 3326 | .jsconv, |
| 3006 | 3327 | .perfmon, |
| 3328 | .sha2, | |
| 3007 | 3329 | .spe, |
| 3008 | 3330 | .store_pair_suppress, |
| 3009 | 3331 | .use_postra_scheduler, |
lib/std/Target/amdgpu.zig+325-30| ... | ... | @@ -8,16 +8,23 @@ pub const Feature = enum { |
| 8 | 8 | @"16_bit_insts", |
| 9 | 9 | a16, |
| 10 | 10 | add_no_carry_insts, |
| 11 | agent_scope_fine_grained_remote_memory_atomics, | |
| 12 | allocate1_5xvgprs, | |
| 11 | 13 | aperture_regs, |
| 12 | 14 | architected_flat_scratch, |
| 13 | 15 | architected_sgprs, |
| 14 | 16 | atomic_buffer_global_pk_add_f16_insts, |
| 15 | 17 | atomic_buffer_global_pk_add_f16_no_rtn_insts, |
| 18 | atomic_buffer_pk_add_bf16_inst, | |
| 16 | 19 | atomic_csub_no_rtn_insts, |
| 17 | 20 | atomic_ds_pk_add_16_insts, |
| 18 | 21 | atomic_fadd_no_rtn_insts, |
| 19 | 22 | atomic_fadd_rtn_insts, |
| 20 | 23 | atomic_flat_pk_add_16_insts, |
| 24 | atomic_fmin_fmax_flat_f32, | |
| 25 | atomic_fmin_fmax_flat_f64, | |
| 26 | atomic_fmin_fmax_global_f32, | |
| 27 | atomic_fmin_fmax_global_f64, | |
| 21 | 28 | atomic_global_pk_add_bf16_inst, |
| 22 | 29 | auto_waitcnt_before_barrier, |
| 23 | 30 | back_off_barrier, |
| ... | ... | @@ -27,6 +34,7 @@ pub const Feature = enum { |
| 27 | 34 | default_component_zero, |
| 28 | 35 | dl_insts, |
| 29 | 36 | dot10_insts, |
| 37 | dot11_insts, | |
| 30 | 38 | dot1_insts, |
| 31 | 39 | dot2_insts, |
| 32 | 40 | dot3_insts, |
| ... | ... | @@ -47,6 +55,7 @@ pub const Feature = enum { |
| 47 | 55 | fast_fmaf, |
| 48 | 56 | flat_address_space, |
| 49 | 57 | flat_atomic_fadd_f32_inst, |
| 58 | flat_buffer_global_fadd_f64_inst, | |
| 50 | 59 | flat_for_global, |
| 51 | 60 | flat_global_insts, |
| 52 | 61 | flat_inst_offsets, |
| ... | ... | @@ -71,7 +80,6 @@ pub const Feature = enum { |
| 71 | 80 | gfx10_b_encoding, |
| 72 | 81 | gfx10_insts, |
| 73 | 82 | gfx11, |
| 74 | gfx11_full_vgprs, | |
| 75 | 83 | gfx11_insts, |
| 76 | 84 | gfx12, |
| 77 | 85 | gfx12_insts, |
| ... | ... | @@ -101,9 +109,12 @@ pub const Feature = enum { |
| 101 | 109 | mad_mac_f32_insts, |
| 102 | 110 | mad_mix_insts, |
| 103 | 111 | mai_insts, |
| 112 | max_hard_clause_length_32, | |
| 113 | max_hard_clause_length_63, | |
| 104 | 114 | max_private_element_size_16, |
| 105 | 115 | max_private_element_size_4, |
| 106 | 116 | max_private_element_size_8, |
| 117 | memory_atomic_fadd_f32_denormal_support, | |
| 107 | 118 | mfma_inline_literal_bug, |
| 108 | 119 | mimg_r128, |
| 109 | 120 | movrel, |
| ... | ... | @@ -120,11 +131,15 @@ pub const Feature = enum { |
| 120 | 131 | packed_tid, |
| 121 | 132 | partial_nsa_encoding, |
| 122 | 133 | pk_fmac_f16_inst, |
| 134 | precise_memory, | |
| 135 | priv_enabled_trap2_nop_bug, | |
| 123 | 136 | promote_alloca, |
| 124 | 137 | prt_strict_null, |
| 125 | 138 | pseudo_scalar_trans, |
| 126 | 139 | r128_a16, |
| 127 | 140 | real_true16, |
| 141 | required_export_priority, | |
| 142 | requires_cov6, | |
| 128 | 143 | restricted_soffset, |
| 129 | 144 | s_memrealtime, |
| 130 | 145 | s_memtime_inst, |
| ... | ... | @@ -201,6 +216,16 @@ pub const all_features = blk: { |
| 201 | 216 | .description = "Have VALU add/sub instructions without carry out", |
| 202 | 217 | .dependencies = featureSet(&[_]Feature{}), |
| 203 | 218 | }; |
| 219 | result[@intFromEnum(Feature.agent_scope_fine_grained_remote_memory_atomics)] = .{ | |
| 220 | .llvm_name = "agent-scope-fine-grained-remote-memory-atomics", | |
| 221 | .description = "Agent (device) scoped atomic operations, excluding those directly supported by PCIe (i.e. integer atomic add, exchange, and compare-and-swap), are functional for allocations in host or peer device memory.", | |
| 222 | .dependencies = featureSet(&[_]Feature{}), | |
| 223 | }; | |
| 224 | result[@intFromEnum(Feature.allocate1_5xvgprs)] = .{ | |
| 225 | .llvm_name = "allocate1_5xvgprs", | |
| 226 | .description = "Has 50% more physical VGPRs and 50% larger allocation granule", | |
| 227 | .dependencies = featureSet(&[_]Feature{}), | |
| 228 | }; | |
| 204 | 229 | result[@intFromEnum(Feature.aperture_regs)] = .{ |
| 205 | 230 | .llvm_name = "aperture-regs", |
| 206 | 231 | .description = "Has Memory Aperture Base and Size Registers", |
| ... | ... | @@ -230,6 +255,11 @@ pub const all_features = blk: { |
| 230 | 255 | .flat_global_insts, |
| 231 | 256 | }), |
| 232 | 257 | }; |
| 258 | result[@intFromEnum(Feature.atomic_buffer_pk_add_bf16_inst)] = .{ | |
| 259 | .llvm_name = "atomic-buffer-pk-add-bf16-inst", | |
| 260 | .description = "Has buffer_atomic_pk_add_bf16 instruction", | |
| 261 | .dependencies = featureSet(&[_]Feature{}), | |
| 262 | }; | |
| 233 | 263 | result[@intFromEnum(Feature.atomic_csub_no_rtn_insts)] = .{ |
| 234 | 264 | .llvm_name = "atomic-csub-no-rtn-insts", |
| 235 | 265 | .description = "Has buffer_atomic_csub and global_atomic_csub instructions that don't return original value", |
| ... | ... | @@ -259,6 +289,26 @@ pub const all_features = blk: { |
| 259 | 289 | .description = "Has flat_atomic_pk_add_f16 and flat_atomic_pk_add_bf16 instructions", |
| 260 | 290 | .dependencies = featureSet(&[_]Feature{}), |
| 261 | 291 | }; |
| 292 | result[@intFromEnum(Feature.atomic_fmin_fmax_flat_f32)] = .{ | |
| 293 | .llvm_name = "atomic-fmin-fmax-flat-f32", | |
| 294 | .description = "Has flat memory instructions for atomicrmw fmin/fmax for float", | |
| 295 | .dependencies = featureSet(&[_]Feature{}), | |
| 296 | }; | |
| 297 | result[@intFromEnum(Feature.atomic_fmin_fmax_flat_f64)] = .{ | |
| 298 | .llvm_name = "atomic-fmin-fmax-flat-f64", | |
| 299 | .description = "Has flat memory instructions for atomicrmw fmin/fmax for double", | |
| 300 | .dependencies = featureSet(&[_]Feature{}), | |
| 301 | }; | |
| 302 | result[@intFromEnum(Feature.atomic_fmin_fmax_global_f32)] = .{ | |
| 303 | .llvm_name = "atomic-fmin-fmax-global-f32", | |
| 304 | .description = "Has global/buffer instructions for atomicrmw fmin/fmax for float", | |
| 305 | .dependencies = featureSet(&[_]Feature{}), | |
| 306 | }; | |
| 307 | result[@intFromEnum(Feature.atomic_fmin_fmax_global_f64)] = .{ | |
| 308 | .llvm_name = "atomic-fmin-fmax-global-f64", | |
| 309 | .description = "Has global/buffer instructions for atomicrmw fmin/fmax for float", | |
| 310 | .dependencies = featureSet(&[_]Feature{}), | |
| 311 | }; | |
| 262 | 312 | result[@intFromEnum(Feature.atomic_global_pk_add_bf16_inst)] = .{ |
| 263 | 313 | .llvm_name = "atomic-global-pk-add-bf16-inst", |
| 264 | 314 | .description = "Has global_atomic_pk_add_bf16 instruction", |
| ... | ... | @@ -306,6 +356,11 @@ pub const all_features = blk: { |
| 306 | 356 | .description = "Has v_dot2_f32_f16 instruction", |
| 307 | 357 | .dependencies = featureSet(&[_]Feature{}), |
| 308 | 358 | }; |
| 359 | result[@intFromEnum(Feature.dot11_insts)] = .{ | |
| 360 | .llvm_name = "dot11-insts", | |
| 361 | .description = "Has v_dot4_f32_fp8_fp8, v_dot4_f32_fp8_bf8, v_dot4_f32_bf8_fp8, v_dot4_f32_bf8_bf8 instructions", | |
| 362 | .dependencies = featureSet(&[_]Feature{}), | |
| 363 | }; | |
| 309 | 364 | result[@intFromEnum(Feature.dot1_insts)] = .{ |
| 310 | 365 | .llvm_name = "dot1-insts", |
| 311 | 366 | .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions", |
| ... | ... | @@ -406,6 +461,11 @@ pub const all_features = blk: { |
| 406 | 461 | .description = "Has flat_atomic_add_f32 instruction", |
| 407 | 462 | .dependencies = featureSet(&[_]Feature{}), |
| 408 | 463 | }; |
| 464 | result[@intFromEnum(Feature.flat_buffer_global_fadd_f64_inst)] = .{ | |
| 465 | .llvm_name = "flat-buffer-global-fadd-f64-inst", | |
| 466 | .description = "Has flat, buffer, and global instructions for f64 atomic fadd", | |
| 467 | .dependencies = featureSet(&[_]Feature{}), | |
| 468 | }; | |
| 409 | 469 | result[@intFromEnum(Feature.flat_for_global)] = .{ |
| 410 | 470 | .llvm_name = "flat-for-global", |
| 411 | 471 | .description = "Force to generate flat instruction for global", |
| ... | ... | @@ -504,6 +564,10 @@ pub const all_features = blk: { |
| 504 | 564 | .a16, |
| 505 | 565 | .add_no_carry_insts, |
| 506 | 566 | .aperture_regs, |
| 567 | .atomic_fmin_fmax_flat_f32, | |
| 568 | .atomic_fmin_fmax_flat_f64, | |
| 569 | .atomic_fmin_fmax_global_f32, | |
| 570 | .atomic_fmin_fmax_global_f64, | |
| 507 | 571 | .ci_insts, |
| 508 | 572 | .default_component_zero, |
| 509 | 573 | .dpp, |
| ... | ... | @@ -527,6 +591,7 @@ pub const all_features = blk: { |
| 527 | 591 | .int_clamp_insts, |
| 528 | 592 | .inv_2pi_inline_imm, |
| 529 | 593 | .localmemorysize65536, |
| 594 | .max_hard_clause_length_63, | |
| 530 | 595 | .mimg_r128, |
| 531 | 596 | .movrel, |
| 532 | 597 | .no_data_dep_hazard, |
| ... | ... | @@ -573,6 +638,8 @@ pub const all_features = blk: { |
| 573 | 638 | .a16, |
| 574 | 639 | .add_no_carry_insts, |
| 575 | 640 | .aperture_regs, |
| 641 | .atomic_fmin_fmax_flat_f32, | |
| 642 | .atomic_fmin_fmax_global_f32, | |
| 576 | 643 | .ci_insts, |
| 577 | 644 | .default_component_zero, |
| 578 | 645 | .dpp, |
| ... | ... | @@ -599,6 +666,7 @@ pub const all_features = blk: { |
| 599 | 666 | .int_clamp_insts, |
| 600 | 667 | .inv_2pi_inline_imm, |
| 601 | 668 | .localmemorysize65536, |
| 669 | .max_hard_clause_length_32, | |
| 602 | 670 | .mimg_r128, |
| 603 | 671 | .movrel, |
| 604 | 672 | .no_data_dep_hazard, |
| ... | ... | @@ -613,11 +681,6 @@ pub const all_features = blk: { |
| 613 | 681 | .vscnt, |
| 614 | 682 | }), |
| 615 | 683 | }; |
| 616 | result[@intFromEnum(Feature.gfx11_full_vgprs)] = .{ | |
| 617 | .llvm_name = "gfx11-full-vgprs", | |
| 618 | .description = "GFX11 with 50% more physical VGPRs and 50% larger allocation granule than GFX10", | |
| 619 | .dependencies = featureSet(&[_]Feature{}), | |
| 620 | }; | |
| 621 | 684 | result[@intFromEnum(Feature.gfx11_insts)] = .{ |
| 622 | 685 | .llvm_name = "gfx11-insts", |
| 623 | 686 | .description = "Additional instructions for GFX11+", |
| ... | ... | @@ -630,7 +693,10 @@ pub const all_features = blk: { |
| 630 | 693 | .@"16_bit_insts", |
| 631 | 694 | .a16, |
| 632 | 695 | .add_no_carry_insts, |
| 696 | .agent_scope_fine_grained_remote_memory_atomics, | |
| 633 | 697 | .aperture_regs, |
| 698 | .atomic_fmin_fmax_flat_f32, | |
| 699 | .atomic_fmin_fmax_global_f32, | |
| 634 | 700 | .ci_insts, |
| 635 | 701 | .default_component_broadcast, |
| 636 | 702 | .dpp, |
| ... | ... | @@ -655,6 +721,7 @@ pub const all_features = blk: { |
| 655 | 721 | .int_clamp_insts, |
| 656 | 722 | .inv_2pi_inline_imm, |
| 657 | 723 | .localmemorysize65536, |
| 724 | .max_hard_clause_length_32, | |
| 658 | 725 | .mimg_r128, |
| 659 | 726 | .movrel, |
| 660 | 727 | .no_data_dep_hazard, |
| ... | ... | @@ -844,6 +911,16 @@ pub const all_features = blk: { |
| 844 | 911 | .description = "Has mAI instructions", |
| 845 | 912 | .dependencies = featureSet(&[_]Feature{}), |
| 846 | 913 | }; |
| 914 | result[@intFromEnum(Feature.max_hard_clause_length_32)] = .{ | |
| 915 | .llvm_name = "max-hard-clause-length-32", | |
| 916 | .description = "Maximum number of instructions in an explicit S_CLAUSE is 32", | |
| 917 | .dependencies = featureSet(&[_]Feature{}), | |
| 918 | }; | |
| 919 | result[@intFromEnum(Feature.max_hard_clause_length_63)] = .{ | |
| 920 | .llvm_name = "max-hard-clause-length-63", | |
| 921 | .description = "Maximum number of instructions in an explicit S_CLAUSE is 63", | |
| 922 | .dependencies = featureSet(&[_]Feature{}), | |
| 923 | }; | |
| 847 | 924 | result[@intFromEnum(Feature.max_private_element_size_16)] = .{ |
| 848 | 925 | .llvm_name = "max-private-element-size-16", |
| 849 | 926 | .description = "Maximum private access size may be 16", |
| ... | ... | @@ -859,6 +936,11 @@ pub const all_features = blk: { |
| 859 | 936 | .description = "Maximum private access size may be 8", |
| 860 | 937 | .dependencies = featureSet(&[_]Feature{}), |
| 861 | 938 | }; |
| 939 | result[@intFromEnum(Feature.memory_atomic_fadd_f32_denormal_support)] = .{ | |
| 940 | .llvm_name = "memory-atomic-fadd-f32-denormal-support", | |
| 941 | .description = "global/flat/buffer atomic fadd for float supports denormal handling", | |
| 942 | .dependencies = featureSet(&[_]Feature{}), | |
| 943 | }; | |
| 862 | 944 | result[@intFromEnum(Feature.mfma_inline_literal_bug)] = .{ |
| 863 | 945 | .llvm_name = "mfma-inline-literal-bug", |
| 864 | 946 | .description = "MFMA cannot use inline literal as SrcC", |
| ... | ... | @@ -939,6 +1021,16 @@ pub const all_features = blk: { |
| 939 | 1021 | .description = "Has v_pk_fmac_f16 instruction", |
| 940 | 1022 | .dependencies = featureSet(&[_]Feature{}), |
| 941 | 1023 | }; |
| 1024 | result[@intFromEnum(Feature.precise_memory)] = .{ | |
| 1025 | .llvm_name = "precise-memory", | |
| 1026 | .description = "Enable precise memory mode", | |
| 1027 | .dependencies = featureSet(&[_]Feature{}), | |
| 1028 | }; | |
| 1029 | result[@intFromEnum(Feature.priv_enabled_trap2_nop_bug)] = .{ | |
| 1030 | .llvm_name = "priv-enabled-trap2-nop-bug", | |
| 1031 | .description = "Hardware that runs with PRIV=1 interpreting 's_trap 2' as a nop bug", | |
| 1032 | .dependencies = featureSet(&[_]Feature{}), | |
| 1033 | }; | |
| 942 | 1034 | result[@intFromEnum(Feature.promote_alloca)] = .{ |
| 943 | 1035 | .llvm_name = "promote-alloca", |
| 944 | 1036 | .description = "Enable promote alloca pass", |
| ... | ... | @@ -964,6 +1056,16 @@ pub const all_features = blk: { |
| 964 | 1056 | .description = "Use true 16-bit registers", |
| 965 | 1057 | .dependencies = featureSet(&[_]Feature{}), |
| 966 | 1058 | }; |
| 1059 | result[@intFromEnum(Feature.required_export_priority)] = .{ | |
| 1060 | .llvm_name = "required-export-priority", | |
| 1061 | .description = "Export priority must be explicitly manipulated on GFX11.5", | |
| 1062 | .dependencies = featureSet(&[_]Feature{}), | |
| 1063 | }; | |
| 1064 | result[@intFromEnum(Feature.requires_cov6)] = .{ | |
| 1065 | .llvm_name = "requires-cov6", | |
| 1066 | .description = "Target Requires Code Object V6", | |
| 1067 | .dependencies = featureSet(&[_]Feature{}), | |
| 1068 | }; | |
| 967 | 1069 | result[@intFromEnum(Feature.restricted_soffset)] = .{ |
| 968 | 1070 | .llvm_name = "restricted-soffset", |
| 969 | 1071 | .description = "Has restricted SOffset (immediate not supported).", |
| ... | ... | @@ -1038,6 +1140,10 @@ pub const all_features = blk: { |
| 1038 | 1140 | .llvm_name = "sea-islands", |
| 1039 | 1141 | .description = "SEA_ISLANDS GPU generation", |
| 1040 | 1142 | .dependencies = featureSet(&[_]Feature{ |
| 1143 | .atomic_fmin_fmax_flat_f32, | |
| 1144 | .atomic_fmin_fmax_flat_f64, | |
| 1145 | .atomic_fmin_fmax_global_f32, | |
| 1146 | .atomic_fmin_fmax_global_f64, | |
| 1041 | 1147 | .ci_insts, |
| 1042 | 1148 | .default_component_zero, |
| 1043 | 1149 | .ds_src2_insts, |
| ... | ... | @@ -1087,6 +1193,8 @@ pub const all_features = blk: { |
| 1087 | 1193 | .llvm_name = "southern-islands", |
| 1088 | 1194 | .description = "SOUTHERN_ISLANDS GPU generation", |
| 1089 | 1195 | .dependencies = featureSet(&[_]Feature{ |
| 1196 | .atomic_fmin_fmax_global_f32, | |
| 1197 | .atomic_fmin_fmax_global_f64, | |
| 1090 | 1198 | .default_component_zero, |
| 1091 | 1199 | .ds_src2_insts, |
| 1092 | 1200 | .extended_image_insts, |
| ... | ... | @@ -1365,7 +1473,6 @@ pub const cpu = struct { |
| 1365 | 1473 | .vcmpx_exec_war_hazard, |
| 1366 | 1474 | .vcmpx_permlane_hazard, |
| 1367 | 1475 | .vmem_to_scalar_write_hazard, |
| 1368 | .wavefrontsize32, | |
| 1369 | 1476 | .xnack_support, |
| 1370 | 1477 | }), |
| 1371 | 1478 | }; |
| ... | ... | @@ -1402,7 +1509,6 @@ pub const cpu = struct { |
| 1402 | 1509 | .vcmpx_exec_war_hazard, |
| 1403 | 1510 | .vcmpx_permlane_hazard, |
| 1404 | 1511 | .vmem_to_scalar_write_hazard, |
| 1405 | .wavefrontsize32, | |
| 1406 | 1512 | .xnack_support, |
| 1407 | 1513 | }), |
| 1408 | 1514 | }; |
| ... | ... | @@ -1439,7 +1545,6 @@ pub const cpu = struct { |
| 1439 | 1545 | .vcmpx_exec_war_hazard, |
| 1440 | 1546 | .vcmpx_permlane_hazard, |
| 1441 | 1547 | .vmem_to_scalar_write_hazard, |
| 1442 | .wavefrontsize32, | |
| 1443 | 1548 | .xnack_support, |
| 1444 | 1549 | }), |
| 1445 | 1550 | }; |
| ... | ... | @@ -1471,7 +1576,6 @@ pub const cpu = struct { |
| 1471 | 1576 | .vcmpx_exec_war_hazard, |
| 1472 | 1577 | .vcmpx_permlane_hazard, |
| 1473 | 1578 | .vmem_to_scalar_write_hazard, |
| 1474 | .wavefrontsize32, | |
| 1475 | 1579 | .xnack_support, |
| 1476 | 1580 | }), |
| 1477 | 1581 | }; |
| ... | ... | @@ -1494,7 +1598,6 @@ pub const cpu = struct { |
| 1494 | 1598 | .ldsbankcount32, |
| 1495 | 1599 | .nsa_encoding, |
| 1496 | 1600 | .shader_cycles_register, |
| 1497 | .wavefrontsize32, | |
| 1498 | 1601 | }), |
| 1499 | 1602 | }; |
| 1500 | 1603 | pub const gfx1031 = CpuModel{ |
| ... | ... | @@ -1516,7 +1619,6 @@ pub const cpu = struct { |
| 1516 | 1619 | .ldsbankcount32, |
| 1517 | 1620 | .nsa_encoding, |
| 1518 | 1621 | .shader_cycles_register, |
| 1519 | .wavefrontsize32, | |
| 1520 | 1622 | }), |
| 1521 | 1623 | }; |
| 1522 | 1624 | pub const gfx1032 = CpuModel{ |
| ... | ... | @@ -1538,7 +1640,6 @@ pub const cpu = struct { |
| 1538 | 1640 | .ldsbankcount32, |
| 1539 | 1641 | .nsa_encoding, |
| 1540 | 1642 | .shader_cycles_register, |
| 1541 | .wavefrontsize32, | |
| 1542 | 1643 | }), |
| 1543 | 1644 | }; |
| 1544 | 1645 | pub const gfx1033 = CpuModel{ |
| ... | ... | @@ -1560,7 +1661,6 @@ pub const cpu = struct { |
| 1560 | 1661 | .ldsbankcount32, |
| 1561 | 1662 | .nsa_encoding, |
| 1562 | 1663 | .shader_cycles_register, |
| 1563 | .wavefrontsize32, | |
| 1564 | 1664 | }), |
| 1565 | 1665 | }; |
| 1566 | 1666 | pub const gfx1034 = CpuModel{ |
| ... | ... | @@ -1582,7 +1682,6 @@ pub const cpu = struct { |
| 1582 | 1682 | .ldsbankcount32, |
| 1583 | 1683 | .nsa_encoding, |
| 1584 | 1684 | .shader_cycles_register, |
| 1585 | .wavefrontsize32, | |
| 1586 | 1685 | }), |
| 1587 | 1686 | }; |
| 1588 | 1687 | pub const gfx1035 = CpuModel{ |
| ... | ... | @@ -1604,7 +1703,6 @@ pub const cpu = struct { |
| 1604 | 1703 | .ldsbankcount32, |
| 1605 | 1704 | .nsa_encoding, |
| 1606 | 1705 | .shader_cycles_register, |
| 1607 | .wavefrontsize32, | |
| 1608 | 1706 | }), |
| 1609 | 1707 | }; |
| 1610 | 1708 | pub const gfx1036 = CpuModel{ |
| ... | ... | @@ -1626,13 +1724,66 @@ pub const cpu = struct { |
| 1626 | 1724 | .ldsbankcount32, |
| 1627 | 1725 | .nsa_encoding, |
| 1628 | 1726 | .shader_cycles_register, |
| 1629 | .wavefrontsize32, | |
| 1727 | }), | |
| 1728 | }; | |
| 1729 | pub const gfx10_1_generic = CpuModel{ | |
| 1730 | .name = "gfx10_1_generic", | |
| 1731 | .llvm_name = "gfx10-1-generic", | |
| 1732 | .features = featureSet(&[_]Feature{ | |
| 1733 | .back_off_barrier, | |
| 1734 | .dl_insts, | |
| 1735 | .ds_src2_insts, | |
| 1736 | .flat_segment_offset_bug, | |
| 1737 | .get_wave_id_inst, | |
| 1738 | .gfx10, | |
| 1739 | .inst_fwd_prefetch_bug, | |
| 1740 | .lds_branch_vmem_war_hazard, | |
| 1741 | .lds_misaligned_bug, | |
| 1742 | .ldsbankcount32, | |
| 1743 | .mad_mac_f32_insts, | |
| 1744 | .negative_unaligned_scratch_offset_bug, | |
| 1745 | .nsa_clause_bug, | |
| 1746 | .nsa_encoding, | |
| 1747 | .nsa_to_vmem_bug, | |
| 1748 | .offset_3f_bug, | |
| 1749 | .requires_cov6, | |
| 1750 | .scalar_atomics, | |
| 1751 | .scalar_flat_scratch_insts, | |
| 1752 | .scalar_stores, | |
| 1753 | .smem_to_vector_write_hazard, | |
| 1754 | .vcmpx_exec_war_hazard, | |
| 1755 | .vcmpx_permlane_hazard, | |
| 1756 | .vmem_to_scalar_write_hazard, | |
| 1757 | .xnack_support, | |
| 1758 | }), | |
| 1759 | }; | |
| 1760 | pub const gfx10_3_generic = CpuModel{ | |
| 1761 | .name = "gfx10_3_generic", | |
| 1762 | .llvm_name = "gfx10-3-generic", | |
| 1763 | .features = featureSet(&[_]Feature{ | |
| 1764 | .back_off_barrier, | |
| 1765 | .dl_insts, | |
| 1766 | .dot10_insts, | |
| 1767 | .dot1_insts, | |
| 1768 | .dot2_insts, | |
| 1769 | .dot5_insts, | |
| 1770 | .dot6_insts, | |
| 1771 | .dot7_insts, | |
| 1772 | .gfx10, | |
| 1773 | .gfx10_3_insts, | |
| 1774 | .gfx10_a_encoding, | |
| 1775 | .gfx10_b_encoding, | |
| 1776 | .ldsbankcount32, | |
| 1777 | .nsa_encoding, | |
| 1778 | .requires_cov6, | |
| 1779 | .shader_cycles_register, | |
| 1630 | 1780 | }), |
| 1631 | 1781 | }; |
| 1632 | 1782 | pub const gfx1100 = CpuModel{ |
| 1633 | 1783 | .name = "gfx1100", |
| 1634 | 1784 | .llvm_name = "gfx1100", |
| 1635 | 1785 | .features = featureSet(&[_]Feature{ |
| 1786 | .allocate1_5xvgprs, | |
| 1636 | 1787 | .architected_flat_scratch, |
| 1637 | 1788 | .atomic_fadd_no_rtn_insts, |
| 1638 | 1789 | .atomic_fadd_rtn_insts, |
| ... | ... | @@ -1644,25 +1795,26 @@ pub const cpu = struct { |
| 1644 | 1795 | .dot9_insts, |
| 1645 | 1796 | .flat_atomic_fadd_f32_inst, |
| 1646 | 1797 | .gfx11, |
| 1647 | .gfx11_full_vgprs, | |
| 1648 | 1798 | .image_insts, |
| 1649 | 1799 | .ldsbankcount32, |
| 1650 | 1800 | .mad_intra_fwd_bug, |
| 1801 | .memory_atomic_fadd_f32_denormal_support, | |
| 1651 | 1802 | .msaa_load_dst_sel_bug, |
| 1652 | 1803 | .nsa_encoding, |
| 1653 | 1804 | .packed_tid, |
| 1654 | 1805 | .partial_nsa_encoding, |
| 1806 | .priv_enabled_trap2_nop_bug, | |
| 1655 | 1807 | .shader_cycles_register, |
| 1656 | 1808 | .user_sgpr_init16_bug, |
| 1657 | 1809 | .valu_trans_use_hazard, |
| 1658 | 1810 | .vcmpx_permlane_hazard, |
| 1659 | .wavefrontsize32, | |
| 1660 | 1811 | }), |
| 1661 | 1812 | }; |
| 1662 | 1813 | pub const gfx1101 = CpuModel{ |
| 1663 | 1814 | .name = "gfx1101", |
| 1664 | 1815 | .llvm_name = "gfx1101", |
| 1665 | 1816 | .features = featureSet(&[_]Feature{ |
| 1817 | .allocate1_5xvgprs, | |
| 1666 | 1818 | .architected_flat_scratch, |
| 1667 | 1819 | .atomic_fadd_no_rtn_insts, |
| 1668 | 1820 | .atomic_fadd_rtn_insts, |
| ... | ... | @@ -1674,18 +1826,18 @@ pub const cpu = struct { |
| 1674 | 1826 | .dot9_insts, |
| 1675 | 1827 | .flat_atomic_fadd_f32_inst, |
| 1676 | 1828 | .gfx11, |
| 1677 | .gfx11_full_vgprs, | |
| 1678 | 1829 | .image_insts, |
| 1679 | 1830 | .ldsbankcount32, |
| 1680 | 1831 | .mad_intra_fwd_bug, |
| 1832 | .memory_atomic_fadd_f32_denormal_support, | |
| 1681 | 1833 | .msaa_load_dst_sel_bug, |
| 1682 | 1834 | .nsa_encoding, |
| 1683 | 1835 | .packed_tid, |
| 1684 | 1836 | .partial_nsa_encoding, |
| 1837 | .priv_enabled_trap2_nop_bug, | |
| 1685 | 1838 | .shader_cycles_register, |
| 1686 | 1839 | .valu_trans_use_hazard, |
| 1687 | 1840 | .vcmpx_permlane_hazard, |
| 1688 | .wavefrontsize32, | |
| 1689 | 1841 | }), |
| 1690 | 1842 | }; |
| 1691 | 1843 | pub const gfx1102 = CpuModel{ |
| ... | ... | @@ -1706,15 +1858,16 @@ pub const cpu = struct { |
| 1706 | 1858 | .image_insts, |
| 1707 | 1859 | .ldsbankcount32, |
| 1708 | 1860 | .mad_intra_fwd_bug, |
| 1861 | .memory_atomic_fadd_f32_denormal_support, | |
| 1709 | 1862 | .msaa_load_dst_sel_bug, |
| 1710 | 1863 | .nsa_encoding, |
| 1711 | 1864 | .packed_tid, |
| 1712 | 1865 | .partial_nsa_encoding, |
| 1866 | .priv_enabled_trap2_nop_bug, | |
| 1713 | 1867 | .shader_cycles_register, |
| 1714 | 1868 | .user_sgpr_init16_bug, |
| 1715 | 1869 | .valu_trans_use_hazard, |
| 1716 | 1870 | .vcmpx_permlane_hazard, |
| 1717 | .wavefrontsize32, | |
| 1718 | 1871 | }), |
| 1719 | 1872 | }; |
| 1720 | 1873 | pub const gfx1103 = CpuModel{ |
| ... | ... | @@ -1735,14 +1888,15 @@ pub const cpu = struct { |
| 1735 | 1888 | .image_insts, |
| 1736 | 1889 | .ldsbankcount32, |
| 1737 | 1890 | .mad_intra_fwd_bug, |
| 1891 | .memory_atomic_fadd_f32_denormal_support, | |
| 1738 | 1892 | .msaa_load_dst_sel_bug, |
| 1739 | 1893 | .nsa_encoding, |
| 1740 | 1894 | .packed_tid, |
| 1741 | 1895 | .partial_nsa_encoding, |
| 1896 | .priv_enabled_trap2_nop_bug, | |
| 1742 | 1897 | .shader_cycles_register, |
| 1743 | 1898 | .valu_trans_use_hazard, |
| 1744 | 1899 | .vcmpx_permlane_hazard, |
| 1745 | .wavefrontsize32, | |
| 1746 | 1900 | }), |
| 1747 | 1901 | }; |
| 1748 | 1902 | pub const gfx1150 = CpuModel{ |
| ... | ... | @@ -1763,21 +1917,22 @@ pub const cpu = struct { |
| 1763 | 1917 | .gfx11, |
| 1764 | 1918 | .image_insts, |
| 1765 | 1919 | .ldsbankcount32, |
| 1766 | .mad_intra_fwd_bug, | |
| 1920 | .memory_atomic_fadd_f32_denormal_support, | |
| 1767 | 1921 | .nsa_encoding, |
| 1768 | 1922 | .packed_tid, |
| 1769 | 1923 | .partial_nsa_encoding, |
| 1924 | .required_export_priority, | |
| 1770 | 1925 | .salu_float, |
| 1771 | 1926 | .shader_cycles_register, |
| 1772 | 1927 | .vcmpx_permlane_hazard, |
| 1773 | 1928 | .vgpr_singleuse_hint, |
| 1774 | .wavefrontsize32, | |
| 1775 | 1929 | }), |
| 1776 | 1930 | }; |
| 1777 | 1931 | pub const gfx1151 = CpuModel{ |
| 1778 | 1932 | .name = "gfx1151", |
| 1779 | 1933 | .llvm_name = "gfx1151", |
| 1780 | 1934 | .features = featureSet(&[_]Feature{ |
| 1935 | .allocate1_5xvgprs, | |
| 1781 | 1936 | .architected_flat_scratch, |
| 1782 | 1937 | .atomic_fadd_no_rtn_insts, |
| 1783 | 1938 | .atomic_fadd_rtn_insts, |
| ... | ... | @@ -1790,27 +1945,89 @@ pub const cpu = struct { |
| 1790 | 1945 | .dpp_src1_sgpr, |
| 1791 | 1946 | .flat_atomic_fadd_f32_inst, |
| 1792 | 1947 | .gfx11, |
| 1793 | .gfx11_full_vgprs, | |
| 1794 | 1948 | .image_insts, |
| 1795 | 1949 | .ldsbankcount32, |
| 1796 | .mad_intra_fwd_bug, | |
| 1950 | .memory_atomic_fadd_f32_denormal_support, | |
| 1951 | .nsa_encoding, | |
| 1952 | .packed_tid, | |
| 1953 | .partial_nsa_encoding, | |
| 1954 | .required_export_priority, | |
| 1955 | .salu_float, | |
| 1956 | .shader_cycles_register, | |
| 1957 | .vcmpx_permlane_hazard, | |
| 1958 | .vgpr_singleuse_hint, | |
| 1959 | }), | |
| 1960 | }; | |
| 1961 | pub const gfx1152 = CpuModel{ | |
| 1962 | .name = "gfx1152", | |
| 1963 | .llvm_name = "gfx1152", | |
| 1964 | .features = featureSet(&[_]Feature{ | |
| 1965 | .architected_flat_scratch, | |
| 1966 | .atomic_fadd_no_rtn_insts, | |
| 1967 | .atomic_fadd_rtn_insts, | |
| 1968 | .dl_insts, | |
| 1969 | .dot10_insts, | |
| 1970 | .dot5_insts, | |
| 1971 | .dot7_insts, | |
| 1972 | .dot8_insts, | |
| 1973 | .dot9_insts, | |
| 1974 | .dpp_src1_sgpr, | |
| 1975 | .flat_atomic_fadd_f32_inst, | |
| 1976 | .gfx11, | |
| 1977 | .image_insts, | |
| 1978 | .ldsbankcount32, | |
| 1979 | .memory_atomic_fadd_f32_denormal_support, | |
| 1797 | 1980 | .nsa_encoding, |
| 1798 | 1981 | .packed_tid, |
| 1799 | 1982 | .partial_nsa_encoding, |
| 1983 | .required_export_priority, | |
| 1800 | 1984 | .salu_float, |
| 1801 | 1985 | .shader_cycles_register, |
| 1802 | 1986 | .vcmpx_permlane_hazard, |
| 1803 | 1987 | .vgpr_singleuse_hint, |
| 1804 | .wavefrontsize32, | |
| 1988 | }), | |
| 1989 | }; | |
| 1990 | pub const gfx11_generic = CpuModel{ | |
| 1991 | .name = "gfx11_generic", | |
| 1992 | .llvm_name = "gfx11-generic", | |
| 1993 | .features = featureSet(&[_]Feature{ | |
| 1994 | .architected_flat_scratch, | |
| 1995 | .atomic_fadd_no_rtn_insts, | |
| 1996 | .atomic_fadd_rtn_insts, | |
| 1997 | .dl_insts, | |
| 1998 | .dot10_insts, | |
| 1999 | .dot5_insts, | |
| 2000 | .dot7_insts, | |
| 2001 | .dot8_insts, | |
| 2002 | .dot9_insts, | |
| 2003 | .flat_atomic_fadd_f32_inst, | |
| 2004 | .gfx11, | |
| 2005 | .image_insts, | |
| 2006 | .ldsbankcount32, | |
| 2007 | .mad_intra_fwd_bug, | |
| 2008 | .memory_atomic_fadd_f32_denormal_support, | |
| 2009 | .msaa_load_dst_sel_bug, | |
| 2010 | .nsa_encoding, | |
| 2011 | .packed_tid, | |
| 2012 | .partial_nsa_encoding, | |
| 2013 | .priv_enabled_trap2_nop_bug, | |
| 2014 | .required_export_priority, | |
| 2015 | .requires_cov6, | |
| 2016 | .shader_cycles_register, | |
| 2017 | .user_sgpr_init16_bug, | |
| 2018 | .valu_trans_use_hazard, | |
| 2019 | .vcmpx_permlane_hazard, | |
| 1805 | 2020 | }), |
| 1806 | 2021 | }; |
| 1807 | 2022 | pub const gfx1200 = CpuModel{ |
| 1808 | 2023 | .name = "gfx1200", |
| 1809 | 2024 | .llvm_name = "gfx1200", |
| 1810 | 2025 | .features = featureSet(&[_]Feature{ |
| 2026 | .allocate1_5xvgprs, | |
| 1811 | 2027 | .architected_flat_scratch, |
| 1812 | 2028 | .architected_sgprs, |
| 1813 | 2029 | .atomic_buffer_global_pk_add_f16_insts, |
| 2030 | .atomic_buffer_pk_add_bf16_inst, | |
| 1814 | 2031 | .atomic_ds_pk_add_16_insts, |
| 1815 | 2032 | .atomic_fadd_no_rtn_insts, |
| 1816 | 2033 | .atomic_fadd_rtn_insts, |
| ... | ... | @@ -1818,6 +2035,7 @@ pub const cpu = struct { |
| 1818 | 2035 | .atomic_global_pk_add_bf16_inst, |
| 1819 | 2036 | .dl_insts, |
| 1820 | 2037 | .dot10_insts, |
| 2038 | .dot11_insts, | |
| 1821 | 2039 | .dot7_insts, |
| 1822 | 2040 | .dot8_insts, |
| 1823 | 2041 | .dot9_insts, |
| ... | ... | @@ -1828,6 +2046,7 @@ pub const cpu = struct { |
| 1828 | 2046 | .gfx12, |
| 1829 | 2047 | .image_insts, |
| 1830 | 2048 | .ldsbankcount32, |
| 2049 | .memory_atomic_fadd_f32_denormal_support, | |
| 1831 | 2050 | .nsa_encoding, |
| 1832 | 2051 | .packed_tid, |
| 1833 | 2052 | .partial_nsa_encoding, |
| ... | ... | @@ -1838,16 +2057,17 @@ pub const cpu = struct { |
| 1838 | 2057 | .shader_cycles_hi_lo_registers, |
| 1839 | 2058 | .vcmpx_permlane_hazard, |
| 1840 | 2059 | .vgpr_singleuse_hint, |
| 1841 | .wavefrontsize32, | |
| 1842 | 2060 | }), |
| 1843 | 2061 | }; |
| 1844 | 2062 | pub const gfx1201 = CpuModel{ |
| 1845 | 2063 | .name = "gfx1201", |
| 1846 | 2064 | .llvm_name = "gfx1201", |
| 1847 | 2065 | .features = featureSet(&[_]Feature{ |
| 2066 | .allocate1_5xvgprs, | |
| 1848 | 2067 | .architected_flat_scratch, |
| 1849 | 2068 | .architected_sgprs, |
| 1850 | 2069 | .atomic_buffer_global_pk_add_f16_insts, |
| 2070 | .atomic_buffer_pk_add_bf16_inst, | |
| 1851 | 2071 | .atomic_ds_pk_add_16_insts, |
| 1852 | 2072 | .atomic_fadd_no_rtn_insts, |
| 1853 | 2073 | .atomic_fadd_rtn_insts, |
| ... | ... | @@ -1855,6 +2075,7 @@ pub const cpu = struct { |
| 1855 | 2075 | .atomic_global_pk_add_bf16_inst, |
| 1856 | 2076 | .dl_insts, |
| 1857 | 2077 | .dot10_insts, |
| 2078 | .dot11_insts, | |
| 1858 | 2079 | .dot7_insts, |
| 1859 | 2080 | .dot8_insts, |
| 1860 | 2081 | .dot9_insts, |
| ... | ... | @@ -1865,6 +2086,7 @@ pub const cpu = struct { |
| 1865 | 2086 | .gfx12, |
| 1866 | 2087 | .image_insts, |
| 1867 | 2088 | .ldsbankcount32, |
| 2089 | .memory_atomic_fadd_f32_denormal_support, | |
| 1868 | 2090 | .nsa_encoding, |
| 1869 | 2091 | .packed_tid, |
| 1870 | 2092 | .partial_nsa_encoding, |
| ... | ... | @@ -1875,7 +2097,47 @@ pub const cpu = struct { |
| 1875 | 2097 | .shader_cycles_hi_lo_registers, |
| 1876 | 2098 | .vcmpx_permlane_hazard, |
| 1877 | 2099 | .vgpr_singleuse_hint, |
| 1878 | .wavefrontsize32, | |
| 2100 | }), | |
| 2101 | }; | |
| 2102 | pub const gfx12_generic = CpuModel{ | |
| 2103 | .name = "gfx12_generic", | |
| 2104 | .llvm_name = "gfx12-generic", | |
| 2105 | .features = featureSet(&[_]Feature{ | |
| 2106 | .allocate1_5xvgprs, | |
| 2107 | .architected_flat_scratch, | |
| 2108 | .architected_sgprs, | |
| 2109 | .atomic_buffer_global_pk_add_f16_insts, | |
| 2110 | .atomic_buffer_pk_add_bf16_inst, | |
| 2111 | .atomic_ds_pk_add_16_insts, | |
| 2112 | .atomic_fadd_no_rtn_insts, | |
| 2113 | .atomic_fadd_rtn_insts, | |
| 2114 | .atomic_flat_pk_add_16_insts, | |
| 2115 | .atomic_global_pk_add_bf16_inst, | |
| 2116 | .dl_insts, | |
| 2117 | .dot10_insts, | |
| 2118 | .dot11_insts, | |
| 2119 | .dot7_insts, | |
| 2120 | .dot8_insts, | |
| 2121 | .dot9_insts, | |
| 2122 | .dpp_src1_sgpr, | |
| 2123 | .extended_image_insts, | |
| 2124 | .flat_atomic_fadd_f32_inst, | |
| 2125 | .fp8_conversion_insts, | |
| 2126 | .gfx12, | |
| 2127 | .image_insts, | |
| 2128 | .ldsbankcount32, | |
| 2129 | .memory_atomic_fadd_f32_denormal_support, | |
| 2130 | .nsa_encoding, | |
| 2131 | .packed_tid, | |
| 2132 | .partial_nsa_encoding, | |
| 2133 | .pseudo_scalar_trans, | |
| 2134 | .requires_cov6, | |
| 2135 | .restricted_soffset, | |
| 2136 | .salu_float, | |
| 2137 | .scalar_dwordx3_loads, | |
| 2138 | .shader_cycles_hi_lo_registers, | |
| 2139 | .vcmpx_permlane_hazard, | |
| 2140 | .vgpr_singleuse_hint, | |
| 1879 | 2141 | }), |
| 1880 | 2142 | }; |
| 1881 | 2143 | pub const gfx600 = CpuModel{ |
| ... | ... | @@ -2124,6 +2386,8 @@ pub const cpu = struct { |
| 2124 | 2386 | .atomic_buffer_global_pk_add_f16_insts, |
| 2125 | 2387 | .atomic_fadd_no_rtn_insts, |
| 2126 | 2388 | .atomic_fadd_rtn_insts, |
| 2389 | .atomic_fmin_fmax_flat_f64, | |
| 2390 | .atomic_fmin_fmax_global_f64, | |
| 2127 | 2391 | .back_off_barrier, |
| 2128 | 2392 | .dl_insts, |
| 2129 | 2393 | .dot10_insts, |
| ... | ... | @@ -2135,6 +2399,7 @@ pub const cpu = struct { |
| 2135 | 2399 | .dot6_insts, |
| 2136 | 2400 | .dot7_insts, |
| 2137 | 2401 | .dpp_64bit, |
| 2402 | .flat_buffer_global_fadd_f64_inst, | |
| 2138 | 2403 | .fma_mix_insts, |
| 2139 | 2404 | .fmacf64_inst, |
| 2140 | 2405 | .full_rate_64_ops, |
| ... | ... | @@ -2170,12 +2435,15 @@ pub const cpu = struct { |
| 2170 | 2435 | .name = "gfx940", |
| 2171 | 2436 | .llvm_name = "gfx940", |
| 2172 | 2437 | .features = featureSet(&[_]Feature{ |
| 2438 | .agent_scope_fine_grained_remote_memory_atomics, | |
| 2173 | 2439 | .architected_flat_scratch, |
| 2174 | 2440 | .atomic_buffer_global_pk_add_f16_insts, |
| 2175 | 2441 | .atomic_ds_pk_add_16_insts, |
| 2176 | 2442 | .atomic_fadd_no_rtn_insts, |
| 2177 | 2443 | .atomic_fadd_rtn_insts, |
| 2178 | 2444 | .atomic_flat_pk_add_16_insts, |
| 2445 | .atomic_fmin_fmax_flat_f64, | |
| 2446 | .atomic_fmin_fmax_global_f64, | |
| 2179 | 2447 | .atomic_global_pk_add_bf16_inst, |
| 2180 | 2448 | .back_off_barrier, |
| 2181 | 2449 | .dl_insts, |
| ... | ... | @@ -2189,6 +2457,7 @@ pub const cpu = struct { |
| 2189 | 2457 | .dot7_insts, |
| 2190 | 2458 | .dpp_64bit, |
| 2191 | 2459 | .flat_atomic_fadd_f32_inst, |
| 2460 | .flat_buffer_global_fadd_f64_inst, | |
| 2192 | 2461 | .fma_mix_insts, |
| 2193 | 2462 | .fmacf64_inst, |
| 2194 | 2463 | .force_store_sc0_sc1, |
| ... | ... | @@ -2201,6 +2470,7 @@ pub const cpu = struct { |
| 2201 | 2470 | .kernarg_preload, |
| 2202 | 2471 | .ldsbankcount32, |
| 2203 | 2472 | .mai_insts, |
| 2473 | .memory_atomic_fadd_f32_denormal_support, | |
| 2204 | 2474 | .packed_fp32_ops, |
| 2205 | 2475 | .packed_tid, |
| 2206 | 2476 | .pk_fmac_f16_inst, |
| ... | ... | @@ -2211,12 +2481,15 @@ pub const cpu = struct { |
| 2211 | 2481 | .name = "gfx941", |
| 2212 | 2482 | .llvm_name = "gfx941", |
| 2213 | 2483 | .features = featureSet(&[_]Feature{ |
| 2484 | .agent_scope_fine_grained_remote_memory_atomics, | |
| 2214 | 2485 | .architected_flat_scratch, |
| 2215 | 2486 | .atomic_buffer_global_pk_add_f16_insts, |
| 2216 | 2487 | .atomic_ds_pk_add_16_insts, |
| 2217 | 2488 | .atomic_fadd_no_rtn_insts, |
| 2218 | 2489 | .atomic_fadd_rtn_insts, |
| 2219 | 2490 | .atomic_flat_pk_add_16_insts, |
| 2491 | .atomic_fmin_fmax_flat_f64, | |
| 2492 | .atomic_fmin_fmax_global_f64, | |
| 2220 | 2493 | .atomic_global_pk_add_bf16_inst, |
| 2221 | 2494 | .back_off_barrier, |
| 2222 | 2495 | .dl_insts, |
| ... | ... | @@ -2230,6 +2503,7 @@ pub const cpu = struct { |
| 2230 | 2503 | .dot7_insts, |
| 2231 | 2504 | .dpp_64bit, |
| 2232 | 2505 | .flat_atomic_fadd_f32_inst, |
| 2506 | .flat_buffer_global_fadd_f64_inst, | |
| 2233 | 2507 | .fma_mix_insts, |
| 2234 | 2508 | .fmacf64_inst, |
| 2235 | 2509 | .force_store_sc0_sc1, |
| ... | ... | @@ -2242,6 +2516,7 @@ pub const cpu = struct { |
| 2242 | 2516 | .kernarg_preload, |
| 2243 | 2517 | .ldsbankcount32, |
| 2244 | 2518 | .mai_insts, |
| 2519 | .memory_atomic_fadd_f32_denormal_support, | |
| 2245 | 2520 | .packed_fp32_ops, |
| 2246 | 2521 | .packed_tid, |
| 2247 | 2522 | .pk_fmac_f16_inst, |
| ... | ... | @@ -2252,12 +2527,15 @@ pub const cpu = struct { |
| 2252 | 2527 | .name = "gfx942", |
| 2253 | 2528 | .llvm_name = "gfx942", |
| 2254 | 2529 | .features = featureSet(&[_]Feature{ |
| 2530 | .agent_scope_fine_grained_remote_memory_atomics, | |
| 2255 | 2531 | .architected_flat_scratch, |
| 2256 | 2532 | .atomic_buffer_global_pk_add_f16_insts, |
| 2257 | 2533 | .atomic_ds_pk_add_16_insts, |
| 2258 | 2534 | .atomic_fadd_no_rtn_insts, |
| 2259 | 2535 | .atomic_fadd_rtn_insts, |
| 2260 | 2536 | .atomic_flat_pk_add_16_insts, |
| 2537 | .atomic_fmin_fmax_flat_f64, | |
| 2538 | .atomic_fmin_fmax_global_f64, | |
| 2261 | 2539 | .atomic_global_pk_add_bf16_inst, |
| 2262 | 2540 | .back_off_barrier, |
| 2263 | 2541 | .dl_insts, |
| ... | ... | @@ -2271,6 +2549,7 @@ pub const cpu = struct { |
| 2271 | 2549 | .dot7_insts, |
| 2272 | 2550 | .dpp_64bit, |
| 2273 | 2551 | .flat_atomic_fadd_f32_inst, |
| 2552 | .flat_buffer_global_fadd_f64_inst, | |
| 2274 | 2553 | .fma_mix_insts, |
| 2275 | 2554 | .fmacf64_inst, |
| 2276 | 2555 | .fp8_conversion_insts, |
| ... | ... | @@ -2282,12 +2561,28 @@ pub const cpu = struct { |
| 2282 | 2561 | .kernarg_preload, |
| 2283 | 2562 | .ldsbankcount32, |
| 2284 | 2563 | .mai_insts, |
| 2564 | .memory_atomic_fadd_f32_denormal_support, | |
| 2285 | 2565 | .packed_fp32_ops, |
| 2286 | 2566 | .packed_tid, |
| 2287 | 2567 | .pk_fmac_f16_inst, |
| 2288 | 2568 | .sramecc_support, |
| 2289 | 2569 | }), |
| 2290 | 2570 | }; |
| 2571 | pub const gfx9_generic = CpuModel{ | |
| 2572 | .name = "gfx9_generic", | |
| 2573 | .llvm_name = "gfx9-generic", | |
| 2574 | .features = featureSet(&[_]Feature{ | |
| 2575 | .ds_src2_insts, | |
| 2576 | .extended_image_insts, | |
| 2577 | .gds, | |
| 2578 | .gfx9, | |
| 2579 | .image_gather4_d16_bug, | |
| 2580 | .image_insts, | |
| 2581 | .ldsbankcount32, | |
| 2582 | .mad_mac_f32_insts, | |
| 2583 | .requires_cov6, | |
| 2584 | }), | |
| 2585 | }; | |
| 2291 | 2586 | pub const hainan = CpuModel{ |
| 2292 | 2587 | .name = "hainan", |
| 2293 | 2588 | .llvm_name = "hainan", |
lib/std/Target/arm.zig+90-72| ... | ... | @@ -7,9 +7,7 @@ const CpuModel = std.Target.Cpu.Model; |
| 7 | 7 | pub const Feature = enum { |
| 8 | 8 | @"32bit", |
| 9 | 9 | @"8msecext", |
| 10 | a76, | |
| 11 | 10 | aapcs_frame_chain, |
| 12 | aapcs_frame_chain_leaf, | |
| 13 | 11 | aclass, |
| 14 | 12 | acquire_release, |
| 15 | 13 | aes, |
| ... | ... | @@ -40,7 +38,6 @@ pub const Feature = enum { |
| 40 | 38 | dsp, |
| 41 | 39 | execute_only, |
| 42 | 40 | expand_fp_mlx, |
| 43 | exynos, | |
| 44 | 41 | fix_cmse_cve_2021_35465, |
| 45 | 42 | fix_cortex_a57_aes_1742098, |
| 46 | 43 | fp16, |
| ... | ... | @@ -96,7 +93,6 @@ pub const Feature = enum { |
| 96 | 93 | lob, |
| 97 | 94 | long_calls, |
| 98 | 95 | loop_align, |
| 99 | m3, | |
| 100 | 96 | mclass, |
| 101 | 97 | mp, |
| 102 | 98 | muxed_units, |
| ... | ... | @@ -120,7 +116,6 @@ pub const Feature = enum { |
| 120 | 116 | prefer_ishst, |
| 121 | 117 | prefer_vmovsr, |
| 122 | 118 | prof_unpr, |
| 123 | r4, | |
| 124 | 119 | ras, |
| 125 | 120 | rclass, |
| 126 | 121 | read_tp_tpidrprw, |
| ... | ... | @@ -140,7 +135,6 @@ pub const Feature = enum { |
| 140 | 135 | soft_float, |
| 141 | 136 | splat_vfp_neon, |
| 142 | 137 | strict_align, |
| 143 | swift, | |
| 144 | 138 | thumb2, |
| 145 | 139 | thumb_mode, |
| 146 | 140 | trustzone, |
| ... | ... | @@ -228,23 +222,11 @@ pub const all_features = blk: { |
| 228 | 222 | .description = "Enable support for ARMv8-M Security Extensions", |
| 229 | 223 | .dependencies = featureSet(&[_]Feature{}), |
| 230 | 224 | }; |
| 231 | result[@intFromEnum(Feature.a76)] = .{ | |
| 232 | .llvm_name = "a76", | |
| 233 | .description = "Cortex-A76 ARM processors", | |
| 234 | .dependencies = featureSet(&[_]Feature{}), | |
| 235 | }; | |
| 236 | 225 | result[@intFromEnum(Feature.aapcs_frame_chain)] = .{ |
| 237 | 226 | .llvm_name = "aapcs-frame-chain", |
| 238 | 227 | .description = "Create an AAPCS compliant frame chain", |
| 239 | 228 | .dependencies = featureSet(&[_]Feature{}), |
| 240 | 229 | }; |
| 241 | result[@intFromEnum(Feature.aapcs_frame_chain_leaf)] = .{ | |
| 242 | .llvm_name = "aapcs-frame-chain-leaf", | |
| 243 | .description = "Create an AAPCS compliant frame chain for leaf functions", | |
| 244 | .dependencies = featureSet(&[_]Feature{ | |
| 245 | .aapcs_frame_chain, | |
| 246 | }), | |
| 247 | }; | |
| 248 | 230 | result[@intFromEnum(Feature.aclass)] = .{ |
| 249 | 231 | .llvm_name = "aclass", |
| 250 | 232 | .description = "Is application profile ('A' series)", |
| ... | ... | @@ -422,32 +404,9 @@ pub const all_features = blk: { |
| 422 | 404 | .description = "Expand VFP/NEON MLA/MLS instructions", |
| 423 | 405 | .dependencies = featureSet(&[_]Feature{}), |
| 424 | 406 | }; |
| 425 | result[@intFromEnum(Feature.exynos)] = .{ | |
| 426 | .llvm_name = "exynos", | |
| 427 | .description = "Samsung Exynos processors", | |
| 428 | .dependencies = featureSet(&[_]Feature{ | |
| 429 | .crc, | |
| 430 | .crypto, | |
| 431 | .expand_fp_mlx, | |
| 432 | .fuse_aes, | |
| 433 | .fuse_literals, | |
| 434 | .hwdiv, | |
| 435 | .hwdiv_arm, | |
| 436 | .prof_unpr, | |
| 437 | .ret_addr_stack, | |
| 438 | .slow_fp_brcc, | |
| 439 | .slow_vdup32, | |
| 440 | .slow_vgetlni32, | |
| 441 | .slowfpvfmx, | |
| 442 | .slowfpvmlx, | |
| 443 | .splat_vfp_neon, | |
| 444 | .wide_stride_vfp, | |
| 445 | .zcz, | |
| 446 | }), | |
| 447 | }; | |
| 448 | 407 | result[@intFromEnum(Feature.fix_cmse_cve_2021_35465)] = .{ |
| 449 | 408 | .llvm_name = "fix-cmse-cve-2021-35465", |
| 450 | .description = "Mitigate against the cve-2021-35465 security vulnerability", | |
| 409 | .description = "Mitigate against the cve-2021-35465 security vulnurability", | |
| 451 | 410 | .dependencies = featureSet(&[_]Feature{}), |
| 452 | 411 | }; |
| 453 | 412 | result[@intFromEnum(Feature.fix_cortex_a57_aes_1742098)] = .{ |
| ... | ... | @@ -815,11 +774,6 @@ pub const all_features = blk: { |
| 815 | 774 | .description = "Prefer 32-bit alignment for loops", |
| 816 | 775 | .dependencies = featureSet(&[_]Feature{}), |
| 817 | 776 | }; |
| 818 | result[@intFromEnum(Feature.m3)] = .{ | |
| 819 | .llvm_name = "m3", | |
| 820 | .description = "Cortex-M3 ARM processors", | |
| 821 | .dependencies = featureSet(&[_]Feature{}), | |
| 822 | }; | |
| 823 | 777 | result[@intFromEnum(Feature.mclass)] = .{ |
| 824 | 778 | .llvm_name = "mclass", |
| 825 | 779 | .description = "Is microcontroller profile ('M' series)", |
| ... | ... | @@ -945,11 +899,6 @@ pub const all_features = blk: { |
| 945 | 899 | .description = "Is profitable to unpredicate", |
| 946 | 900 | .dependencies = featureSet(&[_]Feature{}), |
| 947 | 901 | }; |
| 948 | result[@intFromEnum(Feature.r4)] = .{ | |
| 949 | .llvm_name = "r4", | |
| 950 | .description = "Cortex-R4 ARM processors", | |
| 951 | .dependencies = featureSet(&[_]Feature{}), | |
| 952 | }; | |
| 953 | 902 | result[@intFromEnum(Feature.ras)] = .{ |
| 954 | 903 | .llvm_name = "ras", |
| 955 | 904 | .description = "Enable Reliability, Availability and Serviceability extensions", |
| ... | ... | @@ -1049,11 +998,6 @@ pub const all_features = blk: { |
| 1049 | 998 | .description = "Disallow all unaligned memory access", |
| 1050 | 999 | .dependencies = featureSet(&[_]Feature{}), |
| 1051 | 1000 | }; |
| 1052 | result[@intFromEnum(Feature.swift)] = .{ | |
| 1053 | .llvm_name = "swift", | |
| 1054 | .description = "Swift ARM processors", | |
| 1055 | .dependencies = featureSet(&[_]Feature{}), | |
| 1056 | }; | |
| 1057 | 1001 | result[@intFromEnum(Feature.thumb2)] = .{ |
| 1058 | 1002 | .llvm_name = "thumb2", |
| 1059 | 1003 | .description = "Enable Thumb2 instructions", |
| ... | ... | @@ -1508,10 +1452,9 @@ pub const all_features = blk: { |
| 1508 | 1452 | .db, |
| 1509 | 1453 | .dfb, |
| 1510 | 1454 | .dsp, |
| 1511 | .fp_armv8, | |
| 1455 | .fp_armv8d16sp, | |
| 1512 | 1456 | .has_v8, |
| 1513 | 1457 | .mp, |
| 1514 | .neon, | |
| 1515 | 1458 | .rclass, |
| 1516 | 1459 | .virtualization, |
| 1517 | 1460 | }), |
| ... | ... | @@ -2104,7 +2047,6 @@ pub const cpu = struct { |
| 2104 | 2047 | .name = "cortex_a76", |
| 2105 | 2048 | .llvm_name = "cortex-a76", |
| 2106 | 2049 | .features = featureSet(&[_]Feature{ |
| 2107 | .a76, | |
| 2108 | 2050 | .dotprod, |
| 2109 | 2051 | .fullfp16, |
| 2110 | 2052 | .v8_2a, |
| ... | ... | @@ -2114,7 +2056,6 @@ pub const cpu = struct { |
| 2114 | 2056 | .name = "cortex_a76ae", |
| 2115 | 2057 | .llvm_name = "cortex-a76ae", |
| 2116 | 2058 | .features = featureSet(&[_]Feature{ |
| 2117 | .a76, | |
| 2118 | 2059 | .dotprod, |
| 2119 | 2060 | .fullfp16, |
| 2120 | 2061 | .v8_2a, |
| ... | ... | @@ -2138,6 +2079,15 @@ pub const cpu = struct { |
| 2138 | 2079 | .v8_2a, |
| 2139 | 2080 | }), |
| 2140 | 2081 | }; |
| 2082 | pub const cortex_a78ae = CpuModel{ | |
| 2083 | .name = "cortex_a78ae", | |
| 2084 | .llvm_name = "cortex-a78ae", | |
| 2085 | .features = featureSet(&[_]Feature{ | |
| 2086 | .dotprod, | |
| 2087 | .fullfp16, | |
| 2088 | .v8_2a, | |
| 2089 | }), | |
| 2090 | }; | |
| 2141 | 2091 | pub const cortex_a78c = CpuModel{ |
| 2142 | 2092 | .name = "cortex_a78c", |
| 2143 | 2093 | .llvm_name = "cortex-a78c", |
| ... | ... | @@ -2219,7 +2169,6 @@ pub const cpu = struct { |
| 2219 | 2169 | .llvm_name = "cortex-m3", |
| 2220 | 2170 | .features = featureSet(&[_]Feature{ |
| 2221 | 2171 | .loop_align, |
| 2222 | .m3, | |
| 2223 | 2172 | .no_branch_predictor, |
| 2224 | 2173 | .use_misched, |
| 2225 | 2174 | .v7m, |
| ... | ... | @@ -2315,7 +2264,6 @@ pub const cpu = struct { |
| 2315 | 2264 | .llvm_name = "cortex-r4", |
| 2316 | 2265 | .features = featureSet(&[_]Feature{ |
| 2317 | 2266 | .avoid_partial_cpsr, |
| 2318 | .r4, | |
| 2319 | 2267 | .ret_addr_stack, |
| 2320 | 2268 | .v7r, |
| 2321 | 2269 | }), |
| ... | ... | @@ -2325,7 +2273,6 @@ pub const cpu = struct { |
| 2325 | 2273 | .llvm_name = "cortex-r4f", |
| 2326 | 2274 | .features = featureSet(&[_]Feature{ |
| 2327 | 2275 | .avoid_partial_cpsr, |
| 2328 | .r4, | |
| 2329 | 2276 | .ret_addr_stack, |
| 2330 | 2277 | .slow_fp_brcc, |
| 2331 | 2278 | .slowfpvfmx, |
| ... | ... | @@ -2352,7 +2299,20 @@ pub const cpu = struct { |
| 2352 | 2299 | .name = "cortex_r52", |
| 2353 | 2300 | .llvm_name = "cortex-r52", |
| 2354 | 2301 | .features = featureSet(&[_]Feature{ |
| 2302 | .fp_armv8, | |
| 2355 | 2303 | .fpao, |
| 2304 | .neon, | |
| 2305 | .use_misched, | |
| 2306 | .v8r, | |
| 2307 | }), | |
| 2308 | }; | |
| 2309 | pub const cortex_r52plus = CpuModel{ | |
| 2310 | .name = "cortex_r52plus", | |
| 2311 | .llvm_name = "cortex-r52plus", | |
| 2312 | .features = featureSet(&[_]Feature{ | |
| 2313 | .fp_armv8, | |
| 2314 | .fpao, | |
| 2315 | .neon, | |
| 2356 | 2316 | .use_misched, |
| 2357 | 2317 | .v8r, |
| 2358 | 2318 | }), |
| ... | ... | @@ -2418,7 +2378,6 @@ pub const cpu = struct { |
| 2418 | 2378 | .ret_addr_stack, |
| 2419 | 2379 | .slowfpvfmx, |
| 2420 | 2380 | .slowfpvmlx, |
| 2421 | .swift, | |
| 2422 | 2381 | .use_misched, |
| 2423 | 2382 | .v8a, |
| 2424 | 2383 | .zcz, |
| ... | ... | @@ -2435,24 +2394,60 @@ pub const cpu = struct { |
| 2435 | 2394 | .name = "exynos_m1", |
| 2436 | 2395 | .llvm_name = null, |
| 2437 | 2396 | .features = featureSet(&[_]Feature{ |
| 2438 | .exynos, | |
| 2397 | .expand_fp_mlx, | |
| 2398 | .fuse_aes, | |
| 2399 | .fuse_literals, | |
| 2400 | .prof_unpr, | |
| 2401 | .ret_addr_stack, | |
| 2402 | .slow_fp_brcc, | |
| 2403 | .slow_vdup32, | |
| 2404 | .slow_vgetlni32, | |
| 2405 | .slowfpvfmx, | |
| 2406 | .slowfpvmlx, | |
| 2407 | .splat_vfp_neon, | |
| 2439 | 2408 | .v8a, |
| 2409 | .wide_stride_vfp, | |
| 2410 | .zcz, | |
| 2440 | 2411 | }), |
| 2441 | 2412 | }; |
| 2442 | 2413 | pub const exynos_m2 = CpuModel{ |
| 2443 | 2414 | .name = "exynos_m2", |
| 2444 | 2415 | .llvm_name = null, |
| 2445 | 2416 | .features = featureSet(&[_]Feature{ |
| 2446 | .exynos, | |
| 2417 | .expand_fp_mlx, | |
| 2418 | .fuse_aes, | |
| 2419 | .fuse_literals, | |
| 2420 | .prof_unpr, | |
| 2421 | .ret_addr_stack, | |
| 2422 | .slow_fp_brcc, | |
| 2423 | .slow_vdup32, | |
| 2424 | .slow_vgetlni32, | |
| 2425 | .slowfpvfmx, | |
| 2426 | .slowfpvmlx, | |
| 2427 | .splat_vfp_neon, | |
| 2447 | 2428 | .v8a, |
| 2429 | .wide_stride_vfp, | |
| 2430 | .zcz, | |
| 2448 | 2431 | }), |
| 2449 | 2432 | }; |
| 2450 | 2433 | pub const exynos_m3 = CpuModel{ |
| 2451 | 2434 | .name = "exynos_m3", |
| 2452 | 2435 | .llvm_name = "exynos-m3", |
| 2453 | 2436 | .features = featureSet(&[_]Feature{ |
| 2454 | .exynos, | |
| 2437 | .expand_fp_mlx, | |
| 2438 | .fuse_aes, | |
| 2439 | .fuse_literals, | |
| 2440 | .prof_unpr, | |
| 2441 | .ret_addr_stack, | |
| 2442 | .slow_fp_brcc, | |
| 2443 | .slow_vdup32, | |
| 2444 | .slow_vgetlni32, | |
| 2445 | .slowfpvfmx, | |
| 2446 | .slowfpvmlx, | |
| 2447 | .splat_vfp_neon, | |
| 2455 | 2448 | .v8a, |
| 2449 | .wide_stride_vfp, | |
| 2450 | .zcz, | |
| 2456 | 2451 | }), |
| 2457 | 2452 | }; |
| 2458 | 2453 | pub const exynos_m4 = CpuModel{ |
| ... | ... | @@ -2460,9 +2455,21 @@ pub const cpu = struct { |
| 2460 | 2455 | .llvm_name = "exynos-m4", |
| 2461 | 2456 | .features = featureSet(&[_]Feature{ |
| 2462 | 2457 | .dotprod, |
| 2463 | .exynos, | |
| 2458 | .expand_fp_mlx, | |
| 2464 | 2459 | .fullfp16, |
| 2460 | .fuse_aes, | |
| 2461 | .fuse_literals, | |
| 2462 | .prof_unpr, | |
| 2463 | .ret_addr_stack, | |
| 2464 | .slow_fp_brcc, | |
| 2465 | .slow_vdup32, | |
| 2466 | .slow_vgetlni32, | |
| 2467 | .slowfpvfmx, | |
| 2468 | .slowfpvmlx, | |
| 2469 | .splat_vfp_neon, | |
| 2465 | 2470 | .v8_2a, |
| 2471 | .wide_stride_vfp, | |
| 2472 | .zcz, | |
| 2466 | 2473 | }), |
| 2467 | 2474 | }; |
| 2468 | 2475 | pub const exynos_m5 = CpuModel{ |
| ... | ... | @@ -2470,9 +2477,21 @@ pub const cpu = struct { |
| 2470 | 2477 | .llvm_name = "exynos-m5", |
| 2471 | 2478 | .features = featureSet(&[_]Feature{ |
| 2472 | 2479 | .dotprod, |
| 2473 | .exynos, | |
| 2480 | .expand_fp_mlx, | |
| 2474 | 2481 | .fullfp16, |
| 2482 | .fuse_aes, | |
| 2483 | .fuse_literals, | |
| 2484 | .prof_unpr, | |
| 2485 | .ret_addr_stack, | |
| 2486 | .slow_fp_brcc, | |
| 2487 | .slow_vdup32, | |
| 2488 | .slow_vgetlni32, | |
| 2489 | .slowfpvfmx, | |
| 2490 | .slowfpvmlx, | |
| 2491 | .splat_vfp_neon, | |
| 2475 | 2492 | .v8_2a, |
| 2493 | .wide_stride_vfp, | |
| 2494 | .zcz, | |
| 2476 | 2495 | }), |
| 2477 | 2496 | }; |
| 2478 | 2497 | pub const generic = CpuModel{ |
| ... | ... | @@ -2538,6 +2557,7 @@ pub const cpu = struct { |
| 2538 | 2557 | .llvm_name = "neoverse-n2", |
| 2539 | 2558 | .features = featureSet(&[_]Feature{ |
| 2540 | 2559 | .bf16, |
| 2560 | .fp16fml, | |
| 2541 | 2561 | .i8mm, |
| 2542 | 2562 | .v9a, |
| 2543 | 2563 | }), |
| ... | ... | @@ -2564,7 +2584,6 @@ pub const cpu = struct { |
| 2564 | 2584 | .name = "sc300", |
| 2565 | 2585 | .llvm_name = "sc300", |
| 2566 | 2586 | .features = featureSet(&[_]Feature{ |
| 2567 | .m3, | |
| 2568 | 2587 | .no_branch_predictor, |
| 2569 | 2588 | .use_misched, |
| 2570 | 2589 | .v7m, |
| ... | ... | @@ -2618,7 +2637,6 @@ pub const cpu = struct { |
| 2618 | 2637 | .slow_vgetlni32, |
| 2619 | 2638 | .slowfpvfmx, |
| 2620 | 2639 | .slowfpvmlx, |
| 2621 | .swift, | |
| 2622 | 2640 | .use_misched, |
| 2623 | 2641 | .v7a, |
| 2624 | 2642 | .vfp4, |
lib/std/Target/loongarch.zig+18-6| ... | ... | @@ -7,7 +7,6 @@ const CpuModel = std.Target.Cpu.Model; |
| 7 | 7 | pub const Feature = enum { |
| 8 | 8 | @"32bit", |
| 9 | 9 | @"64bit", |
| 10 | auto_vec, | |
| 11 | 10 | d, |
| 12 | 11 | f, |
| 13 | 12 | frecipe, |
| ... | ... | @@ -18,6 +17,7 @@ pub const Feature = enum { |
| 18 | 17 | lbt, |
| 19 | 18 | lsx, |
| 20 | 19 | lvz, |
| 20 | prefer_w_inst, | |
| 21 | 21 | relax, |
| 22 | 22 | ual, |
| 23 | 23 | }; |
| ... | ... | @@ -41,11 +41,6 @@ pub const all_features = blk: { |
| 41 | 41 | .description = "LA64 Basic Integer and Privilege Instruction Set", |
| 42 | 42 | .dependencies = featureSet(&[_]Feature{}), |
| 43 | 43 | }; |
| 44 | result[@intFromEnum(Feature.auto_vec)] = .{ | |
| 45 | .llvm_name = "auto-vec", | |
| 46 | .description = "Experimental auto vectorization", | |
| 47 | .dependencies = featureSet(&[_]Feature{}), | |
| 48 | }; | |
| 49 | 44 | result[@intFromEnum(Feature.d)] = .{ |
| 50 | 45 | .llvm_name = "d", |
| 51 | 46 | .description = "'D' (Double-Precision Floating-Point)", |
| ... | ... | @@ -102,6 +97,11 @@ pub const all_features = blk: { |
| 102 | 97 | .description = "'LVZ' (Loongson Virtualization Extension)", |
| 103 | 98 | .dependencies = featureSet(&[_]Feature{}), |
| 104 | 99 | }; |
| 100 | result[@intFromEnum(Feature.prefer_w_inst)] = .{ | |
| 101 | .llvm_name = "prefer-w-inst", | |
| 102 | .description = "Prefer instructions with W suffix", | |
| 103 | .dependencies = featureSet(&[_]Feature{}), | |
| 104 | }; | |
| 105 | 105 | result[@intFromEnum(Feature.relax)] = .{ |
| 106 | 106 | .llvm_name = "relax", |
| 107 | 107 | .description = "Enable Linker relaxation", |
| ... | ... | @@ -152,6 +152,18 @@ pub const cpu = struct { |
| 152 | 152 | .ual, |
| 153 | 153 | }), |
| 154 | 154 | }; |
| 155 | pub const la664 = CpuModel{ | |
| 156 | .name = "la664", | |
| 157 | .llvm_name = "la664", | |
| 158 | .features = featureSet(&[_]Feature{ | |
| 159 | .@"64bit", | |
| 160 | .frecipe, | |
| 161 | .lasx, | |
| 162 | .lbt, | |
| 163 | .lvz, | |
| 164 | .ual, | |
| 165 | }), | |
| 166 | }; | |
| 155 | 167 | pub const loongarch64 = CpuModel{ |
| 156 | 168 | .name = "loongarch64", |
| 157 | 169 | .llvm_name = "loongarch64", |
lib/std/Target/mips.zig+6| ... | ... | @@ -51,6 +51,7 @@ pub const Feature = enum { |
| 51 | 51 | ptr64, |
| 52 | 52 | single_float, |
| 53 | 53 | soft_float, |
| 54 | strict_align, | |
| 54 | 55 | sym32, |
| 55 | 56 | use_indirect_jump_hazard, |
| 56 | 57 | use_tcc_in_div, |
| ... | ... | @@ -356,6 +357,11 @@ pub const all_features = blk: { |
| 356 | 357 | .description = "Does not support floating point instructions", |
| 357 | 358 | .dependencies = featureSet(&[_]Feature{}), |
| 358 | 359 | }; |
| 360 | result[@intFromEnum(Feature.strict_align)] = .{ | |
| 361 | .llvm_name = "strict-align", | |
| 362 | .description = "Disable unaligned load store for r6", | |
| 363 | .dependencies = featureSet(&[_]Feature{}), | |
| 364 | }; | |
| 359 | 365 | result[@intFromEnum(Feature.sym32)] = .{ |
| 360 | 366 | .llvm_name = "sym32", |
| 361 | 367 | .description = "Symbols are 32 bit on Mips64", |
lib/std/Target/nvptx.zig+18| ... | ... | @@ -13,6 +13,7 @@ pub const Feature = enum { |
| 13 | 13 | ptx50, |
| 14 | 14 | ptx60, |
| 15 | 15 | ptx61, |
| 16 | ptx62, | |
| 16 | 17 | ptx63, |
| 17 | 18 | ptx64, |
| 18 | 19 | ptx65, |
| ... | ... | @@ -29,6 +30,8 @@ pub const Feature = enum { |
| 29 | 30 | ptx81, |
| 30 | 31 | ptx82, |
| 31 | 32 | ptx83, |
| 33 | ptx84, | |
| 34 | ptx85, | |
| 32 | 35 | sm_20, |
| 33 | 36 | sm_21, |
| 34 | 37 | sm_30, |
| ... | ... | @@ -101,6 +104,11 @@ pub const all_features = blk: { |
| 101 | 104 | .description = "Use PTX version 61", |
| 102 | 105 | .dependencies = featureSet(&[_]Feature{}), |
| 103 | 106 | }; |
| 107 | result[@intFromEnum(Feature.ptx62)] = .{ | |
| 108 | .llvm_name = "ptx62", | |
| 109 | .description = "Use PTX version 62", | |
| 110 | .dependencies = featureSet(&[_]Feature{}), | |
| 111 | }; | |
| 104 | 112 | result[@intFromEnum(Feature.ptx63)] = .{ |
| 105 | 113 | .llvm_name = "ptx63", |
| 106 | 114 | .description = "Use PTX version 63", |
| ... | ... | @@ -181,6 +189,16 @@ pub const all_features = blk: { |
| 181 | 189 | .description = "Use PTX version 83", |
| 182 | 190 | .dependencies = featureSet(&[_]Feature{}), |
| 183 | 191 | }; |
| 192 | result[@intFromEnum(Feature.ptx84)] = .{ | |
| 193 | .llvm_name = "ptx84", | |
| 194 | .description = "Use PTX version 84", | |
| 195 | .dependencies = featureSet(&[_]Feature{}), | |
| 196 | }; | |
| 197 | result[@intFromEnum(Feature.ptx85)] = .{ | |
| 198 | .llvm_name = "ptx85", | |
| 199 | .description = "Use PTX version 85", | |
| 200 | .dependencies = featureSet(&[_]Feature{}), | |
| 201 | }; | |
| 184 | 202 | result[@intFromEnum(Feature.sm_20)] = .{ |
| 185 | 203 | .llvm_name = "sm_20", |
| 186 | 204 | .description = "Target SM 20", |
lib/std/Target/powerpc.zig+61-2| ... | ... | @@ -8,6 +8,8 @@ pub const Feature = enum { |
| 8 | 8 | @"64bit", |
| 9 | 9 | @"64bitregs", |
| 10 | 10 | aix, |
| 11 | aix_shared_lib_tls_model_opt, | |
| 12 | aix_small_local_dynamic_tls, | |
| 11 | 13 | aix_small_local_exec_tls, |
| 12 | 14 | allow_unaligned_fp_access, |
| 13 | 15 | altivec, |
| ... | ... | @@ -113,6 +115,16 @@ pub const all_features = blk: { |
| 113 | 115 | .description = "AIX OS", |
| 114 | 116 | .dependencies = featureSet(&[_]Feature{}), |
| 115 | 117 | }; |
| 118 | result[@intFromEnum(Feature.aix_shared_lib_tls_model_opt)] = .{ | |
| 119 | .llvm_name = "aix-shared-lib-tls-model-opt", | |
| 120 | .description = "Tune TLS model at function level in shared library loaded with the main program (for 64-bit AIX only)", | |
| 121 | .dependencies = featureSet(&[_]Feature{}), | |
| 122 | }; | |
| 123 | result[@intFromEnum(Feature.aix_small_local_dynamic_tls)] = .{ | |
| 124 | .llvm_name = "aix-small-local-dynamic-tls", | |
| 125 | .description = "Produce a faster local-dynamic TLS sequence for this function for 64-bit AIX", | |
| 126 | .dependencies = featureSet(&[_]Feature{}), | |
| 127 | }; | |
| 116 | 128 | result[@intFromEnum(Feature.aix_small_local_exec_tls)] = .{ |
| 117 | 129 | .llvm_name = "aix-small-local-exec-tls", |
| 118 | 130 | .description = "Produce a TOC-free local-exec TLS sequence for this function for 64-bit AIX", |
| ... | ... | @@ -538,8 +550,7 @@ pub const all_features = blk: { |
| 538 | 550 | .llvm_name = "prefix-instrs", |
| 539 | 551 | .description = "Enable prefixed instructions", |
| 540 | 552 | .dependencies = featureSet(&[_]Feature{ |
| 541 | .power8_vector, | |
| 542 | .power9_altivec, | |
| 553 | .isa_v31_instructions, | |
| 543 | 554 | }), |
| 544 | 555 | }; |
| 545 | 556 | result[@intFromEnum(Feature.privileged)] = .{ |
| ... | ... | @@ -990,6 +1001,54 @@ pub const cpu = struct { |
| 990 | 1001 | .two_const_nr, |
| 991 | 1002 | }), |
| 992 | 1003 | }; |
| 1004 | pub const pwr11 = CpuModel{ | |
| 1005 | .name = "pwr11", | |
| 1006 | .llvm_name = "pwr11", | |
| 1007 | .features = featureSet(&[_]Feature{ | |
| 1008 | .@"64bit", | |
| 1009 | .allow_unaligned_fp_access, | |
| 1010 | .bpermd, | |
| 1011 | .cmpb, | |
| 1012 | .crbits, | |
| 1013 | .crypto, | |
| 1014 | .direct_move, | |
| 1015 | .extdiv, | |
| 1016 | .fast_MFLR, | |
| 1017 | .fcpsgn, | |
| 1018 | .fpcvt, | |
| 1019 | .fprnd, | |
| 1020 | .fre, | |
| 1021 | .fres, | |
| 1022 | .frsqrte, | |
| 1023 | .frsqrtes, | |
| 1024 | .fsqrt, | |
| 1025 | .fuse_add_logical, | |
| 1026 | .fuse_arith_add, | |
| 1027 | .fuse_logical, | |
| 1028 | .fuse_logical_add, | |
| 1029 | .fuse_sha3, | |
| 1030 | .fuse_store, | |
| 1031 | .htm, | |
| 1032 | .icbt, | |
| 1033 | .isa_v206_instructions, | |
| 1034 | .isel, | |
| 1035 | .ldbrx, | |
| 1036 | .lfiwax, | |
| 1037 | .mfocrf, | |
| 1038 | .mma, | |
| 1039 | .partword_atomics, | |
| 1040 | .pcrelative_memops, | |
| 1041 | .popcntd, | |
| 1042 | .power10_vector, | |
| 1043 | .ppc_postra_sched, | |
| 1044 | .ppc_prera_sched, | |
| 1045 | .predictable_select_expensive, | |
| 1046 | .quadword_atomics, | |
| 1047 | .recipprec, | |
| 1048 | .stfiwx, | |
| 1049 | .two_const_nr, | |
| 1050 | }), | |
| 1051 | }; | |
| 993 | 1052 | pub const pwr3 = CpuModel{ |
| 994 | 1053 | .name = "pwr3", |
| 995 | 1054 | .llvm_name = "pwr3", |
lib/std/Target/riscv.zig+798-76| ... | ... | @@ -9,32 +9,43 @@ pub const Feature = enum { |
| 9 | 9 | @"64bit", |
| 10 | 10 | a, |
| 11 | 11 | auipc_addi_fusion, |
| 12 | b, | |
| 12 | 13 | c, |
| 13 | 14 | conditional_cmv_fusion, |
| 14 | 15 | d, |
| 15 | 16 | dlen_factor_2, |
| 16 | 17 | e, |
| 17 | 18 | experimental, |
| 19 | experimental_rva23s64, | |
| 20 | experimental_rva23u64, | |
| 21 | experimental_rvb23s64, | |
| 22 | experimental_rvb23u64, | |
| 23 | experimental_rvm23u32, | |
| 24 | experimental_smmpm, | |
| 25 | experimental_smnpm, | |
| 26 | experimental_ssnpm, | |
| 27 | experimental_sspm, | |
| 28 | experimental_ssqosid, | |
| 29 | experimental_supm, | |
| 18 | 30 | experimental_zacas, |
| 19 | experimental_zcmop, | |
| 20 | experimental_zfbfmin, | |
| 31 | experimental_zalasr, | |
| 21 | 32 | experimental_zicfilp, |
| 22 | 33 | experimental_zicfiss, |
| 23 | experimental_zimop, | |
| 24 | experimental_ztso, | |
| 25 | experimental_zvfbfmin, | |
| 26 | experimental_zvfbfwma, | |
| 27 | 34 | f, |
| 28 | fast_unaligned_access, | |
| 29 | 35 | forced_atomics, |
| 36 | forced_sw_shadow_stack, | |
| 30 | 37 | h, |
| 31 | 38 | i, |
| 32 | 39 | ld_add_fusion, |
| 33 | 40 | lui_addi_fusion, |
| 34 | 41 | m, |
| 35 | 42 | no_default_unroll, |
| 36 | no_optimized_zero_stride_load, | |
| 37 | 43 | no_rvc_hints, |
| 44 | no_sink_splat_operands, | |
| 45 | no_trailing_seq_cst_fence, | |
| 46 | optimized_zero_stride_load, | |
| 47 | predictable_select_expensive, | |
| 48 | prefer_w_inst, | |
| 38 | 49 | relax, |
| 39 | 50 | reserve_x1, |
| 40 | 51 | reserve_x10, |
| ... | ... | @@ -67,18 +78,47 @@ pub const Feature = enum { |
| 67 | 78 | reserve_x7, |
| 68 | 79 | reserve_x8, |
| 69 | 80 | reserve_x9, |
| 81 | rva20s64, | |
| 82 | rva20u64, | |
| 83 | rva22s64, | |
| 84 | rva22u64, | |
| 85 | rvi20u32, | |
| 86 | rvi20u64, | |
| 70 | 87 | save_restore, |
| 71 | seq_cst_trailing_fence, | |
| 88 | shcounterenw, | |
| 89 | shgatpa, | |
| 72 | 90 | shifted_zextw_fusion, |
| 73 | 91 | short_forward_branch_opt, |
| 92 | shtvala, | |
| 93 | shvsatpa, | |
| 94 | shvstvala, | |
| 95 | shvstvecd, | |
| 74 | 96 | smaia, |
| 97 | smcdeleg, | |
| 98 | smcsrind, | |
| 75 | 99 | smepmp, |
| 100 | smstateen, | |
| 76 | 101 | ssaia, |
| 102 | ssccfg, | |
| 103 | ssccptr, | |
| 104 | sscofpmf, | |
| 105 | sscounterenw, | |
| 106 | sscsrind, | |
| 107 | ssstateen, | |
| 108 | ssstrict, | |
| 109 | sstc, | |
| 110 | sstvala, | |
| 111 | sstvecd, | |
| 112 | ssu64xl, | |
| 113 | svade, | |
| 114 | svadu, | |
| 115 | svbare, | |
| 77 | 116 | svinval, |
| 78 | 117 | svnapot, |
| 79 | 118 | svpbmt, |
| 80 | 119 | tagged_globals, |
| 81 | 120 | unaligned_scalar_mem, |
| 121 | unaligned_vector_mem, | |
| 82 | 122 | use_postra_scheduler, |
| 83 | 123 | v, |
| 84 | 124 | ventana_veyron, |
| ... | ... | @@ -89,11 +129,14 @@ pub const Feature = enum { |
| 89 | 129 | xcvmac, |
| 90 | 130 | xcvmem, |
| 91 | 131 | xcvsimd, |
| 132 | xsfcease, | |
| 92 | 133 | xsfvcp, |
| 93 | 134 | xsfvfnrclipxfqf, |
| 94 | 135 | xsfvfwmaccqqq, |
| 95 | 136 | xsfvqmaccdod, |
| 96 | 137 | xsfvqmaccqoq, |
| 138 | xsifivecdiscarddlone, | |
| 139 | xsifivecflushdlone, | |
| 97 | 140 | xtheadba, |
| 98 | 141 | xtheadbb, |
| 99 | 142 | xtheadbs, |
| ... | ... | @@ -106,8 +149,13 @@ pub const Feature = enum { |
| 106 | 149 | xtheadsync, |
| 107 | 150 | xtheadvdot, |
| 108 | 151 | xventanacondops, |
| 152 | xwchc, | |
| 109 | 153 | za128rs, |
| 110 | 154 | za64rs, |
| 155 | zaamo, | |
| 156 | zabha, | |
| 157 | zalrsc, | |
| 158 | zama16b, | |
| 111 | 159 | zawrs, |
| 112 | 160 | zba, |
| 113 | 161 | zbb, |
| ... | ... | @@ -121,12 +169,14 @@ pub const Feature = enum { |
| 121 | 169 | zcd, |
| 122 | 170 | zce, |
| 123 | 171 | zcf, |
| 172 | zcmop, | |
| 124 | 173 | zcmp, |
| 125 | 174 | zcmt, |
| 126 | 175 | zdinx, |
| 127 | 176 | zexth_fusion, |
| 128 | 177 | zextw_fusion, |
| 129 | 178 | zfa, |
| 179 | zfbfmin, | |
| 130 | 180 | zfh, |
| 131 | 181 | zfhmin, |
| 132 | 182 | zfinx, |
| ... | ... | @@ -147,6 +197,7 @@ pub const Feature = enum { |
| 147 | 197 | zihintntl, |
| 148 | 198 | zihintpause, |
| 149 | 199 | zihpm, |
| 200 | zimop, | |
| 150 | 201 | zk, |
| 151 | 202 | zkn, |
| 152 | 203 | zknd, |
| ... | ... | @@ -158,6 +209,7 @@ pub const Feature = enum { |
| 158 | 209 | zksh, |
| 159 | 210 | zkt, |
| 160 | 211 | zmmul, |
| 212 | ztso, | |
| 161 | 213 | zvbb, |
| 162 | 214 | zvbc, |
| 163 | 215 | zve32f, |
| ... | ... | @@ -165,6 +217,8 @@ pub const Feature = enum { |
| 165 | 217 | zve64d, |
| 166 | 218 | zve64f, |
| 167 | 219 | zve64x, |
| 220 | zvfbfmin, | |
| 221 | zvfbfwma, | |
| 168 | 222 | zvfh, |
| 169 | 223 | zvfhmin, |
| 170 | 224 | zvkb, |
| ... | ... | @@ -201,6 +255,7 @@ pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny; |
| 201 | 255 | pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll; |
| 202 | 256 | |
| 203 | 257 | pub const all_features = blk: { |
| 258 | @setEvalBranchQuota(2000); | |
| 204 | 259 | const len = @typeInfo(Feature).@"enum".fields.len; |
| 205 | 260 | std.debug.assert(len <= CpuFeature.Set.needed_bit_count); |
| 206 | 261 | var result: [len]CpuFeature = undefined; |
| ... | ... | @@ -224,6 +279,15 @@ pub const all_features = blk: { |
| 224 | 279 | .description = "Enable AUIPC+ADDI macrofusion", |
| 225 | 280 | .dependencies = featureSet(&[_]Feature{}), |
| 226 | 281 | }; |
| 282 | result[@intFromEnum(Feature.b)] = .{ | |
| 283 | .llvm_name = "b", | |
| 284 | .description = "'B' (the collection of the Zba, Zbb, Zbs extensions)", | |
| 285 | .dependencies = featureSet(&[_]Feature{ | |
| 286 | .zba, | |
| 287 | .zbb, | |
| 288 | .zbs, | |
| 289 | }), | |
| 290 | }; | |
| 227 | 291 | result[@intFromEnum(Feature.c)] = .{ |
| 228 | 292 | .llvm_name = "c", |
| 229 | 293 | .description = "'C' (Compressed Instructions)", |
| ... | ... | @@ -256,61 +320,261 @@ pub const all_features = blk: { |
| 256 | 320 | .description = "Experimental intrinsics", |
| 257 | 321 | .dependencies = featureSet(&[_]Feature{}), |
| 258 | 322 | }; |
| 259 | result[@intFromEnum(Feature.experimental_zacas)] = .{ | |
| 260 | .llvm_name = "experimental-zacas", | |
| 261 | .description = "'Zacas' (Atomic Compare-And-Swap Instructions)", | |
| 262 | .dependencies = featureSet(&[_]Feature{}), | |
| 323 | result[@intFromEnum(Feature.experimental_rva23s64)] = .{ | |
| 324 | .llvm_name = "experimental-rva23s64", | |
| 325 | .description = "RISC-V experimental-rva23s64 profile", | |
| 326 | .dependencies = featureSet(&[_]Feature{ | |
| 327 | .@"64bit", | |
| 328 | .a, | |
| 329 | .c, | |
| 330 | .experimental_ssnpm, | |
| 331 | .h, | |
| 332 | .i, | |
| 333 | .m, | |
| 334 | .shcounterenw, | |
| 335 | .shgatpa, | |
| 336 | .shtvala, | |
| 337 | .shvsatpa, | |
| 338 | .shvstvala, | |
| 339 | .shvstvecd, | |
| 340 | .ssccptr, | |
| 341 | .sscofpmf, | |
| 342 | .sscounterenw, | |
| 343 | .ssstateen, | |
| 344 | .sstc, | |
| 345 | .sstvala, | |
| 346 | .sstvecd, | |
| 347 | .ssu64xl, | |
| 348 | .svade, | |
| 349 | .svbare, | |
| 350 | .svinval, | |
| 351 | .svnapot, | |
| 352 | .svpbmt, | |
| 353 | .v, | |
| 354 | .za64rs, | |
| 355 | .zawrs, | |
| 356 | .zba, | |
| 357 | .zbb, | |
| 358 | .zbs, | |
| 359 | .zcb, | |
| 360 | .zcmop, | |
| 361 | .zfa, | |
| 362 | .zfhmin, | |
| 363 | .zic64b, | |
| 364 | .zicbom, | |
| 365 | .zicbop, | |
| 366 | .zicboz, | |
| 367 | .ziccamoa, | |
| 368 | .ziccif, | |
| 369 | .zicclsm, | |
| 370 | .ziccrse, | |
| 371 | .zicntr, | |
| 372 | .zicond, | |
| 373 | .zifencei, | |
| 374 | .zihintntl, | |
| 375 | .zihintpause, | |
| 376 | .zihpm, | |
| 377 | .zimop, | |
| 378 | .zkt, | |
| 379 | .zvbb, | |
| 380 | .zvfhmin, | |
| 381 | .zvkt, | |
| 382 | }), | |
| 263 | 383 | }; |
| 264 | result[@intFromEnum(Feature.experimental_zcmop)] = .{ | |
| 265 | .llvm_name = "experimental-zcmop", | |
| 266 | .description = "'Zcmop' (Compressed May-Be-Operations)", | |
| 384 | result[@intFromEnum(Feature.experimental_rva23u64)] = .{ | |
| 385 | .llvm_name = "experimental-rva23u64", | |
| 386 | .description = "RISC-V experimental-rva23u64 profile", | |
| 267 | 387 | .dependencies = featureSet(&[_]Feature{ |
| 268 | .zca, | |
| 388 | .@"64bit", | |
| 389 | .a, | |
| 390 | .c, | |
| 391 | .i, | |
| 392 | .m, | |
| 393 | .v, | |
| 394 | .za64rs, | |
| 395 | .zawrs, | |
| 396 | .zba, | |
| 397 | .zbb, | |
| 398 | .zbs, | |
| 399 | .zcb, | |
| 400 | .zcmop, | |
| 401 | .zfa, | |
| 402 | .zfhmin, | |
| 403 | .zic64b, | |
| 404 | .zicbom, | |
| 405 | .zicbop, | |
| 406 | .zicboz, | |
| 407 | .ziccamoa, | |
| 408 | .ziccif, | |
| 409 | .zicclsm, | |
| 410 | .ziccrse, | |
| 411 | .zicntr, | |
| 412 | .zicond, | |
| 413 | .zihintntl, | |
| 414 | .zihintpause, | |
| 415 | .zihpm, | |
| 416 | .zimop, | |
| 417 | .zkt, | |
| 418 | .zvbb, | |
| 419 | .zvfhmin, | |
| 420 | .zvkt, | |
| 269 | 421 | }), |
| 270 | 422 | }; |
| 271 | result[@intFromEnum(Feature.experimental_zfbfmin)] = .{ | |
| 272 | .llvm_name = "experimental-zfbfmin", | |
| 273 | .description = "'Zfbfmin' (Scalar BF16 Converts)", | |
| 423 | result[@intFromEnum(Feature.experimental_rvb23s64)] = .{ | |
| 424 | .llvm_name = "experimental-rvb23s64", | |
| 425 | .description = "RISC-V experimental-rvb23s64 profile", | |
| 274 | 426 | .dependencies = featureSet(&[_]Feature{ |
| 275 | .f, | |
| 427 | .@"64bit", | |
| 428 | .a, | |
| 429 | .c, | |
| 430 | .d, | |
| 431 | .i, | |
| 432 | .m, | |
| 433 | .ssccptr, | |
| 434 | .sscofpmf, | |
| 435 | .sscounterenw, | |
| 436 | .sstc, | |
| 437 | .sstvala, | |
| 438 | .sstvecd, | |
| 439 | .ssu64xl, | |
| 440 | .svade, | |
| 441 | .svbare, | |
| 442 | .svinval, | |
| 443 | .svnapot, | |
| 444 | .svpbmt, | |
| 445 | .za64rs, | |
| 446 | .zawrs, | |
| 447 | .zba, | |
| 448 | .zbb, | |
| 449 | .zbs, | |
| 450 | .zcb, | |
| 451 | .zcmop, | |
| 452 | .zfa, | |
| 453 | .zic64b, | |
| 454 | .zicbom, | |
| 455 | .zicbop, | |
| 456 | .zicboz, | |
| 457 | .ziccamoa, | |
| 458 | .ziccif, | |
| 459 | .zicclsm, | |
| 460 | .ziccrse, | |
| 461 | .zicntr, | |
| 462 | .zicond, | |
| 463 | .zifencei, | |
| 464 | .zihintntl, | |
| 465 | .zihintpause, | |
| 466 | .zihpm, | |
| 467 | .zimop, | |
| 468 | .zkt, | |
| 276 | 469 | }), |
| 277 | 470 | }; |
| 278 | result[@intFromEnum(Feature.experimental_zicfilp)] = .{ | |
| 279 | .llvm_name = "experimental-zicfilp", | |
| 280 | .description = "'Zicfilp' (Landing pad)", | |
| 281 | .dependencies = featureSet(&[_]Feature{}), | |
| 471 | result[@intFromEnum(Feature.experimental_rvb23u64)] = .{ | |
| 472 | .llvm_name = "experimental-rvb23u64", | |
| 473 | .description = "RISC-V experimental-rvb23u64 profile", | |
| 474 | .dependencies = featureSet(&[_]Feature{ | |
| 475 | .@"64bit", | |
| 476 | .a, | |
| 477 | .c, | |
| 478 | .d, | |
| 479 | .i, | |
| 480 | .m, | |
| 481 | .za64rs, | |
| 482 | .zawrs, | |
| 483 | .zba, | |
| 484 | .zbb, | |
| 485 | .zbs, | |
| 486 | .zcb, | |
| 487 | .zcmop, | |
| 488 | .zfa, | |
| 489 | .zic64b, | |
| 490 | .zicbom, | |
| 491 | .zicbop, | |
| 492 | .zicboz, | |
| 493 | .ziccamoa, | |
| 494 | .ziccif, | |
| 495 | .zicclsm, | |
| 496 | .ziccrse, | |
| 497 | .zicntr, | |
| 498 | .zicond, | |
| 499 | .zihintntl, | |
| 500 | .zihintpause, | |
| 501 | .zihpm, | |
| 502 | .zimop, | |
| 503 | .zkt, | |
| 504 | }), | |
| 282 | 505 | }; |
| 283 | result[@intFromEnum(Feature.experimental_zicfiss)] = .{ | |
| 284 | .llvm_name = "experimental-zicfiss", | |
| 285 | .description = "'Zicfiss' (Shadow stack)", | |
| 506 | result[@intFromEnum(Feature.experimental_rvm23u32)] = .{ | |
| 507 | .llvm_name = "experimental-rvm23u32", | |
| 508 | .description = "RISC-V experimental-rvm23u32 profile", | |
| 286 | 509 | .dependencies = featureSet(&[_]Feature{ |
| 287 | .experimental_zimop, | |
| 288 | .zicsr, | |
| 510 | .@"32bit", | |
| 511 | .i, | |
| 512 | .m, | |
| 513 | .zba, | |
| 514 | .zbb, | |
| 515 | .zbs, | |
| 516 | .zce, | |
| 517 | .zcmop, | |
| 518 | .zicbop, | |
| 519 | .zicond, | |
| 520 | .zihintntl, | |
| 521 | .zihintpause, | |
| 522 | .zimop, | |
| 289 | 523 | }), |
| 290 | 524 | }; |
| 291 | result[@intFromEnum(Feature.experimental_zimop)] = .{ | |
| 292 | .llvm_name = "experimental-zimop", | |
| 293 | .description = "'Zimop' (May-Be-Operations)", | |
| 525 | result[@intFromEnum(Feature.experimental_smmpm)] = .{ | |
| 526 | .llvm_name = "experimental-smmpm", | |
| 527 | .description = "'Smmpm' (Machine-level Pointer Masking for M-mode)", | |
| 294 | 528 | .dependencies = featureSet(&[_]Feature{}), |
| 295 | 529 | }; |
| 296 | result[@intFromEnum(Feature.experimental_ztso)] = .{ | |
| 297 | .llvm_name = "experimental-ztso", | |
| 298 | .description = "'Ztso' (Memory Model - Total Store Order)", | |
| 530 | result[@intFromEnum(Feature.experimental_smnpm)] = .{ | |
| 531 | .llvm_name = "experimental-smnpm", | |
| 532 | .description = "'Smnpm' (Machine-level Pointer Masking for next lower privilege mode)", | |
| 299 | 533 | .dependencies = featureSet(&[_]Feature{}), |
| 300 | 534 | }; |
| 301 | result[@intFromEnum(Feature.experimental_zvfbfmin)] = .{ | |
| 302 | .llvm_name = "experimental-zvfbfmin", | |
| 303 | .description = "'Zvbfmin' (Vector BF16 Converts)", | |
| 535 | result[@intFromEnum(Feature.experimental_ssnpm)] = .{ | |
| 536 | .llvm_name = "experimental-ssnpm", | |
| 537 | .description = "'Ssnpm' (Supervisor-level Pointer Masking for next lower privilege mode)", | |
| 538 | .dependencies = featureSet(&[_]Feature{}), | |
| 539 | }; | |
| 540 | result[@intFromEnum(Feature.experimental_sspm)] = .{ | |
| 541 | .llvm_name = "experimental-sspm", | |
| 542 | .description = "'Sspm' (Indicates Supervisor-mode Pointer Masking)", | |
| 543 | .dependencies = featureSet(&[_]Feature{}), | |
| 544 | }; | |
| 545 | result[@intFromEnum(Feature.experimental_ssqosid)] = .{ | |
| 546 | .llvm_name = "experimental-ssqosid", | |
| 547 | .description = "'Ssqosid' (Quality-of-Service (QoS) Identifiers)", | |
| 548 | .dependencies = featureSet(&[_]Feature{}), | |
| 549 | }; | |
| 550 | result[@intFromEnum(Feature.experimental_supm)] = .{ | |
| 551 | .llvm_name = "experimental-supm", | |
| 552 | .description = "'Supm' (Indicates User-mode Pointer Masking)", | |
| 553 | .dependencies = featureSet(&[_]Feature{}), | |
| 554 | }; | |
| 555 | result[@intFromEnum(Feature.experimental_zacas)] = .{ | |
| 556 | .llvm_name = "experimental-zacas", | |
| 557 | .description = "'Zacas' (Atomic Compare-And-Swap Instructions)", | |
| 558 | .dependencies = featureSet(&[_]Feature{}), | |
| 559 | }; | |
| 560 | result[@intFromEnum(Feature.experimental_zalasr)] = .{ | |
| 561 | .llvm_name = "experimental-zalasr", | |
| 562 | .description = "'Zalasr' (Load-Acquire and Store-Release Instructions)", | |
| 563 | .dependencies = featureSet(&[_]Feature{}), | |
| 564 | }; | |
| 565 | result[@intFromEnum(Feature.experimental_zicfilp)] = .{ | |
| 566 | .llvm_name = "experimental-zicfilp", | |
| 567 | .description = "'Zicfilp' (Landing pad)", | |
| 304 | 568 | .dependencies = featureSet(&[_]Feature{ |
| 305 | .zve32f, | |
| 569 | .zicsr, | |
| 306 | 570 | }), |
| 307 | 571 | }; |
| 308 | result[@intFromEnum(Feature.experimental_zvfbfwma)] = .{ | |
| 309 | .llvm_name = "experimental-zvfbfwma", | |
| 310 | .description = "'Zvfbfwma' (Vector BF16 widening mul-add)", | |
| 572 | result[@intFromEnum(Feature.experimental_zicfiss)] = .{ | |
| 573 | .llvm_name = "experimental-zicfiss", | |
| 574 | .description = "'Zicfiss' (Shadow stack)", | |
| 311 | 575 | .dependencies = featureSet(&[_]Feature{ |
| 312 | .experimental_zfbfmin, | |
| 313 | .experimental_zvfbfmin, | |
| 576 | .zicsr, | |
| 577 | .zimop, | |
| 314 | 578 | }), |
| 315 | 579 | }; |
| 316 | 580 | result[@intFromEnum(Feature.f)] = .{ |
| ... | ... | @@ -320,16 +584,16 @@ pub const all_features = blk: { |
| 320 | 584 | .zicsr, |
| 321 | 585 | }), |
| 322 | 586 | }; |
| 323 | result[@intFromEnum(Feature.fast_unaligned_access)] = .{ | |
| 324 | .llvm_name = "fast-unaligned-access", | |
| 325 | .description = "Has reasonably performant unaligned loads and stores (both scalar and vector)", | |
| 326 | .dependencies = featureSet(&[_]Feature{}), | |
| 327 | }; | |
| 328 | 587 | result[@intFromEnum(Feature.forced_atomics)] = .{ |
| 329 | 588 | .llvm_name = "forced-atomics", |
| 330 | 589 | .description = "Assume that lock-free native-width atomics are available", |
| 331 | 590 | .dependencies = featureSet(&[_]Feature{}), |
| 332 | 591 | }; |
| 592 | result[@intFromEnum(Feature.forced_sw_shadow_stack)] = .{ | |
| 593 | .llvm_name = "forced-sw-shadow-stack", | |
| 594 | .description = "Implement shadow stack with software.", | |
| 595 | .dependencies = featureSet(&[_]Feature{}), | |
| 596 | }; | |
| 333 | 597 | result[@intFromEnum(Feature.h)] = .{ |
| 334 | 598 | .llvm_name = "h", |
| 335 | 599 | .description = "'H' (Hypervisor)", |
| ... | ... | @@ -353,23 +617,45 @@ pub const all_features = blk: { |
| 353 | 617 | result[@intFromEnum(Feature.m)] = .{ |
| 354 | 618 | .llvm_name = "m", |
| 355 | 619 | .description = "'M' (Integer Multiplication and Division)", |
| 356 | .dependencies = featureSet(&[_]Feature{}), | |
| 620 | .dependencies = featureSet(&[_]Feature{ | |
| 621 | .zmmul, | |
| 622 | }), | |
| 357 | 623 | }; |
| 358 | 624 | result[@intFromEnum(Feature.no_default_unroll)] = .{ |
| 359 | 625 | .llvm_name = "no-default-unroll", |
| 360 | 626 | .description = "Disable default unroll preference.", |
| 361 | 627 | .dependencies = featureSet(&[_]Feature{}), |
| 362 | 628 | }; |
| 363 | result[@intFromEnum(Feature.no_optimized_zero_stride_load)] = .{ | |
| 364 | .llvm_name = "no-optimized-zero-stride-load", | |
| 365 | .description = "Hasn't optimized (perform fewer memory operations)zero-stride vector load", | |
| 366 | .dependencies = featureSet(&[_]Feature{}), | |
| 367 | }; | |
| 368 | 629 | result[@intFromEnum(Feature.no_rvc_hints)] = .{ |
| 369 | 630 | .llvm_name = "no-rvc-hints", |
| 370 | 631 | .description = "Disable RVC Hint Instructions.", |
| 371 | 632 | .dependencies = featureSet(&[_]Feature{}), |
| 372 | 633 | }; |
| 634 | result[@intFromEnum(Feature.no_sink_splat_operands)] = .{ | |
| 635 | .llvm_name = "no-sink-splat-operands", | |
| 636 | .description = "Disable sink splat operands to enable .vx, .vf,.wx, and .wf instructions", | |
| 637 | .dependencies = featureSet(&[_]Feature{}), | |
| 638 | }; | |
| 639 | result[@intFromEnum(Feature.no_trailing_seq_cst_fence)] = .{ | |
| 640 | .llvm_name = "no-trailing-seq-cst-fence", | |
| 641 | .description = "Disable trailing fence for seq-cst store.", | |
| 642 | .dependencies = featureSet(&[_]Feature{}), | |
| 643 | }; | |
| 644 | result[@intFromEnum(Feature.optimized_zero_stride_load)] = .{ | |
| 645 | .llvm_name = "optimized-zero-stride-load", | |
| 646 | .description = "Optimized (perform fewer memory operations)zero-stride vector load", | |
| 647 | .dependencies = featureSet(&[_]Feature{}), | |
| 648 | }; | |
| 649 | result[@intFromEnum(Feature.predictable_select_expensive)] = .{ | |
| 650 | .llvm_name = "predictable-select-expensive", | |
| 651 | .description = "Prefer likely predicted branches over selects", | |
| 652 | .dependencies = featureSet(&[_]Feature{}), | |
| 653 | }; | |
| 654 | result[@intFromEnum(Feature.prefer_w_inst)] = .{ | |
| 655 | .llvm_name = "prefer-w-inst", | |
| 656 | .description = "Prefer instructions with W suffix", | |
| 657 | .dependencies = featureSet(&[_]Feature{}), | |
| 658 | }; | |
| 373 | 659 | result[@intFromEnum(Feature.relax)] = .{ |
| 374 | 660 | .llvm_name = "relax", |
| 375 | 661 | .description = "Enable Linker relaxation.", |
| ... | ... | @@ -530,14 +816,144 @@ pub const all_features = blk: { |
| 530 | 816 | .description = "Reserve X9", |
| 531 | 817 | .dependencies = featureSet(&[_]Feature{}), |
| 532 | 818 | }; |
| 819 | result[@intFromEnum(Feature.rva20s64)] = .{ | |
| 820 | .llvm_name = "rva20s64", | |
| 821 | .description = "RISC-V rva20s64 profile", | |
| 822 | .dependencies = featureSet(&[_]Feature{ | |
| 823 | .@"64bit", | |
| 824 | .a, | |
| 825 | .c, | |
| 826 | .d, | |
| 827 | .i, | |
| 828 | .m, | |
| 829 | .ssccptr, | |
| 830 | .sstvala, | |
| 831 | .sstvecd, | |
| 832 | .svade, | |
| 833 | .svbare, | |
| 834 | .za128rs, | |
| 835 | .ziccamoa, | |
| 836 | .ziccif, | |
| 837 | .zicclsm, | |
| 838 | .ziccrse, | |
| 839 | .zicntr, | |
| 840 | .zifencei, | |
| 841 | }), | |
| 842 | }; | |
| 843 | result[@intFromEnum(Feature.rva20u64)] = .{ | |
| 844 | .llvm_name = "rva20u64", | |
| 845 | .description = "RISC-V rva20u64 profile", | |
| 846 | .dependencies = featureSet(&[_]Feature{ | |
| 847 | .@"64bit", | |
| 848 | .a, | |
| 849 | .c, | |
| 850 | .d, | |
| 851 | .i, | |
| 852 | .m, | |
| 853 | .za128rs, | |
| 854 | .ziccamoa, | |
| 855 | .ziccif, | |
| 856 | .zicclsm, | |
| 857 | .ziccrse, | |
| 858 | .zicntr, | |
| 859 | }), | |
| 860 | }; | |
| 861 | result[@intFromEnum(Feature.rva22s64)] = .{ | |
| 862 | .llvm_name = "rva22s64", | |
| 863 | .description = "RISC-V rva22s64 profile", | |
| 864 | .dependencies = featureSet(&[_]Feature{ | |
| 865 | .@"64bit", | |
| 866 | .a, | |
| 867 | .c, | |
| 868 | .d, | |
| 869 | .i, | |
| 870 | .m, | |
| 871 | .ssccptr, | |
| 872 | .sscounterenw, | |
| 873 | .sstvala, | |
| 874 | .sstvecd, | |
| 875 | .svade, | |
| 876 | .svbare, | |
| 877 | .svinval, | |
| 878 | .svpbmt, | |
| 879 | .za64rs, | |
| 880 | .zba, | |
| 881 | .zbb, | |
| 882 | .zbs, | |
| 883 | .zfhmin, | |
| 884 | .zic64b, | |
| 885 | .zicbom, | |
| 886 | .zicbop, | |
| 887 | .zicboz, | |
| 888 | .ziccamoa, | |
| 889 | .ziccif, | |
| 890 | .zicclsm, | |
| 891 | .ziccrse, | |
| 892 | .zicntr, | |
| 893 | .zifencei, | |
| 894 | .zihintpause, | |
| 895 | .zihpm, | |
| 896 | .zkt, | |
| 897 | }), | |
| 898 | }; | |
| 899 | result[@intFromEnum(Feature.rva22u64)] = .{ | |
| 900 | .llvm_name = "rva22u64", | |
| 901 | .description = "RISC-V rva22u64 profile", | |
| 902 | .dependencies = featureSet(&[_]Feature{ | |
| 903 | .@"64bit", | |
| 904 | .a, | |
| 905 | .c, | |
| 906 | .d, | |
| 907 | .i, | |
| 908 | .m, | |
| 909 | .za64rs, | |
| 910 | .zba, | |
| 911 | .zbb, | |
| 912 | .zbs, | |
| 913 | .zfhmin, | |
| 914 | .zic64b, | |
| 915 | .zicbom, | |
| 916 | .zicbop, | |
| 917 | .zicboz, | |
| 918 | .ziccamoa, | |
| 919 | .ziccif, | |
| 920 | .zicclsm, | |
| 921 | .ziccrse, | |
| 922 | .zicntr, | |
| 923 | .zihintpause, | |
| 924 | .zihpm, | |
| 925 | .zkt, | |
| 926 | }), | |
| 927 | }; | |
| 928 | result[@intFromEnum(Feature.rvi20u32)] = .{ | |
| 929 | .llvm_name = "rvi20u32", | |
| 930 | .description = "RISC-V rvi20u32 profile", | |
| 931 | .dependencies = featureSet(&[_]Feature{ | |
| 932 | .@"32bit", | |
| 933 | .i, | |
| 934 | }), | |
| 935 | }; | |
| 936 | result[@intFromEnum(Feature.rvi20u64)] = .{ | |
| 937 | .llvm_name = "rvi20u64", | |
| 938 | .description = "RISC-V rvi20u64 profile", | |
| 939 | .dependencies = featureSet(&[_]Feature{ | |
| 940 | .@"64bit", | |
| 941 | .i, | |
| 942 | }), | |
| 943 | }; | |
| 533 | 944 | result[@intFromEnum(Feature.save_restore)] = .{ |
| 534 | 945 | .llvm_name = "save-restore", |
| 535 | 946 | .description = "Enable save/restore.", |
| 536 | 947 | .dependencies = featureSet(&[_]Feature{}), |
| 537 | 948 | }; |
| 538 | result[@intFromEnum(Feature.seq_cst_trailing_fence)] = .{ | |
| 539 | .llvm_name = "seq-cst-trailing-fence", | |
| 540 | .description = "Enable trailing fence for seq-cst store.", | |
| 949 | result[@intFromEnum(Feature.shcounterenw)] = .{ | |
| 950 | .llvm_name = "shcounterenw", | |
| 951 | .description = "'Shcounterenw' (Support writeable hcounteren enable bit for any hpmcounter that is not read-only zero)", | |
| 952 | .dependencies = featureSet(&[_]Feature{}), | |
| 953 | }; | |
| 954 | result[@intFromEnum(Feature.shgatpa)] = .{ | |
| 955 | .llvm_name = "shgatpa", | |
| 956 | .description = "'Sgatpa' (SvNNx4 mode supported for all modes supported by satp, as well as Bare)", | |
| 541 | 957 | .dependencies = featureSet(&[_]Feature{}), |
| 542 | 958 | }; |
| 543 | 959 | result[@intFromEnum(Feature.shifted_zextw_fusion)] = .{ |
| ... | ... | @@ -550,21 +966,126 @@ pub const all_features = blk: { |
| 550 | 966 | .description = "Enable short forward branch optimization", |
| 551 | 967 | .dependencies = featureSet(&[_]Feature{}), |
| 552 | 968 | }; |
| 969 | result[@intFromEnum(Feature.shtvala)] = .{ | |
| 970 | .llvm_name = "shtvala", | |
| 971 | .description = "'Shtvala' (htval provides all needed values)", | |
| 972 | .dependencies = featureSet(&[_]Feature{}), | |
| 973 | }; | |
| 974 | result[@intFromEnum(Feature.shvsatpa)] = .{ | |
| 975 | .llvm_name = "shvsatpa", | |
| 976 | .description = "'Svsatpa' (vsatp supports all modes supported by satp)", | |
| 977 | .dependencies = featureSet(&[_]Feature{}), | |
| 978 | }; | |
| 979 | result[@intFromEnum(Feature.shvstvala)] = .{ | |
| 980 | .llvm_name = "shvstvala", | |
| 981 | .description = "'Shvstvala' (vstval provides all needed values)", | |
| 982 | .dependencies = featureSet(&[_]Feature{}), | |
| 983 | }; | |
| 984 | result[@intFromEnum(Feature.shvstvecd)] = .{ | |
| 985 | .llvm_name = "shvstvecd", | |
| 986 | .description = "'Shvstvecd' (vstvec supports Direct mode)", | |
| 987 | .dependencies = featureSet(&[_]Feature{}), | |
| 988 | }; | |
| 553 | 989 | result[@intFromEnum(Feature.smaia)] = .{ |
| 554 | 990 | .llvm_name = "smaia", |
| 555 | 991 | .description = "'Smaia' (Advanced Interrupt Architecture Machine Level)", |
| 556 | 992 | .dependencies = featureSet(&[_]Feature{}), |
| 557 | 993 | }; |
| 994 | result[@intFromEnum(Feature.smcdeleg)] = .{ | |
| 995 | .llvm_name = "smcdeleg", | |
| 996 | .description = "'Smcdeleg' (Counter Delegation Machine Level)", | |
| 997 | .dependencies = featureSet(&[_]Feature{}), | |
| 998 | }; | |
| 999 | result[@intFromEnum(Feature.smcsrind)] = .{ | |
| 1000 | .llvm_name = "smcsrind", | |
| 1001 | .description = "'Smcsrind' (Indirect CSR Access Machine Level)", | |
| 1002 | .dependencies = featureSet(&[_]Feature{}), | |
| 1003 | }; | |
| 558 | 1004 | result[@intFromEnum(Feature.smepmp)] = .{ |
| 559 | 1005 | .llvm_name = "smepmp", |
| 560 | 1006 | .description = "'Smepmp' (Enhanced Physical Memory Protection)", |
| 561 | 1007 | .dependencies = featureSet(&[_]Feature{}), |
| 562 | 1008 | }; |
| 1009 | result[@intFromEnum(Feature.smstateen)] = .{ | |
| 1010 | .llvm_name = "smstateen", | |
| 1011 | .description = "'Smstateen' (Machine-mode view of the state-enable extension)", | |
| 1012 | .dependencies = featureSet(&[_]Feature{}), | |
| 1013 | }; | |
| 563 | 1014 | result[@intFromEnum(Feature.ssaia)] = .{ |
| 564 | 1015 | .llvm_name = "ssaia", |
| 565 | 1016 | .description = "'Ssaia' (Advanced Interrupt Architecture Supervisor Level)", |
| 566 | 1017 | .dependencies = featureSet(&[_]Feature{}), |
| 567 | 1018 | }; |
| 1019 | result[@intFromEnum(Feature.ssccfg)] = .{ | |
| 1020 | .llvm_name = "ssccfg", | |
| 1021 | .description = "'Ssccfg' (Counter Configuration Supervisor Level)", | |
| 1022 | .dependencies = featureSet(&[_]Feature{}), | |
| 1023 | }; | |
| 1024 | result[@intFromEnum(Feature.ssccptr)] = .{ | |
| 1025 | .llvm_name = "ssccptr", | |
| 1026 | .description = "'Ssccptr' (Main memory supports page table reads)", | |
| 1027 | .dependencies = featureSet(&[_]Feature{}), | |
| 1028 | }; | |
| 1029 | result[@intFromEnum(Feature.sscofpmf)] = .{ | |
| 1030 | .llvm_name = "sscofpmf", | |
| 1031 | .description = "'Sscofpmf' (Count Overflow and Mode-Based Filtering)", | |
| 1032 | .dependencies = featureSet(&[_]Feature{}), | |
| 1033 | }; | |
| 1034 | result[@intFromEnum(Feature.sscounterenw)] = .{ | |
| 1035 | .llvm_name = "sscounterenw", | |
| 1036 | .description = "'Sscounterenw' (Support writeable scounteren enable bit for any hpmcounter that is not read-only zero)", | |
| 1037 | .dependencies = featureSet(&[_]Feature{}), | |
| 1038 | }; | |
| 1039 | result[@intFromEnum(Feature.sscsrind)] = .{ | |
| 1040 | .llvm_name = "sscsrind", | |
| 1041 | .description = "'Sscsrind' (Indirect CSR Access Supervisor Level)", | |
| 1042 | .dependencies = featureSet(&[_]Feature{}), | |
| 1043 | }; | |
| 1044 | result[@intFromEnum(Feature.ssstateen)] = .{ | |
| 1045 | .llvm_name = "ssstateen", | |
| 1046 | .description = "'Ssstateen' (Supervisor-mode view of the state-enable extension)", | |
| 1047 | .dependencies = featureSet(&[_]Feature{}), | |
| 1048 | }; | |
| 1049 | result[@intFromEnum(Feature.ssstrict)] = .{ | |
| 1050 | .llvm_name = "ssstrict", | |
| 1051 | .description = "'Ssstrict' (No non-conforming extensions are present)", | |
| 1052 | .dependencies = featureSet(&[_]Feature{}), | |
| 1053 | }; | |
| 1054 | result[@intFromEnum(Feature.sstc)] = .{ | |
| 1055 | .llvm_name = "sstc", | |
| 1056 | .description = "'Sstc' (Supervisor-mode timer interrupts)", | |
| 1057 | .dependencies = featureSet(&[_]Feature{}), | |
| 1058 | }; | |
| 1059 | result[@intFromEnum(Feature.sstvala)] = .{ | |
| 1060 | .llvm_name = "sstvala", | |
| 1061 | .description = "'Sstvala' (stval provides all needed values)", | |
| 1062 | .dependencies = featureSet(&[_]Feature{}), | |
| 1063 | }; | |
| 1064 | result[@intFromEnum(Feature.sstvecd)] = .{ | |
| 1065 | .llvm_name = "sstvecd", | |
| 1066 | .description = "'Sstvecd' (stvec supports Direct mode)", | |
| 1067 | .dependencies = featureSet(&[_]Feature{}), | |
| 1068 | }; | |
| 1069 | result[@intFromEnum(Feature.ssu64xl)] = .{ | |
| 1070 | .llvm_name = "ssu64xl", | |
| 1071 | .description = "'Ssu64xl' (UXLEN=64 supported)", | |
| 1072 | .dependencies = featureSet(&[_]Feature{}), | |
| 1073 | }; | |
| 1074 | result[@intFromEnum(Feature.svade)] = .{ | |
| 1075 | .llvm_name = "svade", | |
| 1076 | .description = "'Svade' (Raise exceptions on improper A/D bits)", | |
| 1077 | .dependencies = featureSet(&[_]Feature{}), | |
| 1078 | }; | |
| 1079 | result[@intFromEnum(Feature.svadu)] = .{ | |
| 1080 | .llvm_name = "svadu", | |
| 1081 | .description = "'Svadu' (Hardware A/D updates)", | |
| 1082 | .dependencies = featureSet(&[_]Feature{}), | |
| 1083 | }; | |
| 1084 | result[@intFromEnum(Feature.svbare)] = .{ | |
| 1085 | .llvm_name = "svbare", | |
| 1086 | .description = "'Svbare' $(satp mode Bare supported)", | |
| 1087 | .dependencies = featureSet(&[_]Feature{}), | |
| 1088 | }; | |
| 568 | 1089 | result[@intFromEnum(Feature.svinval)] = .{ |
| 569 | 1090 | .llvm_name = "svinval", |
| 570 | 1091 | .description = "'Svinval' (Fine-Grained Address-Translation Cache Invalidation)", |
| ... | ... | @@ -590,6 +1111,11 @@ pub const all_features = blk: { |
| 590 | 1111 | .description = "Has reasonably performant unaligned scalar loads and stores", |
| 591 | 1112 | .dependencies = featureSet(&[_]Feature{}), |
| 592 | 1113 | }; |
| 1114 | result[@intFromEnum(Feature.unaligned_vector_mem)] = .{ | |
| 1115 | .llvm_name = "unaligned-vector-mem", | |
| 1116 | .description = "Has reasonably performant unaligned vector loads and stores", | |
| 1117 | .dependencies = featureSet(&[_]Feature{}), | |
| 1118 | }; | |
| 593 | 1119 | result[@intFromEnum(Feature.use_postra_scheduler)] = .{ |
| 594 | 1120 | .llvm_name = "use-postra-scheduler", |
| 595 | 1121 | .description = "Schedule again after register allocation", |
| ... | ... | @@ -643,6 +1169,11 @@ pub const all_features = blk: { |
| 643 | 1169 | .description = "'XCVsimd' (CORE-V SIMD ALU)", |
| 644 | 1170 | .dependencies = featureSet(&[_]Feature{}), |
| 645 | 1171 | }; |
| 1172 | result[@intFromEnum(Feature.xsfcease)] = .{ | |
| 1173 | .llvm_name = "xsfcease", | |
| 1174 | .description = "'XSfcease' (SiFive sf.cease Instruction)", | |
| 1175 | .dependencies = featureSet(&[_]Feature{}), | |
| 1176 | }; | |
| 646 | 1177 | result[@intFromEnum(Feature.xsfvcp)] = .{ |
| 647 | 1178 | .llvm_name = "xsfvcp", |
| 648 | 1179 | .description = "'XSfvcp' (SiFive Custom Vector Coprocessor Interface Instructions)", |
| ... | ... | @@ -661,7 +1192,7 @@ pub const all_features = blk: { |
| 661 | 1192 | .llvm_name = "xsfvfwmaccqqq", |
| 662 | 1193 | .description = "'XSfvfwmaccqqq' (SiFive Matrix Multiply Accumulate Instruction and 4-by-4))", |
| 663 | 1194 | .dependencies = featureSet(&[_]Feature{ |
| 664 | .experimental_zvfbfmin, | |
| 1195 | .zvfbfmin, | |
| 665 | 1196 | }), |
| 666 | 1197 | }; |
| 667 | 1198 | result[@intFromEnum(Feature.xsfvqmaccdod)] = .{ |
| ... | ... | @@ -678,61 +1209,69 @@ pub const all_features = blk: { |
| 678 | 1209 | .zve32x, |
| 679 | 1210 | }), |
| 680 | 1211 | }; |
| 1212 | result[@intFromEnum(Feature.xsifivecdiscarddlone)] = .{ | |
| 1213 | .llvm_name = "xsifivecdiscarddlone", | |
| 1214 | .description = "'XSiFivecdiscarddlone' (SiFive sf.cdiscard.d.l1 Instruction)", | |
| 1215 | .dependencies = featureSet(&[_]Feature{}), | |
| 1216 | }; | |
| 1217 | result[@intFromEnum(Feature.xsifivecflushdlone)] = .{ | |
| 1218 | .llvm_name = "xsifivecflushdlone", | |
| 1219 | .description = "'XSiFivecflushdlone' (SiFive sf.cflush.d.l1 Instruction)", | |
| 1220 | .dependencies = featureSet(&[_]Feature{}), | |
| 1221 | }; | |
| 681 | 1222 | result[@intFromEnum(Feature.xtheadba)] = .{ |
| 682 | 1223 | .llvm_name = "xtheadba", |
| 683 | .description = "'xtheadba' (T-Head address calculation instructions)", | |
| 1224 | .description = "'XTHeadBa' (T-Head address calculation instructions)", | |
| 684 | 1225 | .dependencies = featureSet(&[_]Feature{}), |
| 685 | 1226 | }; |
| 686 | 1227 | result[@intFromEnum(Feature.xtheadbb)] = .{ |
| 687 | 1228 | .llvm_name = "xtheadbb", |
| 688 | .description = "'xtheadbb' (T-Head basic bit-manipulation instructions)", | |
| 1229 | .description = "'XTHeadBb' (T-Head basic bit-manipulation instructions)", | |
| 689 | 1230 | .dependencies = featureSet(&[_]Feature{}), |
| 690 | 1231 | }; |
| 691 | 1232 | result[@intFromEnum(Feature.xtheadbs)] = .{ |
| 692 | 1233 | .llvm_name = "xtheadbs", |
| 693 | .description = "'xtheadbs' (T-Head single-bit instructions)", | |
| 1234 | .description = "'XTHeadBs' (T-Head single-bit instructions)", | |
| 694 | 1235 | .dependencies = featureSet(&[_]Feature{}), |
| 695 | 1236 | }; |
| 696 | 1237 | result[@intFromEnum(Feature.xtheadcmo)] = .{ |
| 697 | 1238 | .llvm_name = "xtheadcmo", |
| 698 | .description = "'xtheadcmo' (T-Head cache management instructions)", | |
| 1239 | .description = "'XTHeadCmo' (T-Head cache management instructions)", | |
| 699 | 1240 | .dependencies = featureSet(&[_]Feature{}), |
| 700 | 1241 | }; |
| 701 | 1242 | result[@intFromEnum(Feature.xtheadcondmov)] = .{ |
| 702 | 1243 | .llvm_name = "xtheadcondmov", |
| 703 | .description = "'xtheadcondmov' (T-Head conditional move instructions)", | |
| 1244 | .description = "'XTHeadCondMov' (T-Head conditional move instructions)", | |
| 704 | 1245 | .dependencies = featureSet(&[_]Feature{}), |
| 705 | 1246 | }; |
| 706 | 1247 | result[@intFromEnum(Feature.xtheadfmemidx)] = .{ |
| 707 | 1248 | .llvm_name = "xtheadfmemidx", |
| 708 | .description = "'xtheadfmemidx' (T-Head FP Indexed Memory Operations)", | |
| 709 | .dependencies = featureSet(&[_]Feature{ | |
| 710 | .f, | |
| 711 | }), | |
| 1249 | .description = "'XTHeadFMemIdx' (T-Head FP Indexed Memory Operations)", | |
| 1250 | .dependencies = featureSet(&[_]Feature{}), | |
| 712 | 1251 | }; |
| 713 | 1252 | result[@intFromEnum(Feature.xtheadmac)] = .{ |
| 714 | 1253 | .llvm_name = "xtheadmac", |
| 715 | .description = "'xtheadmac' (T-Head Multiply-Accumulate Instructions)", | |
| 1254 | .description = "'XTHeadMac' (T-Head Multiply-Accumulate Instructions)", | |
| 716 | 1255 | .dependencies = featureSet(&[_]Feature{}), |
| 717 | 1256 | }; |
| 718 | 1257 | result[@intFromEnum(Feature.xtheadmemidx)] = .{ |
| 719 | 1258 | .llvm_name = "xtheadmemidx", |
| 720 | .description = "'xtheadmemidx' (T-Head Indexed Memory Operations)", | |
| 1259 | .description = "'XTHeadMemIdx' (T-Head Indexed Memory Operations)", | |
| 721 | 1260 | .dependencies = featureSet(&[_]Feature{}), |
| 722 | 1261 | }; |
| 723 | 1262 | result[@intFromEnum(Feature.xtheadmempair)] = .{ |
| 724 | 1263 | .llvm_name = "xtheadmempair", |
| 725 | .description = "'xtheadmempair' (T-Head two-GPR Memory Operations)", | |
| 1264 | .description = "'XTHeadMemPair' (T-Head two-GPR Memory Operations)", | |
| 726 | 1265 | .dependencies = featureSet(&[_]Feature{}), |
| 727 | 1266 | }; |
| 728 | 1267 | result[@intFromEnum(Feature.xtheadsync)] = .{ |
| 729 | 1268 | .llvm_name = "xtheadsync", |
| 730 | .description = "'xtheadsync' (T-Head multicore synchronization instructions)", | |
| 1269 | .description = "'XTHeadSync' (T-Head multicore synchronization instructions)", | |
| 731 | 1270 | .dependencies = featureSet(&[_]Feature{}), |
| 732 | 1271 | }; |
| 733 | 1272 | result[@intFromEnum(Feature.xtheadvdot)] = .{ |
| 734 | 1273 | .llvm_name = "xtheadvdot", |
| 735 | .description = "'xtheadvdot' (T-Head Vector Extensions for Dot)", | |
| 1274 | .description = "'XTHeadVdot' (T-Head Vector Extensions for Dot)", | |
| 736 | 1275 | .dependencies = featureSet(&[_]Feature{ |
| 737 | 1276 | .v, |
| 738 | 1277 | }), |
| ... | ... | @@ -742,6 +1281,11 @@ pub const all_features = blk: { |
| 742 | 1281 | .description = "'XVentanaCondOps' (Ventana Conditional Ops)", |
| 743 | 1282 | .dependencies = featureSet(&[_]Feature{}), |
| 744 | 1283 | }; |
| 1284 | result[@intFromEnum(Feature.xwchc)] = .{ | |
| 1285 | .llvm_name = "xwchc", | |
| 1286 | .description = "'Xwchc' (WCH/QingKe additional compressed opcodes)", | |
| 1287 | .dependencies = featureSet(&[_]Feature{}), | |
| 1288 | }; | |
| 745 | 1289 | result[@intFromEnum(Feature.za128rs)] = .{ |
| 746 | 1290 | .llvm_name = "za128rs", |
| 747 | 1291 | .description = "'Za128rs' (Reservation Set Size of at Most 128 Bytes)", |
| ... | ... | @@ -752,6 +1296,26 @@ pub const all_features = blk: { |
| 752 | 1296 | .description = "'Za64rs' (Reservation Set Size of at Most 64 Bytes)", |
| 753 | 1297 | .dependencies = featureSet(&[_]Feature{}), |
| 754 | 1298 | }; |
| 1299 | result[@intFromEnum(Feature.zaamo)] = .{ | |
| 1300 | .llvm_name = "zaamo", | |
| 1301 | .description = "'Zaamo' (Atomic Memory Operations)", | |
| 1302 | .dependencies = featureSet(&[_]Feature{}), | |
| 1303 | }; | |
| 1304 | result[@intFromEnum(Feature.zabha)] = .{ | |
| 1305 | .llvm_name = "zabha", | |
| 1306 | .description = "'Zabha' (Byte and Halfword Atomic Memory Operations)", | |
| 1307 | .dependencies = featureSet(&[_]Feature{}), | |
| 1308 | }; | |
| 1309 | result[@intFromEnum(Feature.zalrsc)] = .{ | |
| 1310 | .llvm_name = "zalrsc", | |
| 1311 | .description = "'Zalrsc' (Load-Reserved/Store-Conditional)", | |
| 1312 | .dependencies = featureSet(&[_]Feature{}), | |
| 1313 | }; | |
| 1314 | result[@intFromEnum(Feature.zama16b)] = .{ | |
| 1315 | .llvm_name = "zama16b", | |
| 1316 | .description = "'Zama16b' (Atomic 16-byte misaligned loads, stores and AMOs)", | |
| 1317 | .dependencies = featureSet(&[_]Feature{}), | |
| 1318 | }; | |
| 755 | 1319 | result[@intFromEnum(Feature.zawrs)] = .{ |
| 756 | 1320 | .llvm_name = "zawrs", |
| 757 | 1321 | .description = "'Zawrs' (Wait on Reservation Set)", |
| ... | ... | @@ -808,6 +1372,7 @@ pub const all_features = blk: { |
| 808 | 1372 | .llvm_name = "zcd", |
| 809 | 1373 | .description = "'Zcd' (Compressed Double-Precision Floating-Point Instructions)", |
| 810 | 1374 | .dependencies = featureSet(&[_]Feature{ |
| 1375 | .d, | |
| 811 | 1376 | .zca, |
| 812 | 1377 | }), |
| 813 | 1378 | }; |
| ... | ... | @@ -823,6 +1388,14 @@ pub const all_features = blk: { |
| 823 | 1388 | result[@intFromEnum(Feature.zcf)] = .{ |
| 824 | 1389 | .llvm_name = "zcf", |
| 825 | 1390 | .description = "'Zcf' (Compressed Single-Precision Floating-Point Instructions)", |
| 1391 | .dependencies = featureSet(&[_]Feature{ | |
| 1392 | .f, | |
| 1393 | .zca, | |
| 1394 | }), | |
| 1395 | }; | |
| 1396 | result[@intFromEnum(Feature.zcmop)] = .{ | |
| 1397 | .llvm_name = "zcmop", | |
| 1398 | .description = "'Zcmop' (Compressed May-Be-Operations)", | |
| 826 | 1399 | .dependencies = featureSet(&[_]Feature{ |
| 827 | 1400 | .zca, |
| 828 | 1401 | }), |
| ... | ... | @@ -866,6 +1439,13 @@ pub const all_features = blk: { |
| 866 | 1439 | .f, |
| 867 | 1440 | }), |
| 868 | 1441 | }; |
| 1442 | result[@intFromEnum(Feature.zfbfmin)] = .{ | |
| 1443 | .llvm_name = "zfbfmin", | |
| 1444 | .description = "'Zfbfmin' (Scalar BF16 Converts)", | |
| 1445 | .dependencies = featureSet(&[_]Feature{ | |
| 1446 | .f, | |
| 1447 | }), | |
| 1448 | }; | |
| 869 | 1449 | result[@intFromEnum(Feature.zfh)] = .{ |
| 870 | 1450 | .llvm_name = "zfh", |
| 871 | 1451 | .description = "'Zfh' (Half-Precision Floating-Point)", |
| ... | ... | @@ -980,6 +1560,11 @@ pub const all_features = blk: { |
| 980 | 1560 | .zicsr, |
| 981 | 1561 | }), |
| 982 | 1562 | }; |
| 1563 | result[@intFromEnum(Feature.zimop)] = .{ | |
| 1564 | .llvm_name = "zimop", | |
| 1565 | .description = "'Zimop' (May-Be-Operations)", | |
| 1566 | .dependencies = featureSet(&[_]Feature{}), | |
| 1567 | }; | |
| 983 | 1568 | result[@intFromEnum(Feature.zk)] = .{ |
| 984 | 1569 | .llvm_name = "zk", |
| 985 | 1570 | .description = "'Zk' (Standard scalar cryptography extension)", |
| ... | ... | @@ -1052,6 +1637,11 @@ pub const all_features = blk: { |
| 1052 | 1637 | .description = "'Zmmul' (Integer Multiplication)", |
| 1053 | 1638 | .dependencies = featureSet(&[_]Feature{}), |
| 1054 | 1639 | }; |
| 1640 | result[@intFromEnum(Feature.ztso)] = .{ | |
| 1641 | .llvm_name = "ztso", | |
| 1642 | .description = "'Ztso' (Memory Model - Total Store Order)", | |
| 1643 | .dependencies = featureSet(&[_]Feature{}), | |
| 1644 | }; | |
| 1055 | 1645 | result[@intFromEnum(Feature.zvbb)] = .{ |
| 1056 | 1646 | .llvm_name = "zvbb", |
| 1057 | 1647 | .description = "'Zvbb' (Vector basic bit-manipulation instructions)", |
| ... | ... | @@ -1104,6 +1694,21 @@ pub const all_features = blk: { |
| 1104 | 1694 | .zvl64b, |
| 1105 | 1695 | }), |
| 1106 | 1696 | }; |
| 1697 | result[@intFromEnum(Feature.zvfbfmin)] = .{ | |
| 1698 | .llvm_name = "zvfbfmin", | |
| 1699 | .description = "'Zvbfmin' (Vector BF16 Converts)", | |
| 1700 | .dependencies = featureSet(&[_]Feature{ | |
| 1701 | .zve32f, | |
| 1702 | }), | |
| 1703 | }; | |
| 1704 | result[@intFromEnum(Feature.zvfbfwma)] = .{ | |
| 1705 | .llvm_name = "zvfbfwma", | |
| 1706 | .description = "'Zvfbfwma' (Vector BF16 widening mul-add)", | |
| 1707 | .dependencies = featureSet(&[_]Feature{ | |
| 1708 | .zfbfmin, | |
| 1709 | .zvfbfmin, | |
| 1710 | }), | |
| 1711 | }; | |
| 1107 | 1712 | result[@intFromEnum(Feature.zvfh)] = .{ |
| 1108 | 1713 | .llvm_name = "zvfh", |
| 1109 | 1714 | .description = "'Zvfh' (Vector Half-Precision Floating-Point)", |
| ... | ... | @@ -1312,6 +1917,7 @@ pub const cpu = struct { |
| 1312 | 1917 | .a, |
| 1313 | 1918 | .c, |
| 1314 | 1919 | .d, |
| 1920 | .i, | |
| 1315 | 1921 | .m, |
| 1316 | 1922 | }), |
| 1317 | 1923 | }; |
| ... | ... | @@ -1323,6 +1929,7 @@ pub const cpu = struct { |
| 1323 | 1929 | .a, |
| 1324 | 1930 | .c, |
| 1325 | 1931 | .d, |
| 1932 | .i, | |
| 1326 | 1933 | .m, |
| 1327 | 1934 | }), |
| 1328 | 1935 | }; |
| ... | ... | @@ -1336,6 +1943,7 @@ pub const cpu = struct { |
| 1336 | 1943 | .llvm_name = "generic-rv32", |
| 1337 | 1944 | .features = featureSet(&[_]Feature{ |
| 1338 | 1945 | .@"32bit", |
| 1946 | .i, | |
| 1339 | 1947 | }), |
| 1340 | 1948 | }; |
| 1341 | 1949 | pub const generic_rv64 = CpuModel{ |
| ... | ... | @@ -1343,6 +1951,7 @@ pub const cpu = struct { |
| 1343 | 1951 | .llvm_name = "generic-rv64", |
| 1344 | 1952 | .features = featureSet(&[_]Feature{ |
| 1345 | 1953 | .@"64bit", |
| 1954 | .i, | |
| 1346 | 1955 | }), |
| 1347 | 1956 | }; |
| 1348 | 1957 | pub const rocket = CpuModel{ |
| ... | ... | @@ -1355,6 +1964,7 @@ pub const cpu = struct { |
| 1355 | 1964 | .llvm_name = "rocket-rv32", |
| 1356 | 1965 | .features = featureSet(&[_]Feature{ |
| 1357 | 1966 | .@"32bit", |
| 1967 | .i, | |
| 1358 | 1968 | .zicsr, |
| 1359 | 1969 | .zifencei, |
| 1360 | 1970 | }), |
| ... | ... | @@ -1364,6 +1974,7 @@ pub const cpu = struct { |
| 1364 | 1974 | .llvm_name = "rocket-rv64", |
| 1365 | 1975 | .features = featureSet(&[_]Feature{ |
| 1366 | 1976 | .@"64bit", |
| 1977 | .i, | |
| 1367 | 1978 | .zicsr, |
| 1368 | 1979 | .zifencei, |
| 1369 | 1980 | }), |
| ... | ... | @@ -1374,6 +1985,7 @@ pub const cpu = struct { |
| 1374 | 1985 | .features = featureSet(&[_]Feature{ |
| 1375 | 1986 | .no_default_unroll, |
| 1376 | 1987 | .short_forward_branch_opt, |
| 1988 | .use_postra_scheduler, | |
| 1377 | 1989 | }), |
| 1378 | 1990 | }; |
| 1379 | 1991 | pub const sifive_e20 = CpuModel{ |
| ... | ... | @@ -1382,6 +1994,7 @@ pub const cpu = struct { |
| 1382 | 1994 | .features = featureSet(&[_]Feature{ |
| 1383 | 1995 | .@"32bit", |
| 1384 | 1996 | .c, |
| 1997 | .i, | |
| 1385 | 1998 | .m, |
| 1386 | 1999 | .zicsr, |
| 1387 | 2000 | .zifencei, |
| ... | ... | @@ -1394,6 +2007,7 @@ pub const cpu = struct { |
| 1394 | 2007 | .@"32bit", |
| 1395 | 2008 | .a, |
| 1396 | 2009 | .c, |
| 2010 | .i, | |
| 1397 | 2011 | .m, |
| 1398 | 2012 | .zicsr, |
| 1399 | 2013 | .zifencei, |
| ... | ... | @@ -1407,6 +2021,7 @@ pub const cpu = struct { |
| 1407 | 2021 | .a, |
| 1408 | 2022 | .c, |
| 1409 | 2023 | .f, |
| 2024 | .i, | |
| 1410 | 2025 | .m, |
| 1411 | 2026 | .zifencei, |
| 1412 | 2027 | }), |
| ... | ... | @@ -1418,6 +2033,7 @@ pub const cpu = struct { |
| 1418 | 2033 | .@"32bit", |
| 1419 | 2034 | .a, |
| 1420 | 2035 | .c, |
| 2036 | .i, | |
| 1421 | 2037 | .m, |
| 1422 | 2038 | .zicsr, |
| 1423 | 2039 | .zifencei, |
| ... | ... | @@ -1431,6 +2047,7 @@ pub const cpu = struct { |
| 1431 | 2047 | .a, |
| 1432 | 2048 | .c, |
| 1433 | 2049 | .f, |
| 2050 | .i, | |
| 1434 | 2051 | .m, |
| 1435 | 2052 | .zifencei, |
| 1436 | 2053 | }), |
| ... | ... | @@ -1443,9 +2060,11 @@ pub const cpu = struct { |
| 1443 | 2060 | .a, |
| 1444 | 2061 | .c, |
| 1445 | 2062 | .f, |
| 2063 | .i, | |
| 1446 | 2064 | .m, |
| 1447 | 2065 | .no_default_unroll, |
| 1448 | 2066 | .short_forward_branch_opt, |
| 2067 | .use_postra_scheduler, | |
| 1449 | 2068 | .zifencei, |
| 1450 | 2069 | }), |
| 1451 | 2070 | }; |
| ... | ... | @@ -1459,10 +2078,13 @@ pub const cpu = struct { |
| 1459 | 2078 | .c, |
| 1460 | 2079 | .conditional_cmv_fusion, |
| 1461 | 2080 | .d, |
| 1462 | .fast_unaligned_access, | |
| 2081 | .i, | |
| 1463 | 2082 | .lui_addi_fusion, |
| 1464 | 2083 | .m, |
| 1465 | 2084 | .no_default_unroll, |
| 2085 | .unaligned_scalar_mem, | |
| 2086 | .unaligned_vector_mem, | |
| 2087 | .use_postra_scheduler, | |
| 1466 | 2088 | .za64rs, |
| 1467 | 2089 | .zba, |
| 1468 | 2090 | .zbb, |
| ... | ... | @@ -1491,10 +2113,14 @@ pub const cpu = struct { |
| 1491 | 2113 | .auipc_addi_fusion, |
| 1492 | 2114 | .c, |
| 1493 | 2115 | .conditional_cmv_fusion, |
| 1494 | .fast_unaligned_access, | |
| 2116 | .i, | |
| 1495 | 2117 | .lui_addi_fusion, |
| 1496 | 2118 | .m, |
| 1497 | 2119 | .no_default_unroll, |
| 2120 | .no_sink_splat_operands, | |
| 2121 | .unaligned_scalar_mem, | |
| 2122 | .unaligned_vector_mem, | |
| 2123 | .use_postra_scheduler, | |
| 1498 | 2124 | .v, |
| 1499 | 2125 | .za64rs, |
| 1500 | 2126 | .zba, |
| ... | ... | @@ -1527,6 +2153,7 @@ pub const cpu = struct { |
| 1527 | 2153 | .@"64bit", |
| 1528 | 2154 | .a, |
| 1529 | 2155 | .c, |
| 2156 | .i, | |
| 1530 | 2157 | .m, |
| 1531 | 2158 | .zicsr, |
| 1532 | 2159 | .zifencei, |
| ... | ... | @@ -1539,6 +2166,7 @@ pub const cpu = struct { |
| 1539 | 2166 | .@"64bit", |
| 1540 | 2167 | .a, |
| 1541 | 2168 | .c, |
| 2169 | .i, | |
| 1542 | 2170 | .m, |
| 1543 | 2171 | .zicsr, |
| 1544 | 2172 | .zifencei, |
| ... | ... | @@ -1552,6 +2180,7 @@ pub const cpu = struct { |
| 1552 | 2180 | .a, |
| 1553 | 2181 | .c, |
| 1554 | 2182 | .d, |
| 2183 | .i, | |
| 1555 | 2184 | .m, |
| 1556 | 2185 | .zifencei, |
| 1557 | 2186 | }), |
| ... | ... | @@ -1564,9 +2193,11 @@ pub const cpu = struct { |
| 1564 | 2193 | .a, |
| 1565 | 2194 | .c, |
| 1566 | 2195 | .d, |
| 2196 | .i, | |
| 1567 | 2197 | .m, |
| 1568 | 2198 | .no_default_unroll, |
| 1569 | 2199 | .short_forward_branch_opt, |
| 2200 | .use_postra_scheduler, | |
| 1570 | 2201 | .zifencei, |
| 1571 | 2202 | .zihintpause, |
| 1572 | 2203 | }), |
| ... | ... | @@ -1579,6 +2210,7 @@ pub const cpu = struct { |
| 1579 | 2210 | .a, |
| 1580 | 2211 | .c, |
| 1581 | 2212 | .d, |
| 2213 | .i, | |
| 1582 | 2214 | .m, |
| 1583 | 2215 | .zifencei, |
| 1584 | 2216 | }), |
| ... | ... | @@ -1591,9 +2223,11 @@ pub const cpu = struct { |
| 1591 | 2223 | .a, |
| 1592 | 2224 | .c, |
| 1593 | 2225 | .d, |
| 2226 | .i, | |
| 1594 | 2227 | .m, |
| 1595 | 2228 | .no_default_unroll, |
| 1596 | 2229 | .short_forward_branch_opt, |
| 2230 | .use_postra_scheduler, | |
| 1597 | 2231 | .zifencei, |
| 1598 | 2232 | }), |
| 1599 | 2233 | }; |
| ... | ... | @@ -1605,9 +2239,12 @@ pub const cpu = struct { |
| 1605 | 2239 | .a, |
| 1606 | 2240 | .c, |
| 1607 | 2241 | .dlen_factor_2, |
| 2242 | .i, | |
| 1608 | 2243 | .m, |
| 1609 | 2244 | .no_default_unroll, |
| 2245 | .optimized_zero_stride_load, | |
| 1610 | 2246 | .short_forward_branch_opt, |
| 2247 | .use_postra_scheduler, | |
| 1611 | 2248 | .v, |
| 1612 | 2249 | .zba, |
| 1613 | 2250 | .zbb, |
| ... | ... | @@ -1617,12 +2254,61 @@ pub const cpu = struct { |
| 1617 | 2254 | .zvl512b, |
| 1618 | 2255 | }), |
| 1619 | 2256 | }; |
| 2257 | pub const spacemit_x60 = CpuModel{ | |
| 2258 | .name = "spacemit_x60", | |
| 2259 | .llvm_name = "spacemit-x60", | |
| 2260 | .features = featureSet(&[_]Feature{ | |
| 2261 | .@"64bit", | |
| 2262 | .a, | |
| 2263 | .c, | |
| 2264 | .dlen_factor_2, | |
| 2265 | .i, | |
| 2266 | .m, | |
| 2267 | .ssccptr, | |
| 2268 | .sscofpmf, | |
| 2269 | .sscounterenw, | |
| 2270 | .sstc, | |
| 2271 | .sstvala, | |
| 2272 | .sstvecd, | |
| 2273 | .svade, | |
| 2274 | .svbare, | |
| 2275 | .svinval, | |
| 2276 | .svnapot, | |
| 2277 | .svpbmt, | |
| 2278 | .v, | |
| 2279 | .za64rs, | |
| 2280 | .zba, | |
| 2281 | .zbb, | |
| 2282 | .zbc, | |
| 2283 | .zbkc, | |
| 2284 | .zbs, | |
| 2285 | .zfh, | |
| 2286 | .zic64b, | |
| 2287 | .zicbom, | |
| 2288 | .zicbop, | |
| 2289 | .zicboz, | |
| 2290 | .ziccamoa, | |
| 2291 | .ziccif, | |
| 2292 | .zicclsm, | |
| 2293 | .ziccrse, | |
| 2294 | .zicntr, | |
| 2295 | .zicond, | |
| 2296 | .zifencei, | |
| 2297 | .zihintpause, | |
| 2298 | .zihpm, | |
| 2299 | .zkt, | |
| 2300 | .zvfh, | |
| 2301 | .zvkt, | |
| 2302 | .zvl256b, | |
| 2303 | }), | |
| 2304 | }; | |
| 1620 | 2305 | pub const syntacore_scr1_base = CpuModel{ |
| 1621 | 2306 | .name = "syntacore_scr1_base", |
| 1622 | 2307 | .llvm_name = "syntacore-scr1-base", |
| 1623 | 2308 | .features = featureSet(&[_]Feature{ |
| 1624 | 2309 | .@"32bit", |
| 1625 | 2310 | .c, |
| 2311 | .i, | |
| 1626 | 2312 | .no_default_unroll, |
| 1627 | 2313 | .zicsr, |
| 1628 | 2314 | .zifencei, |
| ... | ... | @@ -1634,8 +2320,38 @@ pub const cpu = struct { |
| 1634 | 2320 | .features = featureSet(&[_]Feature{ |
| 1635 | 2321 | .@"32bit", |
| 1636 | 2322 | .c, |
| 2323 | .i, | |
| 2324 | .m, | |
| 2325 | .no_default_unroll, | |
| 2326 | .zicsr, | |
| 2327 | .zifencei, | |
| 2328 | }), | |
| 2329 | }; | |
| 2330 | pub const syntacore_scr3_rv32 = CpuModel{ | |
| 2331 | .name = "syntacore_scr3_rv32", | |
| 2332 | .llvm_name = "syntacore-scr3-rv32", | |
| 2333 | .features = featureSet(&[_]Feature{ | |
| 2334 | .@"32bit", | |
| 2335 | .c, | |
| 2336 | .i, | |
| 2337 | .m, | |
| 2338 | .no_default_unroll, | |
| 2339 | .use_postra_scheduler, | |
| 2340 | .zicsr, | |
| 2341 | .zifencei, | |
| 2342 | }), | |
| 2343 | }; | |
| 2344 | pub const syntacore_scr3_rv64 = CpuModel{ | |
| 2345 | .name = "syntacore_scr3_rv64", | |
| 2346 | .llvm_name = "syntacore-scr3-rv64", | |
| 2347 | .features = featureSet(&[_]Feature{ | |
| 2348 | .@"64bit", | |
| 2349 | .a, | |
| 2350 | .c, | |
| 2351 | .i, | |
| 1637 | 2352 | .m, |
| 1638 | 2353 | .no_default_unroll, |
| 2354 | .use_postra_scheduler, | |
| 1639 | 2355 | .zicsr, |
| 1640 | 2356 | .zifencei, |
| 1641 | 2357 | }), |
| ... | ... | @@ -1649,6 +2365,7 @@ pub const cpu = struct { |
| 1649 | 2365 | .auipc_addi_fusion, |
| 1650 | 2366 | .c, |
| 1651 | 2367 | .d, |
| 2368 | .i, | |
| 1652 | 2369 | .ld_add_fusion, |
| 1653 | 2370 | .lui_addi_fusion, |
| 1654 | 2371 | .m, |
| ... | ... | @@ -1678,12 +2395,17 @@ pub const cpu = struct { |
| 1678 | 2395 | .a, |
| 1679 | 2396 | .c, |
| 1680 | 2397 | .d, |
| 2398 | .i, | |
| 1681 | 2399 | .m, |
| 2400 | .no_default_unroll, | |
| 2401 | .shifted_zextw_fusion, | |
| 1682 | 2402 | .svinval, |
| 1683 | 2403 | .zba, |
| 1684 | 2404 | .zbb, |
| 1685 | 2405 | .zbc, |
| 1686 | 2406 | .zbs, |
| 2407 | .zexth_fusion, | |
| 2408 | .zextw_fusion, | |
| 1687 | 2409 | .zicbom, |
| 1688 | 2410 | .zicboz, |
| 1689 | 2411 | .zifencei, |
lib/std/Target/s390x.zig+18| ... | ... | @@ -40,7 +40,9 @@ pub const Feature = enum { |
| 40 | 40 | reset_dat_protection, |
| 41 | 41 | reset_reference_bits_multiple, |
| 42 | 42 | soft_float, |
| 43 | test_pending_external_interruption, | |
| 43 | 44 | transactional_execution, |
| 45 | unaligned_symbols, | |
| 44 | 46 | vector, |
| 45 | 47 | vector_enhancements_1, |
| 46 | 48 | vector_enhancements_2, |
| ... | ... | @@ -233,11 +235,21 @@ pub const all_features = blk: { |
| 233 | 235 | .description = "Use software emulation for floating point", |
| 234 | 236 | .dependencies = featureSet(&[_]Feature{}), |
| 235 | 237 | }; |
| 238 | result[@intFromEnum(Feature.test_pending_external_interruption)] = .{ | |
| 239 | .llvm_name = "test-pending-external-interruption", | |
| 240 | .description = "Assume that the test-pending-external-interruption facility is installed", | |
| 241 | .dependencies = featureSet(&[_]Feature{}), | |
| 242 | }; | |
| 236 | 243 | result[@intFromEnum(Feature.transactional_execution)] = .{ |
| 237 | 244 | .llvm_name = "transactional-execution", |
| 238 | 245 | .description = "Assume that the transactional-execution facility is installed", |
| 239 | 246 | .dependencies = featureSet(&[_]Feature{}), |
| 240 | 247 | }; |
| 248 | result[@intFromEnum(Feature.unaligned_symbols)] = .{ | |
| 249 | .llvm_name = "unaligned-symbols", | |
| 250 | .description = "Don't apply the ABI minimum alignment to external symbols.", | |
| 251 | .dependencies = featureSet(&[_]Feature{}), | |
| 252 | }; | |
| 241 | 253 | result[@intFromEnum(Feature.vector)] = .{ |
| 242 | 254 | .llvm_name = "vector", |
| 243 | 255 | .description = "Assume that the vectory facility is installed", |
| ... | ... | @@ -357,6 +369,7 @@ pub const cpu = struct { |
| 357 | 369 | .population_count, |
| 358 | 370 | .processor_assist, |
| 359 | 371 | .reset_reference_bits_multiple, |
| 372 | .test_pending_external_interruption, | |
| 360 | 373 | .transactional_execution, |
| 361 | 374 | .vector, |
| 362 | 375 | .vector_enhancements_1, |
| ... | ... | @@ -396,6 +409,7 @@ pub const cpu = struct { |
| 396 | 409 | .population_count, |
| 397 | 410 | .processor_assist, |
| 398 | 411 | .reset_reference_bits_multiple, |
| 412 | .test_pending_external_interruption, | |
| 399 | 413 | .transactional_execution, |
| 400 | 414 | .vector, |
| 401 | 415 | .vector_enhancements_1, |
| ... | ... | @@ -441,6 +455,7 @@ pub const cpu = struct { |
| 441 | 455 | .processor_assist, |
| 442 | 456 | .reset_dat_protection, |
| 443 | 457 | .reset_reference_bits_multiple, |
| 458 | .test_pending_external_interruption, | |
| 444 | 459 | .transactional_execution, |
| 445 | 460 | .vector, |
| 446 | 461 | .vector_enhancements_1, |
| ... | ... | @@ -538,6 +553,7 @@ pub const cpu = struct { |
| 538 | 553 | .population_count, |
| 539 | 554 | .processor_assist, |
| 540 | 555 | .reset_reference_bits_multiple, |
| 556 | .test_pending_external_interruption, | |
| 541 | 557 | .transactional_execution, |
| 542 | 558 | .vector, |
| 543 | 559 | .vector_enhancements_1, |
| ... | ... | @@ -577,6 +593,7 @@ pub const cpu = struct { |
| 577 | 593 | .population_count, |
| 578 | 594 | .processor_assist, |
| 579 | 595 | .reset_reference_bits_multiple, |
| 596 | .test_pending_external_interruption, | |
| 580 | 597 | .transactional_execution, |
| 581 | 598 | .vector, |
| 582 | 599 | .vector_enhancements_1, |
| ... | ... | @@ -622,6 +639,7 @@ pub const cpu = struct { |
| 622 | 639 | .processor_assist, |
| 623 | 640 | .reset_dat_protection, |
| 624 | 641 | .reset_reference_bits_multiple, |
| 642 | .test_pending_external_interruption, | |
| 625 | 643 | .transactional_execution, |
| 626 | 644 | .vector, |
| 627 | 645 | .vector_enhancements_1, |
lib/std/Target/wasm.zig+15| ... | ... | @@ -9,6 +9,7 @@ pub const Feature = enum { |
| 9 | 9 | bulk_memory, |
| 10 | 10 | exception_handling, |
| 11 | 11 | extended_const, |
| 12 | half_precision, | |
| 12 | 13 | multimemory, |
| 13 | 14 | multivalue, |
| 14 | 15 | mutable_globals, |
| ... | ... | @@ -49,6 +50,11 @@ pub const all_features = blk: { |
| 49 | 50 | .description = "Enable extended const expressions", |
| 50 | 51 | .dependencies = featureSet(&[_]Feature{}), |
| 51 | 52 | }; |
| 53 | result[@intFromEnum(Feature.half_precision)] = .{ | |
| 54 | .llvm_name = "half-precision", | |
| 55 | .description = "Enable half precision instructions", | |
| 56 | .dependencies = featureSet(&[_]Feature{}), | |
| 57 | }; | |
| 52 | 58 | result[@intFromEnum(Feature.multimemory)] = .{ |
| 53 | 59 | .llvm_name = "multimemory", |
| 54 | 60 | .description = "Enable multiple memories", |
| ... | ... | @@ -109,8 +115,15 @@ pub const cpu = struct { |
| 109 | 115 | .features = featureSet(&[_]Feature{ |
| 110 | 116 | .atomics, |
| 111 | 117 | .bulk_memory, |
| 118 | .exception_handling, | |
| 119 | .extended_const, | |
| 120 | .half_precision, | |
| 121 | .multimemory, | |
| 122 | .multivalue, | |
| 112 | 123 | .mutable_globals, |
| 113 | 124 | .nontrapping_fptoint, |
| 125 | .reference_types, | |
| 126 | .relaxed_simd, | |
| 114 | 127 | .sign_ext, |
| 115 | 128 | .simd128, |
| 116 | 129 | .tail_call, |
| ... | ... | @@ -120,7 +133,9 @@ pub const cpu = struct { |
| 120 | 133 | .name = "generic", |
| 121 | 134 | .llvm_name = "generic", |
| 122 | 135 | .features = featureSet(&[_]Feature{ |
| 136 | .multivalue, | |
| 123 | 137 | .mutable_globals, |
| 138 | .reference_types, | |
| 124 | 139 | .sign_ext, |
| 125 | 140 | }), |
| 126 | 141 | }; |
lib/std/Target/x86.zig+106-19| ... | ... | @@ -45,6 +45,7 @@ pub const Feature = enum { |
| 45 | 45 | avxvnniint8, |
| 46 | 46 | bmi, |
| 47 | 47 | bmi2, |
| 48 | branch_hint, | |
| 48 | 49 | branchfusion, |
| 49 | 50 | ccmp, |
| 50 | 51 | cf, |
| ... | ... | @@ -73,8 +74,10 @@ pub const Feature = enum { |
| 73 | 74 | fast_15bytenop, |
| 74 | 75 | fast_7bytenop, |
| 75 | 76 | fast_bextr, |
| 77 | fast_dpwssd, | |
| 76 | 78 | fast_gather, |
| 77 | 79 | fast_hops, |
| 80 | fast_imm16, | |
| 78 | 81 | fast_lzcnt, |
| 79 | 82 | fast_movbe, |
| 80 | 83 | fast_scalar_fsqrt, |
| ... | ... | @@ -96,6 +99,7 @@ pub const Feature = enum { |
| 96 | 99 | hreset, |
| 97 | 100 | idivl_to_divb, |
| 98 | 101 | idivq_to_divl, |
| 102 | inline_asm_use_gpr32, | |
| 99 | 103 | invpcid, |
| 100 | 104 | kl, |
| 101 | 105 | lea_sp, |
| ... | ... | @@ -111,6 +115,7 @@ pub const Feature = enum { |
| 111 | 115 | movdiri, |
| 112 | 116 | mwaitx, |
| 113 | 117 | ndd, |
| 118 | nf, | |
| 114 | 119 | no_bypass_delay, |
| 115 | 120 | no_bypass_delay_blend, |
| 116 | 121 | no_bypass_delay_mov, |
| ... | ... | @@ -191,6 +196,7 @@ pub const Feature = enum { |
| 191 | 196 | xsavec, |
| 192 | 197 | xsaveopt, |
| 193 | 198 | xsaves, |
| 199 | zu, | |
| 194 | 200 | }; |
| 195 | 201 | |
| 196 | 202 | pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet; |
| ... | ... | @@ -213,14 +219,14 @@ pub const all_features = blk: { |
| 213 | 219 | .dependencies = featureSet(&[_]Feature{}), |
| 214 | 220 | }; |
| 215 | 221 | result[@intFromEnum(Feature.@"3dnow")] = .{ |
| 216 | .llvm_name = "3dnow", | |
| 222 | .llvm_name = null, | |
| 217 | 223 | .description = "Enable 3DNow! instructions", |
| 218 | 224 | .dependencies = featureSet(&[_]Feature{ |
| 219 | 225 | .mmx, |
| 220 | 226 | }), |
| 221 | 227 | }; |
| 222 | 228 | result[@intFromEnum(Feature.@"3dnowa")] = .{ |
| 223 | .llvm_name = "3dnowa", | |
| 229 | .llvm_name = null, | |
| 224 | 230 | .description = "Enable 3DNow! Athlon instructions", |
| 225 | 231 | .dependencies = featureSet(&[_]Feature{ |
| 226 | 232 | .@"3dnow", |
| ... | ... | @@ -356,7 +362,7 @@ pub const all_features = blk: { |
| 356 | 362 | }), |
| 357 | 363 | }; |
| 358 | 364 | result[@intFromEnum(Feature.avx512er)] = .{ |
| 359 | .llvm_name = "avx512er", | |
| 365 | .llvm_name = null, | |
| 360 | 366 | .description = "Enable AVX-512 Exponential and Reciprocal Instructions", |
| 361 | 367 | .dependencies = featureSet(&[_]Feature{ |
| 362 | 368 | .avx512f, |
| ... | ... | @@ -388,7 +394,7 @@ pub const all_features = blk: { |
| 388 | 394 | }), |
| 389 | 395 | }; |
| 390 | 396 | result[@intFromEnum(Feature.avx512pf)] = .{ |
| 391 | .llvm_name = "avx512pf", | |
| 397 | .llvm_name = null, | |
| 392 | 398 | .description = "Enable AVX-512 PreFetch Instructions", |
| 393 | 399 | .dependencies = featureSet(&[_]Feature{ |
| 394 | 400 | .avx512f, |
| ... | ... | @@ -481,6 +487,11 @@ pub const all_features = blk: { |
| 481 | 487 | .description = "Support BMI2 instructions", |
| 482 | 488 | .dependencies = featureSet(&[_]Feature{}), |
| 483 | 489 | }; |
| 490 | result[@intFromEnum(Feature.branch_hint)] = .{ | |
| 491 | .llvm_name = "branch-hint", | |
| 492 | .description = "Target has branch hint feature", | |
| 493 | .dependencies = featureSet(&[_]Feature{}), | |
| 494 | }; | |
| 484 | 495 | result[@intFromEnum(Feature.branchfusion)] = .{ |
| 485 | 496 | .llvm_name = "branchfusion", |
| 486 | 497 | .description = "CMP/TEST can be fused with conditional branches", |
| ... | ... | @@ -625,6 +636,11 @@ pub const all_features = blk: { |
| 625 | 636 | .description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput", |
| 626 | 637 | .dependencies = featureSet(&[_]Feature{}), |
| 627 | 638 | }; |
| 639 | result[@intFromEnum(Feature.fast_dpwssd)] = .{ | |
| 640 | .llvm_name = "fast-dpwssd", | |
| 641 | .description = "Prefer vpdpwssd instruction over vpmaddwd+vpaddd instruction sequence", | |
| 642 | .dependencies = featureSet(&[_]Feature{}), | |
| 643 | }; | |
| 628 | 644 | result[@intFromEnum(Feature.fast_gather)] = .{ |
| 629 | 645 | .llvm_name = "fast-gather", |
| 630 | 646 | .description = "Indicates if gather is reasonably fast (this is true for Skylake client and all AVX-512 CPUs)", |
| ... | ... | @@ -635,6 +651,11 @@ pub const all_features = blk: { |
| 635 | 651 | .description = "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles", |
| 636 | 652 | .dependencies = featureSet(&[_]Feature{}), |
| 637 | 653 | }; |
| 654 | result[@intFromEnum(Feature.fast_imm16)] = .{ | |
| 655 | .llvm_name = "fast-imm16", | |
| 656 | .description = "Prefer a i16 instruction with i16 immediate over extension to i32", | |
| 657 | .dependencies = featureSet(&[_]Feature{}), | |
| 658 | }; | |
| 638 | 659 | result[@intFromEnum(Feature.fast_lzcnt)] = .{ |
| 639 | 660 | .llvm_name = "fast-lzcnt", |
| 640 | 661 | .description = "LZCNT instructions are as fast as most simple integer ops", |
| ... | ... | @@ -747,6 +768,11 @@ pub const all_features = blk: { |
| 747 | 768 | .description = "Use 32-bit divide for positive values less than 2^32", |
| 748 | 769 | .dependencies = featureSet(&[_]Feature{}), |
| 749 | 770 | }; |
| 771 | result[@intFromEnum(Feature.inline_asm_use_gpr32)] = .{ | |
| 772 | .llvm_name = "inline-asm-use-gpr32", | |
| 773 | .description = "Enable use of GPR32 in inline assembly for APX", | |
| 774 | .dependencies = featureSet(&[_]Feature{}), | |
| 775 | }; | |
| 750 | 776 | result[@intFromEnum(Feature.invpcid)] = .{ |
| 751 | 777 | .llvm_name = "invpcid", |
| 752 | 778 | .description = "Invalidate Process-Context Identifier", |
| ... | ... | @@ -824,6 +850,11 @@ pub const all_features = blk: { |
| 824 | 850 | .description = "Support non-destructive destination", |
| 825 | 851 | .dependencies = featureSet(&[_]Feature{}), |
| 826 | 852 | }; |
| 853 | result[@intFromEnum(Feature.nf)] = .{ | |
| 854 | .llvm_name = "nf", | |
| 855 | .description = "Support status flags update suppression", | |
| 856 | .dependencies = featureSet(&[_]Feature{}), | |
| 857 | }; | |
| 827 | 858 | result[@intFromEnum(Feature.no_bypass_delay)] = .{ |
| 828 | 859 | .llvm_name = "no-bypass-delay", |
| 829 | 860 | .description = "Has no bypass delay when using the 'wrong' domain", |
| ... | ... | @@ -917,7 +948,7 @@ pub const all_features = blk: { |
| 917 | 948 | .dependencies = featureSet(&[_]Feature{}), |
| 918 | 949 | }; |
| 919 | 950 | result[@intFromEnum(Feature.prefetchwt1)] = .{ |
| 920 | .llvm_name = "prefetchwt1", | |
| 951 | .llvm_name = null, | |
| 921 | 952 | .description = "Prefetch with Intent to Write and T1 Hint", |
| 922 | 953 | .dependencies = featureSet(&[_]Feature{}), |
| 923 | 954 | }; |
| ... | ... | @@ -1269,6 +1300,11 @@ pub const all_features = blk: { |
| 1269 | 1300 | .xsave, |
| 1270 | 1301 | }), |
| 1271 | 1302 | }; |
| 1303 | result[@intFromEnum(Feature.zu)] = .{ | |
| 1304 | .llvm_name = "zu", | |
| 1305 | .description = "Support zero-upper SETcc/IMUL", | |
| 1306 | .dependencies = featureSet(&[_]Feature{}), | |
| 1307 | }; | |
| 1272 | 1308 | const ti = @typeInfo(Feature); |
| 1273 | 1309 | for (&result, 0..) |*elem, i| { |
| 1274 | 1310 | elem.index = i; |
| ... | ... | @@ -1357,6 +1393,7 @@ pub const cpu = struct { |
| 1357 | 1393 | .cx16, |
| 1358 | 1394 | .fast_scalar_shift_masks, |
| 1359 | 1395 | .fxsr, |
| 1396 | .idivq_to_divl, | |
| 1360 | 1397 | .lzcnt, |
| 1361 | 1398 | .nopl, |
| 1362 | 1399 | .popcnt, |
| ... | ... | @@ -1531,6 +1568,7 @@ pub const cpu = struct { |
| 1531 | 1568 | .cmov, |
| 1532 | 1569 | .cx8, |
| 1533 | 1570 | .nopl, |
| 1571 | .prfchw, | |
| 1534 | 1572 | .slow_shld, |
| 1535 | 1573 | .slow_unaligned_mem_16, |
| 1536 | 1574 | .vzeroupper, |
| ... | ... | @@ -1548,6 +1586,7 @@ pub const cpu = struct { |
| 1548 | 1586 | .fast_scalar_shift_masks, |
| 1549 | 1587 | .fxsr, |
| 1550 | 1588 | .nopl, |
| 1589 | .prfchw, | |
| 1551 | 1590 | .sbb_dep_breaking, |
| 1552 | 1591 | .slow_shld, |
| 1553 | 1592 | .slow_unaligned_mem_16, |
| ... | ... | @@ -1567,6 +1606,7 @@ pub const cpu = struct { |
| 1567 | 1606 | .fast_scalar_shift_masks, |
| 1568 | 1607 | .fxsr, |
| 1569 | 1608 | .nopl, |
| 1609 | .prfchw, | |
| 1570 | 1610 | .sbb_dep_breaking, |
| 1571 | 1611 | .slow_shld, |
| 1572 | 1612 | .slow_unaligned_mem_16, |
| ... | ... | @@ -1584,6 +1624,7 @@ pub const cpu = struct { |
| 1584 | 1624 | .cx8, |
| 1585 | 1625 | .fxsr, |
| 1586 | 1626 | .nopl, |
| 1627 | .prfchw, | |
| 1587 | 1628 | .slow_shld, |
| 1588 | 1629 | .slow_unaligned_mem_16, |
| 1589 | 1630 | .sse, |
| ... | ... | @@ -1602,6 +1643,7 @@ pub const cpu = struct { |
| 1602 | 1643 | .fast_scalar_shift_masks, |
| 1603 | 1644 | .fxsr, |
| 1604 | 1645 | .nopl, |
| 1646 | .prfchw, | |
| 1605 | 1647 | .sbb_dep_breaking, |
| 1606 | 1648 | .slow_shld, |
| 1607 | 1649 | .slow_unaligned_mem_16, |
| ... | ... | @@ -1619,6 +1661,7 @@ pub const cpu = struct { |
| 1619 | 1661 | .cx8, |
| 1620 | 1662 | .fxsr, |
| 1621 | 1663 | .nopl, |
| 1664 | .prfchw, | |
| 1622 | 1665 | .slow_shld, |
| 1623 | 1666 | .slow_unaligned_mem_16, |
| 1624 | 1667 | .sse, |
| ... | ... | @@ -1634,6 +1677,7 @@ pub const cpu = struct { |
| 1634 | 1677 | .cmov, |
| 1635 | 1678 | .cx8, |
| 1636 | 1679 | .nopl, |
| 1680 | .prfchw, | |
| 1637 | 1681 | .slow_shld, |
| 1638 | 1682 | .slow_unaligned_mem_16, |
| 1639 | 1683 | .vzeroupper, |
| ... | ... | @@ -1649,6 +1693,7 @@ pub const cpu = struct { |
| 1649 | 1693 | .cx8, |
| 1650 | 1694 | .fxsr, |
| 1651 | 1695 | .nopl, |
| 1696 | .prfchw, | |
| 1652 | 1697 | .slow_shld, |
| 1653 | 1698 | .slow_unaligned_mem_16, |
| 1654 | 1699 | .sse, |
| ... | ... | @@ -1663,6 +1708,7 @@ pub const cpu = struct { |
| 1663 | 1708 | .@"64bit", |
| 1664 | 1709 | .cmov, |
| 1665 | 1710 | .cx16, |
| 1711 | .fast_imm16, | |
| 1666 | 1712 | .fxsr, |
| 1667 | 1713 | .idivl_to_divb, |
| 1668 | 1714 | .idivq_to_divl, |
| ... | ... | @@ -1693,6 +1739,7 @@ pub const cpu = struct { |
| 1693 | 1739 | .cx16, |
| 1694 | 1740 | .false_deps_popcnt, |
| 1695 | 1741 | .fast_7bytenop, |
| 1742 | .fast_imm16, | |
| 1696 | 1743 | .fast_movbe, |
| 1697 | 1744 | .fsgsbase, |
| 1698 | 1745 | .fxsr, |
| ... | ... | @@ -1731,6 +1778,7 @@ pub const cpu = struct { |
| 1731 | 1778 | .cx16, |
| 1732 | 1779 | .fast_scalar_shift_masks, |
| 1733 | 1780 | .fxsr, |
| 1781 | .idivq_to_divl, | |
| 1734 | 1782 | .lzcnt, |
| 1735 | 1783 | .nopl, |
| 1736 | 1784 | .popcnt, |
| ... | ... | @@ -1756,6 +1804,7 @@ pub const cpu = struct { |
| 1756 | 1804 | .fast_11bytenop, |
| 1757 | 1805 | .fast_scalar_shift_masks, |
| 1758 | 1806 | .fxsr, |
| 1807 | .idivq_to_divl, | |
| 1759 | 1808 | .lwp, |
| 1760 | 1809 | .lzcnt, |
| 1761 | 1810 | .mmx, |
| ... | ... | @@ -1790,6 +1839,7 @@ pub const cpu = struct { |
| 1790 | 1839 | .fast_scalar_shift_masks, |
| 1791 | 1840 | .fma, |
| 1792 | 1841 | .fxsr, |
| 1842 | .idivq_to_divl, | |
| 1793 | 1843 | .lwp, |
| 1794 | 1844 | .lzcnt, |
| 1795 | 1845 | .mmx, |
| ... | ... | @@ -1826,6 +1876,7 @@ pub const cpu = struct { |
| 1826 | 1876 | .fma, |
| 1827 | 1877 | .fsgsbase, |
| 1828 | 1878 | .fxsr, |
| 1879 | .idivq_to_divl, | |
| 1829 | 1880 | .lwp, |
| 1830 | 1881 | .lzcnt, |
| 1831 | 1882 | .mmx, |
| ... | ... | @@ -1864,6 +1915,7 @@ pub const cpu = struct { |
| 1864 | 1915 | .fma, |
| 1865 | 1916 | .fsgsbase, |
| 1866 | 1917 | .fxsr, |
| 1918 | .idivq_to_divl, | |
| 1867 | 1919 | .lwp, |
| 1868 | 1920 | .lzcnt, |
| 1869 | 1921 | .mmx, |
| ... | ... | @@ -1891,6 +1943,7 @@ pub const cpu = struct { |
| 1891 | 1943 | .@"64bit", |
| 1892 | 1944 | .cmov, |
| 1893 | 1945 | .cx16, |
| 1946 | .fast_imm16, | |
| 1894 | 1947 | .fxsr, |
| 1895 | 1948 | .idivl_to_divb, |
| 1896 | 1949 | .idivq_to_divl, |
| ... | ... | @@ -1963,9 +2016,11 @@ pub const cpu = struct { |
| 1963 | 2016 | .cmov, |
| 1964 | 2017 | .cx16, |
| 1965 | 2018 | .fast_15bytenop, |
| 2019 | .fast_imm16, | |
| 1966 | 2020 | .fast_scalar_shift_masks, |
| 1967 | 2021 | .fast_vector_shift_masks, |
| 1968 | 2022 | .fxsr, |
| 2023 | .idivq_to_divl, | |
| 1969 | 2024 | .lzcnt, |
| 1970 | 2025 | .mmx, |
| 1971 | 2026 | .nopl, |
| ... | ... | @@ -1994,11 +2049,13 @@ pub const cpu = struct { |
| 1994 | 2049 | .fast_15bytenop, |
| 1995 | 2050 | .fast_bextr, |
| 1996 | 2051 | .fast_hops, |
| 2052 | .fast_imm16, | |
| 1997 | 2053 | .fast_lzcnt, |
| 1998 | 2054 | .fast_movbe, |
| 1999 | 2055 | .fast_scalar_shift_masks, |
| 2000 | 2056 | .fast_vector_shift_masks, |
| 2001 | 2057 | .fxsr, |
| 2058 | .idivq_to_divl, | |
| 2002 | 2059 | .lzcnt, |
| 2003 | 2060 | .mmx, |
| 2004 | 2061 | .movbe, |
| ... | ... | @@ -2019,6 +2076,7 @@ pub const cpu = struct { |
| 2019 | 2076 | .llvm_name = "c3", |
| 2020 | 2077 | .features = featureSet(&[_]Feature{ |
| 2021 | 2078 | .@"3dnow", |
| 2079 | .prfchw, | |
| 2022 | 2080 | .slow_unaligned_mem_16, |
| 2023 | 2081 | .vzeroupper, |
| 2024 | 2082 | .x87, |
| ... | ... | @@ -2324,6 +2382,7 @@ pub const cpu = struct { |
| 2324 | 2382 | .crc32, |
| 2325 | 2383 | .cx16, |
| 2326 | 2384 | .fxsr, |
| 2385 | .idivq_to_divl, | |
| 2327 | 2386 | .macrofusion, |
| 2328 | 2387 | .mmx, |
| 2329 | 2388 | .no_bypass_delay_mov, |
| ... | ... | @@ -2441,6 +2500,7 @@ pub const cpu = struct { |
| 2441 | 2500 | .features = featureSet(&[_]Feature{ |
| 2442 | 2501 | .@"3dnowa", |
| 2443 | 2502 | .cx8, |
| 2503 | .prfchw, | |
| 2444 | 2504 | .slow_unaligned_mem_16, |
| 2445 | 2505 | .vzeroupper, |
| 2446 | 2506 | .x87, |
| ... | ... | @@ -2457,6 +2517,7 @@ pub const cpu = struct { |
| 2457 | 2517 | .crc32, |
| 2458 | 2518 | .cx16, |
| 2459 | 2519 | .false_deps_popcnt, |
| 2520 | .fast_imm16, | |
| 2460 | 2521 | .fast_movbe, |
| 2461 | 2522 | .fsgsbase, |
| 2462 | 2523 | .fxsr, |
| ... | ... | @@ -2493,6 +2554,7 @@ pub const cpu = struct { |
| 2493 | 2554 | .cmov, |
| 2494 | 2555 | .crc32, |
| 2495 | 2556 | .cx16, |
| 2557 | .fast_imm16, | |
| 2496 | 2558 | .fast_movbe, |
| 2497 | 2559 | .fsgsbase, |
| 2498 | 2560 | .fxsr, |
| ... | ... | @@ -2547,8 +2609,6 @@ pub const cpu = struct { |
| 2547 | 2609 | .fxsr, |
| 2548 | 2610 | .gfni, |
| 2549 | 2611 | .hreset, |
| 2550 | .idivl_to_divb, | |
| 2551 | .idivq_to_divl, | |
| 2552 | 2612 | .invpcid, |
| 2553 | 2613 | .lzcnt, |
| 2554 | 2614 | .macrofusion, |
| ... | ... | @@ -2602,7 +2662,11 @@ pub const cpu = struct { |
| 2602 | 2662 | .cx16, |
| 2603 | 2663 | .enqcmd, |
| 2604 | 2664 | .f16c, |
| 2605 | .fast_movbe, | |
| 2665 | .false_deps_popcnt, | |
| 2666 | .fast_15bytenop, | |
| 2667 | .fast_scalar_fsqrt, | |
| 2668 | .fast_variable_perlane_shuffle, | |
| 2669 | .fast_vector_fsqrt, | |
| 2606 | 2670 | .fma, |
| 2607 | 2671 | .fsgsbase, |
| 2608 | 2672 | .fxsr, |
| ... | ... | @@ -2610,11 +2674,11 @@ pub const cpu = struct { |
| 2610 | 2674 | .hreset, |
| 2611 | 2675 | .invpcid, |
| 2612 | 2676 | .lzcnt, |
| 2677 | .macrofusion, | |
| 2613 | 2678 | .mmx, |
| 2614 | 2679 | .movbe, |
| 2615 | 2680 | .movdir64b, |
| 2616 | 2681 | .movdiri, |
| 2617 | .no_bypass_delay, | |
| 2618 | 2682 | .nopl, |
| 2619 | 2683 | .pconfig, |
| 2620 | 2684 | .pku, |
| ... | ... | @@ -2628,11 +2692,8 @@ pub const cpu = struct { |
| 2628 | 2692 | .serialize, |
| 2629 | 2693 | .sha, |
| 2630 | 2694 | .shstk, |
| 2631 | .slow_incdec, | |
| 2632 | .slow_lea, | |
| 2633 | .slow_two_mem_ops, | |
| 2695 | .slow_3ops_lea, | |
| 2634 | 2696 | .uintr, |
| 2635 | .use_glm_div_sqrt_costs, | |
| 2636 | 2697 | .vaes, |
| 2637 | 2698 | .vpclmulqdq, |
| 2638 | 2699 | .vzeroupper, |
| ... | ... | @@ -2666,6 +2727,7 @@ pub const cpu = struct { |
| 2666 | 2727 | .avxvnni, |
| 2667 | 2728 | .bmi, |
| 2668 | 2729 | .bmi2, |
| 2730 | .branch_hint, | |
| 2669 | 2731 | .cldemote, |
| 2670 | 2732 | .clflushopt, |
| 2671 | 2733 | .clwb, |
| ... | ... | @@ -2754,6 +2816,7 @@ pub const cpu = struct { |
| 2754 | 2816 | .avxvnni, |
| 2755 | 2817 | .bmi, |
| 2756 | 2818 | .bmi2, |
| 2819 | .branch_hint, | |
| 2757 | 2820 | .cldemote, |
| 2758 | 2821 | .clflushopt, |
| 2759 | 2822 | .clwb, |
| ... | ... | @@ -3080,6 +3143,7 @@ pub const cpu = struct { |
| 3080 | 3143 | .features = featureSet(&[_]Feature{ |
| 3081 | 3144 | .@"3dnow", |
| 3082 | 3145 | .cx8, |
| 3146 | .prfchw, | |
| 3083 | 3147 | .slow_unaligned_mem_16, |
| 3084 | 3148 | .vzeroupper, |
| 3085 | 3149 | .x87, |
| ... | ... | @@ -3091,6 +3155,7 @@ pub const cpu = struct { |
| 3091 | 3155 | .features = featureSet(&[_]Feature{ |
| 3092 | 3156 | .@"3dnow", |
| 3093 | 3157 | .cx8, |
| 3158 | .prfchw, | |
| 3094 | 3159 | .slow_unaligned_mem_16, |
| 3095 | 3160 | .vzeroupper, |
| 3096 | 3161 | .x87, |
| ... | ... | @@ -3107,6 +3172,7 @@ pub const cpu = struct { |
| 3107 | 3172 | .fast_scalar_shift_masks, |
| 3108 | 3173 | .fxsr, |
| 3109 | 3174 | .nopl, |
| 3175 | .prfchw, | |
| 3110 | 3176 | .sbb_dep_breaking, |
| 3111 | 3177 | .slow_shld, |
| 3112 | 3178 | .slow_unaligned_mem_16, |
| ... | ... | @@ -3126,6 +3192,7 @@ pub const cpu = struct { |
| 3126 | 3192 | .fast_scalar_shift_masks, |
| 3127 | 3193 | .fxsr, |
| 3128 | 3194 | .nopl, |
| 3195 | .prfchw, | |
| 3129 | 3196 | .sbb_dep_breaking, |
| 3130 | 3197 | .slow_shld, |
| 3131 | 3198 | .slow_unaligned_mem_16, |
| ... | ... | @@ -3151,6 +3218,7 @@ pub const cpu = struct { |
| 3151 | 3218 | .cx16, |
| 3152 | 3219 | .evex512, |
| 3153 | 3220 | .fast_gather, |
| 3221 | .fast_imm16, | |
| 3154 | 3222 | .fast_movbe, |
| 3155 | 3223 | .fsgsbase, |
| 3156 | 3224 | .fxsr, |
| ... | ... | @@ -3193,6 +3261,7 @@ pub const cpu = struct { |
| 3193 | 3261 | .cx16, |
| 3194 | 3262 | .evex512, |
| 3195 | 3263 | .fast_gather, |
| 3264 | .fast_imm16, | |
| 3196 | 3265 | .fast_movbe, |
| 3197 | 3266 | .fsgsbase, |
| 3198 | 3267 | .fxsr, |
| ... | ... | @@ -3384,6 +3453,7 @@ pub const cpu = struct { |
| 3384 | 3453 | .crc32, |
| 3385 | 3454 | .cx16, |
| 3386 | 3455 | .fxsr, |
| 3456 | .idivq_to_divl, | |
| 3387 | 3457 | .macrofusion, |
| 3388 | 3458 | .mmx, |
| 3389 | 3459 | .no_bypass_delay_mov, |
| ... | ... | @@ -3422,6 +3492,7 @@ pub const cpu = struct { |
| 3422 | 3492 | .fast_scalar_shift_masks, |
| 3423 | 3493 | .fxsr, |
| 3424 | 3494 | .nopl, |
| 3495 | .prfchw, | |
| 3425 | 3496 | .sbb_dep_breaking, |
| 3426 | 3497 | .slow_shld, |
| 3427 | 3498 | .slow_unaligned_mem_16, |
| ... | ... | @@ -3441,6 +3512,7 @@ pub const cpu = struct { |
| 3441 | 3512 | .fast_scalar_shift_masks, |
| 3442 | 3513 | .fxsr, |
| 3443 | 3514 | .nopl, |
| 3515 | .prfchw, | |
| 3444 | 3516 | .sbb_dep_breaking, |
| 3445 | 3517 | .slow_shld, |
| 3446 | 3518 | .slow_unaligned_mem_16, |
| ... | ... | @@ -3937,7 +4009,11 @@ pub const cpu = struct { |
| 3937 | 4009 | .cx16, |
| 3938 | 4010 | .enqcmd, |
| 3939 | 4011 | .f16c, |
| 3940 | .fast_movbe, | |
| 4012 | .false_deps_popcnt, | |
| 4013 | .fast_15bytenop, | |
| 4014 | .fast_scalar_fsqrt, | |
| 4015 | .fast_variable_perlane_shuffle, | |
| 4016 | .fast_vector_fsqrt, | |
| 3941 | 4017 | .fma, |
| 3942 | 4018 | .fsgsbase, |
| 3943 | 4019 | .fxsr, |
| ... | ... | @@ -3945,11 +4021,11 @@ pub const cpu = struct { |
| 3945 | 4021 | .hreset, |
| 3946 | 4022 | .invpcid, |
| 3947 | 4023 | .lzcnt, |
| 4024 | .macrofusion, | |
| 3948 | 4025 | .mmx, |
| 3949 | 4026 | .movbe, |
| 3950 | 4027 | .movdir64b, |
| 3951 | 4028 | .movdiri, |
| 3952 | .no_bypass_delay, | |
| 3953 | 4029 | .nopl, |
| 3954 | 4030 | .pconfig, |
| 3955 | 4031 | .pku, |
| ... | ... | @@ -3963,11 +4039,8 @@ pub const cpu = struct { |
| 3963 | 4039 | .serialize, |
| 3964 | 4040 | .sha, |
| 3965 | 4041 | .shstk, |
| 3966 | .slow_incdec, | |
| 3967 | .slow_lea, | |
| 3968 | .slow_two_mem_ops, | |
| 4042 | .slow_3ops_lea, | |
| 3969 | 4043 | .uintr, |
| 3970 | .use_glm_div_sqrt_costs, | |
| 3971 | 4044 | .vaes, |
| 3972 | 4045 | .vpclmulqdq, |
| 3973 | 4046 | .vzeroupper, |
| ... | ... | @@ -3989,6 +4062,7 @@ pub const cpu = struct { |
| 3989 | 4062 | .cx16, |
| 3990 | 4063 | .false_deps_popcnt, |
| 3991 | 4064 | .fast_7bytenop, |
| 4065 | .fast_imm16, | |
| 3992 | 4066 | .fast_movbe, |
| 3993 | 4067 | .fxsr, |
| 3994 | 4068 | .idivq_to_divl, |
| ... | ... | @@ -4191,6 +4265,7 @@ pub const cpu = struct { |
| 4191 | 4265 | .cx16, |
| 4192 | 4266 | .false_deps_popcnt, |
| 4193 | 4267 | .fast_7bytenop, |
| 4268 | .fast_imm16, | |
| 4194 | 4269 | .fast_movbe, |
| 4195 | 4270 | .fxsr, |
| 4196 | 4271 | .idivq_to_divl, |
| ... | ... | @@ -4293,6 +4368,7 @@ pub const cpu = struct { |
| 4293 | 4368 | .cmov, |
| 4294 | 4369 | .crc32, |
| 4295 | 4370 | .cx16, |
| 4371 | .fast_imm16, | |
| 4296 | 4372 | .fast_movbe, |
| 4297 | 4373 | .fsgsbase, |
| 4298 | 4374 | .fxsr, |
| ... | ... | @@ -4331,6 +4407,7 @@ pub const cpu = struct { |
| 4331 | 4407 | .crc32, |
| 4332 | 4408 | .cx16, |
| 4333 | 4409 | .fxsr, |
| 4410 | .idivq_to_divl, | |
| 4334 | 4411 | .macrofusion, |
| 4335 | 4412 | .mmx, |
| 4336 | 4413 | .no_bypass_delay_mov, |
| ... | ... | @@ -4348,6 +4425,7 @@ pub const cpu = struct { |
| 4348 | 4425 | .llvm_name = "winchip2", |
| 4349 | 4426 | .features = featureSet(&[_]Feature{ |
| 4350 | 4427 | .@"3dnow", |
| 4428 | .prfchw, | |
| 4351 | 4429 | .slow_unaligned_mem_16, |
| 4352 | 4430 | .vzeroupper, |
| 4353 | 4431 | .x87, |
| ... | ... | @@ -4519,6 +4597,7 @@ pub const cpu = struct { |
| 4519 | 4597 | .f16c, |
| 4520 | 4598 | .fast_15bytenop, |
| 4521 | 4599 | .fast_bextr, |
| 4600 | .fast_imm16, | |
| 4522 | 4601 | .fast_lzcnt, |
| 4523 | 4602 | .fast_movbe, |
| 4524 | 4603 | .fast_scalar_fsqrt, |
| ... | ... | @@ -4528,6 +4607,7 @@ pub const cpu = struct { |
| 4528 | 4607 | .fma, |
| 4529 | 4608 | .fsgsbase, |
| 4530 | 4609 | .fxsr, |
| 4610 | .idivq_to_divl, | |
| 4531 | 4611 | .lzcnt, |
| 4532 | 4612 | .mmx, |
| 4533 | 4613 | .movbe, |
| ... | ... | @@ -4571,6 +4651,7 @@ pub const cpu = struct { |
| 4571 | 4651 | .f16c, |
| 4572 | 4652 | .fast_15bytenop, |
| 4573 | 4653 | .fast_bextr, |
| 4654 | .fast_imm16, | |
| 4574 | 4655 | .fast_lzcnt, |
| 4575 | 4656 | .fast_movbe, |
| 4576 | 4657 | .fast_scalar_fsqrt, |
| ... | ... | @@ -4580,6 +4661,7 @@ pub const cpu = struct { |
| 4580 | 4661 | .fma, |
| 4581 | 4662 | .fsgsbase, |
| 4582 | 4663 | .fxsr, |
| 4664 | .idivq_to_divl, | |
| 4583 | 4665 | .lzcnt, |
| 4584 | 4666 | .mmx, |
| 4585 | 4667 | .movbe, |
| ... | ... | @@ -4624,6 +4706,7 @@ pub const cpu = struct { |
| 4624 | 4706 | .f16c, |
| 4625 | 4707 | .fast_15bytenop, |
| 4626 | 4708 | .fast_bextr, |
| 4709 | .fast_imm16, | |
| 4627 | 4710 | .fast_lzcnt, |
| 4628 | 4711 | .fast_movbe, |
| 4629 | 4712 | .fast_scalar_fsqrt, |
| ... | ... | @@ -4634,6 +4717,7 @@ pub const cpu = struct { |
| 4634 | 4717 | .fsgsbase, |
| 4635 | 4718 | .fsrm, |
| 4636 | 4719 | .fxsr, |
| 4720 | .idivq_to_divl, | |
| 4637 | 4721 | .invpcid, |
| 4638 | 4722 | .lzcnt, |
| 4639 | 4723 | .macrofusion, |
| ... | ... | @@ -4692,6 +4776,8 @@ pub const cpu = struct { |
| 4692 | 4776 | .evex512, |
| 4693 | 4777 | .fast_15bytenop, |
| 4694 | 4778 | .fast_bextr, |
| 4779 | .fast_dpwssd, | |
| 4780 | .fast_imm16, | |
| 4695 | 4781 | .fast_lzcnt, |
| 4696 | 4782 | .fast_movbe, |
| 4697 | 4783 | .fast_scalar_fsqrt, |
| ... | ... | @@ -4702,6 +4788,7 @@ pub const cpu = struct { |
| 4702 | 4788 | .fsrm, |
| 4703 | 4789 | .fxsr, |
| 4704 | 4790 | .gfni, |
| 4791 | .idivq_to_divl, | |
| 4705 | 4792 | .invpcid, |
| 4706 | 4793 | .lzcnt, |
| 4707 | 4794 | .macrofusion, |