1#![allow(unused)]
28
29use crate::lexer::PtxToken;
30use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
31use crate::r#type::common::*;
32
33pub mod section_0 {
34 use super::*;
35 use crate::r#type::instruction::wmma_store::section_0::*;
36
37 impl PtxParser for Layout {
42 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
43 {
45 let saved_pos = stream.position();
46 if stream.expect_string(".row").is_ok() {
47 return Ok(Layout::Row);
48 }
49 stream.set_position(saved_pos);
50 }
51 let saved_pos = stream.position();
52 {
54 let saved_pos = stream.position();
55 if stream.expect_string(".col").is_ok() {
56 return Ok(Layout::Col);
57 }
58 stream.set_position(saved_pos);
59 }
60 stream.set_position(saved_pos);
61 let span = stream
62 .peek()
63 .map(|(_, s)| s.clone())
64 .unwrap_or(Span { start: 0, end: 0 });
65 let expected = &[".row", ".col"];
66 let found = stream
67 .peek()
68 .map(|(t, _)| format!("{:?}", t))
69 .unwrap_or_else(|_| "<end of input>".to_string());
70 Err(crate::parser::unexpected_value(span, expected, found))
71 }
72 }
73
74 impl PtxParser for Shape {
75 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
76 {
78 let saved_pos = stream.position();
79 if stream.expect_string(".m16n16k16").is_ok() {
80 return Ok(Shape::M16n16k16);
81 }
82 stream.set_position(saved_pos);
83 }
84 let saved_pos = stream.position();
85 {
87 let saved_pos = stream.position();
88 if stream.expect_string(".m8n32k16").is_ok() {
89 return Ok(Shape::M8n32k16);
90 }
91 stream.set_position(saved_pos);
92 }
93 stream.set_position(saved_pos);
94 let saved_pos = stream.position();
95 {
97 let saved_pos = stream.position();
98 if stream.expect_string(".m32n8k16").is_ok() {
99 return Ok(Shape::M32n8k16);
100 }
101 stream.set_position(saved_pos);
102 }
103 stream.set_position(saved_pos);
104 let span = stream
105 .peek()
106 .map(|(_, s)| s.clone())
107 .unwrap_or(Span { start: 0, end: 0 });
108 let expected = &[".m16n16k16", ".m8n32k16", ".m32n8k16"];
109 let found = stream
110 .peek()
111 .map(|(t, _)| format!("{:?}", t))
112 .unwrap_or_else(|_| "<end of input>".to_string());
113 Err(crate::parser::unexpected_value(span, expected, found))
114 }
115 }
116
117 impl PtxParser for Ss {
118 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
119 {
121 let saved_pos = stream.position();
122 if stream.expect_string(".shared::cta").is_ok() {
123 return Ok(Ss::SharedCta);
124 }
125 stream.set_position(saved_pos);
126 }
127 let saved_pos = stream.position();
128 {
130 let saved_pos = stream.position();
131 if stream.expect_string(".global").is_ok() {
132 return Ok(Ss::Global);
133 }
134 stream.set_position(saved_pos);
135 }
136 stream.set_position(saved_pos);
137 let saved_pos = stream.position();
138 {
140 let saved_pos = stream.position();
141 if stream.expect_string(".shared").is_ok() {
142 return Ok(Ss::Shared);
143 }
144 stream.set_position(saved_pos);
145 }
146 stream.set_position(saved_pos);
147 let span = stream
148 .peek()
149 .map(|(_, s)| s.clone())
150 .unwrap_or(Span { start: 0, end: 0 });
151 let expected = &[".shared::cta", ".global", ".shared"];
152 let found = stream
153 .peek()
154 .map(|(t, _)| format!("{:?}", t))
155 .unwrap_or_else(|_| "<end of input>".to_string());
156 Err(crate::parser::unexpected_value(span, expected, found))
157 }
158 }
159
160 impl PtxParser for Type {
161 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
162 {
164 let saved_pos = stream.position();
165 if stream.expect_string(".f16").is_ok() {
166 return Ok(Type::F16);
167 }
168 stream.set_position(saved_pos);
169 }
170 let saved_pos = stream.position();
171 {
173 let saved_pos = stream.position();
174 if stream.expect_string(".f32").is_ok() {
175 return Ok(Type::F32);
176 }
177 stream.set_position(saved_pos);
178 }
179 stream.set_position(saved_pos);
180 let saved_pos = stream.position();
181 {
183 let saved_pos = stream.position();
184 if stream.expect_string(".s32").is_ok() {
185 return Ok(Type::S32);
186 }
187 stream.set_position(saved_pos);
188 }
189 stream.set_position(saved_pos);
190 let span = stream
191 .peek()
192 .map(|(_, s)| s.clone())
193 .unwrap_or(Span { start: 0, end: 0 });
194 let expected = &[".f16", ".f32", ".s32"];
195 let found = stream
196 .peek()
197 .map(|(t, _)| format!("{:?}", t))
198 .unwrap_or_else(|_| "<end of input>".to_string());
199 Err(crate::parser::unexpected_value(span, expected, found))
200 }
201 }
202
203 impl PtxParser for WmmaStoreDSyncAlignedLayoutShapeSsType {
204 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
205 stream.expect_string("wmma")?;
206 stream.expect_string(".store")?;
207 let store = ();
208 stream.expect_complete()?;
209 stream.expect_string(".d")?;
210 let d = ();
211 stream.expect_complete()?;
212 stream.expect_string(".sync")?;
213 let sync = ();
214 stream.expect_complete()?;
215 stream.expect_string(".aligned")?;
216 let aligned = ();
217 stream.expect_complete()?;
218 let layout = Layout::parse(stream)?;
219 stream.expect_complete()?;
220 let shape = Shape::parse(stream)?;
221 stream.expect_complete()?;
222 let saved_pos = stream.position();
223 let ss = match Ss::parse(stream) {
224 Ok(val) => Some(val),
225 Err(_) => {
226 stream.set_position(saved_pos);
227 None
228 }
229 };
230 stream.expect_complete()?;
231 let type_ = Type::parse(stream)?;
232 stream.expect_complete()?;
233 let p = AddressOperand::parse(stream)?;
234 stream.expect_complete()?;
235 stream.expect(&PtxToken::Comma)?;
236 let r = GeneralOperand::parse(stream)?;
237 stream.expect_complete()?;
238 let saved_pos = stream.position();
239 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
240 if !has_comma {
241 stream.set_position(saved_pos);
242 }
243 let saved_pos = stream.position();
244 let stride = match GeneralOperand::parse(stream) {
245 Ok(val) => Some(val),
246 Err(_) => {
247 stream.set_position(saved_pos);
248 None
249 }
250 };
251 stream.expect_complete()?;
252 stream.expect_complete()?;
253 stream.expect(&PtxToken::Semicolon)?;
254 Ok(WmmaStoreDSyncAlignedLayoutShapeSsType {
255 store,
256 d,
257 sync,
258 aligned,
259 layout,
260 shape,
261 ss,
262 type_,
263 p,
264 r,
265 stride,
266 })
267 }
268 }
269}
270
271pub mod section_1 {
272 use super::*;
273 use crate::r#type::instruction::wmma_store::section_1::*;
274
275 impl PtxParser for Layout {
280 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
281 {
283 let saved_pos = stream.position();
284 if stream.expect_string(".row").is_ok() {
285 return Ok(Layout::Row);
286 }
287 stream.set_position(saved_pos);
288 }
289 let saved_pos = stream.position();
290 {
292 let saved_pos = stream.position();
293 if stream.expect_string(".col").is_ok() {
294 return Ok(Layout::Col);
295 }
296 stream.set_position(saved_pos);
297 }
298 stream.set_position(saved_pos);
299 let span = stream
300 .peek()
301 .map(|(_, s)| s.clone())
302 .unwrap_or(Span { start: 0, end: 0 });
303 let expected = &[".row", ".col"];
304 let found = stream
305 .peek()
306 .map(|(t, _)| format!("{:?}", t))
307 .unwrap_or_else(|_| "<end of input>".to_string());
308 Err(crate::parser::unexpected_value(span, expected, found))
309 }
310 }
311
312 impl PtxParser for Shape {
313 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
314 {
316 let saved_pos = stream.position();
317 if stream.expect_string(".m8n8k128").is_ok() {
318 return Ok(Shape::M8n8k128);
319 }
320 stream.set_position(saved_pos);
321 }
322 let saved_pos = stream.position();
323 {
325 let saved_pos = stream.position();
326 if stream.expect_string(".m8n8k32").is_ok() {
327 return Ok(Shape::M8n8k32);
328 }
329 stream.set_position(saved_pos);
330 }
331 stream.set_position(saved_pos);
332 let span = stream
333 .peek()
334 .map(|(_, s)| s.clone())
335 .unwrap_or(Span { start: 0, end: 0 });
336 let expected = &[".m8n8k128", ".m8n8k32"];
337 let found = stream
338 .peek()
339 .map(|(t, _)| format!("{:?}", t))
340 .unwrap_or_else(|_| "<end of input>".to_string());
341 Err(crate::parser::unexpected_value(span, expected, found))
342 }
343 }
344
345 impl PtxParser for Ss {
346 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
347 {
349 let saved_pos = stream.position();
350 if stream.expect_string(".shared::cta").is_ok() {
351 return Ok(Ss::SharedCta);
352 }
353 stream.set_position(saved_pos);
354 }
355 let saved_pos = stream.position();
356 {
358 let saved_pos = stream.position();
359 if stream.expect_string(".global").is_ok() {
360 return Ok(Ss::Global);
361 }
362 stream.set_position(saved_pos);
363 }
364 stream.set_position(saved_pos);
365 let saved_pos = stream.position();
366 {
368 let saved_pos = stream.position();
369 if stream.expect_string(".shared").is_ok() {
370 return Ok(Ss::Shared);
371 }
372 stream.set_position(saved_pos);
373 }
374 stream.set_position(saved_pos);
375 let span = stream
376 .peek()
377 .map(|(_, s)| s.clone())
378 .unwrap_or(Span { start: 0, end: 0 });
379 let expected = &[".shared::cta", ".global", ".shared"];
380 let found = stream
381 .peek()
382 .map(|(t, _)| format!("{:?}", t))
383 .unwrap_or_else(|_| "<end of input>".to_string());
384 Err(crate::parser::unexpected_value(span, expected, found))
385 }
386 }
387
388 impl PtxParser for Type {
389 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
390 {
392 let saved_pos = stream.position();
393 if stream.expect_string(".s32").is_ok() {
394 return Ok(Type::S32);
395 }
396 stream.set_position(saved_pos);
397 }
398 let span = stream
399 .peek()
400 .map(|(_, s)| s.clone())
401 .unwrap_or(Span { start: 0, end: 0 });
402 let expected = &[".s32"];
403 let found = stream
404 .peek()
405 .map(|(t, _)| format!("{:?}", t))
406 .unwrap_or_else(|_| "<end of input>".to_string());
407 Err(crate::parser::unexpected_value(span, expected, found))
408 }
409 }
410
411 impl PtxParser for WmmaStoreDSyncAlignedLayoutShapeSsType1 {
412 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
413 stream.expect_string("wmma")?;
414 stream.expect_string(".store")?;
415 let store = ();
416 stream.expect_complete()?;
417 stream.expect_string(".d")?;
418 let d = ();
419 stream.expect_complete()?;
420 stream.expect_string(".sync")?;
421 let sync = ();
422 stream.expect_complete()?;
423 stream.expect_string(".aligned")?;
424 let aligned = ();
425 stream.expect_complete()?;
426 let layout = Layout::parse(stream)?;
427 stream.expect_complete()?;
428 let shape = Shape::parse(stream)?;
429 stream.expect_complete()?;
430 let saved_pos = stream.position();
431 let ss = match Ss::parse(stream) {
432 Ok(val) => Some(val),
433 Err(_) => {
434 stream.set_position(saved_pos);
435 None
436 }
437 };
438 stream.expect_complete()?;
439 let type_ = Type::parse(stream)?;
440 stream.expect_complete()?;
441 let p = AddressOperand::parse(stream)?;
442 stream.expect_complete()?;
443 stream.expect(&PtxToken::Comma)?;
444 let r = GeneralOperand::parse(stream)?;
445 stream.expect_complete()?;
446 let saved_pos = stream.position();
447 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
448 if !has_comma {
449 stream.set_position(saved_pos);
450 }
451 let saved_pos = stream.position();
452 let stride = match GeneralOperand::parse(stream) {
453 Ok(val) => Some(val),
454 Err(_) => {
455 stream.set_position(saved_pos);
456 None
457 }
458 };
459 stream.expect_complete()?;
460 stream.expect_complete()?;
461 stream.expect(&PtxToken::Semicolon)?;
462 Ok(WmmaStoreDSyncAlignedLayoutShapeSsType1 {
463 store,
464 d,
465 sync,
466 aligned,
467 layout,
468 shape,
469 ss,
470 type_,
471 p,
472 r,
473 stride,
474 })
475 }
476 }
477}
478
479pub mod section_2 {
480 use super::*;
481 use crate::r#type::instruction::wmma_store::section_2::*;
482
483 impl PtxParser for Layout {
488 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
489 {
491 let saved_pos = stream.position();
492 if stream.expect_string(".row").is_ok() {
493 return Ok(Layout::Row);
494 }
495 stream.set_position(saved_pos);
496 }
497 let saved_pos = stream.position();
498 {
500 let saved_pos = stream.position();
501 if stream.expect_string(".col").is_ok() {
502 return Ok(Layout::Col);
503 }
504 stream.set_position(saved_pos);
505 }
506 stream.set_position(saved_pos);
507 let span = stream
508 .peek()
509 .map(|(_, s)| s.clone())
510 .unwrap_or(Span { start: 0, end: 0 });
511 let expected = &[".row", ".col"];
512 let found = stream
513 .peek()
514 .map(|(t, _)| format!("{:?}", t))
515 .unwrap_or_else(|_| "<end of input>".to_string());
516 Err(crate::parser::unexpected_value(span, expected, found))
517 }
518 }
519
520 impl PtxParser for Shape {
521 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
522 {
524 let saved_pos = stream.position();
525 if stream.expect_string(".m16n16k8").is_ok() {
526 return Ok(Shape::M16n16k8);
527 }
528 stream.set_position(saved_pos);
529 }
530 let span = stream
531 .peek()
532 .map(|(_, s)| s.clone())
533 .unwrap_or(Span { start: 0, end: 0 });
534 let expected = &[".m16n16k8"];
535 let found = stream
536 .peek()
537 .map(|(t, _)| format!("{:?}", t))
538 .unwrap_or_else(|_| "<end of input>".to_string());
539 Err(crate::parser::unexpected_value(span, expected, found))
540 }
541 }
542
543 impl PtxParser for Ss {
544 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
545 {
547 let saved_pos = stream.position();
548 if stream.expect_string(".shared::cta").is_ok() {
549 return Ok(Ss::SharedCta);
550 }
551 stream.set_position(saved_pos);
552 }
553 let saved_pos = stream.position();
554 {
556 let saved_pos = stream.position();
557 if stream.expect_string(".global").is_ok() {
558 return Ok(Ss::Global);
559 }
560 stream.set_position(saved_pos);
561 }
562 stream.set_position(saved_pos);
563 let saved_pos = stream.position();
564 {
566 let saved_pos = stream.position();
567 if stream.expect_string(".shared").is_ok() {
568 return Ok(Ss::Shared);
569 }
570 stream.set_position(saved_pos);
571 }
572 stream.set_position(saved_pos);
573 let span = stream
574 .peek()
575 .map(|(_, s)| s.clone())
576 .unwrap_or(Span { start: 0, end: 0 });
577 let expected = &[".shared::cta", ".global", ".shared"];
578 let found = stream
579 .peek()
580 .map(|(t, _)| format!("{:?}", t))
581 .unwrap_or_else(|_| "<end of input>".to_string());
582 Err(crate::parser::unexpected_value(span, expected, found))
583 }
584 }
585
586 impl PtxParser for Type {
587 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
588 {
590 let saved_pos = stream.position();
591 if stream.expect_string(".f32").is_ok() {
592 return Ok(Type::F32);
593 }
594 stream.set_position(saved_pos);
595 }
596 let span = stream
597 .peek()
598 .map(|(_, s)| s.clone())
599 .unwrap_or(Span { start: 0, end: 0 });
600 let expected = &[".f32"];
601 let found = stream
602 .peek()
603 .map(|(t, _)| format!("{:?}", t))
604 .unwrap_or_else(|_| "<end of input>".to_string());
605 Err(crate::parser::unexpected_value(span, expected, found))
606 }
607 }
608
609 impl PtxParser for WmmaStoreDSyncAlignedLayoutShapeSsType2 {
610 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
611 stream.expect_string("wmma")?;
612 stream.expect_string(".store")?;
613 let store = ();
614 stream.expect_complete()?;
615 stream.expect_string(".d")?;
616 let d = ();
617 stream.expect_complete()?;
618 stream.expect_string(".sync")?;
619 let sync = ();
620 stream.expect_complete()?;
621 stream.expect_string(".aligned")?;
622 let aligned = ();
623 stream.expect_complete()?;
624 let layout = Layout::parse(stream)?;
625 stream.expect_complete()?;
626 let shape = Shape::parse(stream)?;
627 stream.expect_complete()?;
628 let saved_pos = stream.position();
629 let ss = match Ss::parse(stream) {
630 Ok(val) => Some(val),
631 Err(_) => {
632 stream.set_position(saved_pos);
633 None
634 }
635 };
636 stream.expect_complete()?;
637 let type_ = Type::parse(stream)?;
638 stream.expect_complete()?;
639 let p = AddressOperand::parse(stream)?;
640 stream.expect_complete()?;
641 stream.expect(&PtxToken::Comma)?;
642 let r = GeneralOperand::parse(stream)?;
643 stream.expect_complete()?;
644 let saved_pos = stream.position();
645 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
646 if !has_comma {
647 stream.set_position(saved_pos);
648 }
649 let saved_pos = stream.position();
650 let stride = match GeneralOperand::parse(stream) {
651 Ok(val) => Some(val),
652 Err(_) => {
653 stream.set_position(saved_pos);
654 None
655 }
656 };
657 stream.expect_complete()?;
658 stream.expect_complete()?;
659 stream.expect(&PtxToken::Semicolon)?;
660 Ok(WmmaStoreDSyncAlignedLayoutShapeSsType2 {
661 store,
662 d,
663 sync,
664 aligned,
665 layout,
666 shape,
667 ss,
668 type_,
669 p,
670 r,
671 stride,
672 })
673 }
674 }
675}
676
677pub mod section_3 {
678 use super::*;
679 use crate::r#type::instruction::wmma_store::section_3::*;
680
681 impl PtxParser for Layout {
686 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
687 {
689 let saved_pos = stream.position();
690 if stream.expect_string(".row").is_ok() {
691 return Ok(Layout::Row);
692 }
693 stream.set_position(saved_pos);
694 }
695 let saved_pos = stream.position();
696 {
698 let saved_pos = stream.position();
699 if stream.expect_string(".col").is_ok() {
700 return Ok(Layout::Col);
701 }
702 stream.set_position(saved_pos);
703 }
704 stream.set_position(saved_pos);
705 let span = stream
706 .peek()
707 .map(|(_, s)| s.clone())
708 .unwrap_or(Span { start: 0, end: 0 });
709 let expected = &[".row", ".col"];
710 let found = stream
711 .peek()
712 .map(|(t, _)| format!("{:?}", t))
713 .unwrap_or_else(|_| "<end of input>".to_string());
714 Err(crate::parser::unexpected_value(span, expected, found))
715 }
716 }
717
718 impl PtxParser for Shape {
719 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
720 {
722 let saved_pos = stream.position();
723 if stream.expect_string(".m8n8k4").is_ok() {
724 return Ok(Shape::M8n8k4);
725 }
726 stream.set_position(saved_pos);
727 }
728 let span = stream
729 .peek()
730 .map(|(_, s)| s.clone())
731 .unwrap_or(Span { start: 0, end: 0 });
732 let expected = &[".m8n8k4"];
733 let found = stream
734 .peek()
735 .map(|(t, _)| format!("{:?}", t))
736 .unwrap_or_else(|_| "<end of input>".to_string());
737 Err(crate::parser::unexpected_value(span, expected, found))
738 }
739 }
740
741 impl PtxParser for Ss {
742 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
743 {
745 let saved_pos = stream.position();
746 if stream.expect_string(".shared::cta").is_ok() {
747 return Ok(Ss::SharedCta);
748 }
749 stream.set_position(saved_pos);
750 }
751 let saved_pos = stream.position();
752 {
754 let saved_pos = stream.position();
755 if stream.expect_string(".global").is_ok() {
756 return Ok(Ss::Global);
757 }
758 stream.set_position(saved_pos);
759 }
760 stream.set_position(saved_pos);
761 let saved_pos = stream.position();
762 {
764 let saved_pos = stream.position();
765 if stream.expect_string(".shared").is_ok() {
766 return Ok(Ss::Shared);
767 }
768 stream.set_position(saved_pos);
769 }
770 stream.set_position(saved_pos);
771 let span = stream
772 .peek()
773 .map(|(_, s)| s.clone())
774 .unwrap_or(Span { start: 0, end: 0 });
775 let expected = &[".shared::cta", ".global", ".shared"];
776 let found = stream
777 .peek()
778 .map(|(t, _)| format!("{:?}", t))
779 .unwrap_or_else(|_| "<end of input>".to_string());
780 Err(crate::parser::unexpected_value(span, expected, found))
781 }
782 }
783
784 impl PtxParser for Type {
785 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
786 {
788 let saved_pos = stream.position();
789 if stream.expect_string(".f64").is_ok() {
790 return Ok(Type::F64);
791 }
792 stream.set_position(saved_pos);
793 }
794 let span = stream
795 .peek()
796 .map(|(_, s)| s.clone())
797 .unwrap_or(Span { start: 0, end: 0 });
798 let expected = &[".f64"];
799 let found = stream
800 .peek()
801 .map(|(t, _)| format!("{:?}", t))
802 .unwrap_or_else(|_| "<end of input>".to_string());
803 Err(crate::parser::unexpected_value(span, expected, found))
804 }
805 }
806
807 impl PtxParser for WmmaStoreDSyncAlignedLayoutShapeSsType3 {
808 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
809 stream.expect_string("wmma")?;
810 stream.expect_string(".store")?;
811 let store = ();
812 stream.expect_complete()?;
813 stream.expect_string(".d")?;
814 let d = ();
815 stream.expect_complete()?;
816 stream.expect_string(".sync")?;
817 let sync = ();
818 stream.expect_complete()?;
819 stream.expect_string(".aligned")?;
820 let aligned = ();
821 stream.expect_complete()?;
822 let layout = Layout::parse(stream)?;
823 stream.expect_complete()?;
824 let shape = Shape::parse(stream)?;
825 stream.expect_complete()?;
826 let saved_pos = stream.position();
827 let ss = match Ss::parse(stream) {
828 Ok(val) => Some(val),
829 Err(_) => {
830 stream.set_position(saved_pos);
831 None
832 }
833 };
834 stream.expect_complete()?;
835 let type_ = Type::parse(stream)?;
836 stream.expect_complete()?;
837 let p = AddressOperand::parse(stream)?;
838 stream.expect_complete()?;
839 stream.expect(&PtxToken::Comma)?;
840 let r = GeneralOperand::parse(stream)?;
841 stream.expect_complete()?;
842 let saved_pos = stream.position();
843 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
844 if !has_comma {
845 stream.set_position(saved_pos);
846 }
847 let saved_pos = stream.position();
848 let stride = match GeneralOperand::parse(stream) {
849 Ok(val) => Some(val),
850 Err(_) => {
851 stream.set_position(saved_pos);
852 None
853 }
854 };
855 stream.expect_complete()?;
856 stream.expect_complete()?;
857 stream.expect(&PtxToken::Semicolon)?;
858 Ok(WmmaStoreDSyncAlignedLayoutShapeSsType3 {
859 store,
860 d,
861 sync,
862 aligned,
863 layout,
864 shape,
865 ss,
866 type_,
867 p,
868 r,
869 stride,
870 })
871 }
872 }
873}