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
170pub mod section_1 {
171 use super::*;
172 use crate::r#type::instruction::mma_sp::section_1::*;
173
174 impl PtxUnparser for MmaSpvariantSyncAlignedM16n8k16RowColF32Bf16Bf16F32 {
175 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
176 push_opcode(tokens, "mma");
177 match &self.spvariant {
178 Spvariant::SpOrderedMetadata => {
179 push_directive(tokens, "sp::ordered_metadata");
180 }
181 Spvariant::Sp => {
182 push_directive(tokens, "sp");
183 }
184 }
185 push_directive(tokens, "sync");
186 push_directive(tokens, "aligned");
187 push_directive(tokens, "m16n8k16");
188 push_directive(tokens, "row");
189 push_directive(tokens, "col");
190 push_directive(tokens, "f32");
191 push_directive(tokens, "bf16");
192 push_directive(tokens, "bf16");
193 push_directive(tokens, "f32");
194 self.d.unparse_tokens(tokens);
195 tokens.push(PtxToken::Comma);
196 self.a.unparse_tokens(tokens);
197 tokens.push(PtxToken::Comma);
198 self.b.unparse_tokens(tokens);
199 tokens.push(PtxToken::Comma);
200 self.c.unparse_tokens(tokens);
201 tokens.push(PtxToken::Comma);
202 self.e.unparse_tokens(tokens);
203 tokens.push(PtxToken::Comma);
204 self.f.unparse_tokens(tokens);
205 tokens.push(PtxToken::Semicolon);
206 }
207 }
208
209 impl PtxUnparser for MmaSpvariantSyncAlignedM16n8k32RowColF32Bf16Bf16F32 {
210 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
211 push_opcode(tokens, "mma");
212 match &self.spvariant {
213 Spvariant::SpOrderedMetadata => {
214 push_directive(tokens, "sp::ordered_metadata");
215 }
216 Spvariant::Sp => {
217 push_directive(tokens, "sp");
218 }
219 }
220 push_directive(tokens, "sync");
221 push_directive(tokens, "aligned");
222 push_directive(tokens, "m16n8k32");
223 push_directive(tokens, "row");
224 push_directive(tokens, "col");
225 push_directive(tokens, "f32");
226 push_directive(tokens, "bf16");
227 push_directive(tokens, "bf16");
228 push_directive(tokens, "f32");
229 self.d.unparse_tokens(tokens);
230 tokens.push(PtxToken::Comma);
231 self.a.unparse_tokens(tokens);
232 tokens.push(PtxToken::Comma);
233 self.b.unparse_tokens(tokens);
234 tokens.push(PtxToken::Comma);
235 self.c.unparse_tokens(tokens);
236 tokens.push(PtxToken::Comma);
237 self.e.unparse_tokens(tokens);
238 tokens.push(PtxToken::Comma);
239 self.f.unparse_tokens(tokens);
240 tokens.push(PtxToken::Semicolon);
241 }
242 }
243
244 impl PtxUnparser for MmaSpvariantSyncAlignedM16n8k8RowColF32Tf32Tf32F32 {
245 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
246 push_opcode(tokens, "mma");
247 match &self.spvariant {
248 Spvariant::SpOrderedMetadata => {
249 push_directive(tokens, "sp::ordered_metadata");
250 }
251 Spvariant::Sp => {
252 push_directive(tokens, "sp");
253 }
254 }
255 push_directive(tokens, "sync");
256 push_directive(tokens, "aligned");
257 push_directive(tokens, "m16n8k8");
258 push_directive(tokens, "row");
259 push_directive(tokens, "col");
260 push_directive(tokens, "f32");
261 push_directive(tokens, "tf32");
262 push_directive(tokens, "tf32");
263 push_directive(tokens, "f32");
264 self.d.unparse_tokens(tokens);
265 tokens.push(PtxToken::Comma);
266 self.a.unparse_tokens(tokens);
267 tokens.push(PtxToken::Comma);
268 self.b.unparse_tokens(tokens);
269 tokens.push(PtxToken::Comma);
270 self.c.unparse_tokens(tokens);
271 tokens.push(PtxToken::Comma);
272 self.e.unparse_tokens(tokens);
273 tokens.push(PtxToken::Comma);
274 self.f.unparse_tokens(tokens);
275 tokens.push(PtxToken::Semicolon);
276 }
277 }
278
279 impl PtxUnparser for MmaSpvariantSyncAlignedM16n8k16RowColF32Tf32Tf32F32 {
280 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
281 push_opcode(tokens, "mma");
282 match &self.spvariant {
283 Spvariant::SpOrderedMetadata => {
284 push_directive(tokens, "sp::ordered_metadata");
285 }
286 Spvariant::Sp => {
287 push_directive(tokens, "sp");
288 }
289 }
290 push_directive(tokens, "sync");
291 push_directive(tokens, "aligned");
292 push_directive(tokens, "m16n8k16");
293 push_directive(tokens, "row");
294 push_directive(tokens, "col");
295 push_directive(tokens, "f32");
296 push_directive(tokens, "tf32");
297 push_directive(tokens, "tf32");
298 push_directive(tokens, "f32");
299 self.d.unparse_tokens(tokens);
300 tokens.push(PtxToken::Comma);
301 self.a.unparse_tokens(tokens);
302 tokens.push(PtxToken::Comma);
303 self.b.unparse_tokens(tokens);
304 tokens.push(PtxToken::Comma);
305 self.c.unparse_tokens(tokens);
306 tokens.push(PtxToken::Comma);
307 self.e.unparse_tokens(tokens);
308 tokens.push(PtxToken::Comma);
309 self.f.unparse_tokens(tokens);
310 tokens.push(PtxToken::Semicolon);
311 }
312 }
313
314 impl PtxUnparser for MmaSpvariantSyncAlignedM16n8k64RowColF32F8typeF8typeF32 {
315 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
316 push_opcode(tokens, "mma");
317 match &self.spvariant {
318 Spvariant::SpOrderedMetadata => {
319 push_directive(tokens, "sp::ordered_metadata");
320 }
321 Spvariant::Sp => {
322 push_directive(tokens, "sp");
323 }
324 }
325 push_directive(tokens, "sync");
326 push_directive(tokens, "aligned");
327 push_directive(tokens, "m16n8k64");
328 push_directive(tokens, "row");
329 push_directive(tokens, "col");
330 push_directive(tokens, "f32");
331 match &self.f8type {
332 F8type::E4m3 => {
333 push_directive(tokens, "e4m3");
334 }
335 F8type::E5m2 => {
336 push_directive(tokens, "e5m2");
337 }
338 }
339 match &self.f8type1 {
340 F8type::E4m3 => {
341 push_directive(tokens, "e4m3");
342 }
343 F8type::E5m2 => {
344 push_directive(tokens, "e5m2");
345 }
346 }
347 push_directive(tokens, "f32");
348 self.d.unparse_tokens(tokens);
349 tokens.push(PtxToken::Comma);
350 self.a.unparse_tokens(tokens);
351 tokens.push(PtxToken::Comma);
352 self.b.unparse_tokens(tokens);
353 tokens.push(PtxToken::Comma);
354 self.c.unparse_tokens(tokens);
355 tokens.push(PtxToken::Comma);
356 self.e.unparse_tokens(tokens);
357 tokens.push(PtxToken::Comma);
358 self.f.unparse_tokens(tokens);
359 tokens.push(PtxToken::Semicolon);
360 }
361 }
362
363 impl PtxUnparser
364 for MmaSpOrderedMetadataSyncAlignedM16n8k64RowColKindDtypeF8f6f4typeF8f6f4typeCtype
365 {
366 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
367 push_opcode(tokens, "mma");
368 push_directive(tokens, "sp::ordered_metadata");
369 push_directive(tokens, "sync");
370 push_directive(tokens, "aligned");
371 push_directive(tokens, "m16n8k64");
372 push_directive(tokens, "row");
373 push_directive(tokens, "col");
374 match &self.kind {
375 Kind::KindF8f6f4 => {
376 push_directive(tokens, "kind::f8f6f4");
377 }
378 }
379 match &self.dtype {
380 Dtype::F16 => {
381 push_directive(tokens, "f16");
382 }
383 Dtype::F32 => {
384 push_directive(tokens, "f32");
385 }
386 }
387 match &self.f8f6f4type {
388 F8f6f4type::E4m3 => {
389 push_directive(tokens, "e4m3");
390 }
391 F8f6f4type::E5m2 => {
392 push_directive(tokens, "e5m2");
393 }
394 F8f6f4type::E3m2 => {
395 push_directive(tokens, "e3m2");
396 }
397 F8f6f4type::E2m3 => {
398 push_directive(tokens, "e2m3");
399 }
400 F8f6f4type::E2m1 => {
401 push_directive(tokens, "e2m1");
402 }
403 }
404 match &self.f8f6f4type1 {
405 F8f6f4type::E4m3 => {
406 push_directive(tokens, "e4m3");
407 }
408 F8f6f4type::E5m2 => {
409 push_directive(tokens, "e5m2");
410 }
411 F8f6f4type::E3m2 => {
412 push_directive(tokens, "e3m2");
413 }
414 F8f6f4type::E2m3 => {
415 push_directive(tokens, "e2m3");
416 }
417 F8f6f4type::E2m1 => {
418 push_directive(tokens, "e2m1");
419 }
420 }
421 match &self.ctype {
422 Ctype::F16 => {
423 push_directive(tokens, "f16");
424 }
425 Ctype::F32 => {
426 push_directive(tokens, "f32");
427 }
428 }
429 self.d.unparse_tokens(tokens);
430 tokens.push(PtxToken::Comma);
431 self.a.unparse_tokens(tokens);
432 tokens.push(PtxToken::Comma);
433 self.b.unparse_tokens(tokens);
434 tokens.push(PtxToken::Comma);
435 self.c.unparse_tokens(tokens);
436 tokens.push(PtxToken::Comma);
437 self.e.unparse_tokens(tokens);
438 tokens.push(PtxToken::Comma);
439 self.f.unparse_tokens(tokens);
440 tokens.push(PtxToken::Semicolon);
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
450 for MmaSpvariantSyncAlignedM16n8k128RowColKindBlockScaleScaleVecSizeF32E2m1E2m1F32Stype
451 {
452 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
453 push_opcode(tokens, "mma");
454 match &self.spvariant {
455 Spvariant::SpOrderedMetadata => {
456 push_directive(tokens, "sp::ordered_metadata");
457 }
458 }
459 push_directive(tokens, "sync");
460 push_directive(tokens, "aligned");
461 push_directive(tokens, "m16n8k128");
462 push_directive(tokens, "row");
463 push_directive(tokens, "col");
464 match &self.kind {
465 Kind::KindMxf4 => {
466 push_directive(tokens, "kind::mxf4");
467 }
468 }
469 push_directive(tokens, "block_scale");
470 if let Some(scale_vec_size_0) = self.scale_vec_size.as_ref() {
471 match scale_vec_size_0 {
472 ScaleVecSize::ScaleVec2x => {
473 push_directive(tokens, "scale_vec::2X");
474 }
475 }
476 }
477 push_directive(tokens, "f32");
478 push_directive(tokens, "e2m1");
479 push_directive(tokens, "e2m1");
480 push_directive(tokens, "f32");
481 match &self.stype {
482 Stype::Ue8m0 => {
483 push_directive(tokens, "ue8m0");
484 }
485 }
486 self.d.unparse_tokens(tokens);
487 tokens.push(PtxToken::Comma);
488 self.a.unparse_tokens(tokens);
489 tokens.push(PtxToken::Comma);
490 self.b.unparse_tokens(tokens);
491 tokens.push(PtxToken::Comma);
492 self.c.unparse_tokens(tokens);
493 tokens.push(PtxToken::Comma);
494 self.e.unparse_tokens(tokens);
495 tokens.push(PtxToken::Comma);
496 self.f.unparse_tokens(tokens);
497 tokens.push(PtxToken::Comma);
498 self.scale_a_data.unparse_tokens(tokens);
499 tokens.push(PtxToken::Comma);
500 self.byte_id_a.unparse_tokens(tokens);
501 tokens.push(PtxToken::Comma);
502 self.scale_b_data.unparse_tokens(tokens);
503 tokens.push(PtxToken::Comma);
504 self.byte_id_b.unparse_tokens(tokens);
505 tokens.push(PtxToken::Semicolon);
506 }
507 }
508}
509
510pub mod section_3 {
511 use super::*;
512 use crate::r#type::instruction::mma_sp::section_3::*;
513
514 impl PtxUnparser
515 for MmaSpvariantSyncAlignedM16n8k128RowColKindBlockScaleScaleVecSizeF32E2m1E2m1F32Stype1
516 {
517 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
518 push_opcode(tokens, "mma");
519 match &self.spvariant {
520 Spvariant::SpOrderedMetadata => {
521 push_directive(tokens, "sp::ordered_metadata");
522 }
523 }
524 push_directive(tokens, "sync");
525 push_directive(tokens, "aligned");
526 push_directive(tokens, "m16n8k128");
527 push_directive(tokens, "row");
528 push_directive(tokens, "col");
529 match &self.kind {
530 Kind::KindMxf4nvf4 => {
531 push_directive(tokens, "kind::mxf4nvf4");
532 }
533 }
534 push_directive(tokens, "block_scale");
535 match &self.scale_vec_size {
536 ScaleVecSize::ScaleVec2x => {
537 push_directive(tokens, "scale_vec::2X");
538 }
539 ScaleVecSize::ScaleVec4x => {
540 push_directive(tokens, "scale_vec::4X");
541 }
542 }
543 push_directive(tokens, "f32");
544 push_directive(tokens, "e2m1");
545 push_directive(tokens, "e2m1");
546 push_directive(tokens, "f32");
547 match &self.stype {
548 Stype::Ue8m0 => {
549 push_directive(tokens, "ue8m0");
550 }
551 Stype::Ue4m3 => {
552 push_directive(tokens, "ue4m3");
553 }
554 }
555 self.d.unparse_tokens(tokens);
556 tokens.push(PtxToken::Comma);
557 self.a.unparse_tokens(tokens);
558 tokens.push(PtxToken::Comma);
559 self.b.unparse_tokens(tokens);
560 tokens.push(PtxToken::Comma);
561 self.c.unparse_tokens(tokens);
562 tokens.push(PtxToken::Comma);
563 self.e.unparse_tokens(tokens);
564 tokens.push(PtxToken::Comma);
565 self.f.unparse_tokens(tokens);
566 tokens.push(PtxToken::Comma);
567 self.scale_a_data.unparse_tokens(tokens);
568 tokens.push(PtxToken::Comma);
569 self.byte_id_a.unparse_tokens(tokens);
570 tokens.push(PtxToken::Comma);
571 self.scale_b_data.unparse_tokens(tokens);
572 tokens.push(PtxToken::Comma);
573 self.byte_id_b.unparse_tokens(tokens);
574 tokens.push(PtxToken::Semicolon);
575 }
576 }
577}
578
579pub mod section_4 {
580 use super::*;
581 use crate::r#type::instruction::mma_sp::section_4::*;
582
583 impl PtxUnparser for MmaSpvariantSyncAlignedM16n8k64RowColKindBlockScaleScaleVecSizeF32F8f6f4typeF8f6f4typeF32Stype {
584 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
585 push_opcode(tokens, "mma");
586 match &self.spvariant {
587 Spvariant::SpOrderedMetadata => {
588 push_directive(tokens, "sp::ordered_metadata");
589 }
590 }
591 push_directive(tokens, "sync");
592 push_directive(tokens, "aligned");
593 push_directive(tokens, "m16n8k64");
594 push_directive(tokens, "row");
595 push_directive(tokens, "col");
596 match &self.kind {
597 Kind::KindMxf8f6f4 => {
598 push_directive(tokens, "kind::mxf8f6f4");
599 }
600 }
601 push_directive(tokens, "block_scale");
602 if let Some(scale_vec_size_1) = self.scale_vec_size.as_ref() {
603 match scale_vec_size_1 {
604 ScaleVecSize::ScaleVec1x => {
605 push_directive(tokens, "scale_vec::1X");
606 }
607 }
608 }
609 push_directive(tokens, "f32");
610 match &self.f8f6f4type {
611 F8f6f4type::E4m3 => {
612 push_directive(tokens, "e4m3");
613 }
614 F8f6f4type::E5m2 => {
615 push_directive(tokens, "e5m2");
616 }
617 F8f6f4type::E3m2 => {
618 push_directive(tokens, "e3m2");
619 }
620 F8f6f4type::E2m3 => {
621 push_directive(tokens, "e2m3");
622 }
623 F8f6f4type::E2m1 => {
624 push_directive(tokens, "e2m1");
625 }
626 }
627 match &self.f8f6f4type1 {
628 F8f6f4type::E4m3 => {
629 push_directive(tokens, "e4m3");
630 }
631 F8f6f4type::E5m2 => {
632 push_directive(tokens, "e5m2");
633 }
634 F8f6f4type::E3m2 => {
635 push_directive(tokens, "e3m2");
636 }
637 F8f6f4type::E2m3 => {
638 push_directive(tokens, "e2m3");
639 }
640 F8f6f4type::E2m1 => {
641 push_directive(tokens, "e2m1");
642 }
643 }
644 push_directive(tokens, "f32");
645 match &self.stype {
646 Stype::Ue8m0 => {
647 push_directive(tokens, "ue8m0");
648 }
649 }
650 self.d.unparse_tokens(tokens);
651 tokens.push(PtxToken::Comma);
652 self.a.unparse_tokens(tokens);
653 tokens.push(PtxToken::Comma);
654 self.b.unparse_tokens(tokens);
655 tokens.push(PtxToken::Comma);
656 self.c.unparse_tokens(tokens);
657 tokens.push(PtxToken::Comma);
658 self.e.unparse_tokens(tokens);
659 tokens.push(PtxToken::Comma);
660 self.f.unparse_tokens(tokens);
661 tokens.push(PtxToken::Comma);
662 self.scale_a_data.unparse_tokens(tokens);
663 tokens.push(PtxToken::Comma);
664 self.byte_id_a.unparse_tokens(tokens);
665 tokens.push(PtxToken::Comma);
666 self.scale_b_data.unparse_tokens(tokens);
667 tokens.push(PtxToken::Comma);
668 self.byte_id_b.unparse_tokens(tokens);
669 tokens.push(PtxToken::Semicolon);
670 }
671 }
672}
673
674pub mod section_5 {
675 use super::*;
676 use crate::r#type::instruction::mma_sp::section_5::*;
677
678 impl PtxUnparser for MmaSpvariantSyncAlignedShapeRowColSatfiniteS32AtypeBtypeS32 {
679 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
680 push_opcode(tokens, "mma");
681 match &self.spvariant {
682 Spvariant::SpOrderedMetadata => {
683 push_directive(tokens, "sp::ordered_metadata");
684 }
685 Spvariant::Sp => {
686 push_directive(tokens, "sp");
687 }
688 }
689 push_directive(tokens, "sync");
690 push_directive(tokens, "aligned");
691 match &self.shape {
692 Shape::M16n8k32 => {
693 push_directive(tokens, "m16n8k32");
694 }
695 Shape::M16n8k64 => {
696 push_directive(tokens, "m16n8k64");
697 }
698 }
699 push_directive(tokens, "row");
700 push_directive(tokens, "col");
701 if self.satfinite {
702 push_directive(tokens, "satfinite");
703 }
704 push_directive(tokens, "s32");
705 match &self.atype {
706 Atype::U8 => {
707 push_directive(tokens, "u8");
708 }
709 Atype::S8 => {
710 push_directive(tokens, "s8");
711 }
712 }
713 match &self.btype {
714 Btype::U8 => {
715 push_directive(tokens, "u8");
716 }
717 Btype::S8 => {
718 push_directive(tokens, "s8");
719 }
720 }
721 push_directive(tokens, "s32");
722 self.d.unparse_tokens(tokens);
723 tokens.push(PtxToken::Comma);
724 self.a.unparse_tokens(tokens);
725 tokens.push(PtxToken::Comma);
726 self.b.unparse_tokens(tokens);
727 tokens.push(PtxToken::Comma);
728 self.c.unparse_tokens(tokens);
729 tokens.push(PtxToken::Comma);
730 self.e.unparse_tokens(tokens);
731 tokens.push(PtxToken::Comma);
732 self.f.unparse_tokens(tokens);
733 tokens.push(PtxToken::Semicolon);
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}