| ... | @@ -426,6 +426,8 @@ fn detectNativeFeatures(cpu: *Target.Cpu, os_tag: Target.Os.Tag) void { | ... | @@ -426,6 +426,8 @@ fn detectNativeFeatures(cpu: *Target.Cpu, os_tag: Target.Os.Tag) void { |
| 426 | // AMX requires additional context to be saved by the OS. | 426 | // AMX requires additional context to be saved by the OS. |
| 427 | const has_amx_save = xcr0.xtilecfg and xcr0.xtiledata; | 427 | const has_amx_save = xcr0.xtilecfg and xcr0.xtiledata; |
| 428 | | 428 | |
| | 429 | const has_apx_save = xcr0.apx; |
| | 430 | |
| 429 | setFeature(cpu, .avx, has_avx_save); | 431 | setFeature(cpu, .avx, has_avx_save); |
| 430 | setFeature(cpu, .fma, bit(leaf.ecx, 12) and has_avx_save); | 432 | setFeature(cpu, .fma, bit(leaf.ecx, 12) and has_avx_save); |
| 431 | // Only enable XSAVE if OS has enabled support for saving YMM state. | 433 | // Only enable XSAVE if OS has enabled support for saving YMM state. |
| ... | @@ -586,14 +588,14 @@ fn detectNativeFeatures(cpu: *Target.Cpu, os_tag: Target.Os.Tag) void { | ... | @@ -586,14 +588,14 @@ fn detectNativeFeatures(cpu: *Target.Cpu, os_tag: Target.Os.Tag) void { |
| 586 | setFeature(cpu, .prefetchi, cpu.has(.x86, .prefetchi) or bit(leaf.edx, 14)); | 588 | setFeature(cpu, .prefetchi, cpu.has(.x86, .prefetchi) or bit(leaf.edx, 14)); |
| 587 | setFeature(cpu, .usermsr, bit(leaf.edx, 15)); | 589 | setFeature(cpu, .usermsr, bit(leaf.edx, 15)); |
| 588 | // APX | 590 | // APX |
| 589 | setFeature(cpu, .egpr, bit(leaf.edx, 21)); | 591 | setFeature(cpu, .egpr, bit(leaf.edx, 21) and has_apx_save); |
| 590 | setFeature(cpu, .push2pop2, bit(leaf.edx, 21)); | 592 | setFeature(cpu, .push2pop2, bit(leaf.edx, 21) and has_apx_save); |
| 591 | setFeature(cpu, .ppx, bit(leaf.edx, 21)); | 593 | setFeature(cpu, .ppx, bit(leaf.edx, 21) and has_apx_save); |
| 592 | setFeature(cpu, .ndd, bit(leaf.edx, 21)); | 594 | setFeature(cpu, .ndd, bit(leaf.edx, 21) and has_apx_save); |
| 593 | setFeature(cpu, .ccmp, bit(leaf.edx, 21)); | 595 | setFeature(cpu, .ccmp, bit(leaf.edx, 21) and has_apx_save); |
| 594 | setFeature(cpu, .nf, bit(leaf.edx, 21)); | 596 | setFeature(cpu, .nf, bit(leaf.edx, 21) and has_apx_save); |
| 595 | setFeature(cpu, .cf, bit(leaf.edx, 21)); | 597 | setFeature(cpu, .cf, bit(leaf.edx, 21) and has_apx_save); |
| 596 | setFeature(cpu, .zu, bit(leaf.edx, 21)); | 598 | setFeature(cpu, .zu, bit(leaf.edx, 21) and has_apx_save); |
| 597 | } else { | 599 | } else { |
| 598 | for ([_]Target.x86.Feature{ | 600 | for ([_]Target.x86.Feature{ |
| 599 | .sha512, | 601 | .sha512, |