master
  1//! This file is auto-generated by tools/update_cpu_features.zig.
  2
  3const std = @import("../std.zig");
  4const CpuFeature = std.Target.Cpu.Feature;
  5const CpuModel = std.Target.Cpu.Model;
  6
  7pub const Feature = enum {
  8    atomics,
  9    bulk_memory,
 10    bulk_memory_opt,
 11    call_indirect_overlong,
 12    exception_handling,
 13    extended_const,
 14    fp16,
 15    multimemory,
 16    multivalue,
 17    mutable_globals,
 18    nontrapping_bulk_memory_len0,
 19    nontrapping_fptoint,
 20    reference_types,
 21    relaxed_simd,
 22    sign_ext,
 23    simd128,
 24    tail_call,
 25    wide_arithmetic,
 26};
 27
 28pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
 29pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas;
 30pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
 31pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
 32
 33pub const all_features = blk: {
 34    const len = @typeInfo(Feature).@"enum".fields.len;
 35    std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
 36    var result: [len]CpuFeature = undefined;
 37    result[@intFromEnum(Feature.atomics)] = .{
 38        .llvm_name = "atomics",
 39        .description = "Enable Atomics",
 40        .dependencies = featureSet(&[_]Feature{}),
 41    };
 42    result[@intFromEnum(Feature.bulk_memory)] = .{
 43        .llvm_name = "bulk-memory",
 44        .description = "Enable bulk memory operations",
 45        .dependencies = featureSet(&[_]Feature{
 46            .bulk_memory_opt,
 47        }),
 48    };
 49    result[@intFromEnum(Feature.bulk_memory_opt)] = .{
 50        .llvm_name = "bulk-memory-opt",
 51        .description = "Enable bulk memory optimization operations",
 52        .dependencies = featureSet(&[_]Feature{}),
 53    };
 54    result[@intFromEnum(Feature.call_indirect_overlong)] = .{
 55        .llvm_name = "call-indirect-overlong",
 56        .description = "Enable overlong encoding for call_indirect immediates",
 57        .dependencies = featureSet(&[_]Feature{}),
 58    };
 59    result[@intFromEnum(Feature.exception_handling)] = .{
 60        .llvm_name = "exception-handling",
 61        .description = "Enable Wasm exception handling",
 62        .dependencies = featureSet(&[_]Feature{}),
 63    };
 64    result[@intFromEnum(Feature.extended_const)] = .{
 65        .llvm_name = "extended-const",
 66        .description = "Enable extended const expressions",
 67        .dependencies = featureSet(&[_]Feature{}),
 68    };
 69    result[@intFromEnum(Feature.fp16)] = .{
 70        .llvm_name = "fp16",
 71        .description = "Enable FP16 instructions",
 72        .dependencies = featureSet(&[_]Feature{}),
 73    };
 74    result[@intFromEnum(Feature.multimemory)] = .{
 75        .llvm_name = "multimemory",
 76        .description = "Enable multiple memories",
 77        .dependencies = featureSet(&[_]Feature{}),
 78    };
 79    result[@intFromEnum(Feature.multivalue)] = .{
 80        .llvm_name = "multivalue",
 81        .description = "Enable multivalue blocks, instructions, and functions",
 82        .dependencies = featureSet(&[_]Feature{}),
 83    };
 84    result[@intFromEnum(Feature.mutable_globals)] = .{
 85        .llvm_name = "mutable-globals",
 86        .description = "Enable mutable globals",
 87        .dependencies = featureSet(&[_]Feature{}),
 88    };
 89    result[@intFromEnum(Feature.nontrapping_bulk_memory_len0)] = .{
 90        .llvm_name = null,
 91        .description = "Bulk memory operations with a zero length do not trap",
 92        .dependencies = featureSet(&[_]Feature{
 93            .bulk_memory_opt,
 94        }),
 95    };
 96    result[@intFromEnum(Feature.nontrapping_fptoint)] = .{
 97        .llvm_name = "nontrapping-fptoint",
 98        .description = "Enable non-trapping float-to-int conversion operators",
 99        .dependencies = featureSet(&[_]Feature{}),
100    };
101    result[@intFromEnum(Feature.reference_types)] = .{
102        .llvm_name = "reference-types",
103        .description = "Enable reference types",
104        .dependencies = featureSet(&[_]Feature{
105            .call_indirect_overlong,
106        }),
107    };
108    result[@intFromEnum(Feature.relaxed_simd)] = .{
109        .llvm_name = "relaxed-simd",
110        .description = "Enable relaxed-simd instructions",
111        .dependencies = featureSet(&[_]Feature{}),
112    };
113    result[@intFromEnum(Feature.sign_ext)] = .{
114        .llvm_name = "sign-ext",
115        .description = "Enable sign extension operators",
116        .dependencies = featureSet(&[_]Feature{}),
117    };
118    result[@intFromEnum(Feature.simd128)] = .{
119        .llvm_name = "simd128",
120        .description = "Enable 128-bit SIMD",
121        .dependencies = featureSet(&[_]Feature{}),
122    };
123    result[@intFromEnum(Feature.tail_call)] = .{
124        .llvm_name = "tail-call",
125        .description = "Enable tail call instructions",
126        .dependencies = featureSet(&[_]Feature{}),
127    };
128    result[@intFromEnum(Feature.wide_arithmetic)] = .{
129        .llvm_name = "wide-arithmetic",
130        .description = "Enable wide-arithmetic instructions",
131        .dependencies = featureSet(&[_]Feature{}),
132    };
133    const ti = @typeInfo(Feature);
134    for (&result, 0..) |*elem, i| {
135        elem.index = i;
136        elem.name = ti.@"enum".fields[i].name;
137    }
138    break :blk result;
139};
140
141pub const cpu = struct {
142    pub const bleeding_edge: CpuModel = .{
143        .name = "bleeding_edge",
144        .llvm_name = "bleeding-edge",
145        .features = featureSet(&[_]Feature{
146            .atomics,
147            .bulk_memory,
148            .exception_handling,
149            .extended_const,
150            .fp16,
151            .multimemory,
152            .multivalue,
153            .mutable_globals,
154            .nontrapping_fptoint,
155            .reference_types,
156            .relaxed_simd,
157            .sign_ext,
158            .simd128,
159            .tail_call,
160        }),
161    };
162    pub const generic: CpuModel = .{
163        .name = "generic",
164        .llvm_name = "generic",
165        .features = featureSet(&[_]Feature{
166            .bulk_memory,
167            .multivalue,
168            .mutable_globals,
169            .nontrapping_fptoint,
170            .reference_types,
171            .sign_ext,
172        }),
173    };
174    pub const lime1: CpuModel = .{
175        .name = "lime1",
176        .llvm_name = "lime1",
177        .features = featureSet(&[_]Feature{
178            .bulk_memory_opt,
179            .call_indirect_overlong,
180            .extended_const,
181            .multivalue,
182            .mutable_globals,
183            .nontrapping_fptoint,
184            .sign_ext,
185        }),
186    };
187    pub const mvp: CpuModel = .{
188        .name = "mvp",
189        .llvm_name = "mvp",
190        .features = featureSet(&[_]Feature{}),
191    };
192};