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