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