mirror of
https://github.com/ziglang/zig.git
synced 2025-12-24 07:03:11 +00:00
LLVM 18 std lib updates and fixes
* some manual fixes to generated CPU features code. In the future it would be nice to make the script do those automatically. * add to various target OS switches. Some of the values I was unsure of and added TODO panics, for example in the case of spirv CPU arch.
This commit is contained in:
parent
109ec72924
commit
d34fae26d5
@ -169,6 +169,7 @@ pub const Os = struct {
|
||||
.vulkan,
|
||||
.plan9,
|
||||
.illumos,
|
||||
.serenity,
|
||||
.other,
|
||||
=> .none,
|
||||
|
||||
@ -177,6 +178,7 @@ pub const Os = struct {
|
||||
.ios,
|
||||
.tvos,
|
||||
.watchos,
|
||||
.xros,
|
||||
.netbsd,
|
||||
.openbsd,
|
||||
.dragonfly,
|
||||
@ -389,6 +391,7 @@ pub const Os = struct {
|
||||
.vulkan,
|
||||
.plan9,
|
||||
.illumos,
|
||||
.serenity,
|
||||
.other,
|
||||
=> .{ .none = {} },
|
||||
|
||||
@ -431,6 +434,7 @@ pub const Os = struct {
|
||||
.max = .{ .major = 17, .minor = 1, .patch = 0 },
|
||||
},
|
||||
},
|
||||
.xros => @panic("TODO what version is xros on right now?"),
|
||||
.netbsd => .{
|
||||
.semver = .{
|
||||
.min = .{ .major = 8, .minor = 0, .patch = 0 },
|
||||
@ -527,11 +531,13 @@ pub const Os = struct {
|
||||
.ios,
|
||||
.tvos,
|
||||
.watchos,
|
||||
.xros,
|
||||
.dragonfly,
|
||||
.openbsd,
|
||||
.haiku,
|
||||
.solaris,
|
||||
.illumos,
|
||||
.serenity,
|
||||
=> true,
|
||||
|
||||
.linux,
|
||||
@ -685,11 +691,13 @@ pub const Abi = enum {
|
||||
.ios,
|
||||
.tvos,
|
||||
.watchos,
|
||||
.xros,
|
||||
.driverkit,
|
||||
.shadermodel,
|
||||
.liteos, // TODO: audit this
|
||||
.solaris,
|
||||
.illumos,
|
||||
.serenity,
|
||||
=> .none,
|
||||
};
|
||||
}
|
||||
@ -1179,6 +1187,7 @@ pub const Cpu = struct {
|
||||
.s390x => .S390,
|
||||
.ve => .NONE,
|
||||
.spu_2 => .SPU_2,
|
||||
.spirv => .NONE,
|
||||
.spirv32 => .NONE,
|
||||
.spirv64 => .NONE,
|
||||
.loongarch32 => .NONE,
|
||||
@ -1295,6 +1304,7 @@ pub const Cpu = struct {
|
||||
.ve,
|
||||
.spu_2,
|
||||
// GPU bitness is opaque. For now, assume little endian.
|
||||
.spirv,
|
||||
.spirv32,
|
||||
.spirv64,
|
||||
.dxil,
|
||||
@ -1419,6 +1429,7 @@ pub const Cpu = struct {
|
||||
}
|
||||
|
||||
fn allCpusFromDecls(comptime cpus: type) []const *const Cpu.Model {
|
||||
@setEvalBranchQuota(2000);
|
||||
const decls = @typeInfo(cpus).Struct.decls;
|
||||
var array: [decls.len]*const Cpu.Model = undefined;
|
||||
for (decls, 0..) |decl, i| {
|
||||
@ -1753,6 +1764,7 @@ pub const DynamicLinker = struct {
|
||||
.nvptx64,
|
||||
.spu_2,
|
||||
.avr,
|
||||
.spirv,
|
||||
.spirv32,
|
||||
.spirv64,
|
||||
=> none,
|
||||
@ -1794,6 +1806,7 @@ pub const DynamicLinker = struct {
|
||||
.tvos,
|
||||
.watchos,
|
||||
.macos,
|
||||
.xros,
|
||||
=> init("/usr/lib/dyld"),
|
||||
|
||||
// Operating systems in this list have been verified as not having a standard
|
||||
@ -1808,6 +1821,7 @@ pub const DynamicLinker = struct {
|
||||
.vulkan,
|
||||
.other,
|
||||
.plan9,
|
||||
.serenity,
|
||||
=> none,
|
||||
|
||||
// TODO revisit when multi-arch for Haiku is available
|
||||
@ -1921,6 +1935,7 @@ pub fn maxIntAlignment(target: Target) u16 {
|
||||
.spir,
|
||||
.kalimba,
|
||||
.renderscript32,
|
||||
.spirv,
|
||||
.spirv32,
|
||||
.shave,
|
||||
.le64,
|
||||
@ -2012,6 +2027,8 @@ pub fn ptrBitWidth_cpu_abi(cpu: Cpu, abi: Abi) u16 {
|
||||
=> 64,
|
||||
|
||||
.sparc => if (std.Target.sparc.featureSetHas(cpu.features, .v9)) 64 else 32,
|
||||
|
||||
.spirv => @panic("TODO what should this value be?"),
|
||||
};
|
||||
}
|
||||
|
||||
@ -2360,7 +2377,7 @@ pub fn c_type_bit_size(target: Target, c_type: CType) u16 {
|
||||
},
|
||||
},
|
||||
|
||||
.macos, .ios, .tvos, .watchos => switch (c_type) {
|
||||
.macos, .ios, .tvos, .watchos, .xros => switch (c_type) {
|
||||
.char => return 8,
|
||||
.short, .ushort => return 16,
|
||||
.int, .uint, .float => return 32,
|
||||
@ -2440,6 +2457,7 @@ pub fn c_type_bit_size(target: Target, c_type: CType) u16 {
|
||||
.driverkit,
|
||||
.shadermodel,
|
||||
.liteos,
|
||||
.serenity,
|
||||
=> @panic("TODO specify the C integer and float type sizes for this OS"),
|
||||
}
|
||||
}
|
||||
@ -2547,6 +2565,8 @@ pub fn c_type_alignment(target: Target, c_type: CType) u16 {
|
||||
.wasm32,
|
||||
.wasm64,
|
||||
=> 16,
|
||||
|
||||
.spirv => @panic("TODO what should this value be?"),
|
||||
}),
|
||||
);
|
||||
}
|
||||
@ -2673,6 +2693,8 @@ pub fn c_type_preferred_alignment(target: Target, c_type: CType) u16 {
|
||||
.wasm32,
|
||||
.wasm64,
|
||||
=> 16,
|
||||
|
||||
.spirv => @panic("TODO what should this value be?"),
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
@ -187,7 +187,6 @@ pub const Feature = enum {
|
||||
v9_3a,
|
||||
v9_4a,
|
||||
v9_5a,
|
||||
v9_5a,
|
||||
v9a,
|
||||
vfp2,
|
||||
vfp2sp,
|
||||
|
||||
@ -1523,85 +1523,6 @@ pub const cpu = struct {
|
||||
.xsaves,
|
||||
}),
|
||||
};
|
||||
pub const arrowlake_s = CpuModel{
|
||||
.name = "arrowlake_s",
|
||||
.llvm_name = "arrowlake_s",
|
||||
.features = featureSet(&[_]Feature{
|
||||
.@"64bit",
|
||||
.adx,
|
||||
.allow_light_256_bit,
|
||||
.avxifma,
|
||||
.avxneconvert,
|
||||
.avxvnni,
|
||||
.avxvnniint16,
|
||||
.avxvnniint8,
|
||||
.bmi,
|
||||
.bmi2,
|
||||
.cldemote,
|
||||
.clflushopt,
|
||||
.clwb,
|
||||
.cmov,
|
||||
.cmpccxadd,
|
||||
.crc32,
|
||||
.cx16,
|
||||
.enqcmd,
|
||||
.f16c,
|
||||
.false_deps_perm,
|
||||
.false_deps_popcnt,
|
||||
.fast_15bytenop,
|
||||
.fast_gather,
|
||||
.fast_scalar_fsqrt,
|
||||
.fast_shld_rotate,
|
||||
.fast_variable_crosslane_shuffle,
|
||||
.fast_variable_perlane_shuffle,
|
||||
.fast_vector_fsqrt,
|
||||
.fma,
|
||||
.fsgsbase,
|
||||
.fxsr,
|
||||
.gfni,
|
||||
.hreset,
|
||||
.idivq_to_divl,
|
||||
.invpcid,
|
||||
.lzcnt,
|
||||
.macrofusion,
|
||||
.mmx,
|
||||
.movbe,
|
||||
.movdir64b,
|
||||
.movdiri,
|
||||
.no_bypass_delay_blend,
|
||||
.no_bypass_delay_mov,
|
||||
.no_bypass_delay_shuffle,
|
||||
.nopl,
|
||||
.pconfig,
|
||||
.pku,
|
||||
.popcnt,
|
||||
.prefer_movmsk_over_vtest,
|
||||
.prfchw,
|
||||
.ptwrite,
|
||||
.rdpid,
|
||||
.rdrnd,
|
||||
.rdseed,
|
||||
.sahf,
|
||||
.serialize,
|
||||
.sha,
|
||||
.sha512,
|
||||
.shstk,
|
||||
.slow_3ops_lea,
|
||||
.sm3,
|
||||
.sm4,
|
||||
.tuning_fast_imm_vector_shift,
|
||||
.uintr,
|
||||
.vaes,
|
||||
.vpclmulqdq,
|
||||
.vzeroupper,
|
||||
.waitpkg,
|
||||
.widekl,
|
||||
.x87,
|
||||
.xsavec,
|
||||
.xsaveopt,
|
||||
.xsaves,
|
||||
}),
|
||||
};
|
||||
pub const athlon = CpuModel{
|
||||
.name = "athlon",
|
||||
.llvm_name = "athlon",
|
||||
|
||||
@ -5976,6 +5976,8 @@ pub fn atomicPtrAlignment(
|
||||
=> 128,
|
||||
|
||||
.x86_64 => if (std.Target.x86.featureSetHas(target.cpu.features, .cx16)) 128 else 64,
|
||||
|
||||
.spirv => @panic("TODO what should this value be?"),
|
||||
};
|
||||
|
||||
const int_ty = switch (ty.zigTypeTag(mod)) {
|
||||
|
||||
@ -92,6 +92,7 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 {
|
||||
.hsail64 => "hsail64",
|
||||
.spir => "spir",
|
||||
.spir64 => "spir64",
|
||||
.spirv => "spirv",
|
||||
.spirv32 => "spirv32",
|
||||
.spirv64 => "spirv64",
|
||||
.kalimba => "kalimba",
|
||||
@ -109,8 +110,6 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 {
|
||||
|
||||
const llvm_os = switch (target.os.tag) {
|
||||
.freestanding => "unknown",
|
||||
.ananas => "ananas",
|
||||
.cloudabi => "cloudabi",
|
||||
.dragonfly => "dragonfly",
|
||||
.freebsd => "freebsd",
|
||||
.fuchsia => "fuchsia",
|
||||
@ -123,7 +122,6 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 {
|
||||
.windows => "windows",
|
||||
.zos => "zos",
|
||||
.haiku => "haiku",
|
||||
.minix => "minix",
|
||||
.rtems => "rtems",
|
||||
.nacl => "nacl",
|
||||
.aix => "aix",
|
||||
@ -134,7 +132,6 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 {
|
||||
.ps5 => "ps5",
|
||||
.elfiamcu => "elfiamcu",
|
||||
.mesa3d => "mesa3d",
|
||||
.contiki => "contiki",
|
||||
.amdpal => "amdpal",
|
||||
.hermit => "hermit",
|
||||
.hurd => "hurd",
|
||||
@ -148,10 +145,17 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 {
|
||||
.driverkit => "driverkit",
|
||||
.shadermodel => "shadermodel",
|
||||
.liteos => "liteos",
|
||||
.xros => "xros",
|
||||
.serenity => "serenity",
|
||||
.vulkan => "vulkan",
|
||||
|
||||
.opencl,
|
||||
.glsl450,
|
||||
.vulkan,
|
||||
.plan9,
|
||||
.ananas,
|
||||
.cloudabi,
|
||||
.minix,
|
||||
.contiki,
|
||||
.other,
|
||||
=> "unknown",
|
||||
};
|
||||
@ -216,10 +220,18 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 {
|
||||
|
||||
pub fn targetOs(os_tag: std.Target.Os.Tag) llvm.OSType {
|
||||
return switch (os_tag) {
|
||||
.freestanding, .other, .opencl, .glsl450, .vulkan, .plan9 => .UnknownOS,
|
||||
.freestanding,
|
||||
.other,
|
||||
.opencl,
|
||||
.glsl450,
|
||||
.plan9,
|
||||
.ananas,
|
||||
.cloudabi,
|
||||
.minix,
|
||||
.contiki,
|
||||
=> .UnknownOS,
|
||||
|
||||
.windows, .uefi => .Win32,
|
||||
.ananas => .Ananas,
|
||||
.cloudabi => .CloudABI,
|
||||
.dragonfly => .DragonFly,
|
||||
.freebsd => .FreeBSD,
|
||||
.fuchsia => .Fuchsia,
|
||||
@ -233,7 +245,6 @@ pub fn targetOs(os_tag: std.Target.Os.Tag) llvm.OSType {
|
||||
.solaris, .illumos => .Solaris,
|
||||
.zos => .ZOS,
|
||||
.haiku => .Haiku,
|
||||
.minix => .Minix,
|
||||
.rtems => .RTEMS,
|
||||
.nacl => .NaCl,
|
||||
.aix => .AIX,
|
||||
@ -245,8 +256,8 @@ pub fn targetOs(os_tag: std.Target.Os.Tag) llvm.OSType {
|
||||
.elfiamcu => .ELFIAMCU,
|
||||
.tvos => .TvOS,
|
||||
.watchos => .WatchOS,
|
||||
.xros => .XROS,
|
||||
.mesa3d => .Mesa3D,
|
||||
.contiki => .Contiki,
|
||||
.amdpal => .AMDPAL,
|
||||
.hermit => .HermitCore,
|
||||
.hurd => .Hurd,
|
||||
@ -255,6 +266,8 @@ pub fn targetOs(os_tag: std.Target.Os.Tag) llvm.OSType {
|
||||
.driverkit => .DriverKit,
|
||||
.shadermodel => .ShaderModel,
|
||||
.liteos => .LiteOS,
|
||||
.vulkan => .Vulkan,
|
||||
.serenity => .Serenity,
|
||||
};
|
||||
}
|
||||
|
||||
@ -310,6 +323,9 @@ pub fn targetArch(arch_tag: std.Target.Cpu.Arch) llvm.ArchType {
|
||||
.hsail64 => .hsail64,
|
||||
.spir => .spir,
|
||||
.spir64 => .spir64,
|
||||
.spirv => .spirv,
|
||||
.spirv32 => .spirv32,
|
||||
.spirv64 => .spirv64,
|
||||
.kalimba => .kalimba,
|
||||
.shave => .shave,
|
||||
.lanai => .lanai,
|
||||
@ -318,7 +334,7 @@ pub fn targetArch(arch_tag: std.Target.Cpu.Arch) llvm.ArchType {
|
||||
.renderscript32 => .renderscript32,
|
||||
.renderscript64 => .renderscript64,
|
||||
.ve => .ve,
|
||||
.spu_2, .spirv32, .spirv64 => .UnknownArch,
|
||||
.spu_2 => .UnknownArch,
|
||||
};
|
||||
}
|
||||
|
||||
@ -11969,6 +11985,9 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void {
|
||||
.shave,
|
||||
.spir,
|
||||
.spir64,
|
||||
.spirv,
|
||||
.spirv32,
|
||||
.spirv64,
|
||||
.kalimba,
|
||||
.renderscript32,
|
||||
.renderscript64,
|
||||
@ -11978,7 +11997,5 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void {
|
||||
=> {},
|
||||
|
||||
.spu_2 => unreachable, // LLVM does not support this backend
|
||||
.spirv32 => unreachable, // LLVM does not support this backend
|
||||
.spirv64 => unreachable, // LLVM does not support this backend
|
||||
}
|
||||
}
|
||||
|
||||
@ -159,6 +159,7 @@ pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool {
|
||||
.hsail64,
|
||||
.spir,
|
||||
.spir64,
|
||||
.spirv,
|
||||
.spirv32,
|
||||
.spirv64,
|
||||
.kalimba,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user