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 @"32bit",
9 @"32s",
10 @"64bit",
11 d,
12 div32,
13 f,
14 frecipe,
15 la_global_with_abs,
16 la_global_with_pcrel,
17 la_local_with_abs,
18 lam_bh,
19 lamcas,
20 lasx,
21 lbt,
22 ld_seq_sa,
23 lsx,
24 lvz,
25 prefer_w_inst,
26 relax,
27 scq,
28 ual,
29};
30
31pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
32pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas;
33pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
34pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
35
36pub const all_features = blk: {
37 const len = @typeInfo(Feature).@"enum".fields.len;
38 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
39 var result: [len]CpuFeature = undefined;
40 result[@intFromEnum(Feature.@"32bit")] = .{
41 .llvm_name = "32bit",
42 .description = "LA32 Basic Integer and Privilege Instruction Set",
43 .dependencies = featureSet(&[_]Feature{}),
44 };
45 result[@intFromEnum(Feature.@"32s")] = .{
46 .llvm_name = "32s",
47 .description = "LA32 Standard Basic Instruction Extension",
48 .dependencies = featureSet(&[_]Feature{}),
49 };
50 result[@intFromEnum(Feature.@"64bit")] = .{
51 .llvm_name = "64bit",
52 .description = "LA64 Basic Integer and Privilege Instruction Set",
53 .dependencies = featureSet(&[_]Feature{
54 .@"32s",
55 }),
56 };
57 result[@intFromEnum(Feature.d)] = .{
58 .llvm_name = "d",
59 .description = "'D' (Double-Precision Floating-Point)",
60 .dependencies = featureSet(&[_]Feature{
61 .f,
62 }),
63 };
64 result[@intFromEnum(Feature.div32)] = .{
65 .llvm_name = "div32",
66 .description = "Assume div.w[u] and mod.w[u] can handle inputs that are not sign-extended",
67 .dependencies = featureSet(&[_]Feature{}),
68 };
69 result[@intFromEnum(Feature.f)] = .{
70 .llvm_name = "f",
71 .description = "'F' (Single-Precision Floating-Point)",
72 .dependencies = featureSet(&[_]Feature{}),
73 };
74 result[@intFromEnum(Feature.frecipe)] = .{
75 .llvm_name = "frecipe",
76 .description = "Support frecipe.{s/d} and frsqrte.{s/d} instructions",
77 .dependencies = featureSet(&[_]Feature{}),
78 };
79 result[@intFromEnum(Feature.la_global_with_abs)] = .{
80 .llvm_name = "la-global-with-abs",
81 .description = "Expand la.global as la.abs",
82 .dependencies = featureSet(&[_]Feature{}),
83 };
84 result[@intFromEnum(Feature.la_global_with_pcrel)] = .{
85 .llvm_name = "la-global-with-pcrel",
86 .description = "Expand la.global as la.pcrel",
87 .dependencies = featureSet(&[_]Feature{}),
88 };
89 result[@intFromEnum(Feature.la_local_with_abs)] = .{
90 .llvm_name = "la-local-with-abs",
91 .description = "Expand la.local as la.abs",
92 .dependencies = featureSet(&[_]Feature{}),
93 };
94 result[@intFromEnum(Feature.lam_bh)] = .{
95 .llvm_name = "lam-bh",
96 .description = "Support amswap[_db].{b/h} and amadd[_db].{b/h} instructions",
97 .dependencies = featureSet(&[_]Feature{}),
98 };
99 result[@intFromEnum(Feature.lamcas)] = .{
100 .llvm_name = "lamcas",
101 .description = "Support amcas[_db].{b/h/w/d}",
102 .dependencies = featureSet(&[_]Feature{}),
103 };
104 result[@intFromEnum(Feature.lasx)] = .{
105 .llvm_name = "lasx",
106 .description = "'LASX' (Loongson Advanced SIMD Extension)",
107 .dependencies = featureSet(&[_]Feature{
108 .lsx,
109 }),
110 };
111 result[@intFromEnum(Feature.lbt)] = .{
112 .llvm_name = "lbt",
113 .description = "'LBT' (Loongson Binary Translation Extension)",
114 .dependencies = featureSet(&[_]Feature{}),
115 };
116 result[@intFromEnum(Feature.ld_seq_sa)] = .{
117 .llvm_name = "ld-seq-sa",
118 .description = "Don't use a same-address load-load barrier (dbar 0x700)",
119 .dependencies = featureSet(&[_]Feature{}),
120 };
121 result[@intFromEnum(Feature.lsx)] = .{
122 .llvm_name = "lsx",
123 .description = "'LSX' (Loongson SIMD Extension)",
124 .dependencies = featureSet(&[_]Feature{
125 .d,
126 }),
127 };
128 result[@intFromEnum(Feature.lvz)] = .{
129 .llvm_name = "lvz",
130 .description = "'LVZ' (Loongson Virtualization Extension)",
131 .dependencies = featureSet(&[_]Feature{}),
132 };
133 result[@intFromEnum(Feature.prefer_w_inst)] = .{
134 .llvm_name = "prefer-w-inst",
135 .description = "Prefer instructions with W suffix",
136 .dependencies = featureSet(&[_]Feature{}),
137 };
138 result[@intFromEnum(Feature.relax)] = .{
139 .llvm_name = "relax",
140 .description = "Enable Linker relaxation",
141 .dependencies = featureSet(&[_]Feature{}),
142 };
143 result[@intFromEnum(Feature.scq)] = .{
144 .llvm_name = "scq",
145 .description = "Support sc.q instruction",
146 .dependencies = featureSet(&[_]Feature{}),
147 };
148 result[@intFromEnum(Feature.ual)] = .{
149 .llvm_name = "ual",
150 .description = "Allow memory accesses to be unaligned",
151 .dependencies = featureSet(&[_]Feature{}),
152 };
153 const ti = @typeInfo(Feature);
154 for (&result, 0..) |*elem, i| {
155 elem.index = i;
156 elem.name = ti.@"enum".fields[i].name;
157 }
158 break :blk result;
159};
160
161pub const cpu = struct {
162 pub const generic_la32: CpuModel = .{
163 .name = "generic_la32",
164 .llvm_name = "generic-la32",
165 .features = featureSet(&[_]Feature{
166 .@"32bit",
167 }),
168 };
169 pub const generic_la64: CpuModel = .{
170 .name = "generic_la64",
171 .llvm_name = "generic-la64",
172 .features = featureSet(&[_]Feature{
173 .@"64bit",
174 .lsx,
175 .ual,
176 }),
177 };
178 pub const la464: CpuModel = .{
179 .name = "la464",
180 .llvm_name = "la464",
181 .features = featureSet(&[_]Feature{
182 .@"64bit",
183 .lasx,
184 .lbt,
185 .lvz,
186 .ual,
187 }),
188 };
189 pub const la64v1_0: CpuModel = .{
190 .name = "la64v1_0",
191 .llvm_name = null,
192 .features = featureSet(&[_]Feature{
193 .@"64bit",
194 .lsx,
195 .ual,
196 }),
197 };
198 pub const la64v1_1: CpuModel = .{
199 .name = "la64v1_1",
200 .llvm_name = null,
201 .features = featureSet(&[_]Feature{
202 .@"64bit",
203 .div32,
204 .frecipe,
205 .lam_bh,
206 .lamcas,
207 .ld_seq_sa,
208 .lsx,
209 .scq,
210 .ual,
211 }),
212 };
213 pub const la664: CpuModel = .{
214 .name = "la664",
215 .llvm_name = "la664",
216 .features = featureSet(&[_]Feature{
217 .@"64bit",
218 .div32,
219 .frecipe,
220 .lam_bh,
221 .lamcas,
222 .lasx,
223 .lbt,
224 .ld_seq_sa,
225 .lvz,
226 .scq,
227 .ual,
228 }),
229 };
230};