ptx_parser/parser/instruction/
wmma_load.rs

1//! Original PTX specification:
2//!
3//! // Floating point format .f16 loads:
4//! wmma.load.a.sync.aligned.layout.shape{.ss}.atype r, [p] {, stride};
5//! wmma.load.b.sync.aligned.layout.shape{.ss}.btype r, [p] {, stride};
6//! wmma.load.c.sync.aligned.layout.shape{.ss}.ctype r, [p] {, stride};
7//! .layout = {.row, .col};
8//! .shape  = {.m16n16k16, .m8n32k16, .m32n8k16};
9//! .ss     = {.global, .shared, .shared::cta};
10//! .atype  = {.f16, .s8, .u8};
11//! .btype  = {.f16, .s8, .u8};
12//! .ctype  = {.f16, .f32, .s32};
13//! ----------------------------------------------------------------
14//! // Alternate floating point format .bf16 loads:
15//! wmma.load.a.sync.aligned.layout.shape{.ss}.atype r, [p] {, stride};
16//! wmma.load.b.sync.aligned.layout.shape{.ss}.btype r, [p] {, stride};
17//! wmma.load.c.sync.aligned.layout.shape{.ss}.ctype r, [p] {, stride};
18//! .layout = {.row, .col};
19//! .shape  = {.m16n16k16, .m8n32k16, .m32n8k16};
20//! .ss     = {.global, .shared, .shared::cta};
21//! .atype  = {.bf16 };
22//! .btype  = {.bf16 };
23//! .ctype  = {.f32 };
24//! ----------------------------------------------------------------
25//! // Alternate floating point format .tf32 loads:
26//! wmma.load.a.sync.aligned.layout.shape{.ss}.atype r, [p] {, stride};
27//! wmma.load.b.sync.aligned.layout.shape{.ss}.btype r, [p] {, stride};
28//! wmma.load.c.sync.aligned.layout.shape{.ss}.ctype r, [p] {, stride};
29//! .layout = {.row, .col};
30//! .shape  = {.m16n16k8 };
31//! .ss     = {.global, .shared, .shared::cta};
32//! .atype  = {.tf32 };
33//! .btype  = {.tf32 };
34//! .ctype  = {.f32 };
35//! ----------------------------------------------------------------
36//! // Double precision Floating point .f64 loads:
37//! wmma.load.a.sync.aligned.layout.shape{.ss}.atype r, [p] {, stride};
38//! wmma.load.b.sync.aligned.layout.shape{.ss}.btype r, [p] {, stride};
39//! wmma.load.c.sync.aligned.layout.shape{.ss}.ctype r, [p] {, stride};
40//! .layout = {.row, .col};
41//! .shape  = {.m8n8k4 };
42//! .ss     = {.global, .shared, .shared::cta};
43//! .atype  = {.f64 };
44//! .btype  = {.f64 };
45//! .ctype  = {.f64 };
46//! ----------------------------------------------------------------
47//! // Sub-byte loads:
48//! wmma.load.a.sync.aligned.row.shape{.ss}.atype r, [p] {, stride};
49//! wmma.load.b.sync.aligned.col.shape{.ss}.btype r, [p] {, stride};
50//! wmma.load.c.sync.aligned.layout.shape{.ss}.ctype r, [p] {, stride};
51//! .layout = {.row, .col};
52//! .shape  = {.m8n8k32};
53//! .ss     = {.global, .shared, .shared::cta};
54//! .atype  = {.s4, .u4};
55//! .btype  = {.s4, .u4};
56//! .ctype  = {.s32};
57//! ----------------------------------------------------------------
58//! // Single-bit loads:
59//! wmma.load.a.sync.aligned.row.shape{.ss}.atype r, [p] {, stride};
60//! wmma.load.b.sync.aligned.col.shape{.ss}.btype r, [p] {, stride};
61//! wmma.load.c.sync.aligned.layout.shape{.ss}.ctype r, [p] {, stride};
62//! .layout = {.row, .col};
63//! .shape  = {.m8n8k128};
64//! .ss     = {.global, .shared, .shared::cta};
65//! .atype  = {.b1};
66//! .btype  = {.b1};
67//! .ctype  = {.s32};
68
69#![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    // ============================================================================
80    // Generated enum parsers
81    // ============================================================================
82
83    impl PtxParser for Atype {
84        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
85            // Try F16
86            {
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            // Try S8
95            {
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            // Try U8
105            {
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            // Try F16
129            {
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            // Try S8
138            {
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            // Try U8
148            {
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            // Try F16
172            {
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            // Try F32
181            {
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            // Try S32
191            {
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            // Try Row
215            {
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            // Try Col
224            {
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            // Try M16n16k16
248            {
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            // Try M8n32k16
257            {
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            // Try M32n8k16
267            {
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            // Try SharedCta
291            {
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            // Try Global
300            {
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            // Try Shared
310            {
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    // ============================================================================
538    // Generated enum parsers
539    // ============================================================================
540
541    impl PtxParser for Atype {
542        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
543            // Try Bf16
544            {
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            // Try Bf16
567            {
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            // Try F32
590            {
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            // Try Row
613            {
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            // Try Col
622            {
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            // Try M16n16k16
646            {
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            // Try M8n32k16
655            {
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            // Try M32n8k16
665            {
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            // Try SharedCta
689            {
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            // Try Global
698            {
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            // Try Shared
708            {
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    // ============================================================================
936    // Generated enum parsers
937    // ============================================================================
938
939    impl PtxParser for Atype {
940        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
941            // Try Tf32
942            {
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            // Try Tf32
965            {
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            // Try F32
988            {
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            // Try Row
1011            {
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            // Try Col
1020            {
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            // Try M16n16k8
1044            {
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            // Try SharedCta
1067            {
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            // Try Global
1076            {
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            // Try Shared
1086            {
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    // ============================================================================
1314    // Generated enum parsers
1315    // ============================================================================
1316
1317    impl PtxParser for Atype {
1318        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1319            // Try F64
1320            {
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            // Try F64
1343            {
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            // Try F64
1366            {
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            // Try Row
1389            {
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            // Try Col
1398            {
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            // Try M8n8k4
1422            {
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            // Try SharedCta
1445            {
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            // Try Global
1454            {
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            // Try Shared
1464            {
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    // ============================================================================
1692    // Generated enum parsers
1693    // ============================================================================
1694
1695    impl PtxParser for Atype {
1696        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1697            // Try S4
1698            {
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            // Try U4
1707            {
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            // Try S4
1731            {
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            // Try U4
1740            {
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            // Try S32
1764            {
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            // Try Row
1787            {
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            // Try Col
1796            {
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            // Try M8n8k32
1820            {
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            // Try SharedCta
1843            {
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            // Try Global
1852            {
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            // Try Shared
1862            {
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    // ============================================================================
2092    // Generated enum parsers
2093    // ============================================================================
2094
2095    impl PtxParser for Atype {
2096        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
2097            // Try B1
2098            {
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            // Try B1
2121            {
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            // Try S32
2144            {
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            // Try Row
2167            {
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            // Try Col
2176            {
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            // Try M8n8k128
2200            {
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            // Try SharedCta
2223            {
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            // Try Global
2232            {
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            // Try Shared
2242            {
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}