| ... | ... | @@ -470,6 +470,19 @@ fn detectNativeFeatures(cpu: *Target.Cpu, os_tag: Target.Os.Tag) void { |
| 470 | 470 | } |
| 471 | 471 | } |
| 472 | 472 | |
| 473 | if (max_ext_level >= 0x80000021) { |
| 474 | leaf = cpuid(0x80000021, 0); |
| 475 | |
| 476 | // AMD uses a different bit for prefetchi. |
| 477 | setFeature(cpu, .prefetchi, bit(leaf.eax, 20)); |
| 478 | } else { |
| 479 | for ([_]Target.x86.Feature{ |
| 480 | .prefetchi, |
| 481 | }) |feat| { |
| 482 | setFeature(cpu, feat, false); |
| 483 | } |
| 484 | } |
| 485 | |
| 473 | 486 | if (max_level >= 0x7) { |
| 474 | 487 | leaf = cpuid(0x7, 0); |
| 475 | 488 | |
| ... | ... | @@ -555,7 +568,8 @@ fn detectNativeFeatures(cpu: *Target.Cpu, os_tag: Target.Os.Tag) void { |
| 555 | 568 | setFeature(cpu, .avxneconvert, bit(leaf.edx, 5) and has_avx_save); |
| 556 | 569 | setFeature(cpu, .amx_complex, bit(leaf.edx, 8) and has_amx_save); |
| 557 | 570 | setFeature(cpu, .avxvnniint16, bit(leaf.edx, 10) and has_avx_save); |
| 558 | | setFeature(cpu, .prefetchi, bit(leaf.edx, 14)); |
| 571 | // This needs to account for prefetchi already being detected above on AMD. |
| 572 | setFeature(cpu, .prefetchi, cpu.has(.x86, .prefetchi) or bit(leaf.edx, 14)); |
| 559 | 573 | setFeature(cpu, .usermsr, bit(leaf.edx, 15)); |
| 560 | 574 | // APX |
| 561 | 575 | setFeature(cpu, .egpr, bit(leaf.edx, 21)); |
| ... | ... | @@ -581,7 +595,7 @@ fn detectNativeFeatures(cpu: *Target.Cpu, os_tag: Target.Os.Tag) void { |
| 581 | 595 | .avxneconvert, |
| 582 | 596 | .amx_complex, |
| 583 | 597 | .avxvnniint16, |
| 584 | | .prefetchi, |
| 598 | // prefetchi already handled earlier. |
| 585 | 599 | .usermsr, |
| 586 | 600 | .egpr, |
| 587 | 601 | .push2pop2, |
| ... | ... | @@ -662,7 +676,7 @@ fn detectNativeFeatures(cpu: *Target.Cpu, os_tag: Target.Os.Tag) void { |
| 662 | 676 | .avxneconvert, |
| 663 | 677 | .amx_complex, |
| 664 | 678 | .avxvnniint16, |
| 665 | | .prefetchi, |
| 679 | // prefetchi already handled earlier. |
| 666 | 680 | .usermsr, |
| 667 | 681 | .egpr, |
| 668 | 682 | .push2pop2, |