ptx_parser/parser/instruction/
tcgen05_mma_ws_sp.rs1#![allow(unused)]
24
25use crate::lexer::PtxToken;
26use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
27use crate::r#type::common::*;
28
29pub mod section_0 {
30 use super::*;
31 use crate::r#type::instruction::tcgen05_mma_ws_sp::section_0::*;
32
33 impl PtxParser for Kind {
38 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
39 {
41 let saved_pos = stream.position();
42 if stream.expect_string(".kind::f8f6f4").is_ok() {
43 return Ok(Kind::KindF8f6f4);
44 }
45 stream.set_position(saved_pos);
46 }
47 let saved_pos = stream.position();
48 {
50 let saved_pos = stream.position();
51 if stream.expect_string(".kind::tf32").is_ok() {
52 return Ok(Kind::KindTf32);
53 }
54 stream.set_position(saved_pos);
55 }
56 stream.set_position(saved_pos);
57 let saved_pos = stream.position();
58 {
60 let saved_pos = stream.position();
61 if stream.expect_string(".kind::f16").is_ok() {
62 return Ok(Kind::KindF16);
63 }
64 stream.set_position(saved_pos);
65 }
66 stream.set_position(saved_pos);
67 let span = stream
68 .peek()
69 .map(|(_, s)| s.clone())
70 .unwrap_or(Span { start: 0, end: 0 });
71 let expected = &[".kind::f8f6f4", ".kind::tf32", ".kind::f16"];
72 let found = stream
73 .peek()
74 .map(|(t, _)| format!("{:?}", t))
75 .unwrap_or_else(|_| "<end of input>".to_string());
76 Err(crate::parser::unexpected_value(span, expected, found))
77 }
78 }
79
80 impl PtxParser for Tcgen05MmaWsSpCtaGroup1KindCollectorUsage {
81 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
82 stream.expect_string("tcgen05")?;
83 stream.expect_string(".mma")?;
84 let mma = ();
85 stream.expect_complete()?;
86 stream.expect_string(".ws")?;
87 let ws = ();
88 stream.expect_complete()?;
89 stream.expect_string(".sp")?;
90 let sp = ();
91 stream.expect_complete()?;
92 stream.expect_string(".cta_group::1")?;
93 let cta_group_1 = ();
94 stream.expect_complete()?;
95 let kind = Kind::parse(stream)?;
96 stream.expect_complete()?;
97 let saved_pos = stream.position();
98 let collector_usage = stream.expect_string(".collector_usage").is_ok();
99 if !collector_usage {
100 stream.set_position(saved_pos);
101 }
102 stream.expect_complete()?;
103 let d_tmem = AddressOperand::parse(stream)?;
104 stream.expect_complete()?;
105 stream.expect(&PtxToken::Comma)?;
106 let a_desc = GeneralOperand::parse(stream)?;
107 stream.expect_complete()?;
108 stream.expect(&PtxToken::Comma)?;
109 let b_desc = GeneralOperand::parse(stream)?;
110 stream.expect_complete()?;
111 stream.expect(&PtxToken::Comma)?;
112 let sp_meta_tmem = AddressOperand::parse(stream)?;
113 stream.expect_complete()?;
114 stream.expect(&PtxToken::Comma)?;
115 let idesc = GeneralOperand::parse(stream)?;
116 stream.expect_complete()?;
117 stream.expect(&PtxToken::Comma)?;
118 let enable_input_d = GeneralOperand::parse(stream)?;
119 stream.expect_complete()?;
120 let saved_pos = stream.position();
121 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
122 if !has_comma {
123 stream.set_position(saved_pos);
124 }
125 let saved_pos = stream.position();
126 let zero_column_mask_desc = match GeneralOperand::parse(stream) {
127 Ok(val) => Some(val),
128 Err(_) => {
129 stream.set_position(saved_pos);
130 None
131 }
132 };
133 stream.expect_complete()?;
134 stream.expect_complete()?;
135 stream.expect(&PtxToken::Semicolon)?;
136 Ok(Tcgen05MmaWsSpCtaGroup1KindCollectorUsage {
137 mma,
138 ws,
139 sp,
140 cta_group_1,
141 kind,
142 collector_usage,
143 d_tmem,
144 a_desc,
145 b_desc,
146 sp_meta_tmem,
147 idesc,
148 enable_input_d,
149 zero_column_mask_desc,
150 })
151 }
152 }
153
154 impl PtxParser for Tcgen05MmaWsSpCtaGroup1KindCollectorUsage1 {
155 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
156 stream.expect_string("tcgen05")?;
157 stream.expect_string(".mma")?;
158 let mma = ();
159 stream.expect_complete()?;
160 stream.expect_string(".ws")?;
161 let ws = ();
162 stream.expect_complete()?;
163 stream.expect_string(".sp")?;
164 let sp = ();
165 stream.expect_complete()?;
166 stream.expect_string(".cta_group::1")?;
167 let cta_group_1 = ();
168 stream.expect_complete()?;
169 let kind = Kind::parse(stream)?;
170 stream.expect_complete()?;
171 let saved_pos = stream.position();
172 let collector_usage = stream.expect_string(".collector_usage").is_ok();
173 if !collector_usage {
174 stream.set_position(saved_pos);
175 }
176 stream.expect_complete()?;
177 let d_tmem = AddressOperand::parse(stream)?;
178 stream.expect_complete()?;
179 stream.expect(&PtxToken::Comma)?;
180 let a_tmem = AddressOperand::parse(stream)?;
181 stream.expect_complete()?;
182 stream.expect(&PtxToken::Comma)?;
183 let b_desc = GeneralOperand::parse(stream)?;
184 stream.expect_complete()?;
185 stream.expect(&PtxToken::Comma)?;
186 let sp_meta_tmem = AddressOperand::parse(stream)?;
187 stream.expect_complete()?;
188 stream.expect(&PtxToken::Comma)?;
189 let idesc = GeneralOperand::parse(stream)?;
190 stream.expect_complete()?;
191 stream.expect(&PtxToken::Comma)?;
192 let enable_input_d = GeneralOperand::parse(stream)?;
193 stream.expect_complete()?;
194 let saved_pos = stream.position();
195 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
196 if !has_comma {
197 stream.set_position(saved_pos);
198 }
199 let saved_pos = stream.position();
200 let zero_column_mask_desc = match GeneralOperand::parse(stream) {
201 Ok(val) => Some(val),
202 Err(_) => {
203 stream.set_position(saved_pos);
204 None
205 }
206 };
207 stream.expect_complete()?;
208 stream.expect_complete()?;
209 stream.expect(&PtxToken::Semicolon)?;
210 Ok(Tcgen05MmaWsSpCtaGroup1KindCollectorUsage1 {
211 mma,
212 ws,
213 sp,
214 cta_group_1,
215 kind,
216 collector_usage,
217 d_tmem,
218 a_tmem,
219 b_desc,
220 sp_meta_tmem,
221 idesc,
222 enable_input_d,
223 zero_column_mask_desc,
224 })
225 }
226 }
227}
228
229pub mod section_1 {
230 use super::*;
231 use crate::r#type::instruction::tcgen05_mma_ws_sp::section_1::*;
232
233 impl PtxParser for Buffer {
238 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
239 {
241 let saved_pos = stream.position();
242 if stream.expect_string("::b0").is_ok() {
243 return Ok(Buffer::B0);
244 }
245 stream.set_position(saved_pos);
246 }
247 let saved_pos = stream.position();
248 {
250 let saved_pos = stream.position();
251 if stream.expect_string("::b1").is_ok() {
252 return Ok(Buffer::B1);
253 }
254 stream.set_position(saved_pos);
255 }
256 stream.set_position(saved_pos);
257 let saved_pos = stream.position();
258 {
260 let saved_pos = stream.position();
261 if stream.expect_string("::b2").is_ok() {
262 return Ok(Buffer::B2);
263 }
264 stream.set_position(saved_pos);
265 }
266 stream.set_position(saved_pos);
267 let saved_pos = stream.position();
268 {
270 let saved_pos = stream.position();
271 if stream.expect_string("::b3").is_ok() {
272 return Ok(Buffer::B3);
273 }
274 stream.set_position(saved_pos);
275 }
276 stream.set_position(saved_pos);
277 let span = stream
278 .peek()
279 .map(|(_, s)| s.clone())
280 .unwrap_or(Span { start: 0, end: 0 });
281 let expected = &["::b0", "::b1", "::b2", "::b3"];
282 let found = stream
283 .peek()
284 .map(|(t, _)| format!("{:?}", t))
285 .unwrap_or_else(|_| "<end of input>".to_string());
286 Err(crate::parser::unexpected_value(span, expected, found))
287 }
288 }
289
290 impl PtxParser for CollectorUsage {
291 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
292 {
294 let saved_seq_pos = stream.position();
295 match (|| -> Result<_, PtxParseError> {
296 stream.expect_string(".collector")?;
297 let collector = ();
298 let buffer = Buffer::parse(stream)?;
299 let op = Op::parse(stream)?;
300 Ok((collector, buffer, op))
301 })() {
302 Ok((collector, buffer, op)) => {
303 return Ok(CollectorUsage::CollectorBufferOp(collector, buffer, op));
304 }
305 Err(_) => {
306 stream.set_position(saved_seq_pos);
307 }
308 }
309 }
310 let span = stream
311 .peek()
312 .map(|(_, s)| s.clone())
313 .unwrap_or(Span { start: 0, end: 0 });
314 let expected = &["<complex>"];
315 let found = stream
316 .peek()
317 .map(|(t, _)| format!("{:?}", t))
318 .unwrap_or_else(|_| "<end of input>".to_string());
319 Err(crate::parser::unexpected_value(span, expected, found))
320 }
321 }
322
323 impl PtxParser for Op {
324 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
325 {
327 let saved_pos = stream.position();
328 if stream.expect_string("::lastuse").is_ok() {
329 return Ok(Op::Lastuse);
330 }
331 stream.set_position(saved_pos);
332 }
333 let saved_pos = stream.position();
334 {
336 let saved_pos = stream.position();
337 if stream.expect_string("::discard").is_ok() {
338 return Ok(Op::Discard);
339 }
340 stream.set_position(saved_pos);
341 }
342 stream.set_position(saved_pos);
343 let saved_pos = stream.position();
344 {
346 let saved_pos = stream.position();
347 if stream.expect_string("::fill").is_ok() {
348 return Ok(Op::Fill);
349 }
350 stream.set_position(saved_pos);
351 }
352 stream.set_position(saved_pos);
353 let saved_pos = stream.position();
354 {
356 let saved_pos = stream.position();
357 if stream.expect_string("::use").is_ok() {
358 return Ok(Op::Use);
359 }
360 stream.set_position(saved_pos);
361 }
362 stream.set_position(saved_pos);
363 let span = stream
364 .peek()
365 .map(|(_, s)| s.clone())
366 .unwrap_or(Span { start: 0, end: 0 });
367 let expected = &["::lastuse", "::discard", "::fill", "::use"];
368 let found = stream
369 .peek()
370 .map(|(t, _)| format!("{:?}", t))
371 .unwrap_or_else(|_| "<end of input>".to_string());
372 Err(crate::parser::unexpected_value(span, expected, found))
373 }
374 }
375
376 impl PtxParser for Tcgen05MmaWsSpCtaGroup1KindI8CollectorUsage {
377 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
378 stream.expect_string("tcgen05")?;
379 stream.expect_string(".mma")?;
380 let mma = ();
381 stream.expect_complete()?;
382 stream.expect_string(".ws")?;
383 let ws = ();
384 stream.expect_complete()?;
385 stream.expect_string(".sp")?;
386 let sp = ();
387 stream.expect_complete()?;
388 stream.expect_string(".cta_group::1")?;
389 let cta_group_1 = ();
390 stream.expect_complete()?;
391 stream.expect_string(".kind::i8")?;
392 let kind_i8 = ();
393 stream.expect_complete()?;
394 let saved_pos = stream.position();
395 let collector_usage = match CollectorUsage::parse(stream) {
396 Ok(val) => Some(val),
397 Err(_) => {
398 stream.set_position(saved_pos);
399 None
400 }
401 };
402 stream.expect_complete()?;
403 let d_tmem = AddressOperand::parse(stream)?;
404 stream.expect_complete()?;
405 stream.expect(&PtxToken::Comma)?;
406 let a_desc = GeneralOperand::parse(stream)?;
407 stream.expect_complete()?;
408 stream.expect(&PtxToken::Comma)?;
409 let b_desc = GeneralOperand::parse(stream)?;
410 stream.expect_complete()?;
411 stream.expect(&PtxToken::Comma)?;
412 let sp_meta_tmem = AddressOperand::parse(stream)?;
413 stream.expect_complete()?;
414 stream.expect(&PtxToken::Comma)?;
415 let idesc = GeneralOperand::parse(stream)?;
416 stream.expect_complete()?;
417 stream.expect(&PtxToken::Comma)?;
418 let enable_input_d = GeneralOperand::parse(stream)?;
419 stream.expect_complete()?;
420 let saved_pos = stream.position();
421 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
422 if !has_comma {
423 stream.set_position(saved_pos);
424 }
425 let saved_pos = stream.position();
426 let zero_column_mask_desc = match GeneralOperand::parse(stream) {
427 Ok(val) => Some(val),
428 Err(_) => {
429 stream.set_position(saved_pos);
430 None
431 }
432 };
433 stream.expect_complete()?;
434 stream.expect_complete()?;
435 stream.expect(&PtxToken::Semicolon)?;
436 Ok(Tcgen05MmaWsSpCtaGroup1KindI8CollectorUsage {
437 mma,
438 ws,
439 sp,
440 cta_group_1,
441 kind_i8,
442 collector_usage,
443 d_tmem,
444 a_desc,
445 b_desc,
446 sp_meta_tmem,
447 idesc,
448 enable_input_d,
449 zero_column_mask_desc,
450 })
451 }
452 }
453
454 impl PtxParser for Tcgen05MmaWsSpCtaGroup1KindI8CollectorUsage1 {
455 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
456 stream.expect_string("tcgen05")?;
457 stream.expect_string(".mma")?;
458 let mma = ();
459 stream.expect_complete()?;
460 stream.expect_string(".ws")?;
461 let ws = ();
462 stream.expect_complete()?;
463 stream.expect_string(".sp")?;
464 let sp = ();
465 stream.expect_complete()?;
466 stream.expect_string(".cta_group::1")?;
467 let cta_group_1 = ();
468 stream.expect_complete()?;
469 stream.expect_string(".kind::i8")?;
470 let kind_i8 = ();
471 stream.expect_complete()?;
472 let saved_pos = stream.position();
473 let collector_usage = match CollectorUsage::parse(stream) {
474 Ok(val) => Some(val),
475 Err(_) => {
476 stream.set_position(saved_pos);
477 None
478 }
479 };
480 stream.expect_complete()?;
481 let d_tmem = AddressOperand::parse(stream)?;
482 stream.expect_complete()?;
483 stream.expect(&PtxToken::Comma)?;
484 let a_tmem = AddressOperand::parse(stream)?;
485 stream.expect_complete()?;
486 stream.expect(&PtxToken::Comma)?;
487 let b_desc = GeneralOperand::parse(stream)?;
488 stream.expect_complete()?;
489 stream.expect(&PtxToken::Comma)?;
490 let sp_meta_tmem = AddressOperand::parse(stream)?;
491 stream.expect_complete()?;
492 stream.expect(&PtxToken::Comma)?;
493 let idesc = GeneralOperand::parse(stream)?;
494 stream.expect_complete()?;
495 stream.expect(&PtxToken::Comma)?;
496 let enable_input_d = GeneralOperand::parse(stream)?;
497 stream.expect_complete()?;
498 let saved_pos = stream.position();
499 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
500 if !has_comma {
501 stream.set_position(saved_pos);
502 }
503 let saved_pos = stream.position();
504 let zero_column_mask_desc = match GeneralOperand::parse(stream) {
505 Ok(val) => Some(val),
506 Err(_) => {
507 stream.set_position(saved_pos);
508 None
509 }
510 };
511 stream.expect_complete()?;
512 stream.expect_complete()?;
513 stream.expect(&PtxToken::Semicolon)?;
514 Ok(Tcgen05MmaWsSpCtaGroup1KindI8CollectorUsage1 {
515 mma,
516 ws,
517 sp,
518 cta_group_1,
519 kind_i8,
520 collector_usage,
521 d_tmem,
522 a_tmem,
523 b_desc,
524 sp_meta_tmem,
525 idesc,
526 enable_input_d,
527 zero_column_mask_desc,
528 })
529 }
530 }
531}