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    abs2008,
  9    cnmips,
 10    cnmipsp,
 11    crc,
 12    dsp,
 13    dspr2,
 14    dspr3,
 15    eva,
 16    fp64,
 17    fpxx,
 18    ginv,
 19    gp64,
 20    i6400,
 21    i6500,
 22    long_calls,
 23    micromips,
 24    mips1,
 25    mips16,
 26    mips2,
 27    mips3,
 28    mips32,
 29    mips32r2,
 30    mips32r3,
 31    mips32r5,
 32    mips32r6,
 33    mips3_32,
 34    mips3_32r2,
 35    mips3d,
 36    mips4,
 37    mips4_32,
 38    mips4_32r2,
 39    mips5,
 40    mips5_32r2,
 41    mips64,
 42    mips64r2,
 43    mips64r3,
 44    mips64r5,
 45    mips64r6,
 46    msa,
 47    mt,
 48    nan2008,
 49    noabicalls,
 50    nomadd4,
 51    nooddspreg,
 52    p5600,
 53    ptr64,
 54    single_float,
 55    soft_float,
 56    strict_align,
 57    sym32,
 58    use_indirect_jump_hazard,
 59    use_tcc_in_div,
 60    vfpu,
 61    virt,
 62    xgot,
 63};
 64
 65pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
 66pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas;
 67pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
 68pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
 69
 70pub const all_features = blk: {
 71    const len = @typeInfo(Feature).@"enum".fields.len;
 72    std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
 73    var result: [len]CpuFeature = undefined;
 74    result[@intFromEnum(Feature.abs2008)] = .{
 75        .llvm_name = "abs2008",
 76        .description = "Disable IEEE 754-2008 abs.fmt mode",
 77        .dependencies = featureSet(&[_]Feature{}),
 78    };
 79    result[@intFromEnum(Feature.cnmips)] = .{
 80        .llvm_name = "cnmips",
 81        .description = "Octeon cnMIPS Support",
 82        .dependencies = featureSet(&[_]Feature{
 83            .mips64r2,
 84        }),
 85    };
 86    result[@intFromEnum(Feature.cnmipsp)] = .{
 87        .llvm_name = "cnmipsp",
 88        .description = "Octeon+ cnMIPS Support",
 89        .dependencies = featureSet(&[_]Feature{
 90            .cnmips,
 91        }),
 92    };
 93    result[@intFromEnum(Feature.crc)] = .{
 94        .llvm_name = "crc",
 95        .description = "Mips R6 CRC ASE",
 96        .dependencies = featureSet(&[_]Feature{}),
 97    };
 98    result[@intFromEnum(Feature.dsp)] = .{
 99        .llvm_name = "dsp",
100        .description = "Mips DSP ASE",
101        .dependencies = featureSet(&[_]Feature{}),
102    };
103    result[@intFromEnum(Feature.dspr2)] = .{
104        .llvm_name = "dspr2",
105        .description = "Mips DSP-R2 ASE",
106        .dependencies = featureSet(&[_]Feature{
107            .dsp,
108        }),
109    };
110    result[@intFromEnum(Feature.dspr3)] = .{
111        .llvm_name = "dspr3",
112        .description = "Mips DSP-R3 ASE",
113        .dependencies = featureSet(&[_]Feature{
114            .dspr2,
115        }),
116    };
117    result[@intFromEnum(Feature.eva)] = .{
118        .llvm_name = "eva",
119        .description = "Mips EVA ASE",
120        .dependencies = featureSet(&[_]Feature{}),
121    };
122    result[@intFromEnum(Feature.fp64)] = .{
123        .llvm_name = "fp64",
124        .description = "Support 64-bit FP registers",
125        .dependencies = featureSet(&[_]Feature{}),
126    };
127    result[@intFromEnum(Feature.fpxx)] = .{
128        .llvm_name = "fpxx",
129        .description = "Support for FPXX",
130        .dependencies = featureSet(&[_]Feature{}),
131    };
132    result[@intFromEnum(Feature.ginv)] = .{
133        .llvm_name = "ginv",
134        .description = "Mips Global Invalidate ASE",
135        .dependencies = featureSet(&[_]Feature{}),
136    };
137    result[@intFromEnum(Feature.gp64)] = .{
138        .llvm_name = "gp64",
139        .description = "General Purpose Registers are 64-bit wide",
140        .dependencies = featureSet(&[_]Feature{}),
141    };
142    result[@intFromEnum(Feature.i6400)] = .{
143        .llvm_name = "i6400",
144        .description = "MIPS I6400 Processor",
145        .dependencies = featureSet(&[_]Feature{
146            .mips64r6,
147            .msa,
148        }),
149    };
150    result[@intFromEnum(Feature.i6500)] = .{
151        .llvm_name = "i6500",
152        .description = "MIPS I6500 Processor",
153        .dependencies = featureSet(&[_]Feature{
154            .mips64r6,
155            .msa,
156        }),
157    };
158    result[@intFromEnum(Feature.long_calls)] = .{
159        .llvm_name = "long-calls",
160        .description = "Disable use of the jal instruction",
161        .dependencies = featureSet(&[_]Feature{}),
162    };
163    result[@intFromEnum(Feature.micromips)] = .{
164        .llvm_name = "micromips",
165        .description = "microMips mode",
166        .dependencies = featureSet(&[_]Feature{}),
167    };
168    result[@intFromEnum(Feature.mips1)] = .{
169        .llvm_name = "mips1",
170        .description = "Mips I ISA Support [highly experimental]",
171        .dependencies = featureSet(&[_]Feature{}),
172    };
173    result[@intFromEnum(Feature.mips16)] = .{
174        .llvm_name = "mips16",
175        .description = "Mips16 mode",
176        .dependencies = featureSet(&[_]Feature{}),
177    };
178    result[@intFromEnum(Feature.mips2)] = .{
179        .llvm_name = "mips2",
180        .description = "Mips II ISA Support [highly experimental]",
181        .dependencies = featureSet(&[_]Feature{
182            .mips1,
183        }),
184    };
185    result[@intFromEnum(Feature.mips3)] = .{
186        .llvm_name = "mips3",
187        .description = "MIPS III ISA Support [highly experimental]",
188        .dependencies = featureSet(&[_]Feature{
189            .fp64,
190            .gp64,
191            .mips2,
192            .mips3_32,
193            .mips3_32r2,
194        }),
195    };
196    result[@intFromEnum(Feature.mips32)] = .{
197        .llvm_name = "mips32",
198        .description = "Mips32 ISA Support",
199        .dependencies = featureSet(&[_]Feature{
200            .mips2,
201            .mips3_32,
202            .mips4_32,
203        }),
204    };
205    result[@intFromEnum(Feature.mips32r2)] = .{
206        .llvm_name = "mips32r2",
207        .description = "Mips32r2 ISA Support",
208        .dependencies = featureSet(&[_]Feature{
209            .mips32,
210            .mips3_32r2,
211            .mips4_32r2,
212            .mips5_32r2,
213        }),
214    };
215    result[@intFromEnum(Feature.mips32r3)] = .{
216        .llvm_name = "mips32r3",
217        .description = "Mips32r3 ISA Support",
218        .dependencies = featureSet(&[_]Feature{
219            .mips32r2,
220        }),
221    };
222    result[@intFromEnum(Feature.mips32r5)] = .{
223        .llvm_name = "mips32r5",
224        .description = "Mips32r5 ISA Support",
225        .dependencies = featureSet(&[_]Feature{
226            .mips32r3,
227        }),
228    };
229    result[@intFromEnum(Feature.mips32r6)] = .{
230        .llvm_name = "mips32r6",
231        .description = "Mips32r6 ISA Support [experimental]",
232        .dependencies = featureSet(&[_]Feature{
233            .abs2008,
234            .fp64,
235            .mips32r5,
236            .nan2008,
237        }),
238    };
239    result[@intFromEnum(Feature.mips3_32)] = .{
240        .llvm_name = "mips3_32",
241        .description = "Subset of MIPS-III that is also in MIPS32 [highly experimental]",
242        .dependencies = featureSet(&[_]Feature{}),
243    };
244    result[@intFromEnum(Feature.mips3_32r2)] = .{
245        .llvm_name = "mips3_32r2",
246        .description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]",
247        .dependencies = featureSet(&[_]Feature{}),
248    };
249    result[@intFromEnum(Feature.mips3d)] = .{
250        .llvm_name = "mips3d",
251        .description = "Mips 3D ASE",
252        .dependencies = featureSet(&[_]Feature{}),
253    };
254    result[@intFromEnum(Feature.mips4)] = .{
255        .llvm_name = "mips4",
256        .description = "MIPS IV ISA Support",
257        .dependencies = featureSet(&[_]Feature{
258            .mips3,
259            .mips4_32,
260            .mips4_32r2,
261        }),
262    };
263    result[@intFromEnum(Feature.mips4_32)] = .{
264        .llvm_name = "mips4_32",
265        .description = "Subset of MIPS-IV that is also in MIPS32 [highly experimental]",
266        .dependencies = featureSet(&[_]Feature{}),
267    };
268    result[@intFromEnum(Feature.mips4_32r2)] = .{
269        .llvm_name = "mips4_32r2",
270        .description = "Subset of MIPS-IV that is also in MIPS32r2 [highly experimental]",
271        .dependencies = featureSet(&[_]Feature{}),
272    };
273    result[@intFromEnum(Feature.mips5)] = .{
274        .llvm_name = "mips5",
275        .description = "MIPS V ISA Support [highly experimental]",
276        .dependencies = featureSet(&[_]Feature{
277            .mips4,
278            .mips5_32r2,
279        }),
280    };
281    result[@intFromEnum(Feature.mips5_32r2)] = .{
282        .llvm_name = "mips5_32r2",
283        .description = "Subset of MIPS-V that is also in MIPS32r2 [highly experimental]",
284        .dependencies = featureSet(&[_]Feature{}),
285    };
286    result[@intFromEnum(Feature.mips64)] = .{
287        .llvm_name = "mips64",
288        .description = "Mips64 ISA Support",
289        .dependencies = featureSet(&[_]Feature{
290            .mips32,
291            .mips5,
292        }),
293    };
294    result[@intFromEnum(Feature.mips64r2)] = .{
295        .llvm_name = "mips64r2",
296        .description = "Mips64r2 ISA Support",
297        .dependencies = featureSet(&[_]Feature{
298            .mips32r2,
299            .mips64,
300        }),
301    };
302    result[@intFromEnum(Feature.mips64r3)] = .{
303        .llvm_name = "mips64r3",
304        .description = "Mips64r3 ISA Support",
305        .dependencies = featureSet(&[_]Feature{
306            .mips32r3,
307            .mips64r2,
308        }),
309    };
310    result[@intFromEnum(Feature.mips64r5)] = .{
311        .llvm_name = "mips64r5",
312        .description = "Mips64r5 ISA Support",
313        .dependencies = featureSet(&[_]Feature{
314            .mips32r5,
315            .mips64r3,
316        }),
317    };
318    result[@intFromEnum(Feature.mips64r6)] = .{
319        .llvm_name = "mips64r6",
320        .description = "Mips64r6 ISA Support [experimental]",
321        .dependencies = featureSet(&[_]Feature{
322            .mips32r6,
323            .mips64r5,
324        }),
325    };
326    result[@intFromEnum(Feature.msa)] = .{
327        .llvm_name = "msa",
328        .description = "Mips MSA ASE",
329        .dependencies = featureSet(&[_]Feature{}),
330    };
331    result[@intFromEnum(Feature.mt)] = .{
332        .llvm_name = "mt",
333        .description = "Mips MT ASE",
334        .dependencies = featureSet(&[_]Feature{}),
335    };
336    result[@intFromEnum(Feature.nan2008)] = .{
337        .llvm_name = "nan2008",
338        .description = "IEEE 754-2008 NaN encoding",
339        .dependencies = featureSet(&[_]Feature{}),
340    };
341    result[@intFromEnum(Feature.noabicalls)] = .{
342        .llvm_name = "noabicalls",
343        .description = "Disable SVR4-style position-independent code",
344        .dependencies = featureSet(&[_]Feature{}),
345    };
346    result[@intFromEnum(Feature.nomadd4)] = .{
347        .llvm_name = "nomadd4",
348        .description = "Disable 4-operand madd.fmt and related instructions",
349        .dependencies = featureSet(&[_]Feature{}),
350    };
351    result[@intFromEnum(Feature.nooddspreg)] = .{
352        .llvm_name = "nooddspreg",
353        .description = "Disable odd numbered single-precision registers",
354        .dependencies = featureSet(&[_]Feature{}),
355    };
356    result[@intFromEnum(Feature.p5600)] = .{
357        .llvm_name = "p5600",
358        .description = "The P5600 Processor",
359        .dependencies = featureSet(&[_]Feature{
360            .mips32r5,
361        }),
362    };
363    result[@intFromEnum(Feature.ptr64)] = .{
364        .llvm_name = "ptr64",
365        .description = "Pointers are 64-bit wide",
366        .dependencies = featureSet(&[_]Feature{}),
367    };
368    result[@intFromEnum(Feature.single_float)] = .{
369        .llvm_name = "single-float",
370        .description = "Only supports single precision float",
371        .dependencies = featureSet(&[_]Feature{}),
372    };
373    result[@intFromEnum(Feature.soft_float)] = .{
374        .llvm_name = "soft-float",
375        .description = "Does not support floating point instructions",
376        .dependencies = featureSet(&[_]Feature{}),
377    };
378    result[@intFromEnum(Feature.strict_align)] = .{
379        .llvm_name = "strict-align",
380        .description = "Disable unaligned load store for r6",
381        .dependencies = featureSet(&[_]Feature{}),
382    };
383    result[@intFromEnum(Feature.sym32)] = .{
384        .llvm_name = "sym32",
385        .description = "Symbols are 32 bit on Mips64",
386        .dependencies = featureSet(&[_]Feature{}),
387    };
388    result[@intFromEnum(Feature.use_indirect_jump_hazard)] = .{
389        .llvm_name = "use-indirect-jump-hazard",
390        .description = "Use indirect jump guards to prevent certain speculation based attacks",
391        .dependencies = featureSet(&[_]Feature{}),
392    };
393    result[@intFromEnum(Feature.use_tcc_in_div)] = .{
394        .llvm_name = "use-tcc-in-div",
395        .description = "Force the assembler to use trapping",
396        .dependencies = featureSet(&[_]Feature{}),
397    };
398    result[@intFromEnum(Feature.vfpu)] = .{
399        .llvm_name = "vfpu",
400        .description = "Enable vector FPU instructions",
401        .dependencies = featureSet(&[_]Feature{}),
402    };
403    result[@intFromEnum(Feature.virt)] = .{
404        .llvm_name = "virt",
405        .description = "Mips Virtualization ASE",
406        .dependencies = featureSet(&[_]Feature{}),
407    };
408    result[@intFromEnum(Feature.xgot)] = .{
409        .llvm_name = "xgot",
410        .description = "Assume 32-bit GOT",
411        .dependencies = featureSet(&[_]Feature{}),
412    };
413    const ti = @typeInfo(Feature);
414    for (&result, 0..) |*elem, i| {
415        elem.index = i;
416        elem.name = ti.@"enum".fields[i].name;
417    }
418    break :blk result;
419};
420
421pub const cpu = struct {
422    pub const generic: CpuModel = .{
423        .name = "generic",
424        .llvm_name = "generic",
425        .features = featureSet(&[_]Feature{
426            .mips32,
427        }),
428    };
429    pub const @"i6400": CpuModel = .{
430        .name = "i6400",
431        .llvm_name = "i6400",
432        .features = featureSet(&[_]Feature{
433            .i6400,
434        }),
435    };
436    pub const @"i6500": CpuModel = .{
437        .name = "i6500",
438        .llvm_name = "i6500",
439        .features = featureSet(&[_]Feature{
440            .i6500,
441        }),
442    };
443    pub const mips1: CpuModel = .{
444        .name = "mips1",
445        .llvm_name = "mips1",
446        .features = featureSet(&[_]Feature{
447            .mips1,
448        }),
449    };
450    pub const mips2: CpuModel = .{
451        .name = "mips2",
452        .llvm_name = "mips2",
453        .features = featureSet(&[_]Feature{
454            .mips2,
455        }),
456    };
457    pub const mips3: CpuModel = .{
458        .name = "mips3",
459        .llvm_name = "mips3",
460        .features = featureSet(&[_]Feature{
461            .mips3,
462        }),
463    };
464    pub const mips32: CpuModel = .{
465        .name = "mips32",
466        .llvm_name = "mips32",
467        .features = featureSet(&[_]Feature{
468            .mips32,
469        }),
470    };
471    pub const mips32r2: CpuModel = .{
472        .name = "mips32r2",
473        .llvm_name = "mips32r2",
474        .features = featureSet(&[_]Feature{
475            .mips32r2,
476        }),
477    };
478    pub const mips32r3: CpuModel = .{
479        .name = "mips32r3",
480        .llvm_name = "mips32r3",
481        .features = featureSet(&[_]Feature{
482            .mips32r3,
483        }),
484    };
485    pub const mips32r5: CpuModel = .{
486        .name = "mips32r5",
487        .llvm_name = "mips32r5",
488        .features = featureSet(&[_]Feature{
489            .mips32r5,
490        }),
491    };
492    pub const mips32r6: CpuModel = .{
493        .name = "mips32r6",
494        .llvm_name = "mips32r6",
495        .features = featureSet(&[_]Feature{
496            .mips32r6,
497        }),
498    };
499    pub const mips4: CpuModel = .{
500        .name = "mips4",
501        .llvm_name = "mips4",
502        .features = featureSet(&[_]Feature{
503            .mips4,
504        }),
505    };
506    pub const mips5: CpuModel = .{
507        .name = "mips5",
508        .llvm_name = "mips5",
509        .features = featureSet(&[_]Feature{
510            .mips5,
511        }),
512    };
513    pub const mips64: CpuModel = .{
514        .name = "mips64",
515        .llvm_name = "mips64",
516        .features = featureSet(&[_]Feature{
517            .mips64,
518        }),
519    };
520    pub const mips64r2: CpuModel = .{
521        .name = "mips64r2",
522        .llvm_name = "mips64r2",
523        .features = featureSet(&[_]Feature{
524            .mips64r2,
525        }),
526    };
527    pub const mips64r3: CpuModel = .{
528        .name = "mips64r3",
529        .llvm_name = "mips64r3",
530        .features = featureSet(&[_]Feature{
531            .mips64r3,
532        }),
533    };
534    pub const mips64r5: CpuModel = .{
535        .name = "mips64r5",
536        .llvm_name = "mips64r5",
537        .features = featureSet(&[_]Feature{
538            .mips64r5,
539        }),
540    };
541    pub const mips64r6: CpuModel = .{
542        .name = "mips64r6",
543        .llvm_name = "mips64r6",
544        .features = featureSet(&[_]Feature{
545            .mips64r6,
546        }),
547    };
548    pub const octeon: CpuModel = .{
549        .name = "octeon",
550        .llvm_name = "octeon",
551        .features = featureSet(&[_]Feature{
552            .cnmips,
553        }),
554    };
555    pub const @"octeon+": CpuModel = .{
556        .name = "octeon+",
557        .llvm_name = "octeon+",
558        .features = featureSet(&[_]Feature{
559            .cnmipsp,
560        }),
561    };
562    pub const p5600: CpuModel = .{
563        .name = "p5600",
564        .llvm_name = "p5600",
565        .features = featureSet(&[_]Feature{
566            .p5600,
567        }),
568    };
569};