authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-01-20 23:30:05+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-04-25 21:54:48+02:00
log13c6e227a9eb1c0d05c418132d0562033d695912
tree823c6c25d570c1acdb6f85736d466d6a4337e407
parent44004b05eff9424ebb961c3d1615a57fbbf9d481
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.zig.system.x86: require OS APX save support for APX features


1 files changed, 10 insertions(+), 8 deletions(-)

lib/std/zig/system/x86.zig+10-8
...@@ -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;
428428
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 // APX590 // 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,