1#![allow(unused)]
34
35use crate::lexer::PtxToken;
36use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
37use crate::r#type::common::*;
38
39pub mod section_0 {
40 use super::*;
41 use crate::r#type::instruction::cp_async_bulk_tensor::section_0::*;
42
43 impl PtxParser for CompletionMechanism {
48 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
49 {
51 let saved_pos = stream.position();
52 if stream.expect_string(".mbarrier::complete_tx::bytes").is_ok() {
53 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
54 }
55 stream.set_position(saved_pos);
56 }
57 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
58 let expected = &[".mbarrier::complete_tx::bytes"];
59 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
60 Err(crate::parser::unexpected_value(span, expected, found))
61 }
62 }
63
64 impl PtxParser for CtaGroup {
65 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
66 {
68 let saved_pos = stream.position();
69 if stream.expect_string(".cta_group::1").is_ok() {
70 return Ok(CtaGroup::CtaGroup1);
71 }
72 stream.set_position(saved_pos);
73 }
74 let saved_pos = stream.position();
75 {
77 let saved_pos = stream.position();
78 if stream.expect_string(".cta_group::2").is_ok() {
79 return Ok(CtaGroup::CtaGroup2);
80 }
81 stream.set_position(saved_pos);
82 }
83 stream.set_position(saved_pos);
84 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
85 let expected = &[".cta_group::1", ".cta_group::2"];
86 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
87 Err(crate::parser::unexpected_value(span, expected, found))
88 }
89 }
90
91 impl PtxParser for Dim {
92 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
93 {
95 let saved_pos = stream.position();
96 if stream.expect_string(".1d").is_ok() {
97 return Ok(Dim::_1d);
98 }
99 stream.set_position(saved_pos);
100 }
101 let saved_pos = stream.position();
102 {
104 let saved_pos = stream.position();
105 if stream.expect_string(".2d").is_ok() {
106 return Ok(Dim::_2d);
107 }
108 stream.set_position(saved_pos);
109 }
110 stream.set_position(saved_pos);
111 let saved_pos = stream.position();
112 {
114 let saved_pos = stream.position();
115 if stream.expect_string(".3d").is_ok() {
116 return Ok(Dim::_3d);
117 }
118 stream.set_position(saved_pos);
119 }
120 stream.set_position(saved_pos);
121 let saved_pos = stream.position();
122 {
124 let saved_pos = stream.position();
125 if stream.expect_string(".4d").is_ok() {
126 return Ok(Dim::_4d);
127 }
128 stream.set_position(saved_pos);
129 }
130 stream.set_position(saved_pos);
131 let saved_pos = stream.position();
132 {
134 let saved_pos = stream.position();
135 if stream.expect_string(".5d").is_ok() {
136 return Ok(Dim::_5d);
137 }
138 stream.set_position(saved_pos);
139 }
140 stream.set_position(saved_pos);
141 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
142 let expected = &[".1d", ".2d", ".3d", ".4d", ".5d"];
143 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
144 Err(crate::parser::unexpected_value(span, expected, found))
145 }
146 }
147
148 impl PtxParser for Dst {
149 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
150 {
152 let saved_pos = stream.position();
153 if stream.expect_string(".shared::cta").is_ok() {
154 return Ok(Dst::SharedCta);
155 }
156 stream.set_position(saved_pos);
157 }
158 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
159 let expected = &[".shared::cta"];
160 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
161 Err(crate::parser::unexpected_value(span, expected, found))
162 }
163 }
164
165 impl PtxParser for LevelCacheHint {
166 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
167 {
169 let saved_pos = stream.position();
170 if stream.expect_string(".L2::cache_hint").is_ok() {
171 return Ok(LevelCacheHint::L2CacheHint);
172 }
173 stream.set_position(saved_pos);
174 }
175 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
176 let expected = &[".L2::cache_hint"];
177 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
178 Err(crate::parser::unexpected_value(span, expected, found))
179 }
180 }
181
182 impl PtxParser for LoadMode {
183 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
184 {
186 let saved_pos = stream.position();
187 if stream.expect_string(".im2col::w::128").is_ok() {
188 return Ok(LoadMode::Im2colW128);
189 }
190 stream.set_position(saved_pos);
191 }
192 let saved_pos = stream.position();
193 {
195 let saved_pos = stream.position();
196 if stream.expect_string(".tile::gather4").is_ok() {
197 return Ok(LoadMode::TileGather4);
198 }
199 stream.set_position(saved_pos);
200 }
201 stream.set_position(saved_pos);
202 let saved_pos = stream.position();
203 {
205 let saved_pos = stream.position();
206 if stream.expect_string(".im2col::w").is_ok() {
207 return Ok(LoadMode::Im2colW);
208 }
209 stream.set_position(saved_pos);
210 }
211 stream.set_position(saved_pos);
212 let saved_pos = stream.position();
213 {
215 let saved_pos = stream.position();
216 if stream.expect_string(".im2col").is_ok() {
217 return Ok(LoadMode::Im2col);
218 }
219 stream.set_position(saved_pos);
220 }
221 stream.set_position(saved_pos);
222 let saved_pos = stream.position();
223 {
225 let saved_pos = stream.position();
226 if stream.expect_string(".tile").is_ok() {
227 return Ok(LoadMode::Tile);
228 }
229 stream.set_position(saved_pos);
230 }
231 stream.set_position(saved_pos);
232 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
233 let expected = &[".im2col::w::128", ".tile::gather4", ".im2col::w", ".im2col", ".tile"];
234 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
235 Err(crate::parser::unexpected_value(span, expected, found))
236 }
237 }
238
239 impl PtxParser for Src {
240 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
241 {
243 let saved_pos = stream.position();
244 if stream.expect_string(".global").is_ok() {
245 return Ok(Src::Global);
246 }
247 stream.set_position(saved_pos);
248 }
249 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
250 let expected = &[".global"];
251 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
252 Err(crate::parser::unexpected_value(span, expected, found))
253 }
254 }
255
256 impl PtxParser for CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismCtaGroupLevelCacheHint {
257 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
258 stream.expect_string("cp")?;
259 stream.expect_string(".async")?;
260 let async_ = ();
261 stream.expect_complete()?;
262 stream.expect_string(".bulk")?;
263 let bulk = ();
264 stream.expect_complete()?;
265 stream.expect_string(".tensor")?;
266 let tensor = ();
267 stream.expect_complete()?;
268 let dim = Dim::parse(stream)?;
269 stream.expect_complete()?;
270 let dst = Dst::parse(stream)?;
271 stream.expect_complete()?;
272 let src = Src::parse(stream)?;
273 stream.expect_complete()?;
274 let saved_pos = stream.position();
275 let load_mode = match LoadMode::parse(stream) {
276 Ok(val) => Some(val),
277 Err(_) => {
278 stream.set_position(saved_pos);
279 None
280 }
281 };
282 stream.expect_complete()?;
283 let completion_mechanism = CompletionMechanism::parse(stream)?;
284 stream.expect_complete()?;
285 let saved_pos = stream.position();
286 let cta_group = match CtaGroup::parse(stream) {
287 Ok(val) => Some(val),
288 Err(_) => {
289 stream.set_position(saved_pos);
290 None
291 }
292 };
293 stream.expect_complete()?;
294 let saved_pos = stream.position();
295 let level_cache_hint = match LevelCacheHint::parse(stream) {
296 Ok(val) => Some(val),
297 Err(_) => {
298 stream.set_position(saved_pos);
299 None
300 }
301 };
302 stream.expect_complete()?;
303 let dstmem = AddressOperand::parse(stream)?;
304 stream.expect_complete()?;
305 stream.expect(&PtxToken::Comma)?;
306 let tensormap = TexHandler2::parse(stream)?;
307 stream.expect_complete()?;
308 stream.expect(&PtxToken::Comma)?;
309 let mbar = AddressOperand::parse(stream)?;
310 stream.expect_complete()?;
311 let saved_pos = stream.position();
312 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
313 if !has_comma {
314 stream.set_position(saved_pos);
315 }
316 let saved_pos = stream.position();
317 let im2colinfo = match GeneralOperand::parse(stream) {
318 Ok(val) => Some(val),
319 Err(_) => {
320 stream.set_position(saved_pos);
321 None
322 }
323 };
324 stream.expect_complete()?;
325 let saved_pos = stream.position();
326 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
327 if !has_comma {
328 stream.set_position(saved_pos);
329 }
330 let saved_pos = stream.position();
331 let cache_policy = match GeneralOperand::parse(stream) {
332 Ok(val) => Some(val),
333 Err(_) => {
334 stream.set_position(saved_pos);
335 None
336 }
337 };
338 stream.expect_complete()?;
339 stream.expect_complete()?;
340 stream.expect(&PtxToken::Semicolon)?;
341 Ok(CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismCtaGroupLevelCacheHint {
342 async_,
343 bulk,
344 tensor,
345 dim,
346 dst,
347 src,
348 load_mode,
349 completion_mechanism,
350 cta_group,
351 level_cache_hint,
352 dstmem,
353 tensormap,
354 mbar,
355 im2colinfo,
356 cache_policy,
357 })
358 }
359 }
360
361
362}
363
364pub mod section_1 {
365 use super::*;
366 use crate::r#type::instruction::cp_async_bulk_tensor::section_1::*;
367
368 impl PtxParser for CompletionMechanism {
373 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
374 {
376 let saved_pos = stream.position();
377 if stream.expect_string(".mbarrier::complete_tx::bytes").is_ok() {
378 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
379 }
380 stream.set_position(saved_pos);
381 }
382 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
383 let expected = &[".mbarrier::complete_tx::bytes"];
384 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
385 Err(crate::parser::unexpected_value(span, expected, found))
386 }
387 }
388
389 impl PtxParser for CtaGroup {
390 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
391 {
393 let saved_pos = stream.position();
394 if stream.expect_string(".cta_group::1").is_ok() {
395 return Ok(CtaGroup::CtaGroup1);
396 }
397 stream.set_position(saved_pos);
398 }
399 let saved_pos = stream.position();
400 {
402 let saved_pos = stream.position();
403 if stream.expect_string(".cta_group::2").is_ok() {
404 return Ok(CtaGroup::CtaGroup2);
405 }
406 stream.set_position(saved_pos);
407 }
408 stream.set_position(saved_pos);
409 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
410 let expected = &[".cta_group::1", ".cta_group::2"];
411 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
412 Err(crate::parser::unexpected_value(span, expected, found))
413 }
414 }
415
416 impl PtxParser for Dim {
417 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
418 {
420 let saved_pos = stream.position();
421 if stream.expect_string(".1d").is_ok() {
422 return Ok(Dim::_1d);
423 }
424 stream.set_position(saved_pos);
425 }
426 let saved_pos = stream.position();
427 {
429 let saved_pos = stream.position();
430 if stream.expect_string(".2d").is_ok() {
431 return Ok(Dim::_2d);
432 }
433 stream.set_position(saved_pos);
434 }
435 stream.set_position(saved_pos);
436 let saved_pos = stream.position();
437 {
439 let saved_pos = stream.position();
440 if stream.expect_string(".3d").is_ok() {
441 return Ok(Dim::_3d);
442 }
443 stream.set_position(saved_pos);
444 }
445 stream.set_position(saved_pos);
446 let saved_pos = stream.position();
447 {
449 let saved_pos = stream.position();
450 if stream.expect_string(".4d").is_ok() {
451 return Ok(Dim::_4d);
452 }
453 stream.set_position(saved_pos);
454 }
455 stream.set_position(saved_pos);
456 let saved_pos = stream.position();
457 {
459 let saved_pos = stream.position();
460 if stream.expect_string(".5d").is_ok() {
461 return Ok(Dim::_5d);
462 }
463 stream.set_position(saved_pos);
464 }
465 stream.set_position(saved_pos);
466 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
467 let expected = &[".1d", ".2d", ".3d", ".4d", ".5d"];
468 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
469 Err(crate::parser::unexpected_value(span, expected, found))
470 }
471 }
472
473 impl PtxParser for Dst {
474 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
475 {
477 let saved_pos = stream.position();
478 if stream.expect_string(".shared::cluster").is_ok() {
479 return Ok(Dst::SharedCluster);
480 }
481 stream.set_position(saved_pos);
482 }
483 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
484 let expected = &[".shared::cluster"];
485 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
486 Err(crate::parser::unexpected_value(span, expected, found))
487 }
488 }
489
490 impl PtxParser for LevelCacheHint {
491 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
492 {
494 let saved_pos = stream.position();
495 if stream.expect_string(".L2::cache_hint").is_ok() {
496 return Ok(LevelCacheHint::L2CacheHint);
497 }
498 stream.set_position(saved_pos);
499 }
500 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
501 let expected = &[".L2::cache_hint"];
502 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
503 Err(crate::parser::unexpected_value(span, expected, found))
504 }
505 }
506
507 impl PtxParser for LoadMode {
508 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
509 {
511 let saved_pos = stream.position();
512 if stream.expect_string(".im2col::w::128").is_ok() {
513 return Ok(LoadMode::Im2colW128);
514 }
515 stream.set_position(saved_pos);
516 }
517 let saved_pos = stream.position();
518 {
520 let saved_pos = stream.position();
521 if stream.expect_string(".tile::gather4").is_ok() {
522 return Ok(LoadMode::TileGather4);
523 }
524 stream.set_position(saved_pos);
525 }
526 stream.set_position(saved_pos);
527 let saved_pos = stream.position();
528 {
530 let saved_pos = stream.position();
531 if stream.expect_string(".im2col::w").is_ok() {
532 return Ok(LoadMode::Im2colW);
533 }
534 stream.set_position(saved_pos);
535 }
536 stream.set_position(saved_pos);
537 let saved_pos = stream.position();
538 {
540 let saved_pos = stream.position();
541 if stream.expect_string(".im2col").is_ok() {
542 return Ok(LoadMode::Im2col);
543 }
544 stream.set_position(saved_pos);
545 }
546 stream.set_position(saved_pos);
547 let saved_pos = stream.position();
548 {
550 let saved_pos = stream.position();
551 if stream.expect_string(".tile").is_ok() {
552 return Ok(LoadMode::Tile);
553 }
554 stream.set_position(saved_pos);
555 }
556 stream.set_position(saved_pos);
557 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
558 let expected = &[".im2col::w::128", ".tile::gather4", ".im2col::w", ".im2col", ".tile"];
559 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
560 Err(crate::parser::unexpected_value(span, expected, found))
561 }
562 }
563
564 impl PtxParser for Multicast {
565 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
566 {
568 let saved_pos = stream.position();
569 if stream.expect_string(".multicast::cluster").is_ok() {
570 return Ok(Multicast::MulticastCluster);
571 }
572 stream.set_position(saved_pos);
573 }
574 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
575 let expected = &[".multicast::cluster"];
576 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
577 Err(crate::parser::unexpected_value(span, expected, found))
578 }
579 }
580
581 impl PtxParser for Src {
582 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
583 {
585 let saved_pos = stream.position();
586 if stream.expect_string(".global").is_ok() {
587 return Ok(Src::Global);
588 }
589 stream.set_position(saved_pos);
590 }
591 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
592 let expected = &[".global"];
593 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
594 Err(crate::parser::unexpected_value(span, expected, found))
595 }
596 }
597
598 impl PtxParser for CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismMulticastCtaGroupLevelCacheHint {
599 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
600 stream.expect_string("cp")?;
601 stream.expect_string(".async")?;
602 let async_ = ();
603 stream.expect_complete()?;
604 stream.expect_string(".bulk")?;
605 let bulk = ();
606 stream.expect_complete()?;
607 stream.expect_string(".tensor")?;
608 let tensor = ();
609 stream.expect_complete()?;
610 let dim = Dim::parse(stream)?;
611 stream.expect_complete()?;
612 let dst = Dst::parse(stream)?;
613 stream.expect_complete()?;
614 let src = Src::parse(stream)?;
615 stream.expect_complete()?;
616 let saved_pos = stream.position();
617 let load_mode = match LoadMode::parse(stream) {
618 Ok(val) => Some(val),
619 Err(_) => {
620 stream.set_position(saved_pos);
621 None
622 }
623 };
624 stream.expect_complete()?;
625 let completion_mechanism = CompletionMechanism::parse(stream)?;
626 stream.expect_complete()?;
627 let saved_pos = stream.position();
628 let multicast = match Multicast::parse(stream) {
629 Ok(val) => Some(val),
630 Err(_) => {
631 stream.set_position(saved_pos);
632 None
633 }
634 };
635 stream.expect_complete()?;
636 let saved_pos = stream.position();
637 let cta_group = match CtaGroup::parse(stream) {
638 Ok(val) => Some(val),
639 Err(_) => {
640 stream.set_position(saved_pos);
641 None
642 }
643 };
644 stream.expect_complete()?;
645 let saved_pos = stream.position();
646 let level_cache_hint = match LevelCacheHint::parse(stream) {
647 Ok(val) => Some(val),
648 Err(_) => {
649 stream.set_position(saved_pos);
650 None
651 }
652 };
653 stream.expect_complete()?;
654 let dstmem = AddressOperand::parse(stream)?;
655 stream.expect_complete()?;
656 stream.expect(&PtxToken::Comma)?;
657 let tensormap = TexHandler2::parse(stream)?;
658 stream.expect_complete()?;
659 stream.expect(&PtxToken::Comma)?;
660 let mbar = AddressOperand::parse(stream)?;
661 stream.expect_complete()?;
662 let saved_pos = stream.position();
663 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
664 if !has_comma {
665 stream.set_position(saved_pos);
666 }
667 let saved_pos = stream.position();
668 let im2colinfo = match GeneralOperand::parse(stream) {
669 Ok(val) => Some(val),
670 Err(_) => {
671 stream.set_position(saved_pos);
672 None
673 }
674 };
675 stream.expect_complete()?;
676 let saved_pos = stream.position();
677 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
678 if !has_comma {
679 stream.set_position(saved_pos);
680 }
681 let saved_pos = stream.position();
682 let ctamask = match GeneralOperand::parse(stream) {
683 Ok(val) => Some(val),
684 Err(_) => {
685 stream.set_position(saved_pos);
686 None
687 }
688 };
689 stream.expect_complete()?;
690 let saved_pos = stream.position();
691 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
692 if !has_comma {
693 stream.set_position(saved_pos);
694 }
695 let saved_pos = stream.position();
696 let cache_policy = match GeneralOperand::parse(stream) {
697 Ok(val) => Some(val),
698 Err(_) => {
699 stream.set_position(saved_pos);
700 None
701 }
702 };
703 stream.expect_complete()?;
704 stream.expect_complete()?;
705 stream.expect(&PtxToken::Semicolon)?;
706 Ok(CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismMulticastCtaGroupLevelCacheHint {
707 async_,
708 bulk,
709 tensor,
710 dim,
711 dst,
712 src,
713 load_mode,
714 completion_mechanism,
715 multicast,
716 cta_group,
717 level_cache_hint,
718 dstmem,
719 tensormap,
720 mbar,
721 im2colinfo,
722 ctamask,
723 cache_policy,
724 })
725 }
726 }
727
728
729}
730
731pub mod section_2 {
732 use super::*;
733 use crate::r#type::instruction::cp_async_bulk_tensor::section_2::*;
734
735 impl PtxParser for CompletionMechanism {
740 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
741 {
743 let saved_pos = stream.position();
744 if stream.expect_string(".bulk_group").is_ok() {
745 return Ok(CompletionMechanism::BulkGroup);
746 }
747 stream.set_position(saved_pos);
748 }
749 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
750 let expected = &[".bulk_group"];
751 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
752 Err(crate::parser::unexpected_value(span, expected, found))
753 }
754 }
755
756 impl PtxParser for Dim {
757 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
758 {
760 let saved_pos = stream.position();
761 if stream.expect_string(".1d").is_ok() {
762 return Ok(Dim::_1d);
763 }
764 stream.set_position(saved_pos);
765 }
766 let saved_pos = stream.position();
767 {
769 let saved_pos = stream.position();
770 if stream.expect_string(".2d").is_ok() {
771 return Ok(Dim::_2d);
772 }
773 stream.set_position(saved_pos);
774 }
775 stream.set_position(saved_pos);
776 let saved_pos = stream.position();
777 {
779 let saved_pos = stream.position();
780 if stream.expect_string(".3d").is_ok() {
781 return Ok(Dim::_3d);
782 }
783 stream.set_position(saved_pos);
784 }
785 stream.set_position(saved_pos);
786 let saved_pos = stream.position();
787 {
789 let saved_pos = stream.position();
790 if stream.expect_string(".4d").is_ok() {
791 return Ok(Dim::_4d);
792 }
793 stream.set_position(saved_pos);
794 }
795 stream.set_position(saved_pos);
796 let saved_pos = stream.position();
797 {
799 let saved_pos = stream.position();
800 if stream.expect_string(".5d").is_ok() {
801 return Ok(Dim::_5d);
802 }
803 stream.set_position(saved_pos);
804 }
805 stream.set_position(saved_pos);
806 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
807 let expected = &[".1d", ".2d", ".3d", ".4d", ".5d"];
808 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
809 Err(crate::parser::unexpected_value(span, expected, found))
810 }
811 }
812
813 impl PtxParser for Dst {
814 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
815 {
817 let saved_pos = stream.position();
818 if stream.expect_string(".global").is_ok() {
819 return Ok(Dst::Global);
820 }
821 stream.set_position(saved_pos);
822 }
823 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
824 let expected = &[".global"];
825 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
826 Err(crate::parser::unexpected_value(span, expected, found))
827 }
828 }
829
830 impl PtxParser for LevelCacheHint {
831 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
832 {
834 let saved_pos = stream.position();
835 if stream.expect_string(".L2::cache_hint").is_ok() {
836 return Ok(LevelCacheHint::L2CacheHint);
837 }
838 stream.set_position(saved_pos);
839 }
840 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
841 let expected = &[".L2::cache_hint"];
842 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
843 Err(crate::parser::unexpected_value(span, expected, found))
844 }
845 }
846
847 impl PtxParser for LoadMode {
848 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
849 {
851 let saved_pos = stream.position();
852 if stream.expect_string(".tile::scatter4").is_ok() {
853 return Ok(LoadMode::TileScatter4);
854 }
855 stream.set_position(saved_pos);
856 }
857 let saved_pos = stream.position();
858 {
860 let saved_pos = stream.position();
861 if stream.expect_string(".im2col_no_offs").is_ok() {
862 return Ok(LoadMode::Im2colNoOffs);
863 }
864 stream.set_position(saved_pos);
865 }
866 stream.set_position(saved_pos);
867 let saved_pos = stream.position();
868 {
870 let saved_pos = stream.position();
871 if stream.expect_string(".tile").is_ok() {
872 return Ok(LoadMode::Tile);
873 }
874 stream.set_position(saved_pos);
875 }
876 stream.set_position(saved_pos);
877 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
878 let expected = &[".tile::scatter4", ".im2col_no_offs", ".tile"];
879 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
880 Err(crate::parser::unexpected_value(span, expected, found))
881 }
882 }
883
884 impl PtxParser for Src {
885 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
886 {
888 let saved_pos = stream.position();
889 if stream.expect_string(".shared::cta").is_ok() {
890 return Ok(Src::SharedCta);
891 }
892 stream.set_position(saved_pos);
893 }
894 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
895 let expected = &[".shared::cta"];
896 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
897 Err(crate::parser::unexpected_value(span, expected, found))
898 }
899 }
900
901 impl PtxParser for CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismLevelCacheHint {
902 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
903 stream.expect_string("cp")?;
904 stream.expect_string(".async")?;
905 let async_ = ();
906 stream.expect_complete()?;
907 stream.expect_string(".bulk")?;
908 let bulk = ();
909 stream.expect_complete()?;
910 stream.expect_string(".tensor")?;
911 let tensor = ();
912 stream.expect_complete()?;
913 let dim = Dim::parse(stream)?;
914 stream.expect_complete()?;
915 let dst = Dst::parse(stream)?;
916 stream.expect_complete()?;
917 let src = Src::parse(stream)?;
918 stream.expect_complete()?;
919 let saved_pos = stream.position();
920 let load_mode = match LoadMode::parse(stream) {
921 Ok(val) => Some(val),
922 Err(_) => {
923 stream.set_position(saved_pos);
924 None
925 }
926 };
927 stream.expect_complete()?;
928 let completion_mechanism = CompletionMechanism::parse(stream)?;
929 stream.expect_complete()?;
930 let saved_pos = stream.position();
931 let level_cache_hint = match LevelCacheHint::parse(stream) {
932 Ok(val) => Some(val),
933 Err(_) => {
934 stream.set_position(saved_pos);
935 None
936 }
937 };
938 stream.expect_complete()?;
939 let tensormap = TexHandler2::parse(stream)?;
940 stream.expect_complete()?;
941 stream.expect(&PtxToken::Comma)?;
942 let srcmem = AddressOperand::parse(stream)?;
943 stream.expect_complete()?;
944 let saved_pos = stream.position();
945 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
946 if !has_comma {
947 stream.set_position(saved_pos);
948 }
949 let saved_pos = stream.position();
950 let cache_policy = match GeneralOperand::parse(stream) {
951 Ok(val) => Some(val),
952 Err(_) => {
953 stream.set_position(saved_pos);
954 None
955 }
956 };
957 stream.expect_complete()?;
958 stream.expect_complete()?;
959 stream.expect(&PtxToken::Semicolon)?;
960 Ok(CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismLevelCacheHint {
961 async_,
962 bulk,
963 tensor,
964 dim,
965 dst,
966 src,
967 load_mode,
968 completion_mechanism,
969 level_cache_hint,
970 tensormap,
971 srcmem,
972 cache_policy,
973 })
974 }
975 }
976
977
978}
979