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