1#![allow(unused)]
36
37use crate::lexer::PtxToken;
38use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
39use crate::r#type::common::*;
40
41pub mod section_0 {
42 use super::*;
43 use crate::r#type::instruction::multimem_ld_reduce::section_0::*;
44
45 impl PtxParser for Ldsem {
50 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
51 {
53 let saved_pos = stream.position();
54 if stream.expect_string(".relaxed").is_ok() {
55 return Ok(Ldsem::Relaxed);
56 }
57 stream.set_position(saved_pos);
58 }
59 let saved_pos = stream.position();
60 {
62 let saved_pos = stream.position();
63 if stream.expect_string(".acquire").is_ok() {
64 return Ok(Ldsem::Acquire);
65 }
66 stream.set_position(saved_pos);
67 }
68 stream.set_position(saved_pos);
69 let span = stream
70 .peek()
71 .map(|(_, s)| s.clone())
72 .unwrap_or(Span { start: 0, end: 0 });
73 let expected = &[".relaxed", ".acquire"];
74 let found = stream
75 .peek()
76 .map(|(t, _)| format!("{:?}", t))
77 .unwrap_or_else(|_| "<end of input>".to_string());
78 Err(crate::parser::unexpected_value(span, expected, found))
79 }
80 }
81
82 impl PtxParser for Op {
83 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
84 {
86 let saved_pos = stream.position();
87 if stream.expect_string(".min").is_ok() {
88 return Ok(Op::Min);
89 }
90 stream.set_position(saved_pos);
91 }
92 let saved_pos = stream.position();
93 {
95 let saved_pos = stream.position();
96 if stream.expect_string(".max").is_ok() {
97 return Ok(Op::Max);
98 }
99 stream.set_position(saved_pos);
100 }
101 stream.set_position(saved_pos);
102 let saved_pos = stream.position();
103 {
105 let saved_pos = stream.position();
106 if stream.expect_string(".add").is_ok() {
107 return Ok(Op::Add);
108 }
109 stream.set_position(saved_pos);
110 }
111 stream.set_position(saved_pos);
112 let saved_pos = stream.position();
113 {
115 let saved_pos = stream.position();
116 if stream.expect_string(".and").is_ok() {
117 return Ok(Op::And);
118 }
119 stream.set_position(saved_pos);
120 }
121 stream.set_position(saved_pos);
122 let saved_pos = stream.position();
123 {
125 let saved_pos = stream.position();
126 if stream.expect_string(".xor").is_ok() {
127 return Ok(Op::Xor);
128 }
129 stream.set_position(saved_pos);
130 }
131 stream.set_position(saved_pos);
132 let saved_pos = stream.position();
133 {
135 let saved_pos = stream.position();
136 if stream.expect_string(".or").is_ok() {
137 return Ok(Op::Or);
138 }
139 stream.set_position(saved_pos);
140 }
141 stream.set_position(saved_pos);
142 let span = stream
143 .peek()
144 .map(|(_, s)| s.clone())
145 .unwrap_or(Span { start: 0, end: 0 });
146 let expected = &[".min", ".max", ".add", ".and", ".xor", ".or"];
147 let found = stream
148 .peek()
149 .map(|(t, _)| format!("{:?}", t))
150 .unwrap_or_else(|_| "<end of input>".to_string());
151 Err(crate::parser::unexpected_value(span, expected, found))
152 }
153 }
154
155 impl PtxParser for Redsem {
156 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
157 {
159 let saved_pos = stream.position();
160 if stream.expect_string(".relaxed").is_ok() {
161 return Ok(Redsem::Relaxed);
162 }
163 stream.set_position(saved_pos);
164 }
165 let saved_pos = stream.position();
166 {
168 let saved_pos = stream.position();
169 if stream.expect_string(".release").is_ok() {
170 return Ok(Redsem::Release);
171 }
172 stream.set_position(saved_pos);
173 }
174 stream.set_position(saved_pos);
175 let span = stream
176 .peek()
177 .map(|(_, s)| s.clone())
178 .unwrap_or(Span { start: 0, end: 0 });
179 let expected = &[".relaxed", ".release"];
180 let found = stream
181 .peek()
182 .map(|(t, _)| format!("{:?}", t))
183 .unwrap_or_else(|_| "<end of input>".to_string());
184 Err(crate::parser::unexpected_value(span, expected, found))
185 }
186 }
187
188 impl PtxParser for Scope {
189 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
190 {
192 let saved_pos = stream.position();
193 if stream.expect_string(".cluster").is_ok() {
194 return Ok(Scope::Cluster);
195 }
196 stream.set_position(saved_pos);
197 }
198 let saved_pos = stream.position();
199 {
201 let saved_pos = stream.position();
202 if stream.expect_string(".cta").is_ok() {
203 return Ok(Scope::Cta);
204 }
205 stream.set_position(saved_pos);
206 }
207 stream.set_position(saved_pos);
208 let saved_pos = stream.position();
209 {
211 let saved_pos = stream.position();
212 if stream.expect_string(".gpu").is_ok() {
213 return Ok(Scope::Gpu);
214 }
215 stream.set_position(saved_pos);
216 }
217 stream.set_position(saved_pos);
218 let saved_pos = stream.position();
219 {
221 let saved_pos = stream.position();
222 if stream.expect_string(".sys").is_ok() {
223 return Ok(Scope::Sys);
224 }
225 stream.set_position(saved_pos);
226 }
227 stream.set_position(saved_pos);
228 let span = stream
229 .peek()
230 .map(|(_, s)| s.clone())
231 .unwrap_or(Span { start: 0, end: 0 });
232 let expected = &[".cluster", ".cta", ".gpu", ".sys"];
233 let found = stream
234 .peek()
235 .map(|(t, _)| format!("{:?}", t))
236 .unwrap_or_else(|_| "<end of input>".to_string());
237 Err(crate::parser::unexpected_value(span, expected, found))
238 }
239 }
240
241 impl PtxParser for Ss {
242 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
243 {
245 let saved_pos = stream.position();
246 if stream.expect_string(".global").is_ok() {
247 return Ok(Ss::Global);
248 }
249 stream.set_position(saved_pos);
250 }
251 let span = stream
252 .peek()
253 .map(|(_, s)| s.clone())
254 .unwrap_or(Span { start: 0, end: 0 });
255 let expected = &[".global"];
256 let found = stream
257 .peek()
258 .map(|(t, _)| format!("{:?}", t))
259 .unwrap_or_else(|_| "<end of input>".to_string());
260 Err(crate::parser::unexpected_value(span, expected, found))
261 }
262 }
263
264 impl PtxParser for Stsem {
265 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
266 {
268 let saved_pos = stream.position();
269 if stream.expect_string(".relaxed").is_ok() {
270 return Ok(Stsem::Relaxed);
271 }
272 stream.set_position(saved_pos);
273 }
274 let saved_pos = stream.position();
275 {
277 let saved_pos = stream.position();
278 if stream.expect_string(".release").is_ok() {
279 return Ok(Stsem::Release);
280 }
281 stream.set_position(saved_pos);
282 }
283 stream.set_position(saved_pos);
284 let span = stream
285 .peek()
286 .map(|(_, s)| s.clone())
287 .unwrap_or(Span { start: 0, end: 0 });
288 let expected = &[".relaxed", ".release"];
289 let found = stream
290 .peek()
291 .map(|(t, _)| format!("{:?}", t))
292 .unwrap_or_else(|_| "<end of input>".to_string());
293 Err(crate::parser::unexpected_value(span, expected, found))
294 }
295 }
296
297 impl PtxParser for Type {
298 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
299 {
301 let saved_pos = stream.position();
302 if stream.expect_string(".b32").is_ok() {
303 return Ok(Type::B32);
304 }
305 stream.set_position(saved_pos);
306 }
307 let saved_pos = stream.position();
308 {
310 let saved_pos = stream.position();
311 if stream.expect_string(".b64").is_ok() {
312 return Ok(Type::B64);
313 }
314 stream.set_position(saved_pos);
315 }
316 stream.set_position(saved_pos);
317 let saved_pos = stream.position();
318 {
320 let saved_pos = stream.position();
321 if stream.expect_string(".u32").is_ok() {
322 return Ok(Type::U32);
323 }
324 stream.set_position(saved_pos);
325 }
326 stream.set_position(saved_pos);
327 let saved_pos = stream.position();
328 {
330 let saved_pos = stream.position();
331 if stream.expect_string(".u64").is_ok() {
332 return Ok(Type::U64);
333 }
334 stream.set_position(saved_pos);
335 }
336 stream.set_position(saved_pos);
337 let saved_pos = stream.position();
338 {
340 let saved_pos = stream.position();
341 if stream.expect_string(".s32").is_ok() {
342 return Ok(Type::S32);
343 }
344 stream.set_position(saved_pos);
345 }
346 stream.set_position(saved_pos);
347 let saved_pos = stream.position();
348 {
350 let saved_pos = stream.position();
351 if stream.expect_string(".s64").is_ok() {
352 return Ok(Type::S64);
353 }
354 stream.set_position(saved_pos);
355 }
356 stream.set_position(saved_pos);
357 let span = stream
358 .peek()
359 .map(|(_, s)| s.clone())
360 .unwrap_or(Span { start: 0, end: 0 });
361 let expected = &[".b32", ".b64", ".u32", ".u64", ".s32", ".s64"];
362 let found = stream
363 .peek()
364 .map(|(t, _)| format!("{:?}", t))
365 .unwrap_or_else(|_| "<end of input>".to_string());
366 Err(crate::parser::unexpected_value(span, expected, found))
367 }
368 }
369
370 impl PtxParser for MultimemLdReduceLdsemScopeSsOpType {
371 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
372 stream.expect_string("multimem")?;
373 stream.expect_string(".ld_reduce")?;
374 let ld_reduce = ();
375 stream.expect_complete()?;
376 let saved_pos = stream.position();
377 let ldsem = match Ldsem::parse(stream) {
378 Ok(val) => Some(val),
379 Err(_) => {
380 stream.set_position(saved_pos);
381 None
382 }
383 };
384 stream.expect_complete()?;
385 let saved_pos = stream.position();
386 let scope = match Scope::parse(stream) {
387 Ok(val) => Some(val),
388 Err(_) => {
389 stream.set_position(saved_pos);
390 None
391 }
392 };
393 stream.expect_complete()?;
394 let saved_pos = stream.position();
395 let ss = match Ss::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 op = Op::parse(stream)?;
404 stream.expect_complete()?;
405 let type_ = Type::parse(stream)?;
406 stream.expect_complete()?;
407 let d = GeneralOperand::parse(stream)?;
408 stream.expect_complete()?;
409 stream.expect(&PtxToken::Comma)?;
410 let a = AddressOperand::parse(stream)?;
411 stream.expect_complete()?;
412 stream.expect_complete()?;
413 stream.expect(&PtxToken::Semicolon)?;
414 Ok(MultimemLdReduceLdsemScopeSsOpType {
415 ld_reduce,
416 ldsem,
417 scope,
418 ss,
419 op,
420 type_,
421 d,
422 a,
423 })
424 }
425 }
426
427 impl PtxParser for MultimemLdReduceWeakSsOpType {
428 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
429 stream.expect_string("multimem")?;
430 stream.expect_string(".ld_reduce")?;
431 let ld_reduce = ();
432 stream.expect_complete()?;
433 stream.expect_string(".weak")?;
434 let weak = ();
435 stream.expect_complete()?;
436 let saved_pos = stream.position();
437 let ss = match Ss::parse(stream) {
438 Ok(val) => Some(val),
439 Err(_) => {
440 stream.set_position(saved_pos);
441 None
442 }
443 };
444 stream.expect_complete()?;
445 let op = Op::parse(stream)?;
446 stream.expect_complete()?;
447 let type_ = Type::parse(stream)?;
448 stream.expect_complete()?;
449 let d = GeneralOperand::parse(stream)?;
450 stream.expect_complete()?;
451 stream.expect(&PtxToken::Comma)?;
452 let a = AddressOperand::parse(stream)?;
453 stream.expect_complete()?;
454 stream.expect_complete()?;
455 stream.expect(&PtxToken::Semicolon)?;
456 Ok(MultimemLdReduceWeakSsOpType {
457 ld_reduce,
458 weak,
459 ss,
460 op,
461 type_,
462 d,
463 a,
464 })
465 }
466 }
467
468 impl PtxParser for MultimemStStsemScopeSsType {
469 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
470 stream.expect_string("multimem")?;
471 stream.expect_string(".st")?;
472 let st = ();
473 stream.expect_complete()?;
474 let saved_pos = stream.position();
475 let stsem = match Stsem::parse(stream) {
476 Ok(val) => Some(val),
477 Err(_) => {
478 stream.set_position(saved_pos);
479 None
480 }
481 };
482 stream.expect_complete()?;
483 let saved_pos = stream.position();
484 let scope = match Scope::parse(stream) {
485 Ok(val) => Some(val),
486 Err(_) => {
487 stream.set_position(saved_pos);
488 None
489 }
490 };
491 stream.expect_complete()?;
492 let saved_pos = stream.position();
493 let ss = match Ss::parse(stream) {
494 Ok(val) => Some(val),
495 Err(_) => {
496 stream.set_position(saved_pos);
497 None
498 }
499 };
500 stream.expect_complete()?;
501 let type_ = Type::parse(stream)?;
502 stream.expect_complete()?;
503 let a = AddressOperand::parse(stream)?;
504 stream.expect_complete()?;
505 stream.expect(&PtxToken::Comma)?;
506 let b = GeneralOperand::parse(stream)?;
507 stream.expect_complete()?;
508 stream.expect_complete()?;
509 stream.expect(&PtxToken::Semicolon)?;
510 Ok(MultimemStStsemScopeSsType {
511 st,
512 stsem,
513 scope,
514 ss,
515 type_,
516 a,
517 b,
518 })
519 }
520 }
521
522 impl PtxParser for MultimemStWeakSsType {
523 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
524 stream.expect_string("multimem")?;
525 stream.expect_string(".st")?;
526 let st = ();
527 stream.expect_complete()?;
528 stream.expect_string(".weak")?;
529 let weak = ();
530 stream.expect_complete()?;
531 let saved_pos = stream.position();
532 let ss = match Ss::parse(stream) {
533 Ok(val) => Some(val),
534 Err(_) => {
535 stream.set_position(saved_pos);
536 None
537 }
538 };
539 stream.expect_complete()?;
540 let type_ = Type::parse(stream)?;
541 stream.expect_complete()?;
542 let a = AddressOperand::parse(stream)?;
543 stream.expect_complete()?;
544 stream.expect(&PtxToken::Comma)?;
545 let b = GeneralOperand::parse(stream)?;
546 stream.expect_complete()?;
547 stream.expect_complete()?;
548 stream.expect(&PtxToken::Semicolon)?;
549 Ok(MultimemStWeakSsType {
550 st,
551 weak,
552 ss,
553 type_,
554 a,
555 b,
556 })
557 }
558 }
559
560 impl PtxParser for MultimemRedRedsemScopeSsOpType {
561 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
562 stream.expect_string("multimem")?;
563 stream.expect_string(".red")?;
564 let red = ();
565 stream.expect_complete()?;
566 let saved_pos = stream.position();
567 let redsem = match Redsem::parse(stream) {
568 Ok(val) => Some(val),
569 Err(_) => {
570 stream.set_position(saved_pos);
571 None
572 }
573 };
574 stream.expect_complete()?;
575 let saved_pos = stream.position();
576 let scope = match Scope::parse(stream) {
577 Ok(val) => Some(val),
578 Err(_) => {
579 stream.set_position(saved_pos);
580 None
581 }
582 };
583 stream.expect_complete()?;
584 let saved_pos = stream.position();
585 let ss = match Ss::parse(stream) {
586 Ok(val) => Some(val),
587 Err(_) => {
588 stream.set_position(saved_pos);
589 None
590 }
591 };
592 stream.expect_complete()?;
593 let op = Op::parse(stream)?;
594 stream.expect_complete()?;
595 let type_ = Type::parse(stream)?;
596 stream.expect_complete()?;
597 let a = AddressOperand::parse(stream)?;
598 stream.expect_complete()?;
599 stream.expect(&PtxToken::Comma)?;
600 let b = GeneralOperand::parse(stream)?;
601 stream.expect_complete()?;
602 stream.expect_complete()?;
603 stream.expect(&PtxToken::Semicolon)?;
604 Ok(MultimemRedRedsemScopeSsOpType {
605 red,
606 redsem,
607 scope,
608 ss,
609 op,
610 type_,
611 a,
612 b,
613 })
614 }
615 }
616}
617
618pub mod section_1 {
619 use super::*;
620 use crate::r#type::instruction::multimem_ld_reduce::section_1::*;
621
622 impl PtxParser for AccPrec {
627 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
628 {
630 let saved_pos = stream.position();
631 if stream.expect_string(".acc::f32").is_ok() {
632 return Ok(AccPrec::AccF32);
633 }
634 stream.set_position(saved_pos);
635 }
636 let saved_pos = stream.position();
637 {
639 let saved_pos = stream.position();
640 if stream.expect_string(".acc::f16").is_ok() {
641 return Ok(AccPrec::AccF16);
642 }
643 stream.set_position(saved_pos);
644 }
645 stream.set_position(saved_pos);
646 let span = stream
647 .peek()
648 .map(|(_, s)| s.clone())
649 .unwrap_or(Span { start: 0, end: 0 });
650 let expected = &[".acc::f32", ".acc::f16"];
651 let found = stream
652 .peek()
653 .map(|(t, _)| format!("{:?}", t))
654 .unwrap_or_else(|_| "<end of input>".to_string());
655 Err(crate::parser::unexpected_value(span, expected, found))
656 }
657 }
658
659 impl PtxParser for Ldsem {
660 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
661 {
663 let saved_pos = stream.position();
664 if stream.expect_string(".relaxed").is_ok() {
665 return Ok(Ldsem::Relaxed);
666 }
667 stream.set_position(saved_pos);
668 }
669 let saved_pos = stream.position();
670 {
672 let saved_pos = stream.position();
673 if stream.expect_string(".acquire").is_ok() {
674 return Ok(Ldsem::Acquire);
675 }
676 stream.set_position(saved_pos);
677 }
678 stream.set_position(saved_pos);
679 let span = stream
680 .peek()
681 .map(|(_, s)| s.clone())
682 .unwrap_or(Span { start: 0, end: 0 });
683 let expected = &[".relaxed", ".acquire"];
684 let found = stream
685 .peek()
686 .map(|(t, _)| format!("{:?}", t))
687 .unwrap_or_else(|_| "<end of input>".to_string());
688 Err(crate::parser::unexpected_value(span, expected, found))
689 }
690 }
691
692 impl PtxParser for Op {
693 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
694 {
696 let saved_pos = stream.position();
697 if stream.expect_string(".min").is_ok() {
698 return Ok(Op::Min);
699 }
700 stream.set_position(saved_pos);
701 }
702 let saved_pos = stream.position();
703 {
705 let saved_pos = stream.position();
706 if stream.expect_string(".max").is_ok() {
707 return Ok(Op::Max);
708 }
709 stream.set_position(saved_pos);
710 }
711 stream.set_position(saved_pos);
712 let saved_pos = stream.position();
713 {
715 let saved_pos = stream.position();
716 if stream.expect_string(".add").is_ok() {
717 return Ok(Op::Add);
718 }
719 stream.set_position(saved_pos);
720 }
721 stream.set_position(saved_pos);
722 let span = stream
723 .peek()
724 .map(|(_, s)| s.clone())
725 .unwrap_or(Span { start: 0, end: 0 });
726 let expected = &[".min", ".max", ".add"];
727 let found = stream
728 .peek()
729 .map(|(t, _)| format!("{:?}", t))
730 .unwrap_or_else(|_| "<end of input>".to_string());
731 Err(crate::parser::unexpected_value(span, expected, found))
732 }
733 }
734
735 impl PtxParser for Redop {
736 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
737 {
739 let saved_pos = stream.position();
740 if stream.expect_string(".add").is_ok() {
741 return Ok(Redop::Add);
742 }
743 stream.set_position(saved_pos);
744 }
745 let span = stream
746 .peek()
747 .map(|(_, s)| s.clone())
748 .unwrap_or(Span { start: 0, end: 0 });
749 let expected = &[".add"];
750 let found = stream
751 .peek()
752 .map(|(t, _)| format!("{:?}", t))
753 .unwrap_or_else(|_| "<end of input>".to_string());
754 Err(crate::parser::unexpected_value(span, expected, found))
755 }
756 }
757
758 impl PtxParser for Redsem {
759 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
760 {
762 let saved_pos = stream.position();
763 if stream.expect_string(".relaxed").is_ok() {
764 return Ok(Redsem::Relaxed);
765 }
766 stream.set_position(saved_pos);
767 }
768 let saved_pos = stream.position();
769 {
771 let saved_pos = stream.position();
772 if stream.expect_string(".release").is_ok() {
773 return Ok(Redsem::Release);
774 }
775 stream.set_position(saved_pos);
776 }
777 stream.set_position(saved_pos);
778 let span = stream
779 .peek()
780 .map(|(_, s)| s.clone())
781 .unwrap_or(Span { start: 0, end: 0 });
782 let expected = &[".relaxed", ".release"];
783 let found = stream
784 .peek()
785 .map(|(t, _)| format!("{:?}", t))
786 .unwrap_or_else(|_| "<end of input>".to_string());
787 Err(crate::parser::unexpected_value(span, expected, found))
788 }
789 }
790
791 impl PtxParser for Redtype {
792 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
793 {
795 let saved_pos = stream.position();
796 if stream.expect_string(".bf16x2").is_ok() {
797 return Ok(Redtype::Bf16x2);
798 }
799 stream.set_position(saved_pos);
800 }
801 let saved_pos = stream.position();
802 {
804 let saved_pos = stream.position();
805 if stream.expect_string(".f16x2").is_ok() {
806 return Ok(Redtype::F16x2);
807 }
808 stream.set_position(saved_pos);
809 }
810 stream.set_position(saved_pos);
811 let saved_pos = stream.position();
812 {
814 let saved_pos = stream.position();
815 if stream.expect_string(".bf16").is_ok() {
816 return Ok(Redtype::Bf16);
817 }
818 stream.set_position(saved_pos);
819 }
820 stream.set_position(saved_pos);
821 let saved_pos = stream.position();
822 {
824 let saved_pos = stream.position();
825 if stream.expect_string(".f16").is_ok() {
826 return Ok(Redtype::F16);
827 }
828 stream.set_position(saved_pos);
829 }
830 stream.set_position(saved_pos);
831 let saved_pos = stream.position();
832 {
834 let saved_pos = stream.position();
835 if stream.expect_string(".f32").is_ok() {
836 return Ok(Redtype::F32);
837 }
838 stream.set_position(saved_pos);
839 }
840 stream.set_position(saved_pos);
841 let saved_pos = stream.position();
842 {
844 let saved_pos = stream.position();
845 if stream.expect_string(".f64").is_ok() {
846 return Ok(Redtype::F64);
847 }
848 stream.set_position(saved_pos);
849 }
850 stream.set_position(saved_pos);
851 let span = stream
852 .peek()
853 .map(|(_, s)| s.clone())
854 .unwrap_or(Span { start: 0, end: 0 });
855 let expected = &[".bf16x2", ".f16x2", ".bf16", ".f16", ".f32", ".f64"];
856 let found = stream
857 .peek()
858 .map(|(t, _)| format!("{:?}", t))
859 .unwrap_or_else(|_| "<end of input>".to_string());
860 Err(crate::parser::unexpected_value(span, expected, found))
861 }
862 }
863
864 impl PtxParser for Scope {
865 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
866 {
868 let saved_pos = stream.position();
869 if stream.expect_string(".cluster").is_ok() {
870 return Ok(Scope::Cluster);
871 }
872 stream.set_position(saved_pos);
873 }
874 let saved_pos = stream.position();
875 {
877 let saved_pos = stream.position();
878 if stream.expect_string(".cta").is_ok() {
879 return Ok(Scope::Cta);
880 }
881 stream.set_position(saved_pos);
882 }
883 stream.set_position(saved_pos);
884 let saved_pos = stream.position();
885 {
887 let saved_pos = stream.position();
888 if stream.expect_string(".gpu").is_ok() {
889 return Ok(Scope::Gpu);
890 }
891 stream.set_position(saved_pos);
892 }
893 stream.set_position(saved_pos);
894 let saved_pos = stream.position();
895 {
897 let saved_pos = stream.position();
898 if stream.expect_string(".sys").is_ok() {
899 return Ok(Scope::Sys);
900 }
901 stream.set_position(saved_pos);
902 }
903 stream.set_position(saved_pos);
904 let span = stream
905 .peek()
906 .map(|(_, s)| s.clone())
907 .unwrap_or(Span { start: 0, end: 0 });
908 let expected = &[".cluster", ".cta", ".gpu", ".sys"];
909 let found = stream
910 .peek()
911 .map(|(t, _)| format!("{:?}", t))
912 .unwrap_or_else(|_| "<end of input>".to_string());
913 Err(crate::parser::unexpected_value(span, expected, found))
914 }
915 }
916
917 impl PtxParser for Ss {
918 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
919 {
921 let saved_pos = stream.position();
922 if stream.expect_string(".global").is_ok() {
923 return Ok(Ss::Global);
924 }
925 stream.set_position(saved_pos);
926 }
927 let span = stream
928 .peek()
929 .map(|(_, s)| s.clone())
930 .unwrap_or(Span { start: 0, end: 0 });
931 let expected = &[".global"];
932 let found = stream
933 .peek()
934 .map(|(t, _)| format!("{:?}", t))
935 .unwrap_or_else(|_| "<end of input>".to_string());
936 Err(crate::parser::unexpected_value(span, expected, found))
937 }
938 }
939
940 impl PtxParser for Stsem {
941 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
942 {
944 let saved_pos = stream.position();
945 if stream.expect_string(".relaxed").is_ok() {
946 return Ok(Stsem::Relaxed);
947 }
948 stream.set_position(saved_pos);
949 }
950 let saved_pos = stream.position();
951 {
953 let saved_pos = stream.position();
954 if stream.expect_string(".release").is_ok() {
955 return Ok(Stsem::Release);
956 }
957 stream.set_position(saved_pos);
958 }
959 stream.set_position(saved_pos);
960 let span = stream
961 .peek()
962 .map(|(_, s)| s.clone())
963 .unwrap_or(Span { start: 0, end: 0 });
964 let expected = &[".relaxed", ".release"];
965 let found = stream
966 .peek()
967 .map(|(t, _)| format!("{:?}", t))
968 .unwrap_or_else(|_| "<end of input>".to_string());
969 Err(crate::parser::unexpected_value(span, expected, found))
970 }
971 }
972
973 impl PtxParser for Type {
974 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
975 {
977 let saved_pos = stream.position();
978 if stream.expect_string(".bf16x2").is_ok() {
979 return Ok(Type::Bf16x2);
980 }
981 stream.set_position(saved_pos);
982 }
983 let saved_pos = stream.position();
984 {
986 let saved_pos = stream.position();
987 if stream.expect_string(".e5m2x2").is_ok() {
988 return Ok(Type::E5m2x2);
989 }
990 stream.set_position(saved_pos);
991 }
992 stream.set_position(saved_pos);
993 let saved_pos = stream.position();
994 {
996 let saved_pos = stream.position();
997 if stream.expect_string(".e5m2x4").is_ok() {
998 return Ok(Type::E5m2x4);
999 }
1000 stream.set_position(saved_pos);
1001 }
1002 stream.set_position(saved_pos);
1003 let saved_pos = stream.position();
1004 {
1006 let saved_pos = stream.position();
1007 if stream.expect_string(".e4m3x2").is_ok() {
1008 return Ok(Type::E4m3x2);
1009 }
1010 stream.set_position(saved_pos);
1011 }
1012 stream.set_position(saved_pos);
1013 let saved_pos = stream.position();
1014 {
1016 let saved_pos = stream.position();
1017 if stream.expect_string(".e4m3x4").is_ok() {
1018 return Ok(Type::E4m3x4);
1019 }
1020 stream.set_position(saved_pos);
1021 }
1022 stream.set_position(saved_pos);
1023 let saved_pos = stream.position();
1024 {
1026 let saved_pos = stream.position();
1027 if stream.expect_string(".f16x2").is_ok() {
1028 return Ok(Type::F16x2);
1029 }
1030 stream.set_position(saved_pos);
1031 }
1032 stream.set_position(saved_pos);
1033 let saved_pos = stream.position();
1034 {
1036 let saved_pos = stream.position();
1037 if stream.expect_string(".bf16").is_ok() {
1038 return Ok(Type::Bf16);
1039 }
1040 stream.set_position(saved_pos);
1041 }
1042 stream.set_position(saved_pos);
1043 let saved_pos = stream.position();
1044 {
1046 let saved_pos = stream.position();
1047 if stream.expect_string(".e5m2").is_ok() {
1048 return Ok(Type::E5m2);
1049 }
1050 stream.set_position(saved_pos);
1051 }
1052 stream.set_position(saved_pos);
1053 let saved_pos = stream.position();
1054 {
1056 let saved_pos = stream.position();
1057 if stream.expect_string(".e4m3").is_ok() {
1058 return Ok(Type::E4m3);
1059 }
1060 stream.set_position(saved_pos);
1061 }
1062 stream.set_position(saved_pos);
1063 let saved_pos = stream.position();
1064 {
1066 let saved_pos = stream.position();
1067 if stream.expect_string(".f16").is_ok() {
1068 return Ok(Type::F16);
1069 }
1070 stream.set_position(saved_pos);
1071 }
1072 stream.set_position(saved_pos);
1073 let saved_pos = stream.position();
1074 {
1076 let saved_pos = stream.position();
1077 if stream.expect_string(".f32").is_ok() {
1078 return Ok(Type::F32);
1079 }
1080 stream.set_position(saved_pos);
1081 }
1082 stream.set_position(saved_pos);
1083 let saved_pos = stream.position();
1084 {
1086 let saved_pos = stream.position();
1087 if stream.expect_string(".f64").is_ok() {
1088 return Ok(Type::F64);
1089 }
1090 stream.set_position(saved_pos);
1091 }
1092 stream.set_position(saved_pos);
1093 let span = stream
1094 .peek()
1095 .map(|(_, s)| s.clone())
1096 .unwrap_or(Span { start: 0, end: 0 });
1097 let expected = &[
1098 ".bf16x2", ".e5m2x2", ".e5m2x4", ".e4m3x2", ".e4m3x4", ".f16x2", ".bf16", ".e5m2",
1099 ".e4m3", ".f16", ".f32", ".f64",
1100 ];
1101 let found = stream
1102 .peek()
1103 .map(|(t, _)| format!("{:?}", t))
1104 .unwrap_or_else(|_| "<end of input>".to_string());
1105 Err(crate::parser::unexpected_value(span, expected, found))
1106 }
1107 }
1108
1109 impl PtxParser for Vec {
1110 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1111 {
1113 let saved_pos = stream.position();
1114 if stream.expect_string(".v2").is_ok() {
1115 return Ok(Vec::V2);
1116 }
1117 stream.set_position(saved_pos);
1118 }
1119 let saved_pos = stream.position();
1120 {
1122 let saved_pos = stream.position();
1123 if stream.expect_string(".v4").is_ok() {
1124 return Ok(Vec::V4);
1125 }
1126 stream.set_position(saved_pos);
1127 }
1128 stream.set_position(saved_pos);
1129 let saved_pos = stream.position();
1130 {
1132 let saved_pos = stream.position();
1133 if stream.expect_string(".v8").is_ok() {
1134 return Ok(Vec::V8);
1135 }
1136 stream.set_position(saved_pos);
1137 }
1138 stream.set_position(saved_pos);
1139 let span = stream
1140 .peek()
1141 .map(|(_, s)| s.clone())
1142 .unwrap_or(Span { start: 0, end: 0 });
1143 let expected = &[".v2", ".v4", ".v8"];
1144 let found = stream
1145 .peek()
1146 .map(|(t, _)| format!("{:?}", t))
1147 .unwrap_or_else(|_| "<end of input>".to_string());
1148 Err(crate::parser::unexpected_value(span, expected, found))
1149 }
1150 }
1151
1152 impl PtxParser for MultimemLdReduceLdsemScopeSsOpAccPrecVecType {
1153 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1154 stream.expect_string("multimem")?;
1155 stream.expect_string(".ld_reduce")?;
1156 let ld_reduce = ();
1157 stream.expect_complete()?;
1158 let saved_pos = stream.position();
1159 let ldsem = match Ldsem::parse(stream) {
1160 Ok(val) => Some(val),
1161 Err(_) => {
1162 stream.set_position(saved_pos);
1163 None
1164 }
1165 };
1166 stream.expect_complete()?;
1167 let saved_pos = stream.position();
1168 let scope = match Scope::parse(stream) {
1169 Ok(val) => Some(val),
1170 Err(_) => {
1171 stream.set_position(saved_pos);
1172 None
1173 }
1174 };
1175 stream.expect_complete()?;
1176 let saved_pos = stream.position();
1177 let ss = match Ss::parse(stream) {
1178 Ok(val) => Some(val),
1179 Err(_) => {
1180 stream.set_position(saved_pos);
1181 None
1182 }
1183 };
1184 stream.expect_complete()?;
1185 let op = Op::parse(stream)?;
1186 stream.expect_complete()?;
1187 let saved_pos = stream.position();
1188 let acc_prec = match AccPrec::parse(stream) {
1189 Ok(val) => Some(val),
1190 Err(_) => {
1191 stream.set_position(saved_pos);
1192 None
1193 }
1194 };
1195 stream.expect_complete()?;
1196 let saved_pos = stream.position();
1197 let vec = match Vec::parse(stream) {
1198 Ok(val) => Some(val),
1199 Err(_) => {
1200 stream.set_position(saved_pos);
1201 None
1202 }
1203 };
1204 stream.expect_complete()?;
1205 let type_ = Type::parse(stream)?;
1206 stream.expect_complete()?;
1207 let d = GeneralOperand::parse(stream)?;
1208 stream.expect_complete()?;
1209 stream.expect(&PtxToken::Comma)?;
1210 let a = AddressOperand::parse(stream)?;
1211 stream.expect_complete()?;
1212 stream.expect_complete()?;
1213 stream.expect(&PtxToken::Semicolon)?;
1214 Ok(MultimemLdReduceLdsemScopeSsOpAccPrecVecType {
1215 ld_reduce,
1216 ldsem,
1217 scope,
1218 ss,
1219 op,
1220 acc_prec,
1221 vec,
1222 type_,
1223 d,
1224 a,
1225 })
1226 }
1227 }
1228
1229 impl PtxParser for MultimemLdReduceWeakSsOpAccPrecVecType {
1230 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1231 stream.expect_string("multimem")?;
1232 stream.expect_string(".ld_reduce")?;
1233 let ld_reduce = ();
1234 stream.expect_complete()?;
1235 stream.expect_string(".weak")?;
1236 let weak = ();
1237 stream.expect_complete()?;
1238 let saved_pos = stream.position();
1239 let ss = match Ss::parse(stream) {
1240 Ok(val) => Some(val),
1241 Err(_) => {
1242 stream.set_position(saved_pos);
1243 None
1244 }
1245 };
1246 stream.expect_complete()?;
1247 let op = Op::parse(stream)?;
1248 stream.expect_complete()?;
1249 let saved_pos = stream.position();
1250 let acc_prec = match AccPrec::parse(stream) {
1251 Ok(val) => Some(val),
1252 Err(_) => {
1253 stream.set_position(saved_pos);
1254 None
1255 }
1256 };
1257 stream.expect_complete()?;
1258 let saved_pos = stream.position();
1259 let vec = match Vec::parse(stream) {
1260 Ok(val) => Some(val),
1261 Err(_) => {
1262 stream.set_position(saved_pos);
1263 None
1264 }
1265 };
1266 stream.expect_complete()?;
1267 let type_ = Type::parse(stream)?;
1268 stream.expect_complete()?;
1269 let d = GeneralOperand::parse(stream)?;
1270 stream.expect_complete()?;
1271 stream.expect(&PtxToken::Comma)?;
1272 let a = AddressOperand::parse(stream)?;
1273 stream.expect_complete()?;
1274 stream.expect_complete()?;
1275 stream.expect(&PtxToken::Semicolon)?;
1276 Ok(MultimemLdReduceWeakSsOpAccPrecVecType {
1277 ld_reduce,
1278 weak,
1279 ss,
1280 op,
1281 acc_prec,
1282 vec,
1283 type_,
1284 d,
1285 a,
1286 })
1287 }
1288 }
1289
1290 impl PtxParser for MultimemStStsemScopeSsVecType {
1291 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1292 stream.expect_string("multimem")?;
1293 stream.expect_string(".st")?;
1294 let st = ();
1295 stream.expect_complete()?;
1296 let saved_pos = stream.position();
1297 let stsem = match Stsem::parse(stream) {
1298 Ok(val) => Some(val),
1299 Err(_) => {
1300 stream.set_position(saved_pos);
1301 None
1302 }
1303 };
1304 stream.expect_complete()?;
1305 let saved_pos = stream.position();
1306 let scope = match Scope::parse(stream) {
1307 Ok(val) => Some(val),
1308 Err(_) => {
1309 stream.set_position(saved_pos);
1310 None
1311 }
1312 };
1313 stream.expect_complete()?;
1314 let saved_pos = stream.position();
1315 let ss = match Ss::parse(stream) {
1316 Ok(val) => Some(val),
1317 Err(_) => {
1318 stream.set_position(saved_pos);
1319 None
1320 }
1321 };
1322 stream.expect_complete()?;
1323 let saved_pos = stream.position();
1324 let vec = match Vec::parse(stream) {
1325 Ok(val) => Some(val),
1326 Err(_) => {
1327 stream.set_position(saved_pos);
1328 None
1329 }
1330 };
1331 stream.expect_complete()?;
1332 let type_ = Type::parse(stream)?;
1333 stream.expect_complete()?;
1334 let a = AddressOperand::parse(stream)?;
1335 stream.expect_complete()?;
1336 stream.expect(&PtxToken::Comma)?;
1337 let b = GeneralOperand::parse(stream)?;
1338 stream.expect_complete()?;
1339 stream.expect_complete()?;
1340 stream.expect(&PtxToken::Semicolon)?;
1341 Ok(MultimemStStsemScopeSsVecType {
1342 st,
1343 stsem,
1344 scope,
1345 ss,
1346 vec,
1347 type_,
1348 a,
1349 b,
1350 })
1351 }
1352 }
1353
1354 impl PtxParser for MultimemStWeakSsVecType {
1355 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1356 stream.expect_string("multimem")?;
1357 stream.expect_string(".st")?;
1358 let st = ();
1359 stream.expect_complete()?;
1360 stream.expect_string(".weak")?;
1361 let weak = ();
1362 stream.expect_complete()?;
1363 let saved_pos = stream.position();
1364 let ss = match Ss::parse(stream) {
1365 Ok(val) => Some(val),
1366 Err(_) => {
1367 stream.set_position(saved_pos);
1368 None
1369 }
1370 };
1371 stream.expect_complete()?;
1372 let saved_pos = stream.position();
1373 let vec = match Vec::parse(stream) {
1374 Ok(val) => Some(val),
1375 Err(_) => {
1376 stream.set_position(saved_pos);
1377 None
1378 }
1379 };
1380 stream.expect_complete()?;
1381 let type_ = Type::parse(stream)?;
1382 stream.expect_complete()?;
1383 let a = AddressOperand::parse(stream)?;
1384 stream.expect_complete()?;
1385 stream.expect(&PtxToken::Comma)?;
1386 let b = GeneralOperand::parse(stream)?;
1387 stream.expect_complete()?;
1388 stream.expect_complete()?;
1389 stream.expect(&PtxToken::Semicolon)?;
1390 Ok(MultimemStWeakSsVecType {
1391 st,
1392 weak,
1393 ss,
1394 vec,
1395 type_,
1396 a,
1397 b,
1398 })
1399 }
1400 }
1401
1402 impl PtxParser for MultimemRedRedsemScopeSsRedopVecRedtype {
1403 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1404 stream.expect_string("multimem")?;
1405 stream.expect_string(".red")?;
1406 let red = ();
1407 stream.expect_complete()?;
1408 let saved_pos = stream.position();
1409 let redsem = match Redsem::parse(stream) {
1410 Ok(val) => Some(val),
1411 Err(_) => {
1412 stream.set_position(saved_pos);
1413 None
1414 }
1415 };
1416 stream.expect_complete()?;
1417 let saved_pos = stream.position();
1418 let scope = match Scope::parse(stream) {
1419 Ok(val) => Some(val),
1420 Err(_) => {
1421 stream.set_position(saved_pos);
1422 None
1423 }
1424 };
1425 stream.expect_complete()?;
1426 let saved_pos = stream.position();
1427 let ss = match Ss::parse(stream) {
1428 Ok(val) => Some(val),
1429 Err(_) => {
1430 stream.set_position(saved_pos);
1431 None
1432 }
1433 };
1434 stream.expect_complete()?;
1435 let redop = Redop::parse(stream)?;
1436 stream.expect_complete()?;
1437 let saved_pos = stream.position();
1438 let vec = match Vec::parse(stream) {
1439 Ok(val) => Some(val),
1440 Err(_) => {
1441 stream.set_position(saved_pos);
1442 None
1443 }
1444 };
1445 stream.expect_complete()?;
1446 let redtype = Redtype::parse(stream)?;
1447 stream.expect_complete()?;
1448 let a = AddressOperand::parse(stream)?;
1449 stream.expect_complete()?;
1450 stream.expect(&PtxToken::Comma)?;
1451 let b = GeneralOperand::parse(stream)?;
1452 stream.expect_complete()?;
1453 stream.expect_complete()?;
1454 stream.expect(&PtxToken::Semicolon)?;
1455 Ok(MultimemRedRedsemScopeSsRedopVecRedtype {
1456 red,
1457 redsem,
1458 scope,
1459 ss,
1460 redop,
1461 vec,
1462 redtype,
1463 a,
1464 b,
1465 })
1466 }
1467 }
1468}