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
32                .peek()
33                .map(|(_, s)| s.clone())
34                .unwrap_or(Span { start: 0, end: 0 });
35            let expected = &[".m8n8"];
36            let found = stream
37                .peek()
38                .map(|(t, _)| format!("{:?}", t))
39                .unwrap_or_else(|_| "<end of input>".to_string());
40            Err(crate::parser::unexpected_value(span, expected, found))
41        }
42    }
43
44    impl PtxParser for Type {
45        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
46            // Try B16
47            {
48                let saved_pos = stream.position();
49                if stream.expect_string(".b16").is_ok() {
50                    return Ok(Type::B16);
51                }
52                stream.set_position(saved_pos);
53            }
54            let span = stream
55                .peek()
56                .map(|(_, s)| s.clone())
57                .unwrap_or(Span { start: 0, end: 0 });
58            let expected = &[".b16"];
59            let found = stream
60                .peek()
61                .map(|(t, _)| format!("{:?}", t))
62                .unwrap_or_else(|_| "<end of input>".to_string());
63            Err(crate::parser::unexpected_value(span, expected, found))
64        }
65    }
66
67    impl PtxParser for MovmatrixSyncAlignedShapeTransType {
68        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
69            stream.expect_string("movmatrix")?;
70            stream.expect_string(".sync")?;
71            let sync = ();
72            stream.expect_complete()?;
73            stream.expect_string(".aligned")?;
74            let aligned = ();
75            stream.expect_complete()?;
76            let shape = Shape::parse(stream)?;
77            stream.expect_complete()?;
78            stream.expect_string(".trans")?;
79            let trans = ();
80            stream.expect_complete()?;
81            let type_ = Type::parse(stream)?;
82            stream.expect_complete()?;
83            let d = GeneralOperand::parse(stream)?;
84            stream.expect_complete()?;
85            stream.expect(&PtxToken::Comma)?;
86            let a = GeneralOperand::parse(stream)?;
87            stream.expect_complete()?;
88            stream.expect_complete()?;
89            stream.expect(&PtxToken::Semicolon)?;
90            Ok(MovmatrixSyncAlignedShapeTransType {
91                sync,
92                aligned,
93                shape,
94                trans,
95                type_,
96                d,
97                a,
98            })
99        }
100    }
101}