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    audio,
  9    cabac,
 10    compound,
 11    duplex,
 12    hvx,
 13    hvx_ieee_fp,
 14    hvx_length128b,
 15    hvx_length64b,
 16    hvx_qfloat,
 17    hvxv60,
 18    hvxv62,
 19    hvxv65,
 20    hvxv66,
 21    hvxv67,
 22    hvxv68,
 23    hvxv69,
 24    hvxv71,
 25    hvxv73,
 26    hvxv75,
 27    hvxv79,
 28    long_calls,
 29    mem_noshuf,
 30    memops,
 31    noreturn_stack_elim,
 32    nvj,
 33    nvs,
 34    packets,
 35    prev65,
 36    reserved_r19,
 37    small_data,
 38    tinycore,
 39    unsafe_fp,
 40    v5,
 41    v55,
 42    v60,
 43    v62,
 44    v65,
 45    v66,
 46    v67,
 47    v68,
 48    v69,
 49    v71,
 50    v73,
 51    v75,
 52    v79,
 53    zreg,
 54};
 55
 56pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
 57pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas;
 58pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
 59pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
 60
 61pub const all_features = blk: {
 62    const len = @typeInfo(Feature).@"enum".fields.len;
 63    std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
 64    var result: [len]CpuFeature = undefined;
 65    result[@intFromEnum(Feature.audio)] = .{
 66        .llvm_name = "audio",
 67        .description = "Hexagon Audio extension instructions",
 68        .dependencies = featureSet(&[_]Feature{}),
 69    };
 70    result[@intFromEnum(Feature.cabac)] = .{
 71        .llvm_name = "cabac",
 72        .description = "Emit the CABAC instruction",
 73        .dependencies = featureSet(&[_]Feature{}),
 74    };
 75    result[@intFromEnum(Feature.compound)] = .{
 76        .llvm_name = "compound",
 77        .description = "Use compound instructions",
 78        .dependencies = featureSet(&[_]Feature{}),
 79    };
 80    result[@intFromEnum(Feature.duplex)] = .{
 81        .llvm_name = "duplex",
 82        .description = "Enable generation of duplex instruction",
 83        .dependencies = featureSet(&[_]Feature{}),
 84    };
 85    result[@intFromEnum(Feature.hvx)] = .{
 86        .llvm_name = "hvx",
 87        .description = "Hexagon HVX instructions",
 88        .dependencies = featureSet(&[_]Feature{}),
 89    };
 90    result[@intFromEnum(Feature.hvx_ieee_fp)] = .{
 91        .llvm_name = "hvx-ieee-fp",
 92        .description = "Hexagon HVX IEEE floating point instructions",
 93        .dependencies = featureSet(&[_]Feature{}),
 94    };
 95    result[@intFromEnum(Feature.hvx_length128b)] = .{
 96        .llvm_name = "hvx-length128b",
 97        .description = "Hexagon HVX 128B instructions",
 98        .dependencies = featureSet(&[_]Feature{
 99            .hvx,
100        }),
101    };
102    result[@intFromEnum(Feature.hvx_length64b)] = .{
103        .llvm_name = "hvx-length64b",
104        .description = "Hexagon HVX 64B instructions",
105        .dependencies = featureSet(&[_]Feature{
106            .hvx,
107        }),
108    };
109    result[@intFromEnum(Feature.hvx_qfloat)] = .{
110        .llvm_name = "hvx-qfloat",
111        .description = "Hexagon HVX QFloating point instructions",
112        .dependencies = featureSet(&[_]Feature{}),
113    };
114    result[@intFromEnum(Feature.hvxv60)] = .{
115        .llvm_name = "hvxv60",
116        .description = "Hexagon HVX instructions",
117        .dependencies = featureSet(&[_]Feature{
118            .hvx,
119        }),
120    };
121    result[@intFromEnum(Feature.hvxv62)] = .{
122        .llvm_name = "hvxv62",
123        .description = "Hexagon HVX instructions",
124        .dependencies = featureSet(&[_]Feature{
125            .hvxv60,
126        }),
127    };
128    result[@intFromEnum(Feature.hvxv65)] = .{
129        .llvm_name = "hvxv65",
130        .description = "Hexagon HVX instructions",
131        .dependencies = featureSet(&[_]Feature{
132            .hvxv62,
133        }),
134    };
135    result[@intFromEnum(Feature.hvxv66)] = .{
136        .llvm_name = "hvxv66",
137        .description = "Hexagon HVX instructions",
138        .dependencies = featureSet(&[_]Feature{
139            .hvxv65,
140            .zreg,
141        }),
142    };
143    result[@intFromEnum(Feature.hvxv67)] = .{
144        .llvm_name = "hvxv67",
145        .description = "Hexagon HVX instructions",
146        .dependencies = featureSet(&[_]Feature{
147            .hvxv66,
148        }),
149    };
150    result[@intFromEnum(Feature.hvxv68)] = .{
151        .llvm_name = "hvxv68",
152        .description = "Hexagon HVX instructions",
153        .dependencies = featureSet(&[_]Feature{
154            .hvxv67,
155        }),
156    };
157    result[@intFromEnum(Feature.hvxv69)] = .{
158        .llvm_name = "hvxv69",
159        .description = "Hexagon HVX instructions",
160        .dependencies = featureSet(&[_]Feature{
161            .hvxv68,
162        }),
163    };
164    result[@intFromEnum(Feature.hvxv71)] = .{
165        .llvm_name = "hvxv71",
166        .description = "Hexagon HVX instructions",
167        .dependencies = featureSet(&[_]Feature{
168            .hvxv69,
169        }),
170    };
171    result[@intFromEnum(Feature.hvxv73)] = .{
172        .llvm_name = "hvxv73",
173        .description = "Hexagon HVX instructions",
174        .dependencies = featureSet(&[_]Feature{
175            .hvxv71,
176        }),
177    };
178    result[@intFromEnum(Feature.hvxv75)] = .{
179        .llvm_name = "hvxv75",
180        .description = "Hexagon HVX instructions",
181        .dependencies = featureSet(&[_]Feature{
182            .hvxv73,
183        }),
184    };
185    result[@intFromEnum(Feature.hvxv79)] = .{
186        .llvm_name = "hvxv79",
187        .description = "Hexagon HVX instructions",
188        .dependencies = featureSet(&[_]Feature{
189            .hvxv75,
190        }),
191    };
192    result[@intFromEnum(Feature.long_calls)] = .{
193        .llvm_name = "long-calls",
194        .description = "Use constant-extended calls",
195        .dependencies = featureSet(&[_]Feature{}),
196    };
197    result[@intFromEnum(Feature.mem_noshuf)] = .{
198        .llvm_name = "mem_noshuf",
199        .description = "Supports mem_noshuf feature",
200        .dependencies = featureSet(&[_]Feature{}),
201    };
202    result[@intFromEnum(Feature.memops)] = .{
203        .llvm_name = "memops",
204        .description = "Use memop instructions",
205        .dependencies = featureSet(&[_]Feature{}),
206    };
207    result[@intFromEnum(Feature.noreturn_stack_elim)] = .{
208        .llvm_name = "noreturn-stack-elim",
209        .description = "Eliminate stack allocation in a noreturn function when possible",
210        .dependencies = featureSet(&[_]Feature{}),
211    };
212    result[@intFromEnum(Feature.nvj)] = .{
213        .llvm_name = "nvj",
214        .description = "Support for new-value jumps",
215        .dependencies = featureSet(&[_]Feature{
216            .packets,
217        }),
218    };
219    result[@intFromEnum(Feature.nvs)] = .{
220        .llvm_name = "nvs",
221        .description = "Support for new-value stores",
222        .dependencies = featureSet(&[_]Feature{
223            .packets,
224        }),
225    };
226    result[@intFromEnum(Feature.packets)] = .{
227        .llvm_name = "packets",
228        .description = "Support for instruction packets",
229        .dependencies = featureSet(&[_]Feature{}),
230    };
231    result[@intFromEnum(Feature.prev65)] = .{
232        .llvm_name = "prev65",
233        .description = "Support features deprecated in v65",
234        .dependencies = featureSet(&[_]Feature{}),
235    };
236    result[@intFromEnum(Feature.reserved_r19)] = .{
237        .llvm_name = "reserved-r19",
238        .description = "Reserve register R19",
239        .dependencies = featureSet(&[_]Feature{}),
240    };
241    result[@intFromEnum(Feature.small_data)] = .{
242        .llvm_name = "small-data",
243        .description = "Allow GP-relative addressing of global variables",
244        .dependencies = featureSet(&[_]Feature{}),
245    };
246    result[@intFromEnum(Feature.tinycore)] = .{
247        .llvm_name = "tinycore",
248        .description = "Hexagon Tiny Core",
249        .dependencies = featureSet(&[_]Feature{}),
250    };
251    result[@intFromEnum(Feature.unsafe_fp)] = .{
252        .llvm_name = "unsafe-fp",
253        .description = "Use unsafe FP math",
254        .dependencies = featureSet(&[_]Feature{}),
255    };
256    result[@intFromEnum(Feature.v5)] = .{
257        .llvm_name = "v5",
258        .description = "Enable Hexagon V5 architecture",
259        .dependencies = featureSet(&[_]Feature{}),
260    };
261    result[@intFromEnum(Feature.v55)] = .{
262        .llvm_name = "v55",
263        .description = "Enable Hexagon V55 architecture",
264        .dependencies = featureSet(&[_]Feature{}),
265    };
266    result[@intFromEnum(Feature.v60)] = .{
267        .llvm_name = "v60",
268        .description = "Enable Hexagon V60 architecture",
269        .dependencies = featureSet(&[_]Feature{}),
270    };
271    result[@intFromEnum(Feature.v62)] = .{
272        .llvm_name = "v62",
273        .description = "Enable Hexagon V62 architecture",
274        .dependencies = featureSet(&[_]Feature{}),
275    };
276    result[@intFromEnum(Feature.v65)] = .{
277        .llvm_name = "v65",
278        .description = "Enable Hexagon V65 architecture",
279        .dependencies = featureSet(&[_]Feature{}),
280    };
281    result[@intFromEnum(Feature.v66)] = .{
282        .llvm_name = "v66",
283        .description = "Enable Hexagon V66 architecture",
284        .dependencies = featureSet(&[_]Feature{}),
285    };
286    result[@intFromEnum(Feature.v67)] = .{
287        .llvm_name = "v67",
288        .description = "Enable Hexagon V67 architecture",
289        .dependencies = featureSet(&[_]Feature{}),
290    };
291    result[@intFromEnum(Feature.v68)] = .{
292        .llvm_name = "v68",
293        .description = "Enable Hexagon V68 architecture",
294        .dependencies = featureSet(&[_]Feature{}),
295    };
296    result[@intFromEnum(Feature.v69)] = .{
297        .llvm_name = "v69",
298        .description = "Enable Hexagon V69 architecture",
299        .dependencies = featureSet(&[_]Feature{}),
300    };
301    result[@intFromEnum(Feature.v71)] = .{
302        .llvm_name = "v71",
303        .description = "Enable Hexagon V71 architecture",
304        .dependencies = featureSet(&[_]Feature{}),
305    };
306    result[@intFromEnum(Feature.v73)] = .{
307        .llvm_name = "v73",
308        .description = "Enable Hexagon V73 architecture",
309        .dependencies = featureSet(&[_]Feature{}),
310    };
311    result[@intFromEnum(Feature.v75)] = .{
312        .llvm_name = "v75",
313        .description = "Enable Hexagon V75 architecture",
314        .dependencies = featureSet(&[_]Feature{}),
315    };
316    result[@intFromEnum(Feature.v79)] = .{
317        .llvm_name = "v79",
318        .description = "Enable Hexagon V79 architecture",
319        .dependencies = featureSet(&[_]Feature{}),
320    };
321    result[@intFromEnum(Feature.zreg)] = .{
322        .llvm_name = "zreg",
323        .description = "Hexagon ZReg extension instructions",
324        .dependencies = featureSet(&[_]Feature{}),
325    };
326    const ti = @typeInfo(Feature);
327    for (&result, 0..) |*elem, i| {
328        elem.index = i;
329        elem.name = ti.@"enum".fields[i].name;
330    }
331    break :blk result;
332};
333
334pub const cpu = struct {
335    pub const generic: CpuModel = .{
336        .name = "generic",
337        .llvm_name = "generic",
338        .features = featureSet(&[_]Feature{
339            .cabac,
340            .compound,
341            .duplex,
342            .memops,
343            .nvj,
344            .nvs,
345            .prev65,
346            .small_data,
347            .v5,
348            .v55,
349            .v60,
350        }),
351    };
352    pub const hexagonv5: CpuModel = .{
353        .name = "hexagonv5",
354        .llvm_name = "hexagonv5",
355        .features = featureSet(&[_]Feature{
356            .cabac,
357            .compound,
358            .duplex,
359            .memops,
360            .nvj,
361            .nvs,
362            .prev65,
363            .small_data,
364            .v5,
365        }),
366    };
367    pub const hexagonv55: CpuModel = .{
368        .name = "hexagonv55",
369        .llvm_name = "hexagonv55",
370        .features = featureSet(&[_]Feature{
371            .cabac,
372            .compound,
373            .duplex,
374            .memops,
375            .nvj,
376            .nvs,
377            .prev65,
378            .small_data,
379            .v5,
380            .v55,
381        }),
382    };
383    pub const hexagonv60: CpuModel = .{
384        .name = "hexagonv60",
385        .llvm_name = "hexagonv60",
386        .features = featureSet(&[_]Feature{
387            .cabac,
388            .compound,
389            .duplex,
390            .memops,
391            .nvj,
392            .nvs,
393            .prev65,
394            .small_data,
395            .v5,
396            .v55,
397            .v60,
398        }),
399    };
400    pub const hexagonv62: CpuModel = .{
401        .name = "hexagonv62",
402        .llvm_name = "hexagonv62",
403        .features = featureSet(&[_]Feature{
404            .cabac,
405            .compound,
406            .duplex,
407            .memops,
408            .nvj,
409            .nvs,
410            .prev65,
411            .small_data,
412            .v5,
413            .v55,
414            .v60,
415            .v62,
416        }),
417    };
418    pub const hexagonv65: CpuModel = .{
419        .name = "hexagonv65",
420        .llvm_name = "hexagonv65",
421        .features = featureSet(&[_]Feature{
422            .cabac,
423            .compound,
424            .duplex,
425            .mem_noshuf,
426            .memops,
427            .nvj,
428            .nvs,
429            .small_data,
430            .v5,
431            .v55,
432            .v60,
433            .v62,
434            .v65,
435        }),
436    };
437    pub const hexagonv66: CpuModel = .{
438        .name = "hexagonv66",
439        .llvm_name = "hexagonv66",
440        .features = featureSet(&[_]Feature{
441            .cabac,
442            .compound,
443            .duplex,
444            .mem_noshuf,
445            .memops,
446            .nvj,
447            .nvs,
448            .small_data,
449            .v5,
450            .v55,
451            .v60,
452            .v62,
453            .v65,
454            .v66,
455        }),
456    };
457    pub const hexagonv67: CpuModel = .{
458        .name = "hexagonv67",
459        .llvm_name = "hexagonv67",
460        .features = featureSet(&[_]Feature{
461            .cabac,
462            .compound,
463            .duplex,
464            .mem_noshuf,
465            .memops,
466            .nvj,
467            .nvs,
468            .small_data,
469            .v5,
470            .v55,
471            .v60,
472            .v62,
473            .v65,
474            .v66,
475            .v67,
476        }),
477    };
478    pub const hexagonv67t: CpuModel = .{
479        .name = "hexagonv67t",
480        .llvm_name = "hexagonv67t",
481        .features = featureSet(&[_]Feature{
482            .audio,
483            .compound,
484            .mem_noshuf,
485            .memops,
486            .nvs,
487            .small_data,
488            .tinycore,
489            .v5,
490            .v55,
491            .v60,
492            .v62,
493            .v65,
494            .v66,
495            .v67,
496        }),
497    };
498    pub const hexagonv68: CpuModel = .{
499        .name = "hexagonv68",
500        .llvm_name = "hexagonv68",
501        .features = featureSet(&[_]Feature{
502            .cabac,
503            .compound,
504            .duplex,
505            .mem_noshuf,
506            .memops,
507            .nvj,
508            .nvs,
509            .small_data,
510            .v5,
511            .v55,
512            .v60,
513            .v62,
514            .v65,
515            .v66,
516            .v67,
517            .v68,
518        }),
519    };
520    pub const hexagonv69: CpuModel = .{
521        .name = "hexagonv69",
522        .llvm_name = "hexagonv69",
523        .features = featureSet(&[_]Feature{
524            .cabac,
525            .compound,
526            .duplex,
527            .mem_noshuf,
528            .memops,
529            .nvj,
530            .nvs,
531            .small_data,
532            .v5,
533            .v55,
534            .v60,
535            .v62,
536            .v65,
537            .v66,
538            .v67,
539            .v68,
540            .v69,
541        }),
542    };
543    pub const hexagonv71: CpuModel = .{
544        .name = "hexagonv71",
545        .llvm_name = "hexagonv71",
546        .features = featureSet(&[_]Feature{
547            .cabac,
548            .compound,
549            .duplex,
550            .mem_noshuf,
551            .memops,
552            .nvj,
553            .nvs,
554            .small_data,
555            .v5,
556            .v55,
557            .v60,
558            .v62,
559            .v65,
560            .v66,
561            .v67,
562            .v68,
563            .v69,
564            .v71,
565        }),
566    };
567    pub const hexagonv71t: CpuModel = .{
568        .name = "hexagonv71t",
569        .llvm_name = "hexagonv71t",
570        .features = featureSet(&[_]Feature{
571            .audio,
572            .compound,
573            .mem_noshuf,
574            .memops,
575            .nvs,
576            .small_data,
577            .tinycore,
578            .v5,
579            .v55,
580            .v60,
581            .v62,
582            .v65,
583            .v66,
584            .v67,
585            .v68,
586            .v69,
587            .v71,
588        }),
589    };
590    pub const hexagonv73: CpuModel = .{
591        .name = "hexagonv73",
592        .llvm_name = "hexagonv73",
593        .features = featureSet(&[_]Feature{
594            .compound,
595            .duplex,
596            .mem_noshuf,
597            .memops,
598            .nvj,
599            .nvs,
600            .small_data,
601            .v5,
602            .v55,
603            .v60,
604            .v62,
605            .v65,
606            .v66,
607            .v67,
608            .v68,
609            .v69,
610            .v71,
611            .v73,
612        }),
613    };
614    pub const hexagonv75: CpuModel = .{
615        .name = "hexagonv75",
616        .llvm_name = "hexagonv75",
617        .features = featureSet(&[_]Feature{
618            .compound,
619            .duplex,
620            .mem_noshuf,
621            .memops,
622            .nvj,
623            .nvs,
624            .small_data,
625            .v5,
626            .v55,
627            .v60,
628            .v62,
629            .v65,
630            .v66,
631            .v67,
632            .v68,
633            .v69,
634            .v71,
635            .v73,
636            .v75,
637        }),
638    };
639    pub const hexagonv79: CpuModel = .{
640        .name = "hexagonv79",
641        .llvm_name = "hexagonv79",
642        .features = featureSet(&[_]Feature{
643            .compound,
644            .duplex,
645            .mem_noshuf,
646            .memops,
647            .nvj,
648            .nvs,
649            .small_data,
650            .v5,
651            .v55,
652            .v60,
653            .v62,
654            .v65,
655            .v66,
656            .v67,
657            .v68,
658            .v69,
659            .v71,
660            .v73,
661            .v75,
662            .v79,
663        }),
664    };
665};