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 crypto,
9 deprecated_v8,
10 detectroundchange,
11 fix_tn0009,
12 fix_tn0010,
13 fix_tn0011,
14 fix_tn0012,
15 fix_tn0013,
16 fixallfdivsqrt,
17 hard_quad_float,
18 hasleoncasa,
19 hasumacsmac,
20 insertnopload,
21 leon,
22 leoncyclecounter,
23 leonpwrpsr,
24 no_fmuls,
25 no_fsmuld,
26 osa2011,
27 popc,
28 reserve_g1,
29 reserve_g2,
30 reserve_g3,
31 reserve_g4,
32 reserve_g5,
33 reserve_g6,
34 reserve_g7,
35 reserve_i0,
36 reserve_i1,
37 reserve_i2,
38 reserve_i3,
39 reserve_i4,
40 reserve_i5,
41 reserve_l0,
42 reserve_l1,
43 reserve_l2,
44 reserve_l3,
45 reserve_l4,
46 reserve_l5,
47 reserve_l6,
48 reserve_l7,
49 reserve_o0,
50 reserve_o1,
51 reserve_o2,
52 reserve_o3,
53 reserve_o4,
54 reserve_o5,
55 slow_rdpc,
56 soft_float,
57 soft_mul_div,
58 ua2005,
59 ua2007,
60 v8plus,
61 v9,
62 vis,
63 vis2,
64 vis3,
65};
66
67pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
68pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas;
69pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
70pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
71
72pub const all_features = blk: {
73 const len = @typeInfo(Feature).@"enum".fields.len;
74 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
75 var result: [len]CpuFeature = undefined;
76 result[@intFromEnum(Feature.crypto)] = .{
77 .llvm_name = "crypto",
78 .description = "Enable cryptographic extensions",
79 .dependencies = featureSet(&[_]Feature{
80 .osa2011,
81 }),
82 };
83 result[@intFromEnum(Feature.deprecated_v8)] = .{
84 .llvm_name = "deprecated-v8",
85 .description = "Enable deprecated V8 instructions in V9 mode",
86 .dependencies = featureSet(&[_]Feature{}),
87 };
88 result[@intFromEnum(Feature.detectroundchange)] = .{
89 .llvm_name = "detectroundchange",
90 .description = "LEON3 erratum detection: Detects any rounding mode change request: use only the round-to-nearest rounding mode",
91 .dependencies = featureSet(&[_]Feature{}),
92 };
93 result[@intFromEnum(Feature.fix_tn0009)] = .{
94 .llvm_name = "fix-tn0009",
95 .description = "Enable workaround for errata described in GRLIB-TN-0009",
96 .dependencies = featureSet(&[_]Feature{}),
97 };
98 result[@intFromEnum(Feature.fix_tn0010)] = .{
99 .llvm_name = "fix-tn0010",
100 .description = "Enable workaround for errata described in GRLIB-TN-0010",
101 .dependencies = featureSet(&[_]Feature{}),
102 };
103 result[@intFromEnum(Feature.fix_tn0011)] = .{
104 .llvm_name = "fix-tn0011",
105 .description = "Enable workaround for errata described in GRLIB-TN-0011",
106 .dependencies = featureSet(&[_]Feature{}),
107 };
108 result[@intFromEnum(Feature.fix_tn0012)] = .{
109 .llvm_name = "fix-tn0012",
110 .description = "Enable workaround for errata described in GRLIB-TN-0012",
111 .dependencies = featureSet(&[_]Feature{}),
112 };
113 result[@intFromEnum(Feature.fix_tn0013)] = .{
114 .llvm_name = "fix-tn0013",
115 .description = "Enable workaround for errata described in GRLIB-TN-0013",
116 .dependencies = featureSet(&[_]Feature{}),
117 };
118 result[@intFromEnum(Feature.fixallfdivsqrt)] = .{
119 .llvm_name = "fixallfdivsqrt",
120 .description = "LEON erratum fix: Fix FDIVS/FDIVD/FSQRTS/FSQRTD instructions with NOPs and floating-point store",
121 .dependencies = featureSet(&[_]Feature{}),
122 };
123 result[@intFromEnum(Feature.hard_quad_float)] = .{
124 .llvm_name = "hard-quad-float",
125 .description = "Enable quad-word floating point instructions",
126 .dependencies = featureSet(&[_]Feature{}),
127 };
128 result[@intFromEnum(Feature.hasleoncasa)] = .{
129 .llvm_name = "hasleoncasa",
130 .description = "Enable CASA instruction for LEON3 and LEON4 processors",
131 .dependencies = featureSet(&[_]Feature{}),
132 };
133 result[@intFromEnum(Feature.hasumacsmac)] = .{
134 .llvm_name = "hasumacsmac",
135 .description = "Enable UMAC and SMAC for LEON3 and LEON4 processors",
136 .dependencies = featureSet(&[_]Feature{}),
137 };
138 result[@intFromEnum(Feature.insertnopload)] = .{
139 .llvm_name = "insertnopload",
140 .description = "LEON3 erratum fix: Insert a NOP instruction after every single-cycle load instruction when the next instruction is another load/store instruction",
141 .dependencies = featureSet(&[_]Feature{}),
142 };
143 result[@intFromEnum(Feature.leon)] = .{
144 .llvm_name = "leon",
145 .description = "Enable LEON extensions",
146 .dependencies = featureSet(&[_]Feature{}),
147 };
148 result[@intFromEnum(Feature.leoncyclecounter)] = .{
149 .llvm_name = "leoncyclecounter",
150 .description = "Use the Leon cycle counter register",
151 .dependencies = featureSet(&[_]Feature{}),
152 };
153 result[@intFromEnum(Feature.leonpwrpsr)] = .{
154 .llvm_name = "leonpwrpsr",
155 .description = "Enable the PWRPSR instruction",
156 .dependencies = featureSet(&[_]Feature{}),
157 };
158 result[@intFromEnum(Feature.no_fmuls)] = .{
159 .llvm_name = "no-fmuls",
160 .description = "Disable the fmuls instruction.",
161 .dependencies = featureSet(&[_]Feature{}),
162 };
163 result[@intFromEnum(Feature.no_fsmuld)] = .{
164 .llvm_name = "no-fsmuld",
165 .description = "Disable the fsmuld instruction.",
166 .dependencies = featureSet(&[_]Feature{}),
167 };
168 result[@intFromEnum(Feature.osa2011)] = .{
169 .llvm_name = "osa2011",
170 .description = "Enable Oracle SPARC Architecture 2011 extensions",
171 .dependencies = featureSet(&[_]Feature{
172 .vis,
173 .vis2,
174 .vis3,
175 }),
176 };
177 result[@intFromEnum(Feature.popc)] = .{
178 .llvm_name = "popc",
179 .description = "Use the popc (population count) instruction",
180 .dependencies = featureSet(&[_]Feature{}),
181 };
182 result[@intFromEnum(Feature.reserve_g1)] = .{
183 .llvm_name = "reserve-g1",
184 .description = "Reserve G1, making it unavailable as a GPR",
185 .dependencies = featureSet(&[_]Feature{}),
186 };
187 result[@intFromEnum(Feature.reserve_g2)] = .{
188 .llvm_name = "reserve-g2",
189 .description = "Reserve G2, making it unavailable as a GPR",
190 .dependencies = featureSet(&[_]Feature{}),
191 };
192 result[@intFromEnum(Feature.reserve_g3)] = .{
193 .llvm_name = "reserve-g3",
194 .description = "Reserve G3, making it unavailable as a GPR",
195 .dependencies = featureSet(&[_]Feature{}),
196 };
197 result[@intFromEnum(Feature.reserve_g4)] = .{
198 .llvm_name = "reserve-g4",
199 .description = "Reserve G4, making it unavailable as a GPR",
200 .dependencies = featureSet(&[_]Feature{}),
201 };
202 result[@intFromEnum(Feature.reserve_g5)] = .{
203 .llvm_name = "reserve-g5",
204 .description = "Reserve G5, making it unavailable as a GPR",
205 .dependencies = featureSet(&[_]Feature{}),
206 };
207 result[@intFromEnum(Feature.reserve_g6)] = .{
208 .llvm_name = "reserve-g6",
209 .description = "Reserve G6, making it unavailable as a GPR",
210 .dependencies = featureSet(&[_]Feature{}),
211 };
212 result[@intFromEnum(Feature.reserve_g7)] = .{
213 .llvm_name = "reserve-g7",
214 .description = "Reserve G7, making it unavailable as a GPR",
215 .dependencies = featureSet(&[_]Feature{}),
216 };
217 result[@intFromEnum(Feature.reserve_i0)] = .{
218 .llvm_name = "reserve-i0",
219 .description = "Reserve I0, making it unavailable as a GPR",
220 .dependencies = featureSet(&[_]Feature{}),
221 };
222 result[@intFromEnum(Feature.reserve_i1)] = .{
223 .llvm_name = "reserve-i1",
224 .description = "Reserve I1, making it unavailable as a GPR",
225 .dependencies = featureSet(&[_]Feature{}),
226 };
227 result[@intFromEnum(Feature.reserve_i2)] = .{
228 .llvm_name = "reserve-i2",
229 .description = "Reserve I2, making it unavailable as a GPR",
230 .dependencies = featureSet(&[_]Feature{}),
231 };
232 result[@intFromEnum(Feature.reserve_i3)] = .{
233 .llvm_name = "reserve-i3",
234 .description = "Reserve I3, making it unavailable as a GPR",
235 .dependencies = featureSet(&[_]Feature{}),
236 };
237 result[@intFromEnum(Feature.reserve_i4)] = .{
238 .llvm_name = "reserve-i4",
239 .description = "Reserve I4, making it unavailable as a GPR",
240 .dependencies = featureSet(&[_]Feature{}),
241 };
242 result[@intFromEnum(Feature.reserve_i5)] = .{
243 .llvm_name = "reserve-i5",
244 .description = "Reserve I5, making it unavailable as a GPR",
245 .dependencies = featureSet(&[_]Feature{}),
246 };
247 result[@intFromEnum(Feature.reserve_l0)] = .{
248 .llvm_name = "reserve-l0",
249 .description = "Reserve L0, making it unavailable as a GPR",
250 .dependencies = featureSet(&[_]Feature{}),
251 };
252 result[@intFromEnum(Feature.reserve_l1)] = .{
253 .llvm_name = "reserve-l1",
254 .description = "Reserve L1, making it unavailable as a GPR",
255 .dependencies = featureSet(&[_]Feature{}),
256 };
257 result[@intFromEnum(Feature.reserve_l2)] = .{
258 .llvm_name = "reserve-l2",
259 .description = "Reserve L2, making it unavailable as a GPR",
260 .dependencies = featureSet(&[_]Feature{}),
261 };
262 result[@intFromEnum(Feature.reserve_l3)] = .{
263 .llvm_name = "reserve-l3",
264 .description = "Reserve L3, making it unavailable as a GPR",
265 .dependencies = featureSet(&[_]Feature{}),
266 };
267 result[@intFromEnum(Feature.reserve_l4)] = .{
268 .llvm_name = "reserve-l4",
269 .description = "Reserve L4, making it unavailable as a GPR",
270 .dependencies = featureSet(&[_]Feature{}),
271 };
272 result[@intFromEnum(Feature.reserve_l5)] = .{
273 .llvm_name = "reserve-l5",
274 .description = "Reserve L5, making it unavailable as a GPR",
275 .dependencies = featureSet(&[_]Feature{}),
276 };
277 result[@intFromEnum(Feature.reserve_l6)] = .{
278 .llvm_name = "reserve-l6",
279 .description = "Reserve L6, making it unavailable as a GPR",
280 .dependencies = featureSet(&[_]Feature{}),
281 };
282 result[@intFromEnum(Feature.reserve_l7)] = .{
283 .llvm_name = "reserve-l7",
284 .description = "Reserve L7, making it unavailable as a GPR",
285 .dependencies = featureSet(&[_]Feature{}),
286 };
287 result[@intFromEnum(Feature.reserve_o0)] = .{
288 .llvm_name = "reserve-o0",
289 .description = "Reserve O0, making it unavailable as a GPR",
290 .dependencies = featureSet(&[_]Feature{}),
291 };
292 result[@intFromEnum(Feature.reserve_o1)] = .{
293 .llvm_name = "reserve-o1",
294 .description = "Reserve O1, making it unavailable as a GPR",
295 .dependencies = featureSet(&[_]Feature{}),
296 };
297 result[@intFromEnum(Feature.reserve_o2)] = .{
298 .llvm_name = "reserve-o2",
299 .description = "Reserve O2, making it unavailable as a GPR",
300 .dependencies = featureSet(&[_]Feature{}),
301 };
302 result[@intFromEnum(Feature.reserve_o3)] = .{
303 .llvm_name = "reserve-o3",
304 .description = "Reserve O3, making it unavailable as a GPR",
305 .dependencies = featureSet(&[_]Feature{}),
306 };
307 result[@intFromEnum(Feature.reserve_o4)] = .{
308 .llvm_name = "reserve-o4",
309 .description = "Reserve O4, making it unavailable as a GPR",
310 .dependencies = featureSet(&[_]Feature{}),
311 };
312 result[@intFromEnum(Feature.reserve_o5)] = .{
313 .llvm_name = "reserve-o5",
314 .description = "Reserve O5, making it unavailable as a GPR",
315 .dependencies = featureSet(&[_]Feature{}),
316 };
317 result[@intFromEnum(Feature.slow_rdpc)] = .{
318 .llvm_name = "slow-rdpc",
319 .description = "rd %pc, %XX is slow",
320 .dependencies = featureSet(&[_]Feature{
321 .v9,
322 }),
323 };
324 result[@intFromEnum(Feature.soft_float)] = .{
325 .llvm_name = "soft-float",
326 .description = "Use software emulation for floating point",
327 .dependencies = featureSet(&[_]Feature{}),
328 };
329 result[@intFromEnum(Feature.soft_mul_div)] = .{
330 .llvm_name = "soft-mul-div",
331 .description = "Use software emulation for integer multiply and divide",
332 .dependencies = featureSet(&[_]Feature{}),
333 };
334 result[@intFromEnum(Feature.ua2005)] = .{
335 .llvm_name = "ua2005",
336 .description = "Enable UltraSPARC Architecture 2005 extensions",
337 .dependencies = featureSet(&[_]Feature{
338 .vis,
339 .vis2,
340 }),
341 };
342 result[@intFromEnum(Feature.ua2007)] = .{
343 .llvm_name = "ua2007",
344 .description = "Enable UltraSPARC Architecture 2007 extensions",
345 .dependencies = featureSet(&[_]Feature{
346 .vis,
347 .vis2,
348 }),
349 };
350 result[@intFromEnum(Feature.v8plus)] = .{
351 .llvm_name = "v8plus",
352 .description = "Enable V8+ mode, allowing use of 64-bit V9 instructions in 32-bit code",
353 .dependencies = featureSet(&[_]Feature{}),
354 };
355 result[@intFromEnum(Feature.v9)] = .{
356 .llvm_name = "v9",
357 .description = "Enable SPARC-V9 instructions",
358 .dependencies = featureSet(&[_]Feature{}),
359 };
360 result[@intFromEnum(Feature.vis)] = .{
361 .llvm_name = "vis",
362 .description = "Enable UltraSPARC Visual Instruction Set extensions",
363 .dependencies = featureSet(&[_]Feature{
364 .v9,
365 }),
366 };
367 result[@intFromEnum(Feature.vis2)] = .{
368 .llvm_name = "vis2",
369 .description = "Enable Visual Instruction Set extensions II",
370 .dependencies = featureSet(&[_]Feature{
371 .v9,
372 }),
373 };
374 result[@intFromEnum(Feature.vis3)] = .{
375 .llvm_name = "vis3",
376 .description = "Enable Visual Instruction Set extensions III",
377 .dependencies = featureSet(&[_]Feature{
378 .v9,
379 }),
380 };
381 const ti = @typeInfo(Feature);
382 for (&result, 0..) |*elem, i| {
383 elem.index = i;
384 elem.name = ti.@"enum".fields[i].name;
385 }
386 break :blk result;
387};
388
389pub const cpu = struct {
390 pub const at697e: CpuModel = .{
391 .name = "at697e",
392 .llvm_name = "at697e",
393 .features = featureSet(&[_]Feature{
394 .insertnopload,
395 .leon,
396 }),
397 };
398 pub const at697f: CpuModel = .{
399 .name = "at697f",
400 .llvm_name = "at697f",
401 .features = featureSet(&[_]Feature{
402 .insertnopload,
403 .leon,
404 }),
405 };
406 pub const f934: CpuModel = .{
407 .name = "f934",
408 .llvm_name = "f934",
409 .features = featureSet(&[_]Feature{}),
410 };
411 pub const generic: CpuModel = .{
412 .name = "generic",
413 .llvm_name = "generic",
414 .features = featureSet(&[_]Feature{}),
415 };
416 pub const gr712rc: CpuModel = .{
417 .name = "gr712rc",
418 .llvm_name = "gr712rc",
419 .features = featureSet(&[_]Feature{
420 .hasleoncasa,
421 .leon,
422 }),
423 };
424 pub const gr740: CpuModel = .{
425 .name = "gr740",
426 .llvm_name = "gr740",
427 .features = featureSet(&[_]Feature{
428 .hasleoncasa,
429 .hasumacsmac,
430 .leon,
431 .leoncyclecounter,
432 .leonpwrpsr,
433 }),
434 };
435 pub const hypersparc: CpuModel = .{
436 .name = "hypersparc",
437 .llvm_name = "hypersparc",
438 .features = featureSet(&[_]Feature{}),
439 };
440 pub const leon2: CpuModel = .{
441 .name = "leon2",
442 .llvm_name = "leon2",
443 .features = featureSet(&[_]Feature{
444 .leon,
445 }),
446 };
447 pub const leon3: CpuModel = .{
448 .name = "leon3",
449 .llvm_name = "leon3",
450 .features = featureSet(&[_]Feature{
451 .hasumacsmac,
452 .leon,
453 }),
454 };
455 pub const leon4: CpuModel = .{
456 .name = "leon4",
457 .llvm_name = "leon4",
458 .features = featureSet(&[_]Feature{
459 .hasleoncasa,
460 .hasumacsmac,
461 .leon,
462 }),
463 };
464 pub const ma2080: CpuModel = .{
465 .name = "ma2080",
466 .llvm_name = "ma2080",
467 .features = featureSet(&[_]Feature{
468 .hasleoncasa,
469 .leon,
470 }),
471 };
472 pub const ma2085: CpuModel = .{
473 .name = "ma2085",
474 .llvm_name = "ma2085",
475 .features = featureSet(&[_]Feature{
476 .hasleoncasa,
477 .leon,
478 }),
479 };
480 pub const ma2100: CpuModel = .{
481 .name = "ma2100",
482 .llvm_name = "ma2100",
483 .features = featureSet(&[_]Feature{
484 .hasleoncasa,
485 .leon,
486 }),
487 };
488 pub const ma2150: CpuModel = .{
489 .name = "ma2150",
490 .llvm_name = "ma2150",
491 .features = featureSet(&[_]Feature{
492 .hasleoncasa,
493 .leon,
494 }),
495 };
496 pub const ma2155: CpuModel = .{
497 .name = "ma2155",
498 .llvm_name = "ma2155",
499 .features = featureSet(&[_]Feature{
500 .hasleoncasa,
501 .leon,
502 }),
503 };
504 pub const ma2450: CpuModel = .{
505 .name = "ma2450",
506 .llvm_name = "ma2450",
507 .features = featureSet(&[_]Feature{
508 .hasleoncasa,
509 .leon,
510 }),
511 };
512 pub const ma2455: CpuModel = .{
513 .name = "ma2455",
514 .llvm_name = "ma2455",
515 .features = featureSet(&[_]Feature{
516 .hasleoncasa,
517 .leon,
518 }),
519 };
520 pub const ma2480: CpuModel = .{
521 .name = "ma2480",
522 .llvm_name = "ma2480",
523 .features = featureSet(&[_]Feature{
524 .hasleoncasa,
525 .leon,
526 }),
527 };
528 pub const ma2485: CpuModel = .{
529 .name = "ma2485",
530 .llvm_name = "ma2485",
531 .features = featureSet(&[_]Feature{
532 .hasleoncasa,
533 .leon,
534 }),
535 };
536 pub const ma2x5x: CpuModel = .{
537 .name = "ma2x5x",
538 .llvm_name = "ma2x5x",
539 .features = featureSet(&[_]Feature{
540 .hasleoncasa,
541 .leon,
542 }),
543 };
544 pub const ma2x8x: CpuModel = .{
545 .name = "ma2x8x",
546 .llvm_name = "ma2x8x",
547 .features = featureSet(&[_]Feature{
548 .hasleoncasa,
549 .leon,
550 }),
551 };
552 pub const myriad2: CpuModel = .{
553 .name = "myriad2",
554 .llvm_name = "myriad2",
555 .features = featureSet(&[_]Feature{
556 .hasleoncasa,
557 .leon,
558 }),
559 };
560 pub const myriad2_1: CpuModel = .{
561 .name = "myriad2_1",
562 .llvm_name = "myriad2.1",
563 .features = featureSet(&[_]Feature{
564 .hasleoncasa,
565 .leon,
566 }),
567 };
568 pub const myriad2_2: CpuModel = .{
569 .name = "myriad2_2",
570 .llvm_name = "myriad2.2",
571 .features = featureSet(&[_]Feature{
572 .hasleoncasa,
573 .leon,
574 }),
575 };
576 pub const myriad2_3: CpuModel = .{
577 .name = "myriad2_3",
578 .llvm_name = "myriad2.3",
579 .features = featureSet(&[_]Feature{
580 .hasleoncasa,
581 .leon,
582 }),
583 };
584 pub const niagara: CpuModel = .{
585 .name = "niagara",
586 .llvm_name = "niagara",
587 .features = featureSet(&[_]Feature{
588 .deprecated_v8,
589 .ua2005,
590 }),
591 };
592 pub const niagara2: CpuModel = .{
593 .name = "niagara2",
594 .llvm_name = "niagara2",
595 .features = featureSet(&[_]Feature{
596 .deprecated_v8,
597 .popc,
598 .ua2005,
599 }),
600 };
601 pub const niagara3: CpuModel = .{
602 .name = "niagara3",
603 .llvm_name = "niagara3",
604 .features = featureSet(&[_]Feature{
605 .deprecated_v8,
606 .popc,
607 .ua2005,
608 .ua2007,
609 .vis3,
610 }),
611 };
612 pub const niagara4: CpuModel = .{
613 .name = "niagara4",
614 .llvm_name = "niagara4",
615 .features = featureSet(&[_]Feature{
616 .crypto,
617 .deprecated_v8,
618 .popc,
619 .ua2005,
620 .ua2007,
621 }),
622 };
623 pub const sparclet: CpuModel = .{
624 .name = "sparclet",
625 .llvm_name = "sparclet",
626 .features = featureSet(&[_]Feature{}),
627 };
628 pub const sparclite: CpuModel = .{
629 .name = "sparclite",
630 .llvm_name = "sparclite",
631 .features = featureSet(&[_]Feature{}),
632 };
633 pub const sparclite86x: CpuModel = .{
634 .name = "sparclite86x",
635 .llvm_name = "sparclite86x",
636 .features = featureSet(&[_]Feature{}),
637 };
638 pub const supersparc: CpuModel = .{
639 .name = "supersparc",
640 .llvm_name = "supersparc",
641 .features = featureSet(&[_]Feature{}),
642 };
643 pub const tsc701: CpuModel = .{
644 .name = "tsc701",
645 .llvm_name = "tsc701",
646 .features = featureSet(&[_]Feature{}),
647 };
648 pub const ultrasparc: CpuModel = .{
649 .name = "ultrasparc",
650 .llvm_name = "ultrasparc",
651 .features = featureSet(&[_]Feature{
652 .deprecated_v8,
653 .slow_rdpc,
654 .vis,
655 }),
656 };
657 pub const ultrasparc3: CpuModel = .{
658 .name = "ultrasparc3",
659 .llvm_name = "ultrasparc3",
660 .features = featureSet(&[_]Feature{
661 .deprecated_v8,
662 .slow_rdpc,
663 .vis,
664 .vis2,
665 }),
666 };
667 pub const ut699: CpuModel = .{
668 .name = "ut699",
669 .llvm_name = "ut699",
670 .features = featureSet(&[_]Feature{
671 .fixallfdivsqrt,
672 .insertnopload,
673 .leon,
674 .no_fmuls,
675 .no_fsmuld,
676 }),
677 };
678 pub const v7: CpuModel = .{
679 .name = "v7",
680 .llvm_name = "v7",
681 .features = featureSet(&[_]Feature{
682 .no_fsmuld,
683 .soft_mul_div,
684 }),
685 };
686 pub const v8: CpuModel = .{
687 .name = "v8",
688 .llvm_name = "v8",
689 .features = featureSet(&[_]Feature{}),
690 };
691 pub const v9: CpuModel = .{
692 .name = "v9",
693 .llvm_name = "v9",
694 .features = featureSet(&[_]Feature{
695 .v9,
696 }),
697 };
698};