authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-09-07 01:20:53+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-09-07 01:40:51+02:00
log96b1105ddaa12dbefa5c9f489da0c52c7e35f201
treeb770f7dd6ee46156f59c8d484e7ff0795bf40a52
parentc09af800431ccb1fc8bab6c51a966a8de3fe8b0d
signature Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.c: add HWCAP definition for freebsd, illumos, linux, openbsd


1 files changed, 125 insertions(+), 0 deletions(-)

lib/std/c.zig+125
......@@ -10537,6 +10537,131 @@ pub const sendfile = switch (native_os) {
1053710537pub extern "c" fn getauxval(type: c_ulong) c_ulong;
1053810538pub extern "c" fn elf_aux_info(aux: c_int, buf: *anyopaque, buflen: c_int) c_int;
1053910539
10540pub const HWCAP = switch (native_os) {
10541 .freebsd => switch (native_arch) {
10542 // FreeBSD deliberately matches the Linux ABI for AT_HWCAP...
10543 else => std.os.linux.HWCAP,
10544 // ... but because Linux went the SYS_riscv_hwprobe route, FreeBSD
10545 // defines more bits than Linux does:
10546 .riscv64 => struct {
10547 pub const ISA_A = 1 << 0;
10548 pub const ISA_B = 1 << 1;
10549 pub const ISA_C = 1 << 2;
10550 pub const ISA_D = 1 << 3;
10551 pub const ISA_F = 1 << 5;
10552 pub const ISA_H = 1 << 7;
10553 pub const ISA_I = 1 << 8;
10554 pub const ISA_M = 1 << 12;
10555 pub const ISA_V = 1 << 21;
10556 },
10557 },
10558 .illumos => switch (native_arch) {
10559 .x86, .x86_64 => struct {
10560 pub const FPU = 1 << 0;
10561 pub const TSC = 1 << 1;
10562 pub const CX8 = 1 << 2;
10563 pub const SEP = 1 << 3;
10564 pub const AMD_SYSC = 1 << 4;
10565 pub const CMOV = 1 << 5;
10566 pub const MMX = 1 << 6;
10567 pub const AMD_MMX = 1 << 7;
10568 pub const AMD_3DNow = 1 << 8;
10569 pub const AMD_3DNowx = 1 << 9;
10570 pub const FXSR = 1 << 10;
10571 pub const SSE = 1 << 11;
10572 pub const SSE2 = 1 << 12;
10573 pub const PAUSE = 1 << 13;
10574 pub const SSE3 = 1 << 14;
10575 pub const MON = 1 << 15;
10576 pub const CX16 = 1 << 16;
10577 pub const AHF = 1 << 17;
10578 pub const TSCP = 1 << 18;
10579 pub const AMD_SSE4A = 1 << 19;
10580 pub const POPCNT = 1 << 20;
10581 pub const AMD_LZCNT = 1 << 21;
10582 pub const SSSE3 = 1 << 22;
10583 pub const SSE4_1 = 1 << 23;
10584 pub const SSE4_2 = 1 << 24;
10585 pub const MOVBE = 1 << 25;
10586 pub const AES = 1 << 26;
10587 pub const PCLMULQDQ = 1 << 27;
10588 pub const XSAVE = 1 << 28;
10589 pub const AVX = 1 << 29;
10590 pub const VMX = 1 << 30;
10591 pub const AMD_SVM = 1 << 31;
10592
10593 pub const @"2" = struct {
10594 pub const F16C = 1 << 0;
10595 pub const RDRAND = 1 << 1;
10596 pub const BMI1 = 1 << 2;
10597 pub const BMI2 = 1 << 3;
10598 pub const FMA = 1 << 4;
10599 pub const AVX2 = 1 << 5;
10600 pub const ADX = 1 << 6;
10601 pub const RDSEED = 1 << 7;
10602 pub const AVX512F = 1 << 8;
10603 pub const AVX512DQ = 1 << 9;
10604 pub const AVX512IFMA = 1 << 10;
10605 pub const AVX512PF = 1 << 11;
10606 pub const AVX512ER = 1 << 12;
10607 pub const AVX512CD = 1 << 13;
10608 pub const AVX512BW = 1 << 14;
10609 pub const AVX512VL = 1 << 15;
10610 pub const AVX512VBMI = 1 << 16;
10611 pub const AVX512VPOPCDQ = 1 << 17;
10612 pub const AVX512_4NNIW = 1 << 18;
10613 pub const AVX512_4FMAPS = 1 << 19;
10614 pub const SHA = 1 << 20;
10615 pub const FSGSBASE = 1 << 21;
10616 pub const CLFLUSHOPT = 1 << 22;
10617 pub const CLWB = 1 << 23;
10618 pub const MONITORX = 1 << 24;
10619 pub const CLZERO = 1 << 25;
10620 pub const AVX512_VNNI = 1 << 26;
10621 pub const VPCLMULQDQ = 1 << 27;
10622 pub const VAES = 1 << 28;
10623 };
10624 },
10625 else => struct {},
10626 },
10627 .linux => std.os.linux.HWCAP,
10628 .openbsd => switch (native_arch) {
10629 // Same deal as for FreeBSD.
10630 else => std.os.linux.HWCAP,
10631 .riscv64 => struct {
10632 pub const ISA_A = 1 << 0;
10633 pub const ISA_B = 1 << 1;
10634 pub const ISA_C = 1 << 2;
10635 pub const ISA_D = 1 << 3;
10636 pub const ISA_F = 1 << 5;
10637 pub const ISA_H = 1 << 7;
10638 pub const ISA_I = 1 << 8;
10639 pub const ISA_M = 1 << 12;
10640 pub const ISA_V = 1 << 21;
10641
10642 pub const @"2" = struct {
10643 pub const ISA_ZBA = 1 << 0;
10644 pub const ISA_ZBB = 1 << 1;
10645 pub const ISA_ZBC = 1 << 2;
10646 pub const ISA_ZBS = 1 << 3;
10647 pub const ISA_ZFH = 1 << 4;
10648 pub const ISA_ZKT = 1 << 5;
10649 pub const ISA_ZVBB = 1 << 6;
10650 pub const ISA_ZVBC = 1 << 7;
10651 pub const ISA_ZVFH = 1 << 8;
10652 pub const ISA_ZVKG = 1 << 9;
10653 pub const ISA_ZVKNED = 1 << 10;
10654 pub const ISA_ZVKNHA = 1 << 11;
10655 pub const ISA_ZVKNHB = 1 << 12;
10656 pub const ISA_ZVKSED = 1 << 13;
10657 pub const ISA_ZVKSH = 1 << 14;
10658 pub const ISA_ZVKT = 1 << 15;
10659 };
10660 },
10661 },
10662 else => struct {},
10663};
10664
1054010665pub extern "c" fn dl_iterate_phdr(callback: dl_iterate_phdr_callback, data: ?*anyopaque) c_int;
1054110666
1054210667pub const sigaltstack = switch (native_os) {