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