ptx_parser/parser/instruction/
stmatrix.rs1#![allow(unused)]
10
11use crate::lexer::PtxToken;
12use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
13use crate::r#type::common::*;
14
15pub mod section_0 {
16 use super::*;
17 use crate::r#type::instruction::stmatrix::section_0::*;
18
19 impl PtxParser for Num {
24 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
25 {
27 let saved_pos = stream.position();
28 if stream.expect_string(".x1").is_ok() {
29 return Ok(Num::X1);
30 }
31 stream.set_position(saved_pos);
32 }
33 let saved_pos = stream.position();
34 {
36 let saved_pos = stream.position();
37 if stream.expect_string(".x2").is_ok() {
38 return Ok(Num::X2);
39 }
40 stream.set_position(saved_pos);
41 }
42 stream.set_position(saved_pos);
43 let saved_pos = stream.position();
44 {
46 let saved_pos = stream.position();
47 if stream.expect_string(".x4").is_ok() {
48 return Ok(Num::X4);
49 }
50 stream.set_position(saved_pos);
51 }
52 stream.set_position(saved_pos);
53 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
54 let expected = &[".x1", ".x2", ".x4"];
55 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
56 Err(crate::parser::unexpected_value(span, expected, found))
57 }
58 }
59
60 impl PtxParser for Shape {
61 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
62 {
64 let saved_pos = stream.position();
65 if stream.expect_string(".m16n8").is_ok() {
66 return Ok(Shape::M16n8);
67 }
68 stream.set_position(saved_pos);
69 }
70 let saved_pos = stream.position();
71 {
73 let saved_pos = stream.position();
74 if stream.expect_string(".m8n8").is_ok() {
75 return Ok(Shape::M8n8);
76 }
77 stream.set_position(saved_pos);
78 }
79 stream.set_position(saved_pos);
80 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
81 let expected = &[".m16n8", ".m8n8"];
82 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
83 Err(crate::parser::unexpected_value(span, expected, found))
84 }
85 }
86
87 impl PtxParser for Ss {
88 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
89 {
91 let saved_pos = stream.position();
92 if stream.expect_string(".shared::cta").is_ok() {
93 return Ok(Ss::SharedCta);
94 }
95 stream.set_position(saved_pos);
96 }
97 let saved_pos = stream.position();
98 {
100 let saved_pos = stream.position();
101 if stream.expect_string(".shared").is_ok() {
102 return Ok(Ss::Shared);
103 }
104 stream.set_position(saved_pos);
105 }
106 stream.set_position(saved_pos);
107 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
108 let expected = &[".shared::cta", ".shared"];
109 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
110 Err(crate::parser::unexpected_value(span, expected, found))
111 }
112 }
113
114 impl PtxParser for Type {
115 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
116 {
118 let saved_pos = stream.position();
119 if stream.expect_string(".b16").is_ok() {
120 return Ok(Type::B16);
121 }
122 stream.set_position(saved_pos);
123 }
124 let saved_pos = stream.position();
125 {
127 let saved_pos = stream.position();
128 if stream.expect_string(".b8").is_ok() {
129 return Ok(Type::B8);
130 }
131 stream.set_position(saved_pos);
132 }
133 stream.set_position(saved_pos);
134 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
135 let expected = &[".b16", ".b8"];
136 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
137 Err(crate::parser::unexpected_value(span, expected, found))
138 }
139 }
140
141 impl PtxParser for StmatrixSyncAlignedShapeNumTransSsType {
142 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
143 stream.expect_string("stmatrix")?;
144 stream.expect_string(".sync")?;
145 let sync = ();
146 stream.expect_complete()?;
147 stream.expect_string(".aligned")?;
148 let aligned = ();
149 stream.expect_complete()?;
150 let shape = Shape::parse(stream)?;
151 stream.expect_complete()?;
152 let num = Num::parse(stream)?;
153 stream.expect_complete()?;
154 let saved_pos = stream.position();
155 let trans = stream.expect_string(".trans").is_ok();
156 if !trans {
157 stream.set_position(saved_pos);
158 }
159 stream.expect_complete()?;
160 let saved_pos = stream.position();
161 let ss = match Ss::parse(stream) {
162 Ok(val) => Some(val),
163 Err(_) => {
164 stream.set_position(saved_pos);
165 None
166 }
167 };
168 stream.expect_complete()?;
169 let type_ = Type::parse(stream)?;
170 stream.expect_complete()?;
171 let p = AddressOperand::parse(stream)?;
172 stream.expect_complete()?;
173 stream.expect(&PtxToken::Comma)?;
174 let r = GeneralOperand::parse(stream)?;
175 stream.expect_complete()?;
176 stream.expect_complete()?;
177 stream.expect(&PtxToken::Semicolon)?;
178 Ok(StmatrixSyncAlignedShapeNumTransSsType {
179 sync,
180 aligned,
181 shape,
182 num,
183 trans,
184 ss,
185 type_,
186 p,
187 r,
188 })
189 }
190 }
191
192
193}
194