mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
See: https://github.com/WebAssembly/tool-conventions/pull/235 This is not *quite* using the same features as the spec'd lime1 model because LLVM 19 doesn't have the level of feature granularity that we need for that. This will be fixed once we upgrade to LLVM 20. Part of #21818.
159 lines
5.2 KiB
Zig
159 lines
5.2 KiB
Zig
//! This file is auto-generated by tools/update_cpu_features.zig.
|
|
|
|
const std = @import("../std.zig");
|
|
const CpuFeature = std.Target.Cpu.Feature;
|
|
const CpuModel = std.Target.Cpu.Model;
|
|
|
|
pub const Feature = enum {
|
|
atomics,
|
|
bulk_memory,
|
|
exception_handling,
|
|
extended_const,
|
|
half_precision,
|
|
multimemory,
|
|
multivalue,
|
|
mutable_globals,
|
|
nontrapping_fptoint,
|
|
reference_types,
|
|
relaxed_simd,
|
|
sign_ext,
|
|
simd128,
|
|
tail_call,
|
|
};
|
|
|
|
pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
|
|
pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas;
|
|
pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
|
|
pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
|
|
|
|
pub const all_features = blk: {
|
|
const len = @typeInfo(Feature).@"enum".fields.len;
|
|
std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
|
|
var result: [len]CpuFeature = undefined;
|
|
result[@intFromEnum(Feature.atomics)] = .{
|
|
.llvm_name = "atomics",
|
|
.description = "Enable Atomics",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@intFromEnum(Feature.bulk_memory)] = .{
|
|
.llvm_name = "bulk-memory",
|
|
.description = "Enable bulk memory operations",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@intFromEnum(Feature.exception_handling)] = .{
|
|
.llvm_name = "exception-handling",
|
|
.description = "Enable Wasm exception handling",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@intFromEnum(Feature.extended_const)] = .{
|
|
.llvm_name = "extended-const",
|
|
.description = "Enable extended const expressions",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@intFromEnum(Feature.half_precision)] = .{
|
|
.llvm_name = "half-precision",
|
|
.description = "Enable half precision instructions",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@intFromEnum(Feature.multimemory)] = .{
|
|
.llvm_name = "multimemory",
|
|
.description = "Enable multiple memories",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@intFromEnum(Feature.multivalue)] = .{
|
|
.llvm_name = "multivalue",
|
|
.description = "Enable multivalue blocks, instructions, and functions",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@intFromEnum(Feature.mutable_globals)] = .{
|
|
.llvm_name = "mutable-globals",
|
|
.description = "Enable mutable globals",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@intFromEnum(Feature.nontrapping_fptoint)] = .{
|
|
.llvm_name = "nontrapping-fptoint",
|
|
.description = "Enable non-trapping float-to-int conversion operators",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@intFromEnum(Feature.reference_types)] = .{
|
|
.llvm_name = "reference-types",
|
|
.description = "Enable reference types",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@intFromEnum(Feature.relaxed_simd)] = .{
|
|
.llvm_name = "relaxed-simd",
|
|
.description = "Enable relaxed-simd instructions",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@intFromEnum(Feature.sign_ext)] = .{
|
|
.llvm_name = "sign-ext",
|
|
.description = "Enable sign extension operators",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@intFromEnum(Feature.simd128)] = .{
|
|
.llvm_name = "simd128",
|
|
.description = "Enable 128-bit SIMD",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@intFromEnum(Feature.tail_call)] = .{
|
|
.llvm_name = "tail-call",
|
|
.description = "Enable tail call instructions",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
const ti = @typeInfo(Feature);
|
|
for (&result, 0..) |*elem, i| {
|
|
elem.index = i;
|
|
elem.name = ti.@"enum".fields[i].name;
|
|
}
|
|
break :blk result;
|
|
};
|
|
|
|
pub const cpu = struct {
|
|
pub const bleeding_edge: CpuModel = .{
|
|
.name = "bleeding_edge",
|
|
.llvm_name = "bleeding-edge",
|
|
.features = featureSet(&[_]Feature{
|
|
.atomics,
|
|
.bulk_memory,
|
|
.exception_handling,
|
|
.extended_const,
|
|
.half_precision,
|
|
.multimemory,
|
|
.multivalue,
|
|
.mutable_globals,
|
|
.nontrapping_fptoint,
|
|
.reference_types,
|
|
.relaxed_simd,
|
|
.sign_ext,
|
|
.simd128,
|
|
.tail_call,
|
|
}),
|
|
};
|
|
pub const generic: CpuModel = .{
|
|
.name = "generic",
|
|
.llvm_name = "generic",
|
|
.features = featureSet(&[_]Feature{
|
|
.multivalue,
|
|
.mutable_globals,
|
|
.reference_types,
|
|
.sign_ext,
|
|
}),
|
|
};
|
|
pub const lime1: CpuModel = .{
|
|
.name = "lime1",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.bulk_memory,
|
|
.extended_const,
|
|
.multivalue,
|
|
.mutable_globals,
|
|
.nontrapping_fptoint,
|
|
.sign_ext,
|
|
}),
|
|
};
|
|
pub const mvp: CpuModel = .{
|
|
.name = "mvp",
|
|
.llvm_name = "mvp",
|
|
.features = featureSet(&[_]Feature{}),
|
|
};
|
|
};
|