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