1#![allow(unused)]
70
71use crate::lexer::PtxToken;
72use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
73use crate::r#type::common::*;
74
75pub mod section_0 {
76 use super::*;
77 use crate::r#type::instruction::wmma_load::section_0::*;
78
79 impl PtxParser for Atype {
84 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
85 {
87 let saved_pos = stream.position();
88 if stream.expect_string(".f16").is_ok() {
89 return Ok(Atype::F16);
90 }
91 stream.set_position(saved_pos);
92 }
93 let saved_pos = stream.position();
94 {
96 let saved_pos = stream.position();
97 if stream.expect_string(".s8").is_ok() {
98 return Ok(Atype::S8);
99 }
100 stream.set_position(saved_pos);
101 }
102 stream.set_position(saved_pos);
103 let saved_pos = stream.position();
104 {
106 let saved_pos = stream.position();
107 if stream.expect_string(".u8").is_ok() {
108 return Ok(Atype::U8);
109 }
110 stream.set_position(saved_pos);
111 }
112 stream.set_position(saved_pos);
113 let span = stream
114 .peek()
115 .map(|(_, s)| s.clone())
116 .unwrap_or(Span { start: 0, end: 0 });
117 let expected = &[".f16", ".s8", ".u8"];
118 let found = stream
119 .peek()
120 .map(|(t, _)| format!("{:?}", t))
121 .unwrap_or_else(|_| "<end of input>".to_string());
122 Err(crate::parser::unexpected_value(span, expected, found))
123 }
124 }
125
126 impl PtxParser for Btype {
127 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
128 {
130 let saved_pos = stream.position();
131 if stream.expect_string(".f16").is_ok() {
132 return Ok(Btype::F16);
133 }
134 stream.set_position(saved_pos);
135 }
136 let saved_pos = stream.position();
137 {
139 let saved_pos = stream.position();
140 if stream.expect_string(".s8").is_ok() {
141 return Ok(Btype::S8);
142 }
143 stream.set_position(saved_pos);
144 }
145 stream.set_position(saved_pos);
146 let saved_pos = stream.position();
147 {
149 let saved_pos = stream.position();
150 if stream.expect_string(".u8").is_ok() {
151 return Ok(Btype::U8);
152 }
153 stream.set_position(saved_pos);
154 }
155 stream.set_position(saved_pos);
156 let span = stream
157 .peek()
158 .map(|(_, s)| s.clone())
159 .unwrap_or(Span { start: 0, end: 0 });
160 let expected = &[".f16", ".s8", ".u8"];
161 let found = stream
162 .peek()
163 .map(|(t, _)| format!("{:?}", t))
164 .unwrap_or_else(|_| "<end of input>".to_string());
165 Err(crate::parser::unexpected_value(span, expected, found))
166 }
167 }
168
169 impl PtxParser for Ctype {
170 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
171 {
173 let saved_pos = stream.position();
174 if stream.expect_string(".f16").is_ok() {
175 return Ok(Ctype::F16);
176 }
177 stream.set_position(saved_pos);
178 }
179 let saved_pos = stream.position();
180 {
182 let saved_pos = stream.position();
183 if stream.expect_string(".f32").is_ok() {
184 return Ok(Ctype::F32);
185 }
186 stream.set_position(saved_pos);
187 }
188 stream.set_position(saved_pos);
189 let saved_pos = stream.position();
190 {
192 let saved_pos = stream.position();
193 if stream.expect_string(".s32").is_ok() {
194 return Ok(Ctype::S32);
195 }
196 stream.set_position(saved_pos);
197 }
198 stream.set_position(saved_pos);
199 let span = stream
200 .peek()
201 .map(|(_, s)| s.clone())
202 .unwrap_or(Span { start: 0, end: 0 });
203 let expected = &[".f16", ".f32", ".s32"];
204 let found = stream
205 .peek()
206 .map(|(t, _)| format!("{:?}", t))
207 .unwrap_or_else(|_| "<end of input>".to_string());
208 Err(crate::parser::unexpected_value(span, expected, found))
209 }
210 }
211
212 impl PtxParser for Layout {
213 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
214 {
216 let saved_pos = stream.position();
217 if stream.expect_string(".row").is_ok() {
218 return Ok(Layout::Row);
219 }
220 stream.set_position(saved_pos);
221 }
222 let saved_pos = stream.position();
223 {
225 let saved_pos = stream.position();
226 if stream.expect_string(".col").is_ok() {
227 return Ok(Layout::Col);
228 }
229 stream.set_position(saved_pos);
230 }
231 stream.set_position(saved_pos);
232 let span = stream
233 .peek()
234 .map(|(_, s)| s.clone())
235 .unwrap_or(Span { start: 0, end: 0 });
236 let expected = &[".row", ".col"];
237 let found = stream
238 .peek()
239 .map(|(t, _)| format!("{:?}", t))
240 .unwrap_or_else(|_| "<end of input>".to_string());
241 Err(crate::parser::unexpected_value(span, expected, found))
242 }
243 }
244
245 impl PtxParser for Shape {
246 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
247 {
249 let saved_pos = stream.position();
250 if stream.expect_string(".m16n16k16").is_ok() {
251 return Ok(Shape::M16n16k16);
252 }
253 stream.set_position(saved_pos);
254 }
255 let saved_pos = stream.position();
256 {
258 let saved_pos = stream.position();
259 if stream.expect_string(".m8n32k16").is_ok() {
260 return Ok(Shape::M8n32k16);
261 }
262 stream.set_position(saved_pos);
263 }
264 stream.set_position(saved_pos);
265 let saved_pos = stream.position();
266 {
268 let saved_pos = stream.position();
269 if stream.expect_string(".m32n8k16").is_ok() {
270 return Ok(Shape::M32n8k16);
271 }
272 stream.set_position(saved_pos);
273 }
274 stream.set_position(saved_pos);
275 let span = stream
276 .peek()
277 .map(|(_, s)| s.clone())
278 .unwrap_or(Span { start: 0, end: 0 });
279 let expected = &[".m16n16k16", ".m8n32k16", ".m32n8k16"];
280 let found = stream
281 .peek()
282 .map(|(t, _)| format!("{:?}", t))
283 .unwrap_or_else(|_| "<end of input>".to_string());
284 Err(crate::parser::unexpected_value(span, expected, found))
285 }
286 }
287
288 impl PtxParser for Ss {
289 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
290 {
292 let saved_pos = stream.position();
293 if stream.expect_string(".shared::cta").is_ok() {
294 return Ok(Ss::SharedCta);
295 }
296 stream.set_position(saved_pos);
297 }
298 let saved_pos = stream.position();
299 {
301 let saved_pos = stream.position();
302 if stream.expect_string(".global").is_ok() {
303 return Ok(Ss::Global);
304 }
305 stream.set_position(saved_pos);
306 }
307 stream.set_position(saved_pos);
308 let saved_pos = stream.position();
309 {
311 let saved_pos = stream.position();
312 if stream.expect_string(".shared").is_ok() {
313 return Ok(Ss::Shared);
314 }
315 stream.set_position(saved_pos);
316 }
317 stream.set_position(saved_pos);
318 let span = stream
319 .peek()
320 .map(|(_, s)| s.clone())
321 .unwrap_or(Span { start: 0, end: 0 });
322 let expected = &[".shared::cta", ".global", ".shared"];
323 let found = stream
324 .peek()
325 .map(|(t, _)| format!("{:?}", t))
326 .unwrap_or_else(|_| "<end of input>".to_string());
327 Err(crate::parser::unexpected_value(span, expected, found))
328 }
329 }
330
331 impl PtxParser for WmmaLoadASyncAlignedLayoutShapeSsAtype {
332 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
333 stream.expect_string("wmma")?;
334 stream.expect_string(".load")?;
335 let load = ();
336 stream.expect_complete()?;
337 stream.expect_string(".a")?;
338 let a = ();
339 stream.expect_complete()?;
340 stream.expect_string(".sync")?;
341 let sync = ();
342 stream.expect_complete()?;
343 stream.expect_string(".aligned")?;
344 let aligned = ();
345 stream.expect_complete()?;
346 let layout = Layout::parse(stream)?;
347 stream.expect_complete()?;
348 let shape = Shape::parse(stream)?;
349 stream.expect_complete()?;
350 let saved_pos = stream.position();
351 let ss = match Ss::parse(stream) {
352 Ok(val) => Some(val),
353 Err(_) => {
354 stream.set_position(saved_pos);
355 None
356 }
357 };
358 stream.expect_complete()?;
359 let atype = Atype::parse(stream)?;
360 stream.expect_complete()?;
361 let r = GeneralOperand::parse(stream)?;
362 stream.expect_complete()?;
363 stream.expect(&PtxToken::Comma)?;
364 let p = AddressOperand::parse(stream)?;
365 stream.expect_complete()?;
366 let saved_pos = stream.position();
367 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
368 if !has_comma {
369 stream.set_position(saved_pos);
370 }
371 let saved_pos = stream.position();
372 let stride = match GeneralOperand::parse(stream) {
373 Ok(val) => Some(val),
374 Err(_) => {
375 stream.set_position(saved_pos);
376 None
377 }
378 };
379 stream.expect_complete()?;
380 stream.expect_complete()?;
381 stream.expect(&PtxToken::Semicolon)?;
382 Ok(WmmaLoadASyncAlignedLayoutShapeSsAtype {
383 load,
384 a,
385 sync,
386 aligned,
387 layout,
388 shape,
389 ss,
390 atype,
391 r,
392 p,
393 stride,
394 })
395 }
396 }
397
398 impl PtxParser for WmmaLoadBSyncAlignedLayoutShapeSsBtype {
399 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
400 stream.expect_string("wmma")?;
401 stream.expect_string(".load")?;
402 let load = ();
403 stream.expect_complete()?;
404 stream.expect_string(".b")?;
405 let b = ();
406 stream.expect_complete()?;
407 stream.expect_string(".sync")?;
408 let sync = ();
409 stream.expect_complete()?;
410 stream.expect_string(".aligned")?;
411 let aligned = ();
412 stream.expect_complete()?;
413 let layout = Layout::parse(stream)?;
414 stream.expect_complete()?;
415 let shape = Shape::parse(stream)?;
416 stream.expect_complete()?;
417 let saved_pos = stream.position();
418 let ss = match Ss::parse(stream) {
419 Ok(val) => Some(val),
420 Err(_) => {
421 stream.set_position(saved_pos);
422 None
423 }
424 };
425 stream.expect_complete()?;
426 let btype = Btype::parse(stream)?;
427 stream.expect_complete()?;
428 let r = GeneralOperand::parse(stream)?;
429 stream.expect_complete()?;
430 stream.expect(&PtxToken::Comma)?;
431 let p = AddressOperand::parse(stream)?;
432 stream.expect_complete()?;
433 let saved_pos = stream.position();
434 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
435 if !has_comma {
436 stream.set_position(saved_pos);
437 }
438 let saved_pos = stream.position();
439 let stride = match GeneralOperand::parse(stream) {
440 Ok(val) => Some(val),
441 Err(_) => {
442 stream.set_position(saved_pos);
443 None
444 }
445 };
446 stream.expect_complete()?;
447 stream.expect_complete()?;
448 stream.expect(&PtxToken::Semicolon)?;
449 Ok(WmmaLoadBSyncAlignedLayoutShapeSsBtype {
450 load,
451 b,
452 sync,
453 aligned,
454 layout,
455 shape,
456 ss,
457 btype,
458 r,
459 p,
460 stride,
461 })
462 }
463 }
464
465 impl PtxParser for WmmaLoadCSyncAlignedLayoutShapeSsCtype {
466 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
467 stream.expect_string("wmma")?;
468 stream.expect_string(".load")?;
469 let load = ();
470 stream.expect_complete()?;
471 stream.expect_string(".c")?;
472 let c = ();
473 stream.expect_complete()?;
474 stream.expect_string(".sync")?;
475 let sync = ();
476 stream.expect_complete()?;
477 stream.expect_string(".aligned")?;
478 let aligned = ();
479 stream.expect_complete()?;
480 let layout = Layout::parse(stream)?;
481 stream.expect_complete()?;
482 let shape = Shape::parse(stream)?;
483 stream.expect_complete()?;
484 let saved_pos = stream.position();
485 let ss = match Ss::parse(stream) {
486 Ok(val) => Some(val),
487 Err(_) => {
488 stream.set_position(saved_pos);
489 None
490 }
491 };
492 stream.expect_complete()?;
493 let ctype = Ctype::parse(stream)?;
494 stream.expect_complete()?;
495 let r = GeneralOperand::parse(stream)?;
496 stream.expect_complete()?;
497 stream.expect(&PtxToken::Comma)?;
498 let p = AddressOperand::parse(stream)?;
499 stream.expect_complete()?;
500 let saved_pos = stream.position();
501 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
502 if !has_comma {
503 stream.set_position(saved_pos);
504 }
505 let saved_pos = stream.position();
506 let stride = match GeneralOperand::parse(stream) {
507 Ok(val) => Some(val),
508 Err(_) => {
509 stream.set_position(saved_pos);
510 None
511 }
512 };
513 stream.expect_complete()?;
514 stream.expect_complete()?;
515 stream.expect(&PtxToken::Semicolon)?;
516 Ok(WmmaLoadCSyncAlignedLayoutShapeSsCtype {
517 load,
518 c,
519 sync,
520 aligned,
521 layout,
522 shape,
523 ss,
524 ctype,
525 r,
526 p,
527 stride,
528 })
529 }
530 }
531}
532
533pub mod section_1 {
534 use super::*;
535 use crate::r#type::instruction::wmma_load::section_1::*;
536
537 impl PtxParser for Atype {
542 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
543 {
545 let saved_pos = stream.position();
546 if stream.expect_string(".bf16").is_ok() {
547 return Ok(Atype::Bf16);
548 }
549 stream.set_position(saved_pos);
550 }
551 let span = stream
552 .peek()
553 .map(|(_, s)| s.clone())
554 .unwrap_or(Span { start: 0, end: 0 });
555 let expected = &[".bf16"];
556 let found = stream
557 .peek()
558 .map(|(t, _)| format!("{:?}", t))
559 .unwrap_or_else(|_| "<end of input>".to_string());
560 Err(crate::parser::unexpected_value(span, expected, found))
561 }
562 }
563
564 impl PtxParser for Btype {
565 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
566 {
568 let saved_pos = stream.position();
569 if stream.expect_string(".bf16").is_ok() {
570 return Ok(Btype::Bf16);
571 }
572 stream.set_position(saved_pos);
573 }
574 let span = stream
575 .peek()
576 .map(|(_, s)| s.clone())
577 .unwrap_or(Span { start: 0, end: 0 });
578 let expected = &[".bf16"];
579 let found = stream
580 .peek()
581 .map(|(t, _)| format!("{:?}", t))
582 .unwrap_or_else(|_| "<end of input>".to_string());
583 Err(crate::parser::unexpected_value(span, expected, found))
584 }
585 }
586
587 impl PtxParser for Ctype {
588 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
589 {
591 let saved_pos = stream.position();
592 if stream.expect_string(".f32").is_ok() {
593 return Ok(Ctype::F32);
594 }
595 stream.set_position(saved_pos);
596 }
597 let span = stream
598 .peek()
599 .map(|(_, s)| s.clone())
600 .unwrap_or(Span { start: 0, end: 0 });
601 let expected = &[".f32"];
602 let found = stream
603 .peek()
604 .map(|(t, _)| format!("{:?}", t))
605 .unwrap_or_else(|_| "<end of input>".to_string());
606 Err(crate::parser::unexpected_value(span, expected, found))
607 }
608 }
609
610 impl PtxParser for Layout {
611 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
612 {
614 let saved_pos = stream.position();
615 if stream.expect_string(".row").is_ok() {
616 return Ok(Layout::Row);
617 }
618 stream.set_position(saved_pos);
619 }
620 let saved_pos = stream.position();
621 {
623 let saved_pos = stream.position();
624 if stream.expect_string(".col").is_ok() {
625 return Ok(Layout::Col);
626 }
627 stream.set_position(saved_pos);
628 }
629 stream.set_position(saved_pos);
630 let span = stream
631 .peek()
632 .map(|(_, s)| s.clone())
633 .unwrap_or(Span { start: 0, end: 0 });
634 let expected = &[".row", ".col"];
635 let found = stream
636 .peek()
637 .map(|(t, _)| format!("{:?}", t))
638 .unwrap_or_else(|_| "<end of input>".to_string());
639 Err(crate::parser::unexpected_value(span, expected, found))
640 }
641 }
642
643 impl PtxParser for Shape {
644 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
645 {
647 let saved_pos = stream.position();
648 if stream.expect_string(".m16n16k16").is_ok() {
649 return Ok(Shape::M16n16k16);
650 }
651 stream.set_position(saved_pos);
652 }
653 let saved_pos = stream.position();
654 {
656 let saved_pos = stream.position();
657 if stream.expect_string(".m8n32k16").is_ok() {
658 return Ok(Shape::M8n32k16);
659 }
660 stream.set_position(saved_pos);
661 }
662 stream.set_position(saved_pos);
663 let saved_pos = stream.position();
664 {
666 let saved_pos = stream.position();
667 if stream.expect_string(".m32n8k16").is_ok() {
668 return Ok(Shape::M32n8k16);
669 }
670 stream.set_position(saved_pos);
671 }
672 stream.set_position(saved_pos);
673 let span = stream
674 .peek()
675 .map(|(_, s)| s.clone())
676 .unwrap_or(Span { start: 0, end: 0 });
677 let expected = &[".m16n16k16", ".m8n32k16", ".m32n8k16"];
678 let found = stream
679 .peek()
680 .map(|(t, _)| format!("{:?}", t))
681 .unwrap_or_else(|_| "<end of input>".to_string());
682 Err(crate::parser::unexpected_value(span, expected, found))
683 }
684 }
685
686 impl PtxParser for Ss {
687 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
688 {
690 let saved_pos = stream.position();
691 if stream.expect_string(".shared::cta").is_ok() {
692 return Ok(Ss::SharedCta);
693 }
694 stream.set_position(saved_pos);
695 }
696 let saved_pos = stream.position();
697 {
699 let saved_pos = stream.position();
700 if stream.expect_string(".global").is_ok() {
701 return Ok(Ss::Global);
702 }
703 stream.set_position(saved_pos);
704 }
705 stream.set_position(saved_pos);
706 let saved_pos = stream.position();
707 {
709 let saved_pos = stream.position();
710 if stream.expect_string(".shared").is_ok() {
711 return Ok(Ss::Shared);
712 }
713 stream.set_position(saved_pos);
714 }
715 stream.set_position(saved_pos);
716 let span = stream
717 .peek()
718 .map(|(_, s)| s.clone())
719 .unwrap_or(Span { start: 0, end: 0 });
720 let expected = &[".shared::cta", ".global", ".shared"];
721 let found = stream
722 .peek()
723 .map(|(t, _)| format!("{:?}", t))
724 .unwrap_or_else(|_| "<end of input>".to_string());
725 Err(crate::parser::unexpected_value(span, expected, found))
726 }
727 }
728
729 impl PtxParser for WmmaLoadASyncAlignedLayoutShapeSsAtype1 {
730 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
731 stream.expect_string("wmma")?;
732 stream.expect_string(".load")?;
733 let load = ();
734 stream.expect_complete()?;
735 stream.expect_string(".a")?;
736 let a = ();
737 stream.expect_complete()?;
738 stream.expect_string(".sync")?;
739 let sync = ();
740 stream.expect_complete()?;
741 stream.expect_string(".aligned")?;
742 let aligned = ();
743 stream.expect_complete()?;
744 let layout = Layout::parse(stream)?;
745 stream.expect_complete()?;
746 let shape = Shape::parse(stream)?;
747 stream.expect_complete()?;
748 let saved_pos = stream.position();
749 let ss = match Ss::parse(stream) {
750 Ok(val) => Some(val),
751 Err(_) => {
752 stream.set_position(saved_pos);
753 None
754 }
755 };
756 stream.expect_complete()?;
757 let atype = Atype::parse(stream)?;
758 stream.expect_complete()?;
759 let r = GeneralOperand::parse(stream)?;
760 stream.expect_complete()?;
761 stream.expect(&PtxToken::Comma)?;
762 let p = AddressOperand::parse(stream)?;
763 stream.expect_complete()?;
764 let saved_pos = stream.position();
765 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
766 if !has_comma {
767 stream.set_position(saved_pos);
768 }
769 let saved_pos = stream.position();
770 let stride = match GeneralOperand::parse(stream) {
771 Ok(val) => Some(val),
772 Err(_) => {
773 stream.set_position(saved_pos);
774 None
775 }
776 };
777 stream.expect_complete()?;
778 stream.expect_complete()?;
779 stream.expect(&PtxToken::Semicolon)?;
780 Ok(WmmaLoadASyncAlignedLayoutShapeSsAtype1 {
781 load,
782 a,
783 sync,
784 aligned,
785 layout,
786 shape,
787 ss,
788 atype,
789 r,
790 p,
791 stride,
792 })
793 }
794 }
795
796 impl PtxParser for WmmaLoadBSyncAlignedLayoutShapeSsBtype1 {
797 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
798 stream.expect_string("wmma")?;
799 stream.expect_string(".load")?;
800 let load = ();
801 stream.expect_complete()?;
802 stream.expect_string(".b")?;
803 let b = ();
804 stream.expect_complete()?;
805 stream.expect_string(".sync")?;
806 let sync = ();
807 stream.expect_complete()?;
808 stream.expect_string(".aligned")?;
809 let aligned = ();
810 stream.expect_complete()?;
811 let layout = Layout::parse(stream)?;
812 stream.expect_complete()?;
813 let shape = Shape::parse(stream)?;
814 stream.expect_complete()?;
815 let saved_pos = stream.position();
816 let ss = match Ss::parse(stream) {
817 Ok(val) => Some(val),
818 Err(_) => {
819 stream.set_position(saved_pos);
820 None
821 }
822 };
823 stream.expect_complete()?;
824 let btype = Btype::parse(stream)?;
825 stream.expect_complete()?;
826 let r = GeneralOperand::parse(stream)?;
827 stream.expect_complete()?;
828 stream.expect(&PtxToken::Comma)?;
829 let p = AddressOperand::parse(stream)?;
830 stream.expect_complete()?;
831 let saved_pos = stream.position();
832 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
833 if !has_comma {
834 stream.set_position(saved_pos);
835 }
836 let saved_pos = stream.position();
837 let stride = match GeneralOperand::parse(stream) {
838 Ok(val) => Some(val),
839 Err(_) => {
840 stream.set_position(saved_pos);
841 None
842 }
843 };
844 stream.expect_complete()?;
845 stream.expect_complete()?;
846 stream.expect(&PtxToken::Semicolon)?;
847 Ok(WmmaLoadBSyncAlignedLayoutShapeSsBtype1 {
848 load,
849 b,
850 sync,
851 aligned,
852 layout,
853 shape,
854 ss,
855 btype,
856 r,
857 p,
858 stride,
859 })
860 }
861 }
862
863 impl PtxParser for WmmaLoadCSyncAlignedLayoutShapeSsCtype1 {
864 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
865 stream.expect_string("wmma")?;
866 stream.expect_string(".load")?;
867 let load = ();
868 stream.expect_complete()?;
869 stream.expect_string(".c")?;
870 let c = ();
871 stream.expect_complete()?;
872 stream.expect_string(".sync")?;
873 let sync = ();
874 stream.expect_complete()?;
875 stream.expect_string(".aligned")?;
876 let aligned = ();
877 stream.expect_complete()?;
878 let layout = Layout::parse(stream)?;
879 stream.expect_complete()?;
880 let shape = Shape::parse(stream)?;
881 stream.expect_complete()?;
882 let saved_pos = stream.position();
883 let ss = match Ss::parse(stream) {
884 Ok(val) => Some(val),
885 Err(_) => {
886 stream.set_position(saved_pos);
887 None
888 }
889 };
890 stream.expect_complete()?;
891 let ctype = Ctype::parse(stream)?;
892 stream.expect_complete()?;
893 let r = GeneralOperand::parse(stream)?;
894 stream.expect_complete()?;
895 stream.expect(&PtxToken::Comma)?;
896 let p = AddressOperand::parse(stream)?;
897 stream.expect_complete()?;
898 let saved_pos = stream.position();
899 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
900 if !has_comma {
901 stream.set_position(saved_pos);
902 }
903 let saved_pos = stream.position();
904 let stride = match GeneralOperand::parse(stream) {
905 Ok(val) => Some(val),
906 Err(_) => {
907 stream.set_position(saved_pos);
908 None
909 }
910 };
911 stream.expect_complete()?;
912 stream.expect_complete()?;
913 stream.expect(&PtxToken::Semicolon)?;
914 Ok(WmmaLoadCSyncAlignedLayoutShapeSsCtype1 {
915 load,
916 c,
917 sync,
918 aligned,
919 layout,
920 shape,
921 ss,
922 ctype,
923 r,
924 p,
925 stride,
926 })
927 }
928 }
929}
930
931pub mod section_2 {
932 use super::*;
933 use crate::r#type::instruction::wmma_load::section_2::*;
934
935 impl PtxParser for Atype {
940 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
941 {
943 let saved_pos = stream.position();
944 if stream.expect_string(".tf32").is_ok() {
945 return Ok(Atype::Tf32);
946 }
947 stream.set_position(saved_pos);
948 }
949 let span = stream
950 .peek()
951 .map(|(_, s)| s.clone())
952 .unwrap_or(Span { start: 0, end: 0 });
953 let expected = &[".tf32"];
954 let found = stream
955 .peek()
956 .map(|(t, _)| format!("{:?}", t))
957 .unwrap_or_else(|_| "<end of input>".to_string());
958 Err(crate::parser::unexpected_value(span, expected, found))
959 }
960 }
961
962 impl PtxParser for Btype {
963 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
964 {
966 let saved_pos = stream.position();
967 if stream.expect_string(".tf32").is_ok() {
968 return Ok(Btype::Tf32);
969 }
970 stream.set_position(saved_pos);
971 }
972 let span = stream
973 .peek()
974 .map(|(_, s)| s.clone())
975 .unwrap_or(Span { start: 0, end: 0 });
976 let expected = &[".tf32"];
977 let found = stream
978 .peek()
979 .map(|(t, _)| format!("{:?}", t))
980 .unwrap_or_else(|_| "<end of input>".to_string());
981 Err(crate::parser::unexpected_value(span, expected, found))
982 }
983 }
984
985 impl PtxParser for Ctype {
986 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
987 {
989 let saved_pos = stream.position();
990 if stream.expect_string(".f32").is_ok() {
991 return Ok(Ctype::F32);
992 }
993 stream.set_position(saved_pos);
994 }
995 let span = stream
996 .peek()
997 .map(|(_, s)| s.clone())
998 .unwrap_or(Span { start: 0, end: 0 });
999 let expected = &[".f32"];
1000 let found = stream
1001 .peek()
1002 .map(|(t, _)| format!("{:?}", t))
1003 .unwrap_or_else(|_| "<end of input>".to_string());
1004 Err(crate::parser::unexpected_value(span, expected, found))
1005 }
1006 }
1007
1008 impl PtxParser for Layout {
1009 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1010 {
1012 let saved_pos = stream.position();
1013 if stream.expect_string(".row").is_ok() {
1014 return Ok(Layout::Row);
1015 }
1016 stream.set_position(saved_pos);
1017 }
1018 let saved_pos = stream.position();
1019 {
1021 let saved_pos = stream.position();
1022 if stream.expect_string(".col").is_ok() {
1023 return Ok(Layout::Col);
1024 }
1025 stream.set_position(saved_pos);
1026 }
1027 stream.set_position(saved_pos);
1028 let span = stream
1029 .peek()
1030 .map(|(_, s)| s.clone())
1031 .unwrap_or(Span { start: 0, end: 0 });
1032 let expected = &[".row", ".col"];
1033 let found = stream
1034 .peek()
1035 .map(|(t, _)| format!("{:?}", t))
1036 .unwrap_or_else(|_| "<end of input>".to_string());
1037 Err(crate::parser::unexpected_value(span, expected, found))
1038 }
1039 }
1040
1041 impl PtxParser for Shape {
1042 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1043 {
1045 let saved_pos = stream.position();
1046 if stream.expect_string(".m16n16k8").is_ok() {
1047 return Ok(Shape::M16n16k8);
1048 }
1049 stream.set_position(saved_pos);
1050 }
1051 let span = stream
1052 .peek()
1053 .map(|(_, s)| s.clone())
1054 .unwrap_or(Span { start: 0, end: 0 });
1055 let expected = &[".m16n16k8"];
1056 let found = stream
1057 .peek()
1058 .map(|(t, _)| format!("{:?}", t))
1059 .unwrap_or_else(|_| "<end of input>".to_string());
1060 Err(crate::parser::unexpected_value(span, expected, found))
1061 }
1062 }
1063
1064 impl PtxParser for Ss {
1065 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1066 {
1068 let saved_pos = stream.position();
1069 if stream.expect_string(".shared::cta").is_ok() {
1070 return Ok(Ss::SharedCta);
1071 }
1072 stream.set_position(saved_pos);
1073 }
1074 let saved_pos = stream.position();
1075 {
1077 let saved_pos = stream.position();
1078 if stream.expect_string(".global").is_ok() {
1079 return Ok(Ss::Global);
1080 }
1081 stream.set_position(saved_pos);
1082 }
1083 stream.set_position(saved_pos);
1084 let saved_pos = stream.position();
1085 {
1087 let saved_pos = stream.position();
1088 if stream.expect_string(".shared").is_ok() {
1089 return Ok(Ss::Shared);
1090 }
1091 stream.set_position(saved_pos);
1092 }
1093 stream.set_position(saved_pos);
1094 let span = stream
1095 .peek()
1096 .map(|(_, s)| s.clone())
1097 .unwrap_or(Span { start: 0, end: 0 });
1098 let expected = &[".shared::cta", ".global", ".shared"];
1099 let found = stream
1100 .peek()
1101 .map(|(t, _)| format!("{:?}", t))
1102 .unwrap_or_else(|_| "<end of input>".to_string());
1103 Err(crate::parser::unexpected_value(span, expected, found))
1104 }
1105 }
1106
1107 impl PtxParser for WmmaLoadASyncAlignedLayoutShapeSsAtype2 {
1108 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1109 stream.expect_string("wmma")?;
1110 stream.expect_string(".load")?;
1111 let load = ();
1112 stream.expect_complete()?;
1113 stream.expect_string(".a")?;
1114 let a = ();
1115 stream.expect_complete()?;
1116 stream.expect_string(".sync")?;
1117 let sync = ();
1118 stream.expect_complete()?;
1119 stream.expect_string(".aligned")?;
1120 let aligned = ();
1121 stream.expect_complete()?;
1122 let layout = Layout::parse(stream)?;
1123 stream.expect_complete()?;
1124 let shape = Shape::parse(stream)?;
1125 stream.expect_complete()?;
1126 let saved_pos = stream.position();
1127 let ss = match Ss::parse(stream) {
1128 Ok(val) => Some(val),
1129 Err(_) => {
1130 stream.set_position(saved_pos);
1131 None
1132 }
1133 };
1134 stream.expect_complete()?;
1135 let atype = Atype::parse(stream)?;
1136 stream.expect_complete()?;
1137 let r = GeneralOperand::parse(stream)?;
1138 stream.expect_complete()?;
1139 stream.expect(&PtxToken::Comma)?;
1140 let p = AddressOperand::parse(stream)?;
1141 stream.expect_complete()?;
1142 let saved_pos = stream.position();
1143 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
1144 if !has_comma {
1145 stream.set_position(saved_pos);
1146 }
1147 let saved_pos = stream.position();
1148 let stride = match GeneralOperand::parse(stream) {
1149 Ok(val) => Some(val),
1150 Err(_) => {
1151 stream.set_position(saved_pos);
1152 None
1153 }
1154 };
1155 stream.expect_complete()?;
1156 stream.expect_complete()?;
1157 stream.expect(&PtxToken::Semicolon)?;
1158 Ok(WmmaLoadASyncAlignedLayoutShapeSsAtype2 {
1159 load,
1160 a,
1161 sync,
1162 aligned,
1163 layout,
1164 shape,
1165 ss,
1166 atype,
1167 r,
1168 p,
1169 stride,
1170 })
1171 }
1172 }
1173
1174 impl PtxParser for WmmaLoadBSyncAlignedLayoutShapeSsBtype2 {
1175 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1176 stream.expect_string("wmma")?;
1177 stream.expect_string(".load")?;
1178 let load = ();
1179 stream.expect_complete()?;
1180 stream.expect_string(".b")?;
1181 let b = ();
1182 stream.expect_complete()?;
1183 stream.expect_string(".sync")?;
1184 let sync = ();
1185 stream.expect_complete()?;
1186 stream.expect_string(".aligned")?;
1187 let aligned = ();
1188 stream.expect_complete()?;
1189 let layout = Layout::parse(stream)?;
1190 stream.expect_complete()?;
1191 let shape = Shape::parse(stream)?;
1192 stream.expect_complete()?;
1193 let saved_pos = stream.position();
1194 let ss = match Ss::parse(stream) {
1195 Ok(val) => Some(val),
1196 Err(_) => {
1197 stream.set_position(saved_pos);
1198 None
1199 }
1200 };
1201 stream.expect_complete()?;
1202 let btype = Btype::parse(stream)?;
1203 stream.expect_complete()?;
1204 let r = GeneralOperand::parse(stream)?;
1205 stream.expect_complete()?;
1206 stream.expect(&PtxToken::Comma)?;
1207 let p = AddressOperand::parse(stream)?;
1208 stream.expect_complete()?;
1209 let saved_pos = stream.position();
1210 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
1211 if !has_comma {
1212 stream.set_position(saved_pos);
1213 }
1214 let saved_pos = stream.position();
1215 let stride = match GeneralOperand::parse(stream) {
1216 Ok(val) => Some(val),
1217 Err(_) => {
1218 stream.set_position(saved_pos);
1219 None
1220 }
1221 };
1222 stream.expect_complete()?;
1223 stream.expect_complete()?;
1224 stream.expect(&PtxToken::Semicolon)?;
1225 Ok(WmmaLoadBSyncAlignedLayoutShapeSsBtype2 {
1226 load,
1227 b,
1228 sync,
1229 aligned,
1230 layout,
1231 shape,
1232 ss,
1233 btype,
1234 r,
1235 p,
1236 stride,
1237 })
1238 }
1239 }
1240
1241 impl PtxParser for WmmaLoadCSyncAlignedLayoutShapeSsCtype2 {
1242 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1243 stream.expect_string("wmma")?;
1244 stream.expect_string(".load")?;
1245 let load = ();
1246 stream.expect_complete()?;
1247 stream.expect_string(".c")?;
1248 let c = ();
1249 stream.expect_complete()?;
1250 stream.expect_string(".sync")?;
1251 let sync = ();
1252 stream.expect_complete()?;
1253 stream.expect_string(".aligned")?;
1254 let aligned = ();
1255 stream.expect_complete()?;
1256 let layout = Layout::parse(stream)?;
1257 stream.expect_complete()?;
1258 let shape = Shape::parse(stream)?;
1259 stream.expect_complete()?;
1260 let saved_pos = stream.position();
1261 let ss = match Ss::parse(stream) {
1262 Ok(val) => Some(val),
1263 Err(_) => {
1264 stream.set_position(saved_pos);
1265 None
1266 }
1267 };
1268 stream.expect_complete()?;
1269 let ctype = Ctype::parse(stream)?;
1270 stream.expect_complete()?;
1271 let r = GeneralOperand::parse(stream)?;
1272 stream.expect_complete()?;
1273 stream.expect(&PtxToken::Comma)?;
1274 let p = AddressOperand::parse(stream)?;
1275 stream.expect_complete()?;
1276 let saved_pos = stream.position();
1277 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
1278 if !has_comma {
1279 stream.set_position(saved_pos);
1280 }
1281 let saved_pos = stream.position();
1282 let stride = match GeneralOperand::parse(stream) {
1283 Ok(val) => Some(val),
1284 Err(_) => {
1285 stream.set_position(saved_pos);
1286 None
1287 }
1288 };
1289 stream.expect_complete()?;
1290 stream.expect_complete()?;
1291 stream.expect(&PtxToken::Semicolon)?;
1292 Ok(WmmaLoadCSyncAlignedLayoutShapeSsCtype2 {
1293 load,
1294 c,
1295 sync,
1296 aligned,
1297 layout,
1298 shape,
1299 ss,
1300 ctype,
1301 r,
1302 p,
1303 stride,
1304 })
1305 }
1306 }
1307}
1308
1309pub mod section_3 {
1310 use super::*;
1311 use crate::r#type::instruction::wmma_load::section_3::*;
1312
1313 impl PtxParser for Atype {
1318 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1319 {
1321 let saved_pos = stream.position();
1322 if stream.expect_string(".f64").is_ok() {
1323 return Ok(Atype::F64);
1324 }
1325 stream.set_position(saved_pos);
1326 }
1327 let span = stream
1328 .peek()
1329 .map(|(_, s)| s.clone())
1330 .unwrap_or(Span { start: 0, end: 0 });
1331 let expected = &[".f64"];
1332 let found = stream
1333 .peek()
1334 .map(|(t, _)| format!("{:?}", t))
1335 .unwrap_or_else(|_| "<end of input>".to_string());
1336 Err(crate::parser::unexpected_value(span, expected, found))
1337 }
1338 }
1339
1340 impl PtxParser for Btype {
1341 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1342 {
1344 let saved_pos = stream.position();
1345 if stream.expect_string(".f64").is_ok() {
1346 return Ok(Btype::F64);
1347 }
1348 stream.set_position(saved_pos);
1349 }
1350 let span = stream
1351 .peek()
1352 .map(|(_, s)| s.clone())
1353 .unwrap_or(Span { start: 0, end: 0 });
1354 let expected = &[".f64"];
1355 let found = stream
1356 .peek()
1357 .map(|(t, _)| format!("{:?}", t))
1358 .unwrap_or_else(|_| "<end of input>".to_string());
1359 Err(crate::parser::unexpected_value(span, expected, found))
1360 }
1361 }
1362
1363 impl PtxParser for Ctype {
1364 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1365 {
1367 let saved_pos = stream.position();
1368 if stream.expect_string(".f64").is_ok() {
1369 return Ok(Ctype::F64);
1370 }
1371 stream.set_position(saved_pos);
1372 }
1373 let span = stream
1374 .peek()
1375 .map(|(_, s)| s.clone())
1376 .unwrap_or(Span { start: 0, end: 0 });
1377 let expected = &[".f64"];
1378 let found = stream
1379 .peek()
1380 .map(|(t, _)| format!("{:?}", t))
1381 .unwrap_or_else(|_| "<end of input>".to_string());
1382 Err(crate::parser::unexpected_value(span, expected, found))
1383 }
1384 }
1385
1386 impl PtxParser for Layout {
1387 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1388 {
1390 let saved_pos = stream.position();
1391 if stream.expect_string(".row").is_ok() {
1392 return Ok(Layout::Row);
1393 }
1394 stream.set_position(saved_pos);
1395 }
1396 let saved_pos = stream.position();
1397 {
1399 let saved_pos = stream.position();
1400 if stream.expect_string(".col").is_ok() {
1401 return Ok(Layout::Col);
1402 }
1403 stream.set_position(saved_pos);
1404 }
1405 stream.set_position(saved_pos);
1406 let span = stream
1407 .peek()
1408 .map(|(_, s)| s.clone())
1409 .unwrap_or(Span { start: 0, end: 0 });
1410 let expected = &[".row", ".col"];
1411 let found = stream
1412 .peek()
1413 .map(|(t, _)| format!("{:?}", t))
1414 .unwrap_or_else(|_| "<end of input>".to_string());
1415 Err(crate::parser::unexpected_value(span, expected, found))
1416 }
1417 }
1418
1419 impl PtxParser for Shape {
1420 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1421 {
1423 let saved_pos = stream.position();
1424 if stream.expect_string(".m8n8k4").is_ok() {
1425 return Ok(Shape::M8n8k4);
1426 }
1427 stream.set_position(saved_pos);
1428 }
1429 let span = stream
1430 .peek()
1431 .map(|(_, s)| s.clone())
1432 .unwrap_or(Span { start: 0, end: 0 });
1433 let expected = &[".m8n8k4"];
1434 let found = stream
1435 .peek()
1436 .map(|(t, _)| format!("{:?}", t))
1437 .unwrap_or_else(|_| "<end of input>".to_string());
1438 Err(crate::parser::unexpected_value(span, expected, found))
1439 }
1440 }
1441
1442 impl PtxParser for Ss {
1443 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1444 {
1446 let saved_pos = stream.position();
1447 if stream.expect_string(".shared::cta").is_ok() {
1448 return Ok(Ss::SharedCta);
1449 }
1450 stream.set_position(saved_pos);
1451 }
1452 let saved_pos = stream.position();
1453 {
1455 let saved_pos = stream.position();
1456 if stream.expect_string(".global").is_ok() {
1457 return Ok(Ss::Global);
1458 }
1459 stream.set_position(saved_pos);
1460 }
1461 stream.set_position(saved_pos);
1462 let saved_pos = stream.position();
1463 {
1465 let saved_pos = stream.position();
1466 if stream.expect_string(".shared").is_ok() {
1467 return Ok(Ss::Shared);
1468 }
1469 stream.set_position(saved_pos);
1470 }
1471 stream.set_position(saved_pos);
1472 let span = stream
1473 .peek()
1474 .map(|(_, s)| s.clone())
1475 .unwrap_or(Span { start: 0, end: 0 });
1476 let expected = &[".shared::cta", ".global", ".shared"];
1477 let found = stream
1478 .peek()
1479 .map(|(t, _)| format!("{:?}", t))
1480 .unwrap_or_else(|_| "<end of input>".to_string());
1481 Err(crate::parser::unexpected_value(span, expected, found))
1482 }
1483 }
1484
1485 impl PtxParser for WmmaLoadASyncAlignedLayoutShapeSsAtype3 {
1486 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1487 stream.expect_string("wmma")?;
1488 stream.expect_string(".load")?;
1489 let load = ();
1490 stream.expect_complete()?;
1491 stream.expect_string(".a")?;
1492 let a = ();
1493 stream.expect_complete()?;
1494 stream.expect_string(".sync")?;
1495 let sync = ();
1496 stream.expect_complete()?;
1497 stream.expect_string(".aligned")?;
1498 let aligned = ();
1499 stream.expect_complete()?;
1500 let layout = Layout::parse(stream)?;
1501 stream.expect_complete()?;
1502 let shape = Shape::parse(stream)?;
1503 stream.expect_complete()?;
1504 let saved_pos = stream.position();
1505 let ss = match Ss::parse(stream) {
1506 Ok(val) => Some(val),
1507 Err(_) => {
1508 stream.set_position(saved_pos);
1509 None
1510 }
1511 };
1512 stream.expect_complete()?;
1513 let atype = Atype::parse(stream)?;
1514 stream.expect_complete()?;
1515 let r = GeneralOperand::parse(stream)?;
1516 stream.expect_complete()?;
1517 stream.expect(&PtxToken::Comma)?;
1518 let p = AddressOperand::parse(stream)?;
1519 stream.expect_complete()?;
1520 let saved_pos = stream.position();
1521 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
1522 if !has_comma {
1523 stream.set_position(saved_pos);
1524 }
1525 let saved_pos = stream.position();
1526 let stride = match GeneralOperand::parse(stream) {
1527 Ok(val) => Some(val),
1528 Err(_) => {
1529 stream.set_position(saved_pos);
1530 None
1531 }
1532 };
1533 stream.expect_complete()?;
1534 stream.expect_complete()?;
1535 stream.expect(&PtxToken::Semicolon)?;
1536 Ok(WmmaLoadASyncAlignedLayoutShapeSsAtype3 {
1537 load,
1538 a,
1539 sync,
1540 aligned,
1541 layout,
1542 shape,
1543 ss,
1544 atype,
1545 r,
1546 p,
1547 stride,
1548 })
1549 }
1550 }
1551
1552 impl PtxParser for WmmaLoadBSyncAlignedLayoutShapeSsBtype3 {
1553 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1554 stream.expect_string("wmma")?;
1555 stream.expect_string(".load")?;
1556 let load = ();
1557 stream.expect_complete()?;
1558 stream.expect_string(".b")?;
1559 let b = ();
1560 stream.expect_complete()?;
1561 stream.expect_string(".sync")?;
1562 let sync = ();
1563 stream.expect_complete()?;
1564 stream.expect_string(".aligned")?;
1565 let aligned = ();
1566 stream.expect_complete()?;
1567 let layout = Layout::parse(stream)?;
1568 stream.expect_complete()?;
1569 let shape = Shape::parse(stream)?;
1570 stream.expect_complete()?;
1571 let saved_pos = stream.position();
1572 let ss = match Ss::parse(stream) {
1573 Ok(val) => Some(val),
1574 Err(_) => {
1575 stream.set_position(saved_pos);
1576 None
1577 }
1578 };
1579 stream.expect_complete()?;
1580 let btype = Btype::parse(stream)?;
1581 stream.expect_complete()?;
1582 let r = GeneralOperand::parse(stream)?;
1583 stream.expect_complete()?;
1584 stream.expect(&PtxToken::Comma)?;
1585 let p = AddressOperand::parse(stream)?;
1586 stream.expect_complete()?;
1587 let saved_pos = stream.position();
1588 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
1589 if !has_comma {
1590 stream.set_position(saved_pos);
1591 }
1592 let saved_pos = stream.position();
1593 let stride = match GeneralOperand::parse(stream) {
1594 Ok(val) => Some(val),
1595 Err(_) => {
1596 stream.set_position(saved_pos);
1597 None
1598 }
1599 };
1600 stream.expect_complete()?;
1601 stream.expect_complete()?;
1602 stream.expect(&PtxToken::Semicolon)?;
1603 Ok(WmmaLoadBSyncAlignedLayoutShapeSsBtype3 {
1604 load,
1605 b,
1606 sync,
1607 aligned,
1608 layout,
1609 shape,
1610 ss,
1611 btype,
1612 r,
1613 p,
1614 stride,
1615 })
1616 }
1617 }
1618
1619 impl PtxParser for WmmaLoadCSyncAlignedLayoutShapeSsCtype3 {
1620 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1621 stream.expect_string("wmma")?;
1622 stream.expect_string(".load")?;
1623 let load = ();
1624 stream.expect_complete()?;
1625 stream.expect_string(".c")?;
1626 let c = ();
1627 stream.expect_complete()?;
1628 stream.expect_string(".sync")?;
1629 let sync = ();
1630 stream.expect_complete()?;
1631 stream.expect_string(".aligned")?;
1632 let aligned = ();
1633 stream.expect_complete()?;
1634 let layout = Layout::parse(stream)?;
1635 stream.expect_complete()?;
1636 let shape = Shape::parse(stream)?;
1637 stream.expect_complete()?;
1638 let saved_pos = stream.position();
1639 let ss = match Ss::parse(stream) {
1640 Ok(val) => Some(val),
1641 Err(_) => {
1642 stream.set_position(saved_pos);
1643 None
1644 }
1645 };
1646 stream.expect_complete()?;
1647 let ctype = Ctype::parse(stream)?;
1648 stream.expect_complete()?;
1649 let r = GeneralOperand::parse(stream)?;
1650 stream.expect_complete()?;
1651 stream.expect(&PtxToken::Comma)?;
1652 let p = AddressOperand::parse(stream)?;
1653 stream.expect_complete()?;
1654 let saved_pos = stream.position();
1655 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
1656 if !has_comma {
1657 stream.set_position(saved_pos);
1658 }
1659 let saved_pos = stream.position();
1660 let stride = match GeneralOperand::parse(stream) {
1661 Ok(val) => Some(val),
1662 Err(_) => {
1663 stream.set_position(saved_pos);
1664 None
1665 }
1666 };
1667 stream.expect_complete()?;
1668 stream.expect_complete()?;
1669 stream.expect(&PtxToken::Semicolon)?;
1670 Ok(WmmaLoadCSyncAlignedLayoutShapeSsCtype3 {
1671 load,
1672 c,
1673 sync,
1674 aligned,
1675 layout,
1676 shape,
1677 ss,
1678 ctype,
1679 r,
1680 p,
1681 stride,
1682 })
1683 }
1684 }
1685}
1686
1687pub mod section_4 {
1688 use super::*;
1689 use crate::r#type::instruction::wmma_load::section_4::*;
1690
1691 impl PtxParser for Atype {
1696 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1697 {
1699 let saved_pos = stream.position();
1700 if stream.expect_string(".s4").is_ok() {
1701 return Ok(Atype::S4);
1702 }
1703 stream.set_position(saved_pos);
1704 }
1705 let saved_pos = stream.position();
1706 {
1708 let saved_pos = stream.position();
1709 if stream.expect_string(".u4").is_ok() {
1710 return Ok(Atype::U4);
1711 }
1712 stream.set_position(saved_pos);
1713 }
1714 stream.set_position(saved_pos);
1715 let span = stream
1716 .peek()
1717 .map(|(_, s)| s.clone())
1718 .unwrap_or(Span { start: 0, end: 0 });
1719 let expected = &[".s4", ".u4"];
1720 let found = stream
1721 .peek()
1722 .map(|(t, _)| format!("{:?}", t))
1723 .unwrap_or_else(|_| "<end of input>".to_string());
1724 Err(crate::parser::unexpected_value(span, expected, found))
1725 }
1726 }
1727
1728 impl PtxParser for Btype {
1729 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1730 {
1732 let saved_pos = stream.position();
1733 if stream.expect_string(".s4").is_ok() {
1734 return Ok(Btype::S4);
1735 }
1736 stream.set_position(saved_pos);
1737 }
1738 let saved_pos = stream.position();
1739 {
1741 let saved_pos = stream.position();
1742 if stream.expect_string(".u4").is_ok() {
1743 return Ok(Btype::U4);
1744 }
1745 stream.set_position(saved_pos);
1746 }
1747 stream.set_position(saved_pos);
1748 let span = stream
1749 .peek()
1750 .map(|(_, s)| s.clone())
1751 .unwrap_or(Span { start: 0, end: 0 });
1752 let expected = &[".s4", ".u4"];
1753 let found = stream
1754 .peek()
1755 .map(|(t, _)| format!("{:?}", t))
1756 .unwrap_or_else(|_| "<end of input>".to_string());
1757 Err(crate::parser::unexpected_value(span, expected, found))
1758 }
1759 }
1760
1761 impl PtxParser for Ctype {
1762 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1763 {
1765 let saved_pos = stream.position();
1766 if stream.expect_string(".s32").is_ok() {
1767 return Ok(Ctype::S32);
1768 }
1769 stream.set_position(saved_pos);
1770 }
1771 let span = stream
1772 .peek()
1773 .map(|(_, s)| s.clone())
1774 .unwrap_or(Span { start: 0, end: 0 });
1775 let expected = &[".s32"];
1776 let found = stream
1777 .peek()
1778 .map(|(t, _)| format!("{:?}", t))
1779 .unwrap_or_else(|_| "<end of input>".to_string());
1780 Err(crate::parser::unexpected_value(span, expected, found))
1781 }
1782 }
1783
1784 impl PtxParser for Layout {
1785 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1786 {
1788 let saved_pos = stream.position();
1789 if stream.expect_string(".row").is_ok() {
1790 return Ok(Layout::Row);
1791 }
1792 stream.set_position(saved_pos);
1793 }
1794 let saved_pos = stream.position();
1795 {
1797 let saved_pos = stream.position();
1798 if stream.expect_string(".col").is_ok() {
1799 return Ok(Layout::Col);
1800 }
1801 stream.set_position(saved_pos);
1802 }
1803 stream.set_position(saved_pos);
1804 let span = stream
1805 .peek()
1806 .map(|(_, s)| s.clone())
1807 .unwrap_or(Span { start: 0, end: 0 });
1808 let expected = &[".row", ".col"];
1809 let found = stream
1810 .peek()
1811 .map(|(t, _)| format!("{:?}", t))
1812 .unwrap_or_else(|_| "<end of input>".to_string());
1813 Err(crate::parser::unexpected_value(span, expected, found))
1814 }
1815 }
1816
1817 impl PtxParser for Shape {
1818 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1819 {
1821 let saved_pos = stream.position();
1822 if stream.expect_string(".m8n8k32").is_ok() {
1823 return Ok(Shape::M8n8k32);
1824 }
1825 stream.set_position(saved_pos);
1826 }
1827 let span = stream
1828 .peek()
1829 .map(|(_, s)| s.clone())
1830 .unwrap_or(Span { start: 0, end: 0 });
1831 let expected = &[".m8n8k32"];
1832 let found = stream
1833 .peek()
1834 .map(|(t, _)| format!("{:?}", t))
1835 .unwrap_or_else(|_| "<end of input>".to_string());
1836 Err(crate::parser::unexpected_value(span, expected, found))
1837 }
1838 }
1839
1840 impl PtxParser for Ss {
1841 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1842 {
1844 let saved_pos = stream.position();
1845 if stream.expect_string(".shared::cta").is_ok() {
1846 return Ok(Ss::SharedCta);
1847 }
1848 stream.set_position(saved_pos);
1849 }
1850 let saved_pos = stream.position();
1851 {
1853 let saved_pos = stream.position();
1854 if stream.expect_string(".global").is_ok() {
1855 return Ok(Ss::Global);
1856 }
1857 stream.set_position(saved_pos);
1858 }
1859 stream.set_position(saved_pos);
1860 let saved_pos = stream.position();
1861 {
1863 let saved_pos = stream.position();
1864 if stream.expect_string(".shared").is_ok() {
1865 return Ok(Ss::Shared);
1866 }
1867 stream.set_position(saved_pos);
1868 }
1869 stream.set_position(saved_pos);
1870 let span = stream
1871 .peek()
1872 .map(|(_, s)| s.clone())
1873 .unwrap_or(Span { start: 0, end: 0 });
1874 let expected = &[".shared::cta", ".global", ".shared"];
1875 let found = stream
1876 .peek()
1877 .map(|(t, _)| format!("{:?}", t))
1878 .unwrap_or_else(|_| "<end of input>".to_string());
1879 Err(crate::parser::unexpected_value(span, expected, found))
1880 }
1881 }
1882
1883 impl PtxParser for WmmaLoadASyncAlignedRowShapeSsAtype {
1884 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1885 stream.expect_string("wmma")?;
1886 stream.expect_string(".load")?;
1887 let load = ();
1888 stream.expect_complete()?;
1889 stream.expect_string(".a")?;
1890 let a = ();
1891 stream.expect_complete()?;
1892 stream.expect_string(".sync")?;
1893 let sync = ();
1894 stream.expect_complete()?;
1895 stream.expect_string(".aligned")?;
1896 let aligned = ();
1897 stream.expect_complete()?;
1898 stream.expect_string(".row")?;
1899 let row = ();
1900 stream.expect_complete()?;
1901 let shape = Shape::parse(stream)?;
1902 stream.expect_complete()?;
1903 let saved_pos = stream.position();
1904 let ss = match Ss::parse(stream) {
1905 Ok(val) => Some(val),
1906 Err(_) => {
1907 stream.set_position(saved_pos);
1908 None
1909 }
1910 };
1911 stream.expect_complete()?;
1912 let atype = Atype::parse(stream)?;
1913 stream.expect_complete()?;
1914 let r = GeneralOperand::parse(stream)?;
1915 stream.expect_complete()?;
1916 stream.expect(&PtxToken::Comma)?;
1917 let p = AddressOperand::parse(stream)?;
1918 stream.expect_complete()?;
1919 let saved_pos = stream.position();
1920 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
1921 if !has_comma {
1922 stream.set_position(saved_pos);
1923 }
1924 let saved_pos = stream.position();
1925 let stride = match GeneralOperand::parse(stream) {
1926 Ok(val) => Some(val),
1927 Err(_) => {
1928 stream.set_position(saved_pos);
1929 None
1930 }
1931 };
1932 stream.expect_complete()?;
1933 stream.expect_complete()?;
1934 stream.expect(&PtxToken::Semicolon)?;
1935 Ok(WmmaLoadASyncAlignedRowShapeSsAtype {
1936 load,
1937 a,
1938 sync,
1939 aligned,
1940 row,
1941 shape,
1942 ss,
1943 atype,
1944 r,
1945 p,
1946 stride,
1947 })
1948 }
1949 }
1950
1951 impl PtxParser for WmmaLoadBSyncAlignedColShapeSsBtype {
1952 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1953 stream.expect_string("wmma")?;
1954 stream.expect_string(".load")?;
1955 let load = ();
1956 stream.expect_complete()?;
1957 stream.expect_string(".b")?;
1958 let b = ();
1959 stream.expect_complete()?;
1960 stream.expect_string(".sync")?;
1961 let sync = ();
1962 stream.expect_complete()?;
1963 stream.expect_string(".aligned")?;
1964 let aligned = ();
1965 stream.expect_complete()?;
1966 stream.expect_string(".col")?;
1967 let col = ();
1968 stream.expect_complete()?;
1969 let shape = Shape::parse(stream)?;
1970 stream.expect_complete()?;
1971 let saved_pos = stream.position();
1972 let ss = match Ss::parse(stream) {
1973 Ok(val) => Some(val),
1974 Err(_) => {
1975 stream.set_position(saved_pos);
1976 None
1977 }
1978 };
1979 stream.expect_complete()?;
1980 let btype = Btype::parse(stream)?;
1981 stream.expect_complete()?;
1982 let r = GeneralOperand::parse(stream)?;
1983 stream.expect_complete()?;
1984 stream.expect(&PtxToken::Comma)?;
1985 let p = AddressOperand::parse(stream)?;
1986 stream.expect_complete()?;
1987 let saved_pos = stream.position();
1988 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
1989 if !has_comma {
1990 stream.set_position(saved_pos);
1991 }
1992 let saved_pos = stream.position();
1993 let stride = match GeneralOperand::parse(stream) {
1994 Ok(val) => Some(val),
1995 Err(_) => {
1996 stream.set_position(saved_pos);
1997 None
1998 }
1999 };
2000 stream.expect_complete()?;
2001 stream.expect_complete()?;
2002 stream.expect(&PtxToken::Semicolon)?;
2003 Ok(WmmaLoadBSyncAlignedColShapeSsBtype {
2004 load,
2005 b,
2006 sync,
2007 aligned,
2008 col,
2009 shape,
2010 ss,
2011 btype,
2012 r,
2013 p,
2014 stride,
2015 })
2016 }
2017 }
2018
2019 impl PtxParser for WmmaLoadCSyncAlignedLayoutShapeSsCtype4 {
2020 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
2021 stream.expect_string("wmma")?;
2022 stream.expect_string(".load")?;
2023 let load = ();
2024 stream.expect_complete()?;
2025 stream.expect_string(".c")?;
2026 let c = ();
2027 stream.expect_complete()?;
2028 stream.expect_string(".sync")?;
2029 let sync = ();
2030 stream.expect_complete()?;
2031 stream.expect_string(".aligned")?;
2032 let aligned = ();
2033 stream.expect_complete()?;
2034 let layout = Layout::parse(stream)?;
2035 stream.expect_complete()?;
2036 let shape = Shape::parse(stream)?;
2037 stream.expect_complete()?;
2038 let saved_pos = stream.position();
2039 let ss = match Ss::parse(stream) {
2040 Ok(val) => Some(val),
2041 Err(_) => {
2042 stream.set_position(saved_pos);
2043 None
2044 }
2045 };
2046 stream.expect_complete()?;
2047 let ctype = Ctype::parse(stream)?;
2048 stream.expect_complete()?;
2049 let r = GeneralOperand::parse(stream)?;
2050 stream.expect_complete()?;
2051 stream.expect(&PtxToken::Comma)?;
2052 let p = AddressOperand::parse(stream)?;
2053 stream.expect_complete()?;
2054 let saved_pos = stream.position();
2055 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
2056 if !has_comma {
2057 stream.set_position(saved_pos);
2058 }
2059 let saved_pos = stream.position();
2060 let stride = match GeneralOperand::parse(stream) {
2061 Ok(val) => Some(val),
2062 Err(_) => {
2063 stream.set_position(saved_pos);
2064 None
2065 }
2066 };
2067 stream.expect_complete()?;
2068 stream.expect_complete()?;
2069 stream.expect(&PtxToken::Semicolon)?;
2070 Ok(WmmaLoadCSyncAlignedLayoutShapeSsCtype4 {
2071 load,
2072 c,
2073 sync,
2074 aligned,
2075 layout,
2076 shape,
2077 ss,
2078 ctype,
2079 r,
2080 p,
2081 stride,
2082 })
2083 }
2084 }
2085}
2086
2087pub mod section_5 {
2088 use super::*;
2089 use crate::r#type::instruction::wmma_load::section_5::*;
2090
2091 impl PtxParser for Atype {
2096 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
2097 {
2099 let saved_pos = stream.position();
2100 if stream.expect_string(".b1").is_ok() {
2101 return Ok(Atype::B1);
2102 }
2103 stream.set_position(saved_pos);
2104 }
2105 let span = stream
2106 .peek()
2107 .map(|(_, s)| s.clone())
2108 .unwrap_or(Span { start: 0, end: 0 });
2109 let expected = &[".b1"];
2110 let found = stream
2111 .peek()
2112 .map(|(t, _)| format!("{:?}", t))
2113 .unwrap_or_else(|_| "<end of input>".to_string());
2114 Err(crate::parser::unexpected_value(span, expected, found))
2115 }
2116 }
2117
2118 impl PtxParser for Btype {
2119 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
2120 {
2122 let saved_pos = stream.position();
2123 if stream.expect_string(".b1").is_ok() {
2124 return Ok(Btype::B1);
2125 }
2126 stream.set_position(saved_pos);
2127 }
2128 let span = stream
2129 .peek()
2130 .map(|(_, s)| s.clone())
2131 .unwrap_or(Span { start: 0, end: 0 });
2132 let expected = &[".b1"];
2133 let found = stream
2134 .peek()
2135 .map(|(t, _)| format!("{:?}", t))
2136 .unwrap_or_else(|_| "<end of input>".to_string());
2137 Err(crate::parser::unexpected_value(span, expected, found))
2138 }
2139 }
2140
2141 impl PtxParser for Ctype {
2142 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
2143 {
2145 let saved_pos = stream.position();
2146 if stream.expect_string(".s32").is_ok() {
2147 return Ok(Ctype::S32);
2148 }
2149 stream.set_position(saved_pos);
2150 }
2151 let span = stream
2152 .peek()
2153 .map(|(_, s)| s.clone())
2154 .unwrap_or(Span { start: 0, end: 0 });
2155 let expected = &[".s32"];
2156 let found = stream
2157 .peek()
2158 .map(|(t, _)| format!("{:?}", t))
2159 .unwrap_or_else(|_| "<end of input>".to_string());
2160 Err(crate::parser::unexpected_value(span, expected, found))
2161 }
2162 }
2163
2164 impl PtxParser for Layout {
2165 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
2166 {
2168 let saved_pos = stream.position();
2169 if stream.expect_string(".row").is_ok() {
2170 return Ok(Layout::Row);
2171 }
2172 stream.set_position(saved_pos);
2173 }
2174 let saved_pos = stream.position();
2175 {
2177 let saved_pos = stream.position();
2178 if stream.expect_string(".col").is_ok() {
2179 return Ok(Layout::Col);
2180 }
2181 stream.set_position(saved_pos);
2182 }
2183 stream.set_position(saved_pos);
2184 let span = stream
2185 .peek()
2186 .map(|(_, s)| s.clone())
2187 .unwrap_or(Span { start: 0, end: 0 });
2188 let expected = &[".row", ".col"];
2189 let found = stream
2190 .peek()
2191 .map(|(t, _)| format!("{:?}", t))
2192 .unwrap_or_else(|_| "<end of input>".to_string());
2193 Err(crate::parser::unexpected_value(span, expected, found))
2194 }
2195 }
2196
2197 impl PtxParser for Shape {
2198 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
2199 {
2201 let saved_pos = stream.position();
2202 if stream.expect_string(".m8n8k128").is_ok() {
2203 return Ok(Shape::M8n8k128);
2204 }
2205 stream.set_position(saved_pos);
2206 }
2207 let span = stream
2208 .peek()
2209 .map(|(_, s)| s.clone())
2210 .unwrap_or(Span { start: 0, end: 0 });
2211 let expected = &[".m8n8k128"];
2212 let found = stream
2213 .peek()
2214 .map(|(t, _)| format!("{:?}", t))
2215 .unwrap_or_else(|_| "<end of input>".to_string());
2216 Err(crate::parser::unexpected_value(span, expected, found))
2217 }
2218 }
2219
2220 impl PtxParser for Ss {
2221 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
2222 {
2224 let saved_pos = stream.position();
2225 if stream.expect_string(".shared::cta").is_ok() {
2226 return Ok(Ss::SharedCta);
2227 }
2228 stream.set_position(saved_pos);
2229 }
2230 let saved_pos = stream.position();
2231 {
2233 let saved_pos = stream.position();
2234 if stream.expect_string(".global").is_ok() {
2235 return Ok(Ss::Global);
2236 }
2237 stream.set_position(saved_pos);
2238 }
2239 stream.set_position(saved_pos);
2240 let saved_pos = stream.position();
2241 {
2243 let saved_pos = stream.position();
2244 if stream.expect_string(".shared").is_ok() {
2245 return Ok(Ss::Shared);
2246 }
2247 stream.set_position(saved_pos);
2248 }
2249 stream.set_position(saved_pos);
2250 let span = stream
2251 .peek()
2252 .map(|(_, s)| s.clone())
2253 .unwrap_or(Span { start: 0, end: 0 });
2254 let expected = &[".shared::cta", ".global", ".shared"];
2255 let found = stream
2256 .peek()
2257 .map(|(t, _)| format!("{:?}", t))
2258 .unwrap_or_else(|_| "<end of input>".to_string());
2259 Err(crate::parser::unexpected_value(span, expected, found))
2260 }
2261 }
2262
2263 impl PtxParser for WmmaLoadASyncAlignedRowShapeSsAtype1 {
2264 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
2265 stream.expect_string("wmma")?;
2266 stream.expect_string(".load")?;
2267 let load = ();
2268 stream.expect_complete()?;
2269 stream.expect_string(".a")?;
2270 let a = ();
2271 stream.expect_complete()?;
2272 stream.expect_string(".sync")?;
2273 let sync = ();
2274 stream.expect_complete()?;
2275 stream.expect_string(".aligned")?;
2276 let aligned = ();
2277 stream.expect_complete()?;
2278 stream.expect_string(".row")?;
2279 let row = ();
2280 stream.expect_complete()?;
2281 let shape = Shape::parse(stream)?;
2282 stream.expect_complete()?;
2283 let saved_pos = stream.position();
2284 let ss = match Ss::parse(stream) {
2285 Ok(val) => Some(val),
2286 Err(_) => {
2287 stream.set_position(saved_pos);
2288 None
2289 }
2290 };
2291 stream.expect_complete()?;
2292 let atype = Atype::parse(stream)?;
2293 stream.expect_complete()?;
2294 let r = GeneralOperand::parse(stream)?;
2295 stream.expect_complete()?;
2296 stream.expect(&PtxToken::Comma)?;
2297 let p = AddressOperand::parse(stream)?;
2298 stream.expect_complete()?;
2299 let saved_pos = stream.position();
2300 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
2301 if !has_comma {
2302 stream.set_position(saved_pos);
2303 }
2304 let saved_pos = stream.position();
2305 let stride = match GeneralOperand::parse(stream) {
2306 Ok(val) => Some(val),
2307 Err(_) => {
2308 stream.set_position(saved_pos);
2309 None
2310 }
2311 };
2312 stream.expect_complete()?;
2313 stream.expect_complete()?;
2314 stream.expect(&PtxToken::Semicolon)?;
2315 Ok(WmmaLoadASyncAlignedRowShapeSsAtype1 {
2316 load,
2317 a,
2318 sync,
2319 aligned,
2320 row,
2321 shape,
2322 ss,
2323 atype,
2324 r,
2325 p,
2326 stride,
2327 })
2328 }
2329 }
2330
2331 impl PtxParser for WmmaLoadBSyncAlignedColShapeSsBtype1 {
2332 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
2333 stream.expect_string("wmma")?;
2334 stream.expect_string(".load")?;
2335 let load = ();
2336 stream.expect_complete()?;
2337 stream.expect_string(".b")?;
2338 let b = ();
2339 stream.expect_complete()?;
2340 stream.expect_string(".sync")?;
2341 let sync = ();
2342 stream.expect_complete()?;
2343 stream.expect_string(".aligned")?;
2344 let aligned = ();
2345 stream.expect_complete()?;
2346 stream.expect_string(".col")?;
2347 let col = ();
2348 stream.expect_complete()?;
2349 let shape = Shape::parse(stream)?;
2350 stream.expect_complete()?;
2351 let saved_pos = stream.position();
2352 let ss = match Ss::parse(stream) {
2353 Ok(val) => Some(val),
2354 Err(_) => {
2355 stream.set_position(saved_pos);
2356 None
2357 }
2358 };
2359 stream.expect_complete()?;
2360 let btype = Btype::parse(stream)?;
2361 stream.expect_complete()?;
2362 let r = GeneralOperand::parse(stream)?;
2363 stream.expect_complete()?;
2364 stream.expect(&PtxToken::Comma)?;
2365 let p = AddressOperand::parse(stream)?;
2366 stream.expect_complete()?;
2367 let saved_pos = stream.position();
2368 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
2369 if !has_comma {
2370 stream.set_position(saved_pos);
2371 }
2372 let saved_pos = stream.position();
2373 let stride = match GeneralOperand::parse(stream) {
2374 Ok(val) => Some(val),
2375 Err(_) => {
2376 stream.set_position(saved_pos);
2377 None
2378 }
2379 };
2380 stream.expect_complete()?;
2381 stream.expect_complete()?;
2382 stream.expect(&PtxToken::Semicolon)?;
2383 Ok(WmmaLoadBSyncAlignedColShapeSsBtype1 {
2384 load,
2385 b,
2386 sync,
2387 aligned,
2388 col,
2389 shape,
2390 ss,
2391 btype,
2392 r,
2393 p,
2394 stride,
2395 })
2396 }
2397 }
2398
2399 impl PtxParser for WmmaLoadCSyncAlignedLayoutShapeSsCtype5 {
2400 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
2401 stream.expect_string("wmma")?;
2402 stream.expect_string(".load")?;
2403 let load = ();
2404 stream.expect_complete()?;
2405 stream.expect_string(".c")?;
2406 let c = ();
2407 stream.expect_complete()?;
2408 stream.expect_string(".sync")?;
2409 let sync = ();
2410 stream.expect_complete()?;
2411 stream.expect_string(".aligned")?;
2412 let aligned = ();
2413 stream.expect_complete()?;
2414 let layout = Layout::parse(stream)?;
2415 stream.expect_complete()?;
2416 let shape = Shape::parse(stream)?;
2417 stream.expect_complete()?;
2418 let saved_pos = stream.position();
2419 let ss = match Ss::parse(stream) {
2420 Ok(val) => Some(val),
2421 Err(_) => {
2422 stream.set_position(saved_pos);
2423 None
2424 }
2425 };
2426 stream.expect_complete()?;
2427 let ctype = Ctype::parse(stream)?;
2428 stream.expect_complete()?;
2429 let r = GeneralOperand::parse(stream)?;
2430 stream.expect_complete()?;
2431 stream.expect(&PtxToken::Comma)?;
2432 let p = AddressOperand::parse(stream)?;
2433 stream.expect_complete()?;
2434 let saved_pos = stream.position();
2435 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
2436 if !has_comma {
2437 stream.set_position(saved_pos);
2438 }
2439 let saved_pos = stream.position();
2440 let stride = match GeneralOperand::parse(stream) {
2441 Ok(val) => Some(val),
2442 Err(_) => {
2443 stream.set_position(saved_pos);
2444 None
2445 }
2446 };
2447 stream.expect_complete()?;
2448 stream.expect_complete()?;
2449 stream.expect(&PtxToken::Semicolon)?;
2450 Ok(WmmaLoadCSyncAlignedLayoutShapeSsCtype5 {
2451 load,
2452 c,
2453 sync,
2454 aligned,
2455 layout,
2456 shape,
2457 ss,
2458 ctype,
2459 r,
2460 p,
2461 stride,
2462 })
2463 }
2464 }
2465}