1#![allow(unused)]
73
74use crate::lexer::PtxToken;
75use crate::unparser::{PtxUnparser, common::*};
76
77pub mod section_0 {
78 use super::*;
79 use crate::r#type::instruction::mma::section_0::*;
80
81 impl PtxUnparser for MmaSyncAlignedM8n8k4AlayoutBlayoutDtypeF16F16Ctype {
82 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
83 push_opcode(tokens, "mma");
84 push_directive(tokens, "sync");
85 push_directive(tokens, "aligned");
86 push_directive(tokens, "m8n8k4");
87 match &self.alayout {
88 Alayout::Row => {
89 push_directive(tokens, "row");
90 }
91 Alayout::Col => {
92 push_directive(tokens, "col");
93 }
94 }
95 match &self.blayout {
96 Blayout::Row => {
97 push_directive(tokens, "row");
98 }
99 Blayout::Col => {
100 push_directive(tokens, "col");
101 }
102 }
103 match &self.dtype {
104 Dtype::F16 => {
105 push_directive(tokens, "f16");
106 }
107 Dtype::F32 => {
108 push_directive(tokens, "f32");
109 }
110 }
111 push_directive(tokens, "f16");
112 push_directive(tokens, "f16");
113 match &self.ctype {
114 Ctype::F16 => {
115 push_directive(tokens, "f16");
116 }
117 Ctype::F32 => {
118 push_directive(tokens, "f32");
119 }
120 }
121 self.d.unparse_tokens(tokens);
122 tokens.push(PtxToken::Comma);
123 self.a.unparse_tokens(tokens);
124 tokens.push(PtxToken::Comma);
125 self.b.unparse_tokens(tokens);
126 tokens.push(PtxToken::Comma);
127 self.c.unparse_tokens(tokens);
128 tokens.push(PtxToken::Semicolon);
129 }
130 }
131
132 impl PtxUnparser for MmaSyncAlignedM16n8k8RowColDtypeF16F16Ctype {
133 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
134 push_opcode(tokens, "mma");
135 push_directive(tokens, "sync");
136 push_directive(tokens, "aligned");
137 push_directive(tokens, "m16n8k8");
138 push_directive(tokens, "row");
139 push_directive(tokens, "col");
140 match &self.dtype {
141 Dtype::F16 => {
142 push_directive(tokens, "f16");
143 }
144 Dtype::F32 => {
145 push_directive(tokens, "f32");
146 }
147 }
148 push_directive(tokens, "f16");
149 push_directive(tokens, "f16");
150 match &self.ctype {
151 Ctype::F16 => {
152 push_directive(tokens, "f16");
153 }
154 Ctype::F32 => {
155 push_directive(tokens, "f32");
156 }
157 }
158 self.d.unparse_tokens(tokens);
159 tokens.push(PtxToken::Comma);
160 self.a.unparse_tokens(tokens);
161 tokens.push(PtxToken::Comma);
162 self.b.unparse_tokens(tokens);
163 tokens.push(PtxToken::Comma);
164 self.c.unparse_tokens(tokens);
165 tokens.push(PtxToken::Semicolon);
166 }
167 }
168
169 impl PtxUnparser for MmaSyncAlignedM16n8k16RowColDtypeF16F16Ctype {
170 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
171 push_opcode(tokens, "mma");
172 push_directive(tokens, "sync");
173 push_directive(tokens, "aligned");
174 push_directive(tokens, "m16n8k16");
175 push_directive(tokens, "row");
176 push_directive(tokens, "col");
177 match &self.dtype {
178 Dtype::F16 => {
179 push_directive(tokens, "f16");
180 }
181 Dtype::F32 => {
182 push_directive(tokens, "f32");
183 }
184 }
185 push_directive(tokens, "f16");
186 push_directive(tokens, "f16");
187 match &self.ctype {
188 Ctype::F16 => {
189 push_directive(tokens, "f16");
190 }
191 Ctype::F32 => {
192 push_directive(tokens, "f32");
193 }
194 }
195 self.d.unparse_tokens(tokens);
196 tokens.push(PtxToken::Comma);
197 self.a.unparse_tokens(tokens);
198 tokens.push(PtxToken::Comma);
199 self.b.unparse_tokens(tokens);
200 tokens.push(PtxToken::Comma);
201 self.c.unparse_tokens(tokens);
202 tokens.push(PtxToken::Semicolon);
203 }
204 }
205}
206
207pub mod section_1 {
208 use super::*;
209 use crate::r#type::instruction::mma::section_1::*;
210
211 impl PtxUnparser for MmaSyncAlignedM16n8k4RowColF32Tf32Tf32F32 {
212 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
213 push_opcode(tokens, "mma");
214 push_directive(tokens, "sync");
215 push_directive(tokens, "aligned");
216 push_directive(tokens, "m16n8k4");
217 push_directive(tokens, "row");
218 push_directive(tokens, "col");
219 push_directive(tokens, "f32");
220 push_directive(tokens, "tf32");
221 push_directive(tokens, "tf32");
222 push_directive(tokens, "f32");
223 self.d.unparse_tokens(tokens);
224 tokens.push(PtxToken::Comma);
225 self.a.unparse_tokens(tokens);
226 tokens.push(PtxToken::Comma);
227 self.b.unparse_tokens(tokens);
228 tokens.push(PtxToken::Comma);
229 self.c.unparse_tokens(tokens);
230 tokens.push(PtxToken::Semicolon);
231 }
232 }
233
234 impl PtxUnparser for MmaSyncAlignedM16n8k8RowColF32AtypeBtypeF32 {
235 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
236 push_opcode(tokens, "mma");
237 push_directive(tokens, "sync");
238 push_directive(tokens, "aligned");
239 push_directive(tokens, "m16n8k8");
240 push_directive(tokens, "row");
241 push_directive(tokens, "col");
242 push_directive(tokens, "f32");
243 match &self.atype {
244 Atype::Bf16 => {
245 push_directive(tokens, "bf16");
246 }
247 Atype::Tf32 => {
248 push_directive(tokens, "tf32");
249 }
250 }
251 match &self.btype {
252 Btype::Bf16 => {
253 push_directive(tokens, "bf16");
254 }
255 Btype::Tf32 => {
256 push_directive(tokens, "tf32");
257 }
258 }
259 push_directive(tokens, "f32");
260 self.d.unparse_tokens(tokens);
261 tokens.push(PtxToken::Comma);
262 self.a.unparse_tokens(tokens);
263 tokens.push(PtxToken::Comma);
264 self.b.unparse_tokens(tokens);
265 tokens.push(PtxToken::Comma);
266 self.c.unparse_tokens(tokens);
267 tokens.push(PtxToken::Semicolon);
268 }
269 }
270
271 impl PtxUnparser for MmaSyncAlignedM16n8k16RowColF32Bf16Bf16F32 {
272 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
273 push_opcode(tokens, "mma");
274 push_directive(tokens, "sync");
275 push_directive(tokens, "aligned");
276 push_directive(tokens, "m16n8k16");
277 push_directive(tokens, "row");
278 push_directive(tokens, "col");
279 push_directive(tokens, "f32");
280 push_directive(tokens, "bf16");
281 push_directive(tokens, "bf16");
282 push_directive(tokens, "f32");
283 self.d.unparse_tokens(tokens);
284 tokens.push(PtxToken::Comma);
285 self.a.unparse_tokens(tokens);
286 tokens.push(PtxToken::Comma);
287 self.b.unparse_tokens(tokens);
288 tokens.push(PtxToken::Comma);
289 self.c.unparse_tokens(tokens);
290 tokens.push(PtxToken::Semicolon);
291 }
292 }
293
294 impl PtxUnparser for MmaSyncAlignedShapeRowColDtypeF8typeF8typeCtype {
295 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
296 push_opcode(tokens, "mma");
297 push_directive(tokens, "sync");
298 push_directive(tokens, "aligned");
299 match &self.shape {
300 Shape::M16n8k16 => {
301 push_directive(tokens, "m16n8k16");
302 }
303 Shape::M16n8k32 => {
304 push_directive(tokens, "m16n8k32");
305 }
306 }
307 push_directive(tokens, "row");
308 push_directive(tokens, "col");
309 match &self.dtype {
310 Dtype::F16 => {
311 push_directive(tokens, "f16");
312 }
313 Dtype::F32 => {
314 push_directive(tokens, "f32");
315 }
316 }
317 match &self.f8type {
318 F8type::E4m3 => {
319 push_directive(tokens, "e4m3");
320 }
321 F8type::E5m2 => {
322 push_directive(tokens, "e5m2");
323 }
324 }
325 match &self.f8type1 {
326 F8type::E4m3 => {
327 push_directive(tokens, "e4m3");
328 }
329 F8type::E5m2 => {
330 push_directive(tokens, "e5m2");
331 }
332 }
333 match &self.ctype {
334 Ctype::F16 => {
335 push_directive(tokens, "f16");
336 }
337 Ctype::F32 => {
338 push_directive(tokens, "f32");
339 }
340 }
341 self.d.unparse_tokens(tokens);
342 tokens.push(PtxToken::Comma);
343 self.a.unparse_tokens(tokens);
344 tokens.push(PtxToken::Comma);
345 self.b.unparse_tokens(tokens);
346 tokens.push(PtxToken::Comma);
347 self.c.unparse_tokens(tokens);
348 tokens.push(PtxToken::Semicolon);
349 }
350 }
351
352 impl PtxUnparser for MmaSyncAlignedM16n8k32RowColKindDtypeF8f6f4typeF8f6f4typeCtype {
353 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
354 push_opcode(tokens, "mma");
355 push_directive(tokens, "sync");
356 push_directive(tokens, "aligned");
357 push_directive(tokens, "m16n8k32");
358 push_directive(tokens, "row");
359 push_directive(tokens, "col");
360 match &self.kind {
361 Kind::KindF8f6f4 => {
362 push_directive(tokens, "kind::f8f6f4");
363 }
364 }
365 match &self.dtype {
366 Dtype::F16 => {
367 push_directive(tokens, "f16");
368 }
369 Dtype::F32 => {
370 push_directive(tokens, "f32");
371 }
372 }
373 match &self.f8f6f4type {
374 F8f6f4type::E4m3 => {
375 push_directive(tokens, "e4m3");
376 }
377 F8f6f4type::E5m2 => {
378 push_directive(tokens, "e5m2");
379 }
380 F8f6f4type::E3m2 => {
381 push_directive(tokens, "e3m2");
382 }
383 F8f6f4type::E2m3 => {
384 push_directive(tokens, "e2m3");
385 }
386 F8f6f4type::E2m1 => {
387 push_directive(tokens, "e2m1");
388 }
389 }
390 match &self.f8f6f4type1 {
391 F8f6f4type::E4m3 => {
392 push_directive(tokens, "e4m3");
393 }
394 F8f6f4type::E5m2 => {
395 push_directive(tokens, "e5m2");
396 }
397 F8f6f4type::E3m2 => {
398 push_directive(tokens, "e3m2");
399 }
400 F8f6f4type::E2m3 => {
401 push_directive(tokens, "e2m3");
402 }
403 F8f6f4type::E2m1 => {
404 push_directive(tokens, "e2m1");
405 }
406 }
407 match &self.ctype {
408 Ctype::F16 => {
409 push_directive(tokens, "f16");
410 }
411 Ctype::F32 => {
412 push_directive(tokens, "f32");
413 }
414 }
415 self.d.unparse_tokens(tokens);
416 tokens.push(PtxToken::Comma);
417 self.a.unparse_tokens(tokens);
418 tokens.push(PtxToken::Comma);
419 self.b.unparse_tokens(tokens);
420 tokens.push(PtxToken::Comma);
421 self.c.unparse_tokens(tokens);
422 tokens.push(PtxToken::Semicolon);
423 }
424 }
425}
426
427pub mod section_2 {
428 use super::*;
429 use crate::r#type::instruction::mma::section_2::*;
430
431 impl PtxUnparser for MmaSyncAlignedM16n8k64RowColKindBlockScaleScaleVecSizeF32E2m1E2m1F32Stype {
432 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
433 push_opcode(tokens, "mma");
434 push_directive(tokens, "sync");
435 push_directive(tokens, "aligned");
436 push_directive(tokens, "m16n8k64");
437 push_directive(tokens, "row");
438 push_directive(tokens, "col");
439 match &self.kind {
440 Kind::KindMxf4 => {
441 push_directive(tokens, "kind::mxf4");
442 }
443 }
444 push_directive(tokens, "block_scale");
445 if let Some(scale_vec_size_0) = self.scale_vec_size.as_ref() {
446 match scale_vec_size_0 {
447 ScaleVecSize::ScaleVec2x => {
448 push_directive(tokens, "scale_vec::2X");
449 }
450 }
451 }
452 push_directive(tokens, "f32");
453 push_directive(tokens, "e2m1");
454 push_directive(tokens, "e2m1");
455 push_directive(tokens, "f32");
456 match &self.stype {
457 Stype::Ue8m0 => {
458 push_directive(tokens, "ue8m0");
459 }
460 }
461 self.d.unparse_tokens(tokens);
462 tokens.push(PtxToken::Comma);
463 self.a.unparse_tokens(tokens);
464 tokens.push(PtxToken::Comma);
465 self.b.unparse_tokens(tokens);
466 tokens.push(PtxToken::Comma);
467 self.c.unparse_tokens(tokens);
468 tokens.push(PtxToken::Comma);
469 self.scale_a_data.unparse_tokens(tokens);
470 tokens.push(PtxToken::Comma);
471 self.byte_id_a.unparse_tokens(tokens);
472 tokens.push(PtxToken::Comma);
473 self.scale_b_data.unparse_tokens(tokens);
474 tokens.push(PtxToken::Comma);
475 self.byte_id_b.unparse_tokens(tokens);
476 tokens.push(PtxToken::Semicolon);
477 }
478 }
479}
480
481pub mod section_3 {
482 use super::*;
483 use crate::r#type::instruction::mma::section_3::*;
484
485 impl PtxUnparser for MmaSyncAlignedM16n8k64RowColKindBlockScaleScaleVecSizeF32E2m1E2m1F32Stype1 {
486 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
487 push_opcode(tokens, "mma");
488 push_directive(tokens, "sync");
489 push_directive(tokens, "aligned");
490 push_directive(tokens, "m16n8k64");
491 push_directive(tokens, "row");
492 push_directive(tokens, "col");
493 match &self.kind {
494 Kind::KindMxf4nvf4 => {
495 push_directive(tokens, "kind::mxf4nvf4");
496 }
497 }
498 push_directive(tokens, "block_scale");
499 match &self.scale_vec_size {
500 ScaleVecSize::ScaleVec2x => {
501 push_directive(tokens, "scale_vec::2X");
502 }
503 ScaleVecSize::ScaleVec4x => {
504 push_directive(tokens, "scale_vec::4X");
505 }
506 }
507 push_directive(tokens, "f32");
508 push_directive(tokens, "e2m1");
509 push_directive(tokens, "e2m1");
510 push_directive(tokens, "f32");
511 match &self.stype {
512 Stype::Ue8m0 => {
513 push_directive(tokens, "ue8m0");
514 }
515 Stype::Ue4m3 => {
516 push_directive(tokens, "ue4m3");
517 }
518 }
519 self.d.unparse_tokens(tokens);
520 tokens.push(PtxToken::Comma);
521 self.a.unparse_tokens(tokens);
522 tokens.push(PtxToken::Comma);
523 self.b.unparse_tokens(tokens);
524 tokens.push(PtxToken::Comma);
525 self.c.unparse_tokens(tokens);
526 tokens.push(PtxToken::Comma);
527 self.scale_a_data.unparse_tokens(tokens);
528 tokens.push(PtxToken::Comma);
529 self.byte_id_a.unparse_tokens(tokens);
530 tokens.push(PtxToken::Comma);
531 self.scale_b_data.unparse_tokens(tokens);
532 tokens.push(PtxToken::Comma);
533 self.byte_id_b.unparse_tokens(tokens);
534 tokens.push(PtxToken::Semicolon);
535 }
536 }
537}
538
539pub mod section_4 {
540 use super::*;
541 use crate::r#type::instruction::mma::section_4::*;
542
543 impl PtxUnparser
544 for MmaSyncAlignedM16n8k32RowColKindBlockScaleScaleVecSizeF32F8f6f4typeF8f6f4typeF32Stype
545 {
546 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
547 push_opcode(tokens, "mma");
548 push_directive(tokens, "sync");
549 push_directive(tokens, "aligned");
550 push_directive(tokens, "m16n8k32");
551 push_directive(tokens, "row");
552 push_directive(tokens, "col");
553 match &self.kind {
554 Kind::KindMxf8f6f4 => {
555 push_directive(tokens, "kind::mxf8f6f4");
556 }
557 }
558 push_directive(tokens, "block_scale");
559 if let Some(scale_vec_size_1) = self.scale_vec_size.as_ref() {
560 match scale_vec_size_1 {
561 ScaleVecSize::ScaleVec1x => {
562 push_directive(tokens, "scale_vec::1X");
563 }
564 }
565 }
566 push_directive(tokens, "f32");
567 match &self.f8f6f4type {
568 F8f6f4type::E4m3 => {
569 push_directive(tokens, "e4m3");
570 }
571 F8f6f4type::E5m2 => {
572 push_directive(tokens, "e5m2");
573 }
574 F8f6f4type::E3m2 => {
575 push_directive(tokens, "e3m2");
576 }
577 F8f6f4type::E2m3 => {
578 push_directive(tokens, "e2m3");
579 }
580 F8f6f4type::E2m1 => {
581 push_directive(tokens, "e2m1");
582 }
583 }
584 match &self.f8f6f4type1 {
585 F8f6f4type::E4m3 => {
586 push_directive(tokens, "e4m3");
587 }
588 F8f6f4type::E5m2 => {
589 push_directive(tokens, "e5m2");
590 }
591 F8f6f4type::E3m2 => {
592 push_directive(tokens, "e3m2");
593 }
594 F8f6f4type::E2m3 => {
595 push_directive(tokens, "e2m3");
596 }
597 F8f6f4type::E2m1 => {
598 push_directive(tokens, "e2m1");
599 }
600 }
601 push_directive(tokens, "f32");
602 match &self.stype {
603 Stype::Ue8m0 => {
604 push_directive(tokens, "ue8m0");
605 }
606 }
607 self.d.unparse_tokens(tokens);
608 tokens.push(PtxToken::Comma);
609 self.a.unparse_tokens(tokens);
610 tokens.push(PtxToken::Comma);
611 self.b.unparse_tokens(tokens);
612 tokens.push(PtxToken::Comma);
613 self.c.unparse_tokens(tokens);
614 tokens.push(PtxToken::Comma);
615 self.scale_a_data.unparse_tokens(tokens);
616 tokens.push(PtxToken::Comma);
617 self.byte_id_a.unparse_tokens(tokens);
618 tokens.push(PtxToken::Comma);
619 self.scale_b_data.unparse_tokens(tokens);
620 tokens.push(PtxToken::Comma);
621 self.byte_id_b.unparse_tokens(tokens);
622 tokens.push(PtxToken::Semicolon);
623 }
624 }
625}
626
627pub mod section_5 {
628 use super::*;
629 use crate::r#type::instruction::mma::section_5::*;
630
631 impl PtxUnparser for MmaSyncAlignedShapeRowColF64F64F64F64 {
632 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
633 push_opcode(tokens, "mma");
634 push_directive(tokens, "sync");
635 push_directive(tokens, "aligned");
636 match &self.shape {
637 Shape::M16n8k16 => {
638 push_directive(tokens, "m16n8k16");
639 }
640 Shape::M16n8k4 => {
641 push_directive(tokens, "m16n8k4");
642 }
643 Shape::M16n8k8 => {
644 push_directive(tokens, "m16n8k8");
645 }
646 Shape::M8n84 => {
647 push_directive(tokens, "m8n84");
648 }
649 }
650 push_directive(tokens, "row");
651 push_directive(tokens, "col");
652 push_directive(tokens, "f64");
653 push_directive(tokens, "f64");
654 push_directive(tokens, "f64");
655 push_directive(tokens, "f64");
656 self.d.unparse_tokens(tokens);
657 tokens.push(PtxToken::Comma);
658 self.a.unparse_tokens(tokens);
659 tokens.push(PtxToken::Comma);
660 self.b.unparse_tokens(tokens);
661 tokens.push(PtxToken::Comma);
662 self.c.unparse_tokens(tokens);
663 tokens.push(PtxToken::Semicolon);
664 }
665 }
666}
667
668pub mod section_6 {
669 use super::*;
670 use crate::r#type::instruction::mma::section_6::*;
671
672 impl PtxUnparser for MmaSyncAlignedShapeRowColSatfiniteS32AtypeBtypeS32 {
673 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
674 push_opcode(tokens, "mma");
675 push_directive(tokens, "sync");
676 push_directive(tokens, "aligned");
677 match &self.shape {
678 Shape::M16n8k16 => {
679 push_directive(tokens, "m16n8k16");
680 }
681 Shape::M16n8k32 => {
682 push_directive(tokens, "m16n8k32");
683 }
684 Shape::M8n8k16 => {
685 push_directive(tokens, "m8n8k16");
686 }
687 }
688 push_directive(tokens, "row");
689 push_directive(tokens, "col");
690 if self.satfinite {
691 push_directive(tokens, "satfinite");
692 }
693 push_directive(tokens, "s32");
694 match &self.atype {
695 Atype::U8 => {
696 push_directive(tokens, "u8");
697 }
698 Atype::S8 => {
699 push_directive(tokens, "s8");
700 }
701 }
702 match &self.btype {
703 Btype::U8 => {
704 push_directive(tokens, "u8");
705 }
706 Btype::S8 => {
707 push_directive(tokens, "s8");
708 }
709 }
710 push_directive(tokens, "s32");
711 self.d.unparse_tokens(tokens);
712 tokens.push(PtxToken::Comma);
713 self.a.unparse_tokens(tokens);
714 tokens.push(PtxToken::Comma);
715 self.b.unparse_tokens(tokens);
716 tokens.push(PtxToken::Comma);
717 self.c.unparse_tokens(tokens);
718 tokens.push(PtxToken::Semicolon);
719 }
720 }
721}
722
723pub mod section_7 {
724 use super::*;
725 use crate::r#type::instruction::mma::section_7::*;
726
727 impl PtxUnparser for MmaSyncAlignedShapeRowColSatfiniteS32AtypeBtypeS321 {
728 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
729 push_opcode(tokens, "mma");
730 push_directive(tokens, "sync");
731 push_directive(tokens, "aligned");
732 match &self.shape {
733 Shape::M16n8k32 => {
734 push_directive(tokens, "m16n8k32");
735 }
736 Shape::M16n8k64 => {
737 push_directive(tokens, "m16n8k64");
738 }
739 Shape::M8n8k32 => {
740 push_directive(tokens, "m8n8k32");
741 }
742 }
743 push_directive(tokens, "row");
744 push_directive(tokens, "col");
745 if self.satfinite {
746 push_directive(tokens, "satfinite");
747 }
748 push_directive(tokens, "s32");
749 match &self.atype {
750 Atype::U4 => {
751 push_directive(tokens, "u4");
752 }
753 Atype::S4 => {
754 push_directive(tokens, "s4");
755 }
756 }
757 match &self.btype {
758 Btype::U4 => {
759 push_directive(tokens, "u4");
760 }
761 Btype::S4 => {
762 push_directive(tokens, "s4");
763 }
764 }
765 push_directive(tokens, "s32");
766 self.d.unparse_tokens(tokens);
767 tokens.push(PtxToken::Comma);
768 self.a.unparse_tokens(tokens);
769 tokens.push(PtxToken::Comma);
770 self.b.unparse_tokens(tokens);
771 tokens.push(PtxToken::Comma);
772 self.c.unparse_tokens(tokens);
773 tokens.push(PtxToken::Semicolon);
774 }
775 }
776}
777
778pub mod section_8 {
779 use super::*;
780 use crate::r#type::instruction::mma::section_8::*;
781
782 impl PtxUnparser for MmaSyncAlignedShapeRowColS32B1B1S32BitopPopc {
783 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
784 push_opcode(tokens, "mma");
785 push_directive(tokens, "sync");
786 push_directive(tokens, "aligned");
787 match &self.shape {
788 Shape::M16n8k128 => {
789 push_directive(tokens, "m16n8k128");
790 }
791 Shape::M16n8k256 => {
792 push_directive(tokens, "m16n8k256");
793 }
794 Shape::M8n8k128 => {
795 push_directive(tokens, "m8n8k128");
796 }
797 }
798 push_directive(tokens, "row");
799 push_directive(tokens, "col");
800 push_directive(tokens, "s32");
801 push_directive(tokens, "b1");
802 push_directive(tokens, "b1");
803 push_directive(tokens, "s32");
804 match &self.bitop {
805 Bitop::Xor => {
806 push_directive(tokens, "xor");
807 }
808 Bitop::And => {
809 push_directive(tokens, "and");
810 }
811 }
812 push_directive(tokens, "popc");
813 self.d.unparse_tokens(tokens);
814 tokens.push(PtxToken::Comma);
815 self.a.unparse_tokens(tokens);
816 tokens.push(PtxToken::Comma);
817 self.b.unparse_tokens(tokens);
818 tokens.push(PtxToken::Comma);
819 self.c.unparse_tokens(tokens);
820 tokens.push(PtxToken::Semicolon);
821 }
822 }
823}