ptx_parser/parser/instruction/
ldmatrix.rs1#![allow(unused)]
14
15use crate::lexer::PtxToken;
16use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
17use crate::r#type::common::*;
18
19pub mod section_0 {
20 use super::*;
21 use crate::r#type::instruction::ldmatrix::section_0::*;
22
23 impl PtxParser for DstFmt {
28 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
29 {
31 let saved_pos = stream.position();
32 if stream.expect_string(".b8x16").is_ok() {
33 return Ok(DstFmt::B8x16);
34 }
35 stream.set_position(saved_pos);
36 }
37 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
38 let expected = &[".b8x16"];
39 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
40 Err(crate::parser::unexpected_value(span, expected, found))
41 }
42 }
43
44 impl PtxParser for Num {
45 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
46 {
48 let saved_pos = stream.position();
49 if stream.expect_string(".x1").is_ok() {
50 return Ok(Num::X1);
51 }
52 stream.set_position(saved_pos);
53 }
54 let saved_pos = stream.position();
55 {
57 let saved_pos = stream.position();
58 if stream.expect_string(".x2").is_ok() {
59 return Ok(Num::X2);
60 }
61 stream.set_position(saved_pos);
62 }
63 stream.set_position(saved_pos);
64 let saved_pos = stream.position();
65 {
67 let saved_pos = stream.position();
68 if stream.expect_string(".x4").is_ok() {
69 return Ok(Num::X4);
70 }
71 stream.set_position(saved_pos);
72 }
73 stream.set_position(saved_pos);
74 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
75 let expected = &[".x1", ".x2", ".x4"];
76 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
77 Err(crate::parser::unexpected_value(span, expected, found))
78 }
79 }
80
81 impl PtxParser for Shape {
82 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
83 {
85 let saved_pos = stream.position();
86 if stream.expect_string(".m16n16").is_ok() {
87 return Ok(Shape::M16n16);
88 }
89 stream.set_position(saved_pos);
90 }
91 let saved_pos = stream.position();
92 {
94 let saved_pos = stream.position();
95 if stream.expect_string(".m8n8").is_ok() {
96 return Ok(Shape::M8n8);
97 }
98 stream.set_position(saved_pos);
99 }
100 stream.set_position(saved_pos);
101 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
102 let expected = &[".m16n16", ".m8n8"];
103 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
104 Err(crate::parser::unexpected_value(span, expected, found))
105 }
106 }
107
108 impl PtxParser for SrcFmt {
109 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
110 {
112 let saved_pos = stream.position();
113 if stream.expect_string(".b6x16_p32").is_ok() {
114 return Ok(SrcFmt::B6x16P32);
115 }
116 stream.set_position(saved_pos);
117 }
118 let saved_pos = stream.position();
119 {
121 let saved_pos = stream.position();
122 if stream.expect_string(".b4x16_p64").is_ok() {
123 return Ok(SrcFmt::B4x16P64);
124 }
125 stream.set_position(saved_pos);
126 }
127 stream.set_position(saved_pos);
128 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
129 let expected = &[".b6x16_p32", ".b4x16_p64"];
130 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
131 Err(crate::parser::unexpected_value(span, expected, found))
132 }
133 }
134
135 impl PtxParser for Ss {
136 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
137 {
139 let saved_pos = stream.position();
140 if stream.expect_string(".shared::cta").is_ok() {
141 return Ok(Ss::SharedCta);
142 }
143 stream.set_position(saved_pos);
144 }
145 let saved_pos = stream.position();
146 {
148 let saved_pos = stream.position();
149 if stream.expect_string(".shared").is_ok() {
150 return Ok(Ss::Shared);
151 }
152 stream.set_position(saved_pos);
153 }
154 stream.set_position(saved_pos);
155 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
156 let expected = &[".shared::cta", ".shared"];
157 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
158 Err(crate::parser::unexpected_value(span, expected, found))
159 }
160 }
161
162 impl PtxParser for Type {
163 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
164 {
166 let saved_pos = stream.position();
167 if stream.expect_string(".b16").is_ok() {
168 return Ok(Type::B16);
169 }
170 stream.set_position(saved_pos);
171 }
172 let saved_pos = stream.position();
173 {
175 let saved_pos = stream.position();
176 if stream.expect_string(".b8").is_ok() {
177 return Ok(Type::B8);
178 }
179 stream.set_position(saved_pos);
180 }
181 stream.set_position(saved_pos);
182 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
183 let expected = &[".b16", ".b8"];
184 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
185 Err(crate::parser::unexpected_value(span, expected, found))
186 }
187 }
188
189 impl PtxParser for LdmatrixSyncAlignedShapeNumTransSsType {
190 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
191 stream.expect_string("ldmatrix")?;
192 stream.expect_string(".sync")?;
193 let sync = ();
194 stream.expect_complete()?;
195 stream.expect_string(".aligned")?;
196 let aligned = ();
197 stream.expect_complete()?;
198 let shape = Shape::parse(stream)?;
199 stream.expect_complete()?;
200 let num = Num::parse(stream)?;
201 stream.expect_complete()?;
202 let saved_pos = stream.position();
203 let trans = stream.expect_string(".trans").is_ok();
204 if !trans {
205 stream.set_position(saved_pos);
206 }
207 stream.expect_complete()?;
208 let saved_pos = stream.position();
209 let ss = match Ss::parse(stream) {
210 Ok(val) => Some(val),
211 Err(_) => {
212 stream.set_position(saved_pos);
213 None
214 }
215 };
216 stream.expect_complete()?;
217 let type_ = Type::parse(stream)?;
218 stream.expect_complete()?;
219 let r = GeneralOperand::parse(stream)?;
220 stream.expect_complete()?;
221 stream.expect(&PtxToken::Comma)?;
222 let p = AddressOperand::parse(stream)?;
223 stream.expect_complete()?;
224 stream.expect_complete()?;
225 stream.expect(&PtxToken::Semicolon)?;
226 Ok(LdmatrixSyncAlignedShapeNumTransSsType {
227 sync,
228 aligned,
229 shape,
230 num,
231 trans,
232 ss,
233 type_,
234 r,
235 p,
236 })
237 }
238 }
239
240
241 impl PtxParser for LdmatrixSyncAlignedM8n16NumSsDstFmtSrcFmt {
242 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
243 stream.expect_string("ldmatrix")?;
244 stream.expect_string(".sync")?;
245 let sync = ();
246 stream.expect_complete()?;
247 stream.expect_string(".aligned")?;
248 let aligned = ();
249 stream.expect_complete()?;
250 stream.expect_string(".m8n16")?;
251 let m8n16 = ();
252 stream.expect_complete()?;
253 let num = Num::parse(stream)?;
254 stream.expect_complete()?;
255 let saved_pos = stream.position();
256 let ss = match Ss::parse(stream) {
257 Ok(val) => Some(val),
258 Err(_) => {
259 stream.set_position(saved_pos);
260 None
261 }
262 };
263 stream.expect_complete()?;
264 let dst_fmt = DstFmt::parse(stream)?;
265 stream.expect_complete()?;
266 let src_fmt = SrcFmt::parse(stream)?;
267 stream.expect_complete()?;
268 let r = GeneralOperand::parse(stream)?;
269 stream.expect_complete()?;
270 stream.expect(&PtxToken::Comma)?;
271 let p = AddressOperand::parse(stream)?;
272 stream.expect_complete()?;
273 stream.expect_complete()?;
274 stream.expect(&PtxToken::Semicolon)?;
275 Ok(LdmatrixSyncAlignedM8n16NumSsDstFmtSrcFmt {
276 sync,
277 aligned,
278 m8n16,
279 num,
280 ss,
281 dst_fmt,
282 src_fmt,
283 r,
284 p,
285 })
286 }
287 }
288
289
290 impl PtxParser for LdmatrixSyncAlignedM16n16NumTransSsDstFmtSrcFmt {
291 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
292 stream.expect_string("ldmatrix")?;
293 stream.expect_string(".sync")?;
294 let sync = ();
295 stream.expect_complete()?;
296 stream.expect_string(".aligned")?;
297 let aligned = ();
298 stream.expect_complete()?;
299 stream.expect_string(".m16n16")?;
300 let m16n16 = ();
301 stream.expect_complete()?;
302 let num = Num::parse(stream)?;
303 stream.expect_complete()?;
304 stream.expect_string(".trans")?;
305 let trans = ();
306 stream.expect_complete()?;
307 let saved_pos = stream.position();
308 let ss = match Ss::parse(stream) {
309 Ok(val) => Some(val),
310 Err(_) => {
311 stream.set_position(saved_pos);
312 None
313 }
314 };
315 stream.expect_complete()?;
316 let dst_fmt = DstFmt::parse(stream)?;
317 stream.expect_complete()?;
318 let src_fmt = SrcFmt::parse(stream)?;
319 stream.expect_complete()?;
320 let r = GeneralOperand::parse(stream)?;
321 stream.expect_complete()?;
322 stream.expect(&PtxToken::Comma)?;
323 let p = AddressOperand::parse(stream)?;
324 stream.expect_complete()?;
325 stream.expect_complete()?;
326 stream.expect(&PtxToken::Semicolon)?;
327 Ok(LdmatrixSyncAlignedM16n16NumTransSsDstFmtSrcFmt {
328 sync,
329 aligned,
330 m16n16,
331 num,
332 trans,
333 ss,
334 dst_fmt,
335 src_fmt,
336 r,
337 p,
338 })
339 }
340 }
341
342
343}
344