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