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
53 .expect_string(".mbarrier::complete_tx::bytes")
54 .is_ok()
55 {
56 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
57 }
58 stream.set_position(saved_pos);
59 }
60 let span = stream
61 .peek()
62 .map(|(_, s)| s.clone())
63 .unwrap_or(Span { start: 0, end: 0 });
64 let expected = &[".mbarrier::complete_tx::bytes"];
65 let found = stream
66 .peek()
67 .map(|(t, _)| format!("{:?}", t))
68 .unwrap_or_else(|_| "<end of input>".to_string());
69 Err(crate::parser::unexpected_value(span, expected, found))
70 }
71 }
72
73 impl PtxParser for CtaGroup {
74 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
75 {
77 let saved_pos = stream.position();
78 if stream.expect_string(".cta_group::1").is_ok() {
79 return Ok(CtaGroup::CtaGroup1);
80 }
81 stream.set_position(saved_pos);
82 }
83 let saved_pos = stream.position();
84 {
86 let saved_pos = stream.position();
87 if stream.expect_string(".cta_group::2").is_ok() {
88 return Ok(CtaGroup::CtaGroup2);
89 }
90 stream.set_position(saved_pos);
91 }
92 stream.set_position(saved_pos);
93 let span = stream
94 .peek()
95 .map(|(_, s)| s.clone())
96 .unwrap_or(Span { start: 0, end: 0 });
97 let expected = &[".cta_group::1", ".cta_group::2"];
98 let found = stream
99 .peek()
100 .map(|(t, _)| format!("{:?}", t))
101 .unwrap_or_else(|_| "<end of input>".to_string());
102 Err(crate::parser::unexpected_value(span, expected, found))
103 }
104 }
105
106 impl PtxParser for Dim {
107 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
108 {
110 let saved_pos = stream.position();
111 if stream.expect_string(".1d").is_ok() {
112 return Ok(Dim::_1d);
113 }
114 stream.set_position(saved_pos);
115 }
116 let saved_pos = stream.position();
117 {
119 let saved_pos = stream.position();
120 if stream.expect_string(".2d").is_ok() {
121 return Ok(Dim::_2d);
122 }
123 stream.set_position(saved_pos);
124 }
125 stream.set_position(saved_pos);
126 let saved_pos = stream.position();
127 {
129 let saved_pos = stream.position();
130 if stream.expect_string(".3d").is_ok() {
131 return Ok(Dim::_3d);
132 }
133 stream.set_position(saved_pos);
134 }
135 stream.set_position(saved_pos);
136 let saved_pos = stream.position();
137 {
139 let saved_pos = stream.position();
140 if stream.expect_string(".4d").is_ok() {
141 return Ok(Dim::_4d);
142 }
143 stream.set_position(saved_pos);
144 }
145 stream.set_position(saved_pos);
146 let saved_pos = stream.position();
147 {
149 let saved_pos = stream.position();
150 if stream.expect_string(".5d").is_ok() {
151 return Ok(Dim::_5d);
152 }
153 stream.set_position(saved_pos);
154 }
155 stream.set_position(saved_pos);
156 let span = stream
157 .peek()
158 .map(|(_, s)| s.clone())
159 .unwrap_or(Span { start: 0, end: 0 });
160 let expected = &[".1d", ".2d", ".3d", ".4d", ".5d"];
161 let found = stream
162 .peek()
163 .map(|(t, _)| format!("{:?}", t))
164 .unwrap_or_else(|_| "<end of input>".to_string());
165 Err(crate::parser::unexpected_value(span, expected, found))
166 }
167 }
168
169 impl PtxParser for Dst {
170 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
171 {
173 let saved_pos = stream.position();
174 if stream.expect_string(".shared::cta").is_ok() {
175 return Ok(Dst::SharedCta);
176 }
177 stream.set_position(saved_pos);
178 }
179 let span = stream
180 .peek()
181 .map(|(_, s)| s.clone())
182 .unwrap_or(Span { start: 0, end: 0 });
183 let expected = &[".shared::cta"];
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 LevelCacheHint {
193 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
194 {
196 let saved_pos = stream.position();
197 if stream.expect_string(".L2::cache_hint").is_ok() {
198 return Ok(LevelCacheHint::L2CacheHint);
199 }
200 stream.set_position(saved_pos);
201 }
202 let span = stream
203 .peek()
204 .map(|(_, s)| s.clone())
205 .unwrap_or(Span { start: 0, end: 0 });
206 let expected = &[".L2::cache_hint"];
207 let found = stream
208 .peek()
209 .map(|(t, _)| format!("{:?}", t))
210 .unwrap_or_else(|_| "<end of input>".to_string());
211 Err(crate::parser::unexpected_value(span, expected, found))
212 }
213 }
214
215 impl PtxParser for LoadMode {
216 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
217 {
219 let saved_pos = stream.position();
220 if stream.expect_string(".im2col::w::128").is_ok() {
221 return Ok(LoadMode::Im2colW128);
222 }
223 stream.set_position(saved_pos);
224 }
225 let saved_pos = stream.position();
226 {
228 let saved_pos = stream.position();
229 if stream.expect_string(".tile::gather4").is_ok() {
230 return Ok(LoadMode::TileGather4);
231 }
232 stream.set_position(saved_pos);
233 }
234 stream.set_position(saved_pos);
235 let saved_pos = stream.position();
236 {
238 let saved_pos = stream.position();
239 if stream.expect_string(".im2col::w").is_ok() {
240 return Ok(LoadMode::Im2colW);
241 }
242 stream.set_position(saved_pos);
243 }
244 stream.set_position(saved_pos);
245 let saved_pos = stream.position();
246 {
248 let saved_pos = stream.position();
249 if stream.expect_string(".im2col").is_ok() {
250 return Ok(LoadMode::Im2col);
251 }
252 stream.set_position(saved_pos);
253 }
254 stream.set_position(saved_pos);
255 let saved_pos = stream.position();
256 {
258 let saved_pos = stream.position();
259 if stream.expect_string(".tile").is_ok() {
260 return Ok(LoadMode::Tile);
261 }
262 stream.set_position(saved_pos);
263 }
264 stream.set_position(saved_pos);
265 let span = stream
266 .peek()
267 .map(|(_, s)| s.clone())
268 .unwrap_or(Span { start: 0, end: 0 });
269 let expected = &[
270 ".im2col::w::128",
271 ".tile::gather4",
272 ".im2col::w",
273 ".im2col",
274 ".tile",
275 ];
276 let found = stream
277 .peek()
278 .map(|(t, _)| format!("{:?}", t))
279 .unwrap_or_else(|_| "<end of input>".to_string());
280 Err(crate::parser::unexpected_value(span, expected, found))
281 }
282 }
283
284 impl PtxParser for Src {
285 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
286 {
288 let saved_pos = stream.position();
289 if stream.expect_string(".global").is_ok() {
290 return Ok(Src::Global);
291 }
292 stream.set_position(saved_pos);
293 }
294 let span = stream
295 .peek()
296 .map(|(_, s)| s.clone())
297 .unwrap_or(Span { start: 0, end: 0 });
298 let expected = &[".global"];
299 let found = stream
300 .peek()
301 .map(|(t, _)| format!("{:?}", t))
302 .unwrap_or_else(|_| "<end of input>".to_string());
303 Err(crate::parser::unexpected_value(span, expected, found))
304 }
305 }
306
307 impl PtxParser for CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismCtaGroupLevelCacheHint {
308 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
309 stream.expect_string("cp")?;
310 stream.expect_string(".async")?;
311 let async_ = ();
312 stream.expect_complete()?;
313 stream.expect_string(".bulk")?;
314 let bulk = ();
315 stream.expect_complete()?;
316 stream.expect_string(".tensor")?;
317 let tensor = ();
318 stream.expect_complete()?;
319 let dim = Dim::parse(stream)?;
320 stream.expect_complete()?;
321 let dst = Dst::parse(stream)?;
322 stream.expect_complete()?;
323 let src = Src::parse(stream)?;
324 stream.expect_complete()?;
325 let saved_pos = stream.position();
326 let load_mode = match LoadMode::parse(stream) {
327 Ok(val) => Some(val),
328 Err(_) => {
329 stream.set_position(saved_pos);
330 None
331 }
332 };
333 stream.expect_complete()?;
334 let completion_mechanism = CompletionMechanism::parse(stream)?;
335 stream.expect_complete()?;
336 let saved_pos = stream.position();
337 let cta_group = match CtaGroup::parse(stream) {
338 Ok(val) => Some(val),
339 Err(_) => {
340 stream.set_position(saved_pos);
341 None
342 }
343 };
344 stream.expect_complete()?;
345 let saved_pos = stream.position();
346 let level_cache_hint = match LevelCacheHint::parse(stream) {
347 Ok(val) => Some(val),
348 Err(_) => {
349 stream.set_position(saved_pos);
350 None
351 }
352 };
353 stream.expect_complete()?;
354 let dstmem = AddressOperand::parse(stream)?;
355 stream.expect_complete()?;
356 stream.expect(&PtxToken::Comma)?;
357 let tensormap = TexHandler2::parse(stream)?;
358 stream.expect_complete()?;
359 stream.expect(&PtxToken::Comma)?;
360 let mbar = AddressOperand::parse(stream)?;
361 stream.expect_complete()?;
362 let saved_pos = stream.position();
363 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
364 if !has_comma {
365 stream.set_position(saved_pos);
366 }
367 let saved_pos = stream.position();
368 let im2colinfo = match GeneralOperand::parse(stream) {
369 Ok(val) => Some(val),
370 Err(_) => {
371 stream.set_position(saved_pos);
372 None
373 }
374 };
375 stream.expect_complete()?;
376 let saved_pos = stream.position();
377 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
378 if !has_comma {
379 stream.set_position(saved_pos);
380 }
381 let saved_pos = stream.position();
382 let cache_policy = match GeneralOperand::parse(stream) {
383 Ok(val) => Some(val),
384 Err(_) => {
385 stream.set_position(saved_pos);
386 None
387 }
388 };
389 stream.expect_complete()?;
390 stream.expect_complete()?;
391 stream.expect(&PtxToken::Semicolon)?;
392 Ok(
393 CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismCtaGroupLevelCacheHint {
394 async_,
395 bulk,
396 tensor,
397 dim,
398 dst,
399 src,
400 load_mode,
401 completion_mechanism,
402 cta_group,
403 level_cache_hint,
404 dstmem,
405 tensormap,
406 mbar,
407 im2colinfo,
408 cache_policy,
409 },
410 )
411 }
412 }
413}
414
415pub mod section_1 {
416 use super::*;
417 use crate::r#type::instruction::cp_async_bulk_tensor::section_1::*;
418
419 impl PtxParser for CompletionMechanism {
424 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
425 {
427 let saved_pos = stream.position();
428 if stream
429 .expect_string(".mbarrier::complete_tx::bytes")
430 .is_ok()
431 {
432 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
433 }
434 stream.set_position(saved_pos);
435 }
436 let span = stream
437 .peek()
438 .map(|(_, s)| s.clone())
439 .unwrap_or(Span { start: 0, end: 0 });
440 let expected = &[".mbarrier::complete_tx::bytes"];
441 let found = stream
442 .peek()
443 .map(|(t, _)| format!("{:?}", t))
444 .unwrap_or_else(|_| "<end of input>".to_string());
445 Err(crate::parser::unexpected_value(span, expected, found))
446 }
447 }
448
449 impl PtxParser for CtaGroup {
450 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
451 {
453 let saved_pos = stream.position();
454 if stream.expect_string(".cta_group::1").is_ok() {
455 return Ok(CtaGroup::CtaGroup1);
456 }
457 stream.set_position(saved_pos);
458 }
459 let saved_pos = stream.position();
460 {
462 let saved_pos = stream.position();
463 if stream.expect_string(".cta_group::2").is_ok() {
464 return Ok(CtaGroup::CtaGroup2);
465 }
466 stream.set_position(saved_pos);
467 }
468 stream.set_position(saved_pos);
469 let span = stream
470 .peek()
471 .map(|(_, s)| s.clone())
472 .unwrap_or(Span { start: 0, end: 0 });
473 let expected = &[".cta_group::1", ".cta_group::2"];
474 let found = stream
475 .peek()
476 .map(|(t, _)| format!("{:?}", t))
477 .unwrap_or_else(|_| "<end of input>".to_string());
478 Err(crate::parser::unexpected_value(span, expected, found))
479 }
480 }
481
482 impl PtxParser for Dim {
483 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
484 {
486 let saved_pos = stream.position();
487 if stream.expect_string(".1d").is_ok() {
488 return Ok(Dim::_1d);
489 }
490 stream.set_position(saved_pos);
491 }
492 let saved_pos = stream.position();
493 {
495 let saved_pos = stream.position();
496 if stream.expect_string(".2d").is_ok() {
497 return Ok(Dim::_2d);
498 }
499 stream.set_position(saved_pos);
500 }
501 stream.set_position(saved_pos);
502 let saved_pos = stream.position();
503 {
505 let saved_pos = stream.position();
506 if stream.expect_string(".3d").is_ok() {
507 return Ok(Dim::_3d);
508 }
509 stream.set_position(saved_pos);
510 }
511 stream.set_position(saved_pos);
512 let saved_pos = stream.position();
513 {
515 let saved_pos = stream.position();
516 if stream.expect_string(".4d").is_ok() {
517 return Ok(Dim::_4d);
518 }
519 stream.set_position(saved_pos);
520 }
521 stream.set_position(saved_pos);
522 let saved_pos = stream.position();
523 {
525 let saved_pos = stream.position();
526 if stream.expect_string(".5d").is_ok() {
527 return Ok(Dim::_5d);
528 }
529 stream.set_position(saved_pos);
530 }
531 stream.set_position(saved_pos);
532 let span = stream
533 .peek()
534 .map(|(_, s)| s.clone())
535 .unwrap_or(Span { start: 0, end: 0 });
536 let expected = &[".1d", ".2d", ".3d", ".4d", ".5d"];
537 let found = stream
538 .peek()
539 .map(|(t, _)| format!("{:?}", t))
540 .unwrap_or_else(|_| "<end of input>".to_string());
541 Err(crate::parser::unexpected_value(span, expected, found))
542 }
543 }
544
545 impl PtxParser for Dst {
546 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
547 {
549 let saved_pos = stream.position();
550 if stream.expect_string(".shared::cluster").is_ok() {
551 return Ok(Dst::SharedCluster);
552 }
553 stream.set_position(saved_pos);
554 }
555 let span = stream
556 .peek()
557 .map(|(_, s)| s.clone())
558 .unwrap_or(Span { start: 0, end: 0 });
559 let expected = &[".shared::cluster"];
560 let found = stream
561 .peek()
562 .map(|(t, _)| format!("{:?}", t))
563 .unwrap_or_else(|_| "<end of input>".to_string());
564 Err(crate::parser::unexpected_value(span, expected, found))
565 }
566 }
567
568 impl PtxParser for LevelCacheHint {
569 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
570 {
572 let saved_pos = stream.position();
573 if stream.expect_string(".L2::cache_hint").is_ok() {
574 return Ok(LevelCacheHint::L2CacheHint);
575 }
576 stream.set_position(saved_pos);
577 }
578 let span = stream
579 .peek()
580 .map(|(_, s)| s.clone())
581 .unwrap_or(Span { start: 0, end: 0 });
582 let expected = &[".L2::cache_hint"];
583 let found = stream
584 .peek()
585 .map(|(t, _)| format!("{:?}", t))
586 .unwrap_or_else(|_| "<end of input>".to_string());
587 Err(crate::parser::unexpected_value(span, expected, found))
588 }
589 }
590
591 impl PtxParser for LoadMode {
592 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
593 {
595 let saved_pos = stream.position();
596 if stream.expect_string(".im2col::w::128").is_ok() {
597 return Ok(LoadMode::Im2colW128);
598 }
599 stream.set_position(saved_pos);
600 }
601 let saved_pos = stream.position();
602 {
604 let saved_pos = stream.position();
605 if stream.expect_string(".tile::gather4").is_ok() {
606 return Ok(LoadMode::TileGather4);
607 }
608 stream.set_position(saved_pos);
609 }
610 stream.set_position(saved_pos);
611 let saved_pos = stream.position();
612 {
614 let saved_pos = stream.position();
615 if stream.expect_string(".im2col::w").is_ok() {
616 return Ok(LoadMode::Im2colW);
617 }
618 stream.set_position(saved_pos);
619 }
620 stream.set_position(saved_pos);
621 let saved_pos = stream.position();
622 {
624 let saved_pos = stream.position();
625 if stream.expect_string(".im2col").is_ok() {
626 return Ok(LoadMode::Im2col);
627 }
628 stream.set_position(saved_pos);
629 }
630 stream.set_position(saved_pos);
631 let saved_pos = stream.position();
632 {
634 let saved_pos = stream.position();
635 if stream.expect_string(".tile").is_ok() {
636 return Ok(LoadMode::Tile);
637 }
638 stream.set_position(saved_pos);
639 }
640 stream.set_position(saved_pos);
641 let span = stream
642 .peek()
643 .map(|(_, s)| s.clone())
644 .unwrap_or(Span { start: 0, end: 0 });
645 let expected = &[
646 ".im2col::w::128",
647 ".tile::gather4",
648 ".im2col::w",
649 ".im2col",
650 ".tile",
651 ];
652 let found = stream
653 .peek()
654 .map(|(t, _)| format!("{:?}", t))
655 .unwrap_or_else(|_| "<end of input>".to_string());
656 Err(crate::parser::unexpected_value(span, expected, found))
657 }
658 }
659
660 impl PtxParser for Multicast {
661 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
662 {
664 let saved_pos = stream.position();
665 if stream.expect_string(".multicast::cluster").is_ok() {
666 return Ok(Multicast::MulticastCluster);
667 }
668 stream.set_position(saved_pos);
669 }
670 let span = stream
671 .peek()
672 .map(|(_, s)| s.clone())
673 .unwrap_or(Span { start: 0, end: 0 });
674 let expected = &[".multicast::cluster"];
675 let found = stream
676 .peek()
677 .map(|(t, _)| format!("{:?}", t))
678 .unwrap_or_else(|_| "<end of input>".to_string());
679 Err(crate::parser::unexpected_value(span, expected, found))
680 }
681 }
682
683 impl PtxParser for Src {
684 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
685 {
687 let saved_pos = stream.position();
688 if stream.expect_string(".global").is_ok() {
689 return Ok(Src::Global);
690 }
691 stream.set_position(saved_pos);
692 }
693 let span = stream
694 .peek()
695 .map(|(_, s)| s.clone())
696 .unwrap_or(Span { start: 0, end: 0 });
697 let expected = &[".global"];
698 let found = stream
699 .peek()
700 .map(|(t, _)| format!("{:?}", t))
701 .unwrap_or_else(|_| "<end of input>".to_string());
702 Err(crate::parser::unexpected_value(span, expected, found))
703 }
704 }
705
706 impl PtxParser
707 for CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismMulticastCtaGroupLevelCacheHint
708 {
709 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
710 stream.expect_string("cp")?;
711 stream.expect_string(".async")?;
712 let async_ = ();
713 stream.expect_complete()?;
714 stream.expect_string(".bulk")?;
715 let bulk = ();
716 stream.expect_complete()?;
717 stream.expect_string(".tensor")?;
718 let tensor = ();
719 stream.expect_complete()?;
720 let dim = Dim::parse(stream)?;
721 stream.expect_complete()?;
722 let dst = Dst::parse(stream)?;
723 stream.expect_complete()?;
724 let src = Src::parse(stream)?;
725 stream.expect_complete()?;
726 let saved_pos = stream.position();
727 let load_mode = match LoadMode::parse(stream) {
728 Ok(val) => Some(val),
729 Err(_) => {
730 stream.set_position(saved_pos);
731 None
732 }
733 };
734 stream.expect_complete()?;
735 let completion_mechanism = CompletionMechanism::parse(stream)?;
736 stream.expect_complete()?;
737 let saved_pos = stream.position();
738 let multicast = match Multicast::parse(stream) {
739 Ok(val) => Some(val),
740 Err(_) => {
741 stream.set_position(saved_pos);
742 None
743 }
744 };
745 stream.expect_complete()?;
746 let saved_pos = stream.position();
747 let cta_group = match CtaGroup::parse(stream) {
748 Ok(val) => Some(val),
749 Err(_) => {
750 stream.set_position(saved_pos);
751 None
752 }
753 };
754 stream.expect_complete()?;
755 let saved_pos = stream.position();
756 let level_cache_hint = match LevelCacheHint::parse(stream) {
757 Ok(val) => Some(val),
758 Err(_) => {
759 stream.set_position(saved_pos);
760 None
761 }
762 };
763 stream.expect_complete()?;
764 let dstmem = AddressOperand::parse(stream)?;
765 stream.expect_complete()?;
766 stream.expect(&PtxToken::Comma)?;
767 let tensormap = TexHandler2::parse(stream)?;
768 stream.expect_complete()?;
769 stream.expect(&PtxToken::Comma)?;
770 let mbar = AddressOperand::parse(stream)?;
771 stream.expect_complete()?;
772 let saved_pos = stream.position();
773 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
774 if !has_comma {
775 stream.set_position(saved_pos);
776 }
777 let saved_pos = stream.position();
778 let im2colinfo = match GeneralOperand::parse(stream) {
779 Ok(val) => Some(val),
780 Err(_) => {
781 stream.set_position(saved_pos);
782 None
783 }
784 };
785 stream.expect_complete()?;
786 let saved_pos = stream.position();
787 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
788 if !has_comma {
789 stream.set_position(saved_pos);
790 }
791 let saved_pos = stream.position();
792 let ctamask = match GeneralOperand::parse(stream) {
793 Ok(val) => Some(val),
794 Err(_) => {
795 stream.set_position(saved_pos);
796 None
797 }
798 };
799 stream.expect_complete()?;
800 let saved_pos = stream.position();
801 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
802 if !has_comma {
803 stream.set_position(saved_pos);
804 }
805 let saved_pos = stream.position();
806 let cache_policy = match GeneralOperand::parse(stream) {
807 Ok(val) => Some(val),
808 Err(_) => {
809 stream.set_position(saved_pos);
810 None
811 }
812 };
813 stream.expect_complete()?;
814 stream.expect_complete()?;
815 stream.expect(&PtxToken::Semicolon)?;
816 Ok(CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismMulticastCtaGroupLevelCacheHint {
817 async_,
818 bulk,
819 tensor,
820 dim,
821 dst,
822 src,
823 load_mode,
824 completion_mechanism,
825 multicast,
826 cta_group,
827 level_cache_hint,
828 dstmem,
829 tensormap,
830 mbar,
831 im2colinfo,
832 ctamask,
833 cache_policy,
834 })
835 }
836 }
837}
838
839pub mod section_2 {
840 use super::*;
841 use crate::r#type::instruction::cp_async_bulk_tensor::section_2::*;
842
843 impl PtxParser for CompletionMechanism {
848 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
849 {
851 let saved_pos = stream.position();
852 if stream.expect_string(".bulk_group").is_ok() {
853 return Ok(CompletionMechanism::BulkGroup);
854 }
855 stream.set_position(saved_pos);
856 }
857 let span = stream
858 .peek()
859 .map(|(_, s)| s.clone())
860 .unwrap_or(Span { start: 0, end: 0 });
861 let expected = &[".bulk_group"];
862 let found = stream
863 .peek()
864 .map(|(t, _)| format!("{:?}", t))
865 .unwrap_or_else(|_| "<end of input>".to_string());
866 Err(crate::parser::unexpected_value(span, expected, found))
867 }
868 }
869
870 impl PtxParser for Dim {
871 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
872 {
874 let saved_pos = stream.position();
875 if stream.expect_string(".1d").is_ok() {
876 return Ok(Dim::_1d);
877 }
878 stream.set_position(saved_pos);
879 }
880 let saved_pos = stream.position();
881 {
883 let saved_pos = stream.position();
884 if stream.expect_string(".2d").is_ok() {
885 return Ok(Dim::_2d);
886 }
887 stream.set_position(saved_pos);
888 }
889 stream.set_position(saved_pos);
890 let saved_pos = stream.position();
891 {
893 let saved_pos = stream.position();
894 if stream.expect_string(".3d").is_ok() {
895 return Ok(Dim::_3d);
896 }
897 stream.set_position(saved_pos);
898 }
899 stream.set_position(saved_pos);
900 let saved_pos = stream.position();
901 {
903 let saved_pos = stream.position();
904 if stream.expect_string(".4d").is_ok() {
905 return Ok(Dim::_4d);
906 }
907 stream.set_position(saved_pos);
908 }
909 stream.set_position(saved_pos);
910 let saved_pos = stream.position();
911 {
913 let saved_pos = stream.position();
914 if stream.expect_string(".5d").is_ok() {
915 return Ok(Dim::_5d);
916 }
917 stream.set_position(saved_pos);
918 }
919 stream.set_position(saved_pos);
920 let span = stream
921 .peek()
922 .map(|(_, s)| s.clone())
923 .unwrap_or(Span { start: 0, end: 0 });
924 let expected = &[".1d", ".2d", ".3d", ".4d", ".5d"];
925 let found = stream
926 .peek()
927 .map(|(t, _)| format!("{:?}", t))
928 .unwrap_or_else(|_| "<end of input>".to_string());
929 Err(crate::parser::unexpected_value(span, expected, found))
930 }
931 }
932
933 impl PtxParser for Dst {
934 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
935 {
937 let saved_pos = stream.position();
938 if stream.expect_string(".global").is_ok() {
939 return Ok(Dst::Global);
940 }
941 stream.set_position(saved_pos);
942 }
943 let span = stream
944 .peek()
945 .map(|(_, s)| s.clone())
946 .unwrap_or(Span { start: 0, end: 0 });
947 let expected = &[".global"];
948 let found = stream
949 .peek()
950 .map(|(t, _)| format!("{:?}", t))
951 .unwrap_or_else(|_| "<end of input>".to_string());
952 Err(crate::parser::unexpected_value(span, expected, found))
953 }
954 }
955
956 impl PtxParser for LevelCacheHint {
957 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
958 {
960 let saved_pos = stream.position();
961 if stream.expect_string(".L2::cache_hint").is_ok() {
962 return Ok(LevelCacheHint::L2CacheHint);
963 }
964 stream.set_position(saved_pos);
965 }
966 let span = stream
967 .peek()
968 .map(|(_, s)| s.clone())
969 .unwrap_or(Span { start: 0, end: 0 });
970 let expected = &[".L2::cache_hint"];
971 let found = stream
972 .peek()
973 .map(|(t, _)| format!("{:?}", t))
974 .unwrap_or_else(|_| "<end of input>".to_string());
975 Err(crate::parser::unexpected_value(span, expected, found))
976 }
977 }
978
979 impl PtxParser for LoadMode {
980 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
981 {
983 let saved_pos = stream.position();
984 if stream.expect_string(".tile::scatter4").is_ok() {
985 return Ok(LoadMode::TileScatter4);
986 }
987 stream.set_position(saved_pos);
988 }
989 let saved_pos = stream.position();
990 {
992 let saved_pos = stream.position();
993 if stream.expect_string(".im2col_no_offs").is_ok() {
994 return Ok(LoadMode::Im2colNoOffs);
995 }
996 stream.set_position(saved_pos);
997 }
998 stream.set_position(saved_pos);
999 let saved_pos = stream.position();
1000 {
1002 let saved_pos = stream.position();
1003 if stream.expect_string(".tile").is_ok() {
1004 return Ok(LoadMode::Tile);
1005 }
1006 stream.set_position(saved_pos);
1007 }
1008 stream.set_position(saved_pos);
1009 let span = stream
1010 .peek()
1011 .map(|(_, s)| s.clone())
1012 .unwrap_or(Span { start: 0, end: 0 });
1013 let expected = &[".tile::scatter4", ".im2col_no_offs", ".tile"];
1014 let found = stream
1015 .peek()
1016 .map(|(t, _)| format!("{:?}", t))
1017 .unwrap_or_else(|_| "<end of input>".to_string());
1018 Err(crate::parser::unexpected_value(span, expected, found))
1019 }
1020 }
1021
1022 impl PtxParser for Src {
1023 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1024 {
1026 let saved_pos = stream.position();
1027 if stream.expect_string(".shared::cta").is_ok() {
1028 return Ok(Src::SharedCta);
1029 }
1030 stream.set_position(saved_pos);
1031 }
1032 let span = stream
1033 .peek()
1034 .map(|(_, s)| s.clone())
1035 .unwrap_or(Span { start: 0, end: 0 });
1036 let expected = &[".shared::cta"];
1037 let found = stream
1038 .peek()
1039 .map(|(t, _)| format!("{:?}", t))
1040 .unwrap_or_else(|_| "<end of input>".to_string());
1041 Err(crate::parser::unexpected_value(span, expected, found))
1042 }
1043 }
1044
1045 impl PtxParser for CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismLevelCacheHint {
1046 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1047 stream.expect_string("cp")?;
1048 stream.expect_string(".async")?;
1049 let async_ = ();
1050 stream.expect_complete()?;
1051 stream.expect_string(".bulk")?;
1052 let bulk = ();
1053 stream.expect_complete()?;
1054 stream.expect_string(".tensor")?;
1055 let tensor = ();
1056 stream.expect_complete()?;
1057 let dim = Dim::parse(stream)?;
1058 stream.expect_complete()?;
1059 let dst = Dst::parse(stream)?;
1060 stream.expect_complete()?;
1061 let src = Src::parse(stream)?;
1062 stream.expect_complete()?;
1063 let saved_pos = stream.position();
1064 let load_mode = match LoadMode::parse(stream) {
1065 Ok(val) => Some(val),
1066 Err(_) => {
1067 stream.set_position(saved_pos);
1068 None
1069 }
1070 };
1071 stream.expect_complete()?;
1072 let completion_mechanism = CompletionMechanism::parse(stream)?;
1073 stream.expect_complete()?;
1074 let saved_pos = stream.position();
1075 let level_cache_hint = match LevelCacheHint::parse(stream) {
1076 Ok(val) => Some(val),
1077 Err(_) => {
1078 stream.set_position(saved_pos);
1079 None
1080 }
1081 };
1082 stream.expect_complete()?;
1083 let tensormap = TexHandler2::parse(stream)?;
1084 stream.expect_complete()?;
1085 stream.expect(&PtxToken::Comma)?;
1086 let srcmem = AddressOperand::parse(stream)?;
1087 stream.expect_complete()?;
1088 let saved_pos = stream.position();
1089 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
1090 if !has_comma {
1091 stream.set_position(saved_pos);
1092 }
1093 let saved_pos = stream.position();
1094 let cache_policy = match GeneralOperand::parse(stream) {
1095 Ok(val) => Some(val),
1096 Err(_) => {
1097 stream.set_position(saved_pos);
1098 None
1099 }
1100 };
1101 stream.expect_complete()?;
1102 stream.expect_complete()?;
1103 stream.expect(&PtxToken::Semicolon)?;
1104 Ok(
1105 CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismLevelCacheHint {
1106 async_,
1107 bulk,
1108 tensor,
1109 dim,
1110 dst,
1111 src,
1112 load_mode,
1113 completion_mechanism,
1114 level_cache_hint,
1115 tensormap,
1116 srcmem,
1117 cache_policy,
1118 },
1119 )
1120 }
1121 }
1122}