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 ptx32,
9 ptx40,
10 ptx41,
11 ptx42,
12 ptx43,
13 ptx50,
14 ptx60,
15 ptx61,
16 ptx62,
17 ptx63,
18 ptx64,
19 ptx65,
20 ptx70,
21 ptx71,
22 ptx72,
23 ptx73,
24 ptx74,
25 ptx75,
26 ptx76,
27 ptx77,
28 ptx78,
29 ptx80,
30 ptx81,
31 ptx82,
32 ptx83,
33 ptx84,
34 ptx85,
35 ptx86,
36 ptx87,
37 ptx88,
38 sm_100,
39 sm_100a,
40 sm_100f,
41 sm_101,
42 sm_101a,
43 sm_101f,
44 sm_103,
45 sm_103a,
46 sm_103f,
47 sm_120,
48 sm_120a,
49 sm_120f,
50 sm_121,
51 sm_121a,
52 sm_121f,
53 sm_20,
54 sm_21,
55 sm_30,
56 sm_32,
57 sm_35,
58 sm_37,
59 sm_50,
60 sm_52,
61 sm_53,
62 sm_60,
63 sm_61,
64 sm_62,
65 sm_70,
66 sm_72,
67 sm_75,
68 sm_80,
69 sm_86,
70 sm_87,
71 sm_89,
72 sm_90,
73 sm_90a,
74};
75
76pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
77pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas;
78pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
79pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
80
81pub const all_features = blk: {
82 const len = @typeInfo(Feature).@"enum".fields.len;
83 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
84 var result: [len]CpuFeature = undefined;
85 result[@intFromEnum(Feature.ptx32)] = .{
86 .llvm_name = "ptx32",
87 .description = "Use PTX version 32",
88 .dependencies = featureSet(&[_]Feature{}),
89 };
90 result[@intFromEnum(Feature.ptx40)] = .{
91 .llvm_name = "ptx40",
92 .description = "Use PTX version 40",
93 .dependencies = featureSet(&[_]Feature{}),
94 };
95 result[@intFromEnum(Feature.ptx41)] = .{
96 .llvm_name = "ptx41",
97 .description = "Use PTX version 41",
98 .dependencies = featureSet(&[_]Feature{}),
99 };
100 result[@intFromEnum(Feature.ptx42)] = .{
101 .llvm_name = "ptx42",
102 .description = "Use PTX version 42",
103 .dependencies = featureSet(&[_]Feature{}),
104 };
105 result[@intFromEnum(Feature.ptx43)] = .{
106 .llvm_name = "ptx43",
107 .description = "Use PTX version 43",
108 .dependencies = featureSet(&[_]Feature{}),
109 };
110 result[@intFromEnum(Feature.ptx50)] = .{
111 .llvm_name = "ptx50",
112 .description = "Use PTX version 50",
113 .dependencies = featureSet(&[_]Feature{}),
114 };
115 result[@intFromEnum(Feature.ptx60)] = .{
116 .llvm_name = "ptx60",
117 .description = "Use PTX version 60",
118 .dependencies = featureSet(&[_]Feature{}),
119 };
120 result[@intFromEnum(Feature.ptx61)] = .{
121 .llvm_name = "ptx61",
122 .description = "Use PTX version 61",
123 .dependencies = featureSet(&[_]Feature{}),
124 };
125 result[@intFromEnum(Feature.ptx62)] = .{
126 .llvm_name = "ptx62",
127 .description = "Use PTX version 62",
128 .dependencies = featureSet(&[_]Feature{}),
129 };
130 result[@intFromEnum(Feature.ptx63)] = .{
131 .llvm_name = "ptx63",
132 .description = "Use PTX version 63",
133 .dependencies = featureSet(&[_]Feature{}),
134 };
135 result[@intFromEnum(Feature.ptx64)] = .{
136 .llvm_name = "ptx64",
137 .description = "Use PTX version 64",
138 .dependencies = featureSet(&[_]Feature{}),
139 };
140 result[@intFromEnum(Feature.ptx65)] = .{
141 .llvm_name = "ptx65",
142 .description = "Use PTX version 65",
143 .dependencies = featureSet(&[_]Feature{}),
144 };
145 result[@intFromEnum(Feature.ptx70)] = .{
146 .llvm_name = "ptx70",
147 .description = "Use PTX version 70",
148 .dependencies = featureSet(&[_]Feature{}),
149 };
150 result[@intFromEnum(Feature.ptx71)] = .{
151 .llvm_name = "ptx71",
152 .description = "Use PTX version 71",
153 .dependencies = featureSet(&[_]Feature{}),
154 };
155 result[@intFromEnum(Feature.ptx72)] = .{
156 .llvm_name = "ptx72",
157 .description = "Use PTX version 72",
158 .dependencies = featureSet(&[_]Feature{}),
159 };
160 result[@intFromEnum(Feature.ptx73)] = .{
161 .llvm_name = "ptx73",
162 .description = "Use PTX version 73",
163 .dependencies = featureSet(&[_]Feature{}),
164 };
165 result[@intFromEnum(Feature.ptx74)] = .{
166 .llvm_name = "ptx74",
167 .description = "Use PTX version 74",
168 .dependencies = featureSet(&[_]Feature{}),
169 };
170 result[@intFromEnum(Feature.ptx75)] = .{
171 .llvm_name = "ptx75",
172 .description = "Use PTX version 75",
173 .dependencies = featureSet(&[_]Feature{}),
174 };
175 result[@intFromEnum(Feature.ptx76)] = .{
176 .llvm_name = "ptx76",
177 .description = "Use PTX version 76",
178 .dependencies = featureSet(&[_]Feature{}),
179 };
180 result[@intFromEnum(Feature.ptx77)] = .{
181 .llvm_name = "ptx77",
182 .description = "Use PTX version 77",
183 .dependencies = featureSet(&[_]Feature{}),
184 };
185 result[@intFromEnum(Feature.ptx78)] = .{
186 .llvm_name = "ptx78",
187 .description = "Use PTX version 78",
188 .dependencies = featureSet(&[_]Feature{}),
189 };
190 result[@intFromEnum(Feature.ptx80)] = .{
191 .llvm_name = "ptx80",
192 .description = "Use PTX version 80",
193 .dependencies = featureSet(&[_]Feature{}),
194 };
195 result[@intFromEnum(Feature.ptx81)] = .{
196 .llvm_name = "ptx81",
197 .description = "Use PTX version 81",
198 .dependencies = featureSet(&[_]Feature{}),
199 };
200 result[@intFromEnum(Feature.ptx82)] = .{
201 .llvm_name = "ptx82",
202 .description = "Use PTX version 82",
203 .dependencies = featureSet(&[_]Feature{}),
204 };
205 result[@intFromEnum(Feature.ptx83)] = .{
206 .llvm_name = "ptx83",
207 .description = "Use PTX version 83",
208 .dependencies = featureSet(&[_]Feature{}),
209 };
210 result[@intFromEnum(Feature.ptx84)] = .{
211 .llvm_name = "ptx84",
212 .description = "Use PTX version 84",
213 .dependencies = featureSet(&[_]Feature{}),
214 };
215 result[@intFromEnum(Feature.ptx85)] = .{
216 .llvm_name = "ptx85",
217 .description = "Use PTX version 85",
218 .dependencies = featureSet(&[_]Feature{}),
219 };
220 result[@intFromEnum(Feature.ptx86)] = .{
221 .llvm_name = "ptx86",
222 .description = "Use PTX version 86",
223 .dependencies = featureSet(&[_]Feature{}),
224 };
225 result[@intFromEnum(Feature.ptx87)] = .{
226 .llvm_name = "ptx87",
227 .description = "Use PTX version 87",
228 .dependencies = featureSet(&[_]Feature{}),
229 };
230 result[@intFromEnum(Feature.ptx88)] = .{
231 .llvm_name = "ptx88",
232 .description = "Use PTX version 88",
233 .dependencies = featureSet(&[_]Feature{}),
234 };
235 result[@intFromEnum(Feature.sm_100)] = .{
236 .llvm_name = "sm_100",
237 .description = "Target SM 100",
238 .dependencies = featureSet(&[_]Feature{}),
239 };
240 result[@intFromEnum(Feature.sm_100a)] = .{
241 .llvm_name = "sm_100a",
242 .description = "Target SM 100a",
243 .dependencies = featureSet(&[_]Feature{}),
244 };
245 result[@intFromEnum(Feature.sm_100f)] = .{
246 .llvm_name = "sm_100f",
247 .description = "Target SM 100f",
248 .dependencies = featureSet(&[_]Feature{}),
249 };
250 result[@intFromEnum(Feature.sm_101)] = .{
251 .llvm_name = "sm_101",
252 .description = "Target SM 101",
253 .dependencies = featureSet(&[_]Feature{}),
254 };
255 result[@intFromEnum(Feature.sm_101a)] = .{
256 .llvm_name = "sm_101a",
257 .description = "Target SM 101a",
258 .dependencies = featureSet(&[_]Feature{}),
259 };
260 result[@intFromEnum(Feature.sm_101f)] = .{
261 .llvm_name = "sm_101f",
262 .description = "Target SM 101f",
263 .dependencies = featureSet(&[_]Feature{}),
264 };
265 result[@intFromEnum(Feature.sm_103)] = .{
266 .llvm_name = "sm_103",
267 .description = "Target SM 103",
268 .dependencies = featureSet(&[_]Feature{}),
269 };
270 result[@intFromEnum(Feature.sm_103a)] = .{
271 .llvm_name = "sm_103a",
272 .description = "Target SM 103a",
273 .dependencies = featureSet(&[_]Feature{}),
274 };
275 result[@intFromEnum(Feature.sm_103f)] = .{
276 .llvm_name = "sm_103f",
277 .description = "Target SM 103f",
278 .dependencies = featureSet(&[_]Feature{}),
279 };
280 result[@intFromEnum(Feature.sm_120)] = .{
281 .llvm_name = "sm_120",
282 .description = "Target SM 120",
283 .dependencies = featureSet(&[_]Feature{}),
284 };
285 result[@intFromEnum(Feature.sm_120a)] = .{
286 .llvm_name = "sm_120a",
287 .description = "Target SM 120a",
288 .dependencies = featureSet(&[_]Feature{}),
289 };
290 result[@intFromEnum(Feature.sm_120f)] = .{
291 .llvm_name = "sm_120f",
292 .description = "Target SM 120f",
293 .dependencies = featureSet(&[_]Feature{}),
294 };
295 result[@intFromEnum(Feature.sm_121)] = .{
296 .llvm_name = "sm_121",
297 .description = "Target SM 121",
298 .dependencies = featureSet(&[_]Feature{}),
299 };
300 result[@intFromEnum(Feature.sm_121a)] = .{
301 .llvm_name = "sm_121a",
302 .description = "Target SM 121a",
303 .dependencies = featureSet(&[_]Feature{}),
304 };
305 result[@intFromEnum(Feature.sm_121f)] = .{
306 .llvm_name = "sm_121f",
307 .description = "Target SM 121f",
308 .dependencies = featureSet(&[_]Feature{}),
309 };
310 result[@intFromEnum(Feature.sm_20)] = .{
311 .llvm_name = "sm_20",
312 .description = "Target SM 20",
313 .dependencies = featureSet(&[_]Feature{}),
314 };
315 result[@intFromEnum(Feature.sm_21)] = .{
316 .llvm_name = "sm_21",
317 .description = "Target SM 21",
318 .dependencies = featureSet(&[_]Feature{}),
319 };
320 result[@intFromEnum(Feature.sm_30)] = .{
321 .llvm_name = "sm_30",
322 .description = "Target SM 30",
323 .dependencies = featureSet(&[_]Feature{}),
324 };
325 result[@intFromEnum(Feature.sm_32)] = .{
326 .llvm_name = "sm_32",
327 .description = "Target SM 32",
328 .dependencies = featureSet(&[_]Feature{}),
329 };
330 result[@intFromEnum(Feature.sm_35)] = .{
331 .llvm_name = "sm_35",
332 .description = "Target SM 35",
333 .dependencies = featureSet(&[_]Feature{}),
334 };
335 result[@intFromEnum(Feature.sm_37)] = .{
336 .llvm_name = "sm_37",
337 .description = "Target SM 37",
338 .dependencies = featureSet(&[_]Feature{}),
339 };
340 result[@intFromEnum(Feature.sm_50)] = .{
341 .llvm_name = "sm_50",
342 .description = "Target SM 50",
343 .dependencies = featureSet(&[_]Feature{}),
344 };
345 result[@intFromEnum(Feature.sm_52)] = .{
346 .llvm_name = "sm_52",
347 .description = "Target SM 52",
348 .dependencies = featureSet(&[_]Feature{}),
349 };
350 result[@intFromEnum(Feature.sm_53)] = .{
351 .llvm_name = "sm_53",
352 .description = "Target SM 53",
353 .dependencies = featureSet(&[_]Feature{}),
354 };
355 result[@intFromEnum(Feature.sm_60)] = .{
356 .llvm_name = "sm_60",
357 .description = "Target SM 60",
358 .dependencies = featureSet(&[_]Feature{}),
359 };
360 result[@intFromEnum(Feature.sm_61)] = .{
361 .llvm_name = "sm_61",
362 .description = "Target SM 61",
363 .dependencies = featureSet(&[_]Feature{}),
364 };
365 result[@intFromEnum(Feature.sm_62)] = .{
366 .llvm_name = "sm_62",
367 .description = "Target SM 62",
368 .dependencies = featureSet(&[_]Feature{}),
369 };
370 result[@intFromEnum(Feature.sm_70)] = .{
371 .llvm_name = "sm_70",
372 .description = "Target SM 70",
373 .dependencies = featureSet(&[_]Feature{}),
374 };
375 result[@intFromEnum(Feature.sm_72)] = .{
376 .llvm_name = "sm_72",
377 .description = "Target SM 72",
378 .dependencies = featureSet(&[_]Feature{}),
379 };
380 result[@intFromEnum(Feature.sm_75)] = .{
381 .llvm_name = "sm_75",
382 .description = "Target SM 75",
383 .dependencies = featureSet(&[_]Feature{}),
384 };
385 result[@intFromEnum(Feature.sm_80)] = .{
386 .llvm_name = "sm_80",
387 .description = "Target SM 80",
388 .dependencies = featureSet(&[_]Feature{}),
389 };
390 result[@intFromEnum(Feature.sm_86)] = .{
391 .llvm_name = "sm_86",
392 .description = "Target SM 86",
393 .dependencies = featureSet(&[_]Feature{}),
394 };
395 result[@intFromEnum(Feature.sm_87)] = .{
396 .llvm_name = "sm_87",
397 .description = "Target SM 87",
398 .dependencies = featureSet(&[_]Feature{}),
399 };
400 result[@intFromEnum(Feature.sm_89)] = .{
401 .llvm_name = "sm_89",
402 .description = "Target SM 89",
403 .dependencies = featureSet(&[_]Feature{}),
404 };
405 result[@intFromEnum(Feature.sm_90)] = .{
406 .llvm_name = "sm_90",
407 .description = "Target SM 90",
408 .dependencies = featureSet(&[_]Feature{}),
409 };
410 result[@intFromEnum(Feature.sm_90a)] = .{
411 .llvm_name = "sm_90a",
412 .description = "Target SM 90a",
413 .dependencies = featureSet(&[_]Feature{}),
414 };
415 const ti = @typeInfo(Feature);
416 for (&result, 0..) |*elem, i| {
417 elem.index = i;
418 elem.name = ti.@"enum".fields[i].name;
419 }
420 break :blk result;
421};
422
423pub const cpu = struct {
424 pub const sm_100: CpuModel = .{
425 .name = "sm_100",
426 .llvm_name = "sm_100",
427 .features = featureSet(&[_]Feature{
428 .ptx86,
429 .sm_100,
430 }),
431 };
432 pub const sm_100a: CpuModel = .{
433 .name = "sm_100a",
434 .llvm_name = "sm_100a",
435 .features = featureSet(&[_]Feature{
436 .ptx86,
437 .sm_100a,
438 }),
439 };
440 pub const sm_100f: CpuModel = .{
441 .name = "sm_100f",
442 .llvm_name = "sm_100f",
443 .features = featureSet(&[_]Feature{
444 .ptx88,
445 .sm_100f,
446 }),
447 };
448 pub const sm_101: CpuModel = .{
449 .name = "sm_101",
450 .llvm_name = "sm_101",
451 .features = featureSet(&[_]Feature{
452 .ptx86,
453 .sm_101,
454 }),
455 };
456 pub const sm_101a: CpuModel = .{
457 .name = "sm_101a",
458 .llvm_name = "sm_101a",
459 .features = featureSet(&[_]Feature{
460 .ptx86,
461 .sm_101a,
462 }),
463 };
464 pub const sm_101f: CpuModel = .{
465 .name = "sm_101f",
466 .llvm_name = "sm_101f",
467 .features = featureSet(&[_]Feature{
468 .ptx88,
469 .sm_101f,
470 }),
471 };
472 pub const sm_103: CpuModel = .{
473 .name = "sm_103",
474 .llvm_name = "sm_103",
475 .features = featureSet(&[_]Feature{
476 .ptx88,
477 .sm_103,
478 }),
479 };
480 pub const sm_103a: CpuModel = .{
481 .name = "sm_103a",
482 .llvm_name = "sm_103a",
483 .features = featureSet(&[_]Feature{
484 .ptx88,
485 .sm_103a,
486 }),
487 };
488 pub const sm_103f: CpuModel = .{
489 .name = "sm_103f",
490 .llvm_name = "sm_103f",
491 .features = featureSet(&[_]Feature{
492 .ptx88,
493 .sm_103f,
494 }),
495 };
496 pub const sm_120: CpuModel = .{
497 .name = "sm_120",
498 .llvm_name = "sm_120",
499 .features = featureSet(&[_]Feature{
500 .ptx87,
501 .sm_120,
502 }),
503 };
504 pub const sm_120a: CpuModel = .{
505 .name = "sm_120a",
506 .llvm_name = "sm_120a",
507 .features = featureSet(&[_]Feature{
508 .ptx87,
509 .sm_120a,
510 }),
511 };
512 pub const sm_120f: CpuModel = .{
513 .name = "sm_120f",
514 .llvm_name = "sm_120f",
515 .features = featureSet(&[_]Feature{
516 .ptx88,
517 .sm_120f,
518 }),
519 };
520 pub const sm_121: CpuModel = .{
521 .name = "sm_121",
522 .llvm_name = "sm_121",
523 .features = featureSet(&[_]Feature{
524 .ptx88,
525 .sm_121,
526 }),
527 };
528 pub const sm_121a: CpuModel = .{
529 .name = "sm_121a",
530 .llvm_name = "sm_121a",
531 .features = featureSet(&[_]Feature{
532 .ptx88,
533 .sm_121a,
534 }),
535 };
536 pub const sm_121f: CpuModel = .{
537 .name = "sm_121f",
538 .llvm_name = "sm_121f",
539 .features = featureSet(&[_]Feature{
540 .ptx88,
541 .sm_121f,
542 }),
543 };
544 pub const sm_20: CpuModel = .{
545 .name = "sm_20",
546 .llvm_name = "sm_20",
547 .features = featureSet(&[_]Feature{
548 .ptx32,
549 .sm_20,
550 }),
551 };
552 pub const sm_21: CpuModel = .{
553 .name = "sm_21",
554 .llvm_name = "sm_21",
555 .features = featureSet(&[_]Feature{
556 .ptx32,
557 .sm_21,
558 }),
559 };
560 pub const sm_30: CpuModel = .{
561 .name = "sm_30",
562 .llvm_name = "sm_30",
563 .features = featureSet(&[_]Feature{
564 .sm_30,
565 }),
566 };
567 pub const sm_32: CpuModel = .{
568 .name = "sm_32",
569 .llvm_name = "sm_32",
570 .features = featureSet(&[_]Feature{
571 .ptx40,
572 .sm_32,
573 }),
574 };
575 pub const sm_35: CpuModel = .{
576 .name = "sm_35",
577 .llvm_name = "sm_35",
578 .features = featureSet(&[_]Feature{
579 .ptx32,
580 .sm_35,
581 }),
582 };
583 pub const sm_37: CpuModel = .{
584 .name = "sm_37",
585 .llvm_name = "sm_37",
586 .features = featureSet(&[_]Feature{
587 .ptx41,
588 .sm_37,
589 }),
590 };
591 pub const sm_50: CpuModel = .{
592 .name = "sm_50",
593 .llvm_name = "sm_50",
594 .features = featureSet(&[_]Feature{
595 .ptx40,
596 .sm_50,
597 }),
598 };
599 pub const sm_52: CpuModel = .{
600 .name = "sm_52",
601 .llvm_name = "sm_52",
602 .features = featureSet(&[_]Feature{
603 .ptx41,
604 .sm_52,
605 }),
606 };
607 pub const sm_53: CpuModel = .{
608 .name = "sm_53",
609 .llvm_name = "sm_53",
610 .features = featureSet(&[_]Feature{
611 .ptx42,
612 .sm_53,
613 }),
614 };
615 pub const sm_60: CpuModel = .{
616 .name = "sm_60",
617 .llvm_name = "sm_60",
618 .features = featureSet(&[_]Feature{
619 .ptx50,
620 .sm_60,
621 }),
622 };
623 pub const sm_61: CpuModel = .{
624 .name = "sm_61",
625 .llvm_name = "sm_61",
626 .features = featureSet(&[_]Feature{
627 .ptx50,
628 .sm_61,
629 }),
630 };
631 pub const sm_62: CpuModel = .{
632 .name = "sm_62",
633 .llvm_name = "sm_62",
634 .features = featureSet(&[_]Feature{
635 .ptx50,
636 .sm_62,
637 }),
638 };
639 pub const sm_70: CpuModel = .{
640 .name = "sm_70",
641 .llvm_name = "sm_70",
642 .features = featureSet(&[_]Feature{
643 .ptx60,
644 .sm_70,
645 }),
646 };
647 pub const sm_72: CpuModel = .{
648 .name = "sm_72",
649 .llvm_name = "sm_72",
650 .features = featureSet(&[_]Feature{
651 .ptx61,
652 .sm_72,
653 }),
654 };
655 pub const sm_75: CpuModel = .{
656 .name = "sm_75",
657 .llvm_name = "sm_75",
658 .features = featureSet(&[_]Feature{
659 .ptx63,
660 .sm_75,
661 }),
662 };
663 pub const sm_80: CpuModel = .{
664 .name = "sm_80",
665 .llvm_name = "sm_80",
666 .features = featureSet(&[_]Feature{
667 .ptx70,
668 .sm_80,
669 }),
670 };
671 pub const sm_86: CpuModel = .{
672 .name = "sm_86",
673 .llvm_name = "sm_86",
674 .features = featureSet(&[_]Feature{
675 .ptx71,
676 .sm_86,
677 }),
678 };
679 pub const sm_87: CpuModel = .{
680 .name = "sm_87",
681 .llvm_name = "sm_87",
682 .features = featureSet(&[_]Feature{
683 .ptx74,
684 .sm_87,
685 }),
686 };
687 pub const sm_89: CpuModel = .{
688 .name = "sm_89",
689 .llvm_name = "sm_89",
690 .features = featureSet(&[_]Feature{
691 .ptx78,
692 .sm_89,
693 }),
694 };
695 pub const sm_90: CpuModel = .{
696 .name = "sm_90",
697 .llvm_name = "sm_90",
698 .features = featureSet(&[_]Feature{
699 .ptx78,
700 .sm_90,
701 }),
702 };
703 pub const sm_90a: CpuModel = .{
704 .name = "sm_90a",
705 .llvm_name = "sm_90a",
706 .features = featureSet(&[_]Feature{
707 .ptx80,
708 .sm_90a,
709 }),
710 };
711};