ptx_parser/parser/instruction/
movmatrix.rs

1//! Original PTX specification:
2//!
3//! movmatrix.sync.aligned.shape.trans.type d, a;
4//! .shape  = {.m8n8};
5//! .type   = {.b16};
6
7#![allow(unused)]
8
9use crate::lexer::PtxToken;
10use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
11use crate::r#type::common::*;
12
13pub mod section_0 {
14    use super::*;
15    use crate::r#type::instruction::movmatrix::section_0::*;
16
17    // ============================================================================
18    // Generated enum parsers
19    // ============================================================================
20
21    impl PtxParser for Shape {
22        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
23            // Try M8n8
24            {
25                let saved_pos = stream.position();
26                if stream.expect_string(".m8n8").is_ok() {
27                    return Ok(Shape::M8n8);
28                }
29                stream.set_position(saved_pos);
30            }
31            let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
32            let expected = &[".m8n8"];
33            let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
34            Err(crate::parser::unexpected_value(span, expected, found))
35        }
36    }
37
38    impl PtxParser for Type {
39        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
40            // Try B16
41            {
42                let saved_pos = stream.position();
43                if stream.expect_string(".b16").is_ok() {
44                    return Ok(Type::B16);
45                }
46                stream.set_position(saved_pos);
47            }
48            let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
49            let expected = &[".b16"];
50            let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
51            Err(crate::parser::unexpected_value(span, expected, found))
52        }
53    }
54
55    impl PtxParser for MovmatrixSyncAlignedShapeTransType {
56        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
57            stream.expect_string("movmatrix")?;
58            stream.expect_string(".sync")?;
59            let sync = ();
60            stream.expect_complete()?;
61            stream.expect_string(".aligned")?;
62            let aligned = ();
63            stream.expect_complete()?;
64            let shape = Shape::parse(stream)?;
65            stream.expect_complete()?;
66            stream.expect_string(".trans")?;
67            let trans = ();
68            stream.expect_complete()?;
69            let type_ = Type::parse(stream)?;
70            stream.expect_complete()?;
71            let d = GeneralOperand::parse(stream)?;
72            stream.expect_complete()?;
73            stream.expect(&PtxToken::Comma)?;
74            let a = GeneralOperand::parse(stream)?;
75            stream.expect_complete()?;
76            stream.expect_complete()?;
77            stream.expect(&PtxToken::Semicolon)?;
78            Ok(MovmatrixSyncAlignedShapeTransType {
79                sync,
80                aligned,
81                shape,
82                trans,
83                type_,
84                d,
85                a,
86            })
87        }
88    }
89
90
91}
92