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};