1#![allow(unused)]
46
47use crate::lexer::PtxToken;
48use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
49use crate::r#type::common::*;
50
51pub mod section_0 {
52 use super::*;
53 use crate::r#type::instruction::red_async::section_0::*;
54
55 impl PtxParser for CompletionMechanism {
60 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
61 {
63 let saved_pos = stream.position();
64 if stream
65 .expect_string(".mbarrier::complete_tx::bytes")
66 .is_ok()
67 {
68 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
69 }
70 stream.set_position(saved_pos);
71 }
72 let span = stream
73 .peek()
74 .map(|(_, s)| s.clone())
75 .unwrap_or(Span { start: 0, end: 0 });
76 let expected = &[".mbarrier::complete_tx::bytes"];
77 let found = stream
78 .peek()
79 .map(|(t, _)| format!("{:?}", t))
80 .unwrap_or_else(|_| "<end of input>".to_string());
81 Err(crate::parser::unexpected_value(span, expected, found))
82 }
83 }
84
85 impl PtxParser for Op {
86 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
87 {
89 let saved_pos = stream.position();
90 if stream.expect_string(".inc").is_ok() {
91 return Ok(Op::Inc);
92 }
93 stream.set_position(saved_pos);
94 }
95 let saved_pos = stream.position();
96 {
98 let saved_pos = stream.position();
99 if stream.expect_string(".dec").is_ok() {
100 return Ok(Op::Dec);
101 }
102 stream.set_position(saved_pos);
103 }
104 stream.set_position(saved_pos);
105 let span = stream
106 .peek()
107 .map(|(_, s)| s.clone())
108 .unwrap_or(Span { start: 0, end: 0 });
109 let expected = &[".inc", ".dec"];
110 let found = stream
111 .peek()
112 .map(|(t, _)| format!("{:?}", t))
113 .unwrap_or_else(|_| "<end of input>".to_string());
114 Err(crate::parser::unexpected_value(span, expected, found))
115 }
116 }
117
118 impl PtxParser for Scope {
119 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
120 {
122 let saved_pos = stream.position();
123 if stream.expect_string(".cluster").is_ok() {
124 return Ok(Scope::Cluster);
125 }
126 stream.set_position(saved_pos);
127 }
128 let span = stream
129 .peek()
130 .map(|(_, s)| s.clone())
131 .unwrap_or(Span { start: 0, end: 0 });
132 let expected = &[".cluster"];
133 let found = stream
134 .peek()
135 .map(|(t, _)| format!("{:?}", t))
136 .unwrap_or_else(|_| "<end of input>".to_string());
137 Err(crate::parser::unexpected_value(span, expected, found))
138 }
139 }
140
141 impl PtxParser for Sem {
142 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
143 {
145 let saved_pos = stream.position();
146 if stream.expect_string(".relaxed").is_ok() {
147 return Ok(Sem::Relaxed);
148 }
149 stream.set_position(saved_pos);
150 }
151 let span = stream
152 .peek()
153 .map(|(_, s)| s.clone())
154 .unwrap_or(Span { start: 0, end: 0 });
155 let expected = &[".relaxed"];
156 let found = stream
157 .peek()
158 .map(|(t, _)| format!("{:?}", t))
159 .unwrap_or_else(|_| "<end of input>".to_string());
160 Err(crate::parser::unexpected_value(span, expected, found))
161 }
162 }
163
164 impl PtxParser for Ss {
165 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
166 {
168 let saved_pos = stream.position();
169 if stream.expect_string(".shared::cluster").is_ok() {
170 return Ok(Ss::SharedCluster);
171 }
172 stream.set_position(saved_pos);
173 }
174 let span = stream
175 .peek()
176 .map(|(_, s)| s.clone())
177 .unwrap_or(Span { start: 0, end: 0 });
178 let expected = &[".shared::cluster"];
179 let found = stream
180 .peek()
181 .map(|(t, _)| format!("{:?}", t))
182 .unwrap_or_else(|_| "<end of input>".to_string());
183 Err(crate::parser::unexpected_value(span, expected, found))
184 }
185 }
186
187 impl PtxParser for Type {
188 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
189 {
191 let saved_pos = stream.position();
192 if stream.expect_string(".u32").is_ok() {
193 return Ok(Type::U32);
194 }
195 stream.set_position(saved_pos);
196 }
197 let span = stream
198 .peek()
199 .map(|(_, s)| s.clone())
200 .unwrap_or(Span { start: 0, end: 0 });
201 let expected = &[".u32"];
202 let found = stream
203 .peek()
204 .map(|(t, _)| format!("{:?}", t))
205 .unwrap_or_else(|_| "<end of input>".to_string());
206 Err(crate::parser::unexpected_value(span, expected, found))
207 }
208 }
209
210 impl PtxParser for RedAsyncSemScopeSsCompletionMechanismOpType {
211 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
212 stream.expect_string("red")?;
213 stream.expect_string(".async")?;
214 let async_ = ();
215 stream.expect_complete()?;
216 let sem = Sem::parse(stream)?;
217 stream.expect_complete()?;
218 let scope = Scope::parse(stream)?;
219 stream.expect_complete()?;
220 let saved_pos = stream.position();
221 let ss = match Ss::parse(stream) {
222 Ok(val) => Some(val),
223 Err(_) => {
224 stream.set_position(saved_pos);
225 None
226 }
227 };
228 stream.expect_complete()?;
229 let completion_mechanism = CompletionMechanism::parse(stream)?;
230 stream.expect_complete()?;
231 let op = Op::parse(stream)?;
232 stream.expect_complete()?;
233 let type_ = Type::parse(stream)?;
234 stream.expect_complete()?;
235 let a = AddressOperand::parse(stream)?;
236 stream.expect_complete()?;
237 stream.expect(&PtxToken::Comma)?;
238 let b = GeneralOperand::parse(stream)?;
239 stream.expect_complete()?;
240 stream.expect(&PtxToken::Comma)?;
241 let mbar = AddressOperand::parse(stream)?;
242 stream.expect_complete()?;
243 stream.expect_complete()?;
244 stream.expect(&PtxToken::Semicolon)?;
245 Ok(RedAsyncSemScopeSsCompletionMechanismOpType {
246 async_,
247 sem,
248 scope,
249 ss,
250 completion_mechanism,
251 op,
252 type_,
253 a,
254 b,
255 mbar,
256 })
257 }
258 }
259}
260
261pub mod section_1 {
262 use super::*;
263 use crate::r#type::instruction::red_async::section_1::*;
264
265 impl PtxParser for CompletionMechanism {
270 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
271 {
273 let saved_pos = stream.position();
274 if stream
275 .expect_string(".mbarrier::complete_tx::bytes")
276 .is_ok()
277 {
278 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
279 }
280 stream.set_position(saved_pos);
281 }
282 let span = stream
283 .peek()
284 .map(|(_, s)| s.clone())
285 .unwrap_or(Span { start: 0, end: 0 });
286 let expected = &[".mbarrier::complete_tx::bytes"];
287 let found = stream
288 .peek()
289 .map(|(t, _)| format!("{:?}", t))
290 .unwrap_or_else(|_| "<end of input>".to_string());
291 Err(crate::parser::unexpected_value(span, expected, found))
292 }
293 }
294
295 impl PtxParser for Op {
296 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
297 {
299 let saved_pos = stream.position();
300 if stream.expect_string(".min").is_ok() {
301 return Ok(Op::Min);
302 }
303 stream.set_position(saved_pos);
304 }
305 let saved_pos = stream.position();
306 {
308 let saved_pos = stream.position();
309 if stream.expect_string(".max").is_ok() {
310 return Ok(Op::Max);
311 }
312 stream.set_position(saved_pos);
313 }
314 stream.set_position(saved_pos);
315 let span = stream
316 .peek()
317 .map(|(_, s)| s.clone())
318 .unwrap_or(Span { start: 0, end: 0 });
319 let expected = &[".min", ".max"];
320 let found = stream
321 .peek()
322 .map(|(t, _)| format!("{:?}", t))
323 .unwrap_or_else(|_| "<end of input>".to_string());
324 Err(crate::parser::unexpected_value(span, expected, found))
325 }
326 }
327
328 impl PtxParser for Scope {
329 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
330 {
332 let saved_pos = stream.position();
333 if stream.expect_string(".cluster").is_ok() {
334 return Ok(Scope::Cluster);
335 }
336 stream.set_position(saved_pos);
337 }
338 let span = stream
339 .peek()
340 .map(|(_, s)| s.clone())
341 .unwrap_or(Span { start: 0, end: 0 });
342 let expected = &[".cluster"];
343 let found = stream
344 .peek()
345 .map(|(t, _)| format!("{:?}", t))
346 .unwrap_or_else(|_| "<end of input>".to_string());
347 Err(crate::parser::unexpected_value(span, expected, found))
348 }
349 }
350
351 impl PtxParser for Sem {
352 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
353 {
355 let saved_pos = stream.position();
356 if stream.expect_string(".relaxed").is_ok() {
357 return Ok(Sem::Relaxed);
358 }
359 stream.set_position(saved_pos);
360 }
361 let span = stream
362 .peek()
363 .map(|(_, s)| s.clone())
364 .unwrap_or(Span { start: 0, end: 0 });
365 let expected = &[".relaxed"];
366 let found = stream
367 .peek()
368 .map(|(t, _)| format!("{:?}", t))
369 .unwrap_or_else(|_| "<end of input>".to_string());
370 Err(crate::parser::unexpected_value(span, expected, found))
371 }
372 }
373
374 impl PtxParser for Ss {
375 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
376 {
378 let saved_pos = stream.position();
379 if stream.expect_string(".shared::cluster").is_ok() {
380 return Ok(Ss::SharedCluster);
381 }
382 stream.set_position(saved_pos);
383 }
384 let span = stream
385 .peek()
386 .map(|(_, s)| s.clone())
387 .unwrap_or(Span { start: 0, end: 0 });
388 let expected = &[".shared::cluster"];
389 let found = stream
390 .peek()
391 .map(|(t, _)| format!("{:?}", t))
392 .unwrap_or_else(|_| "<end of input>".to_string());
393 Err(crate::parser::unexpected_value(span, expected, found))
394 }
395 }
396
397 impl PtxParser for Type {
398 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
399 {
401 let saved_pos = stream.position();
402 if stream.expect_string(".u32").is_ok() {
403 return Ok(Type::U32);
404 }
405 stream.set_position(saved_pos);
406 }
407 let saved_pos = stream.position();
408 {
410 let saved_pos = stream.position();
411 if stream.expect_string(".s32").is_ok() {
412 return Ok(Type::S32);
413 }
414 stream.set_position(saved_pos);
415 }
416 stream.set_position(saved_pos);
417 let span = stream
418 .peek()
419 .map(|(_, s)| s.clone())
420 .unwrap_or(Span { start: 0, end: 0 });
421 let expected = &[".u32", ".s32"];
422 let found = stream
423 .peek()
424 .map(|(t, _)| format!("{:?}", t))
425 .unwrap_or_else(|_| "<end of input>".to_string());
426 Err(crate::parser::unexpected_value(span, expected, found))
427 }
428 }
429
430 impl PtxParser for RedAsyncSemScopeSsCompletionMechanismOpType1 {
431 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
432 stream.expect_string("red")?;
433 stream.expect_string(".async")?;
434 let async_ = ();
435 stream.expect_complete()?;
436 let sem = Sem::parse(stream)?;
437 stream.expect_complete()?;
438 let scope = Scope::parse(stream)?;
439 stream.expect_complete()?;
440 let saved_pos = stream.position();
441 let ss = match Ss::parse(stream) {
442 Ok(val) => Some(val),
443 Err(_) => {
444 stream.set_position(saved_pos);
445 None
446 }
447 };
448 stream.expect_complete()?;
449 let completion_mechanism = CompletionMechanism::parse(stream)?;
450 stream.expect_complete()?;
451 let op = Op::parse(stream)?;
452 stream.expect_complete()?;
453 let type_ = Type::parse(stream)?;
454 stream.expect_complete()?;
455 let a = AddressOperand::parse(stream)?;
456 stream.expect_complete()?;
457 stream.expect(&PtxToken::Comma)?;
458 let b = GeneralOperand::parse(stream)?;
459 stream.expect_complete()?;
460 stream.expect(&PtxToken::Comma)?;
461 let mbar = AddressOperand::parse(stream)?;
462 stream.expect_complete()?;
463 stream.expect_complete()?;
464 stream.expect(&PtxToken::Semicolon)?;
465 Ok(RedAsyncSemScopeSsCompletionMechanismOpType1 {
466 async_,
467 sem,
468 scope,
469 ss,
470 completion_mechanism,
471 op,
472 type_,
473 a,
474 b,
475 mbar,
476 })
477 }
478 }
479}
480
481pub mod section_2 {
482 use super::*;
483 use crate::r#type::instruction::red_async::section_2::*;
484
485 impl PtxParser for CompletionMechanism {
490 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
491 {
493 let saved_pos = stream.position();
494 if stream
495 .expect_string(".mbarrier::complete_tx::bytes")
496 .is_ok()
497 {
498 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
499 }
500 stream.set_position(saved_pos);
501 }
502 let span = stream
503 .peek()
504 .map(|(_, s)| s.clone())
505 .unwrap_or(Span { start: 0, end: 0 });
506 let expected = &[".mbarrier::complete_tx::bytes"];
507 let found = stream
508 .peek()
509 .map(|(t, _)| format!("{:?}", t))
510 .unwrap_or_else(|_| "<end of input>".to_string());
511 Err(crate::parser::unexpected_value(span, expected, found))
512 }
513 }
514
515 impl PtxParser for Op {
516 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
517 {
519 let saved_pos = stream.position();
520 if stream.expect_string(".and").is_ok() {
521 return Ok(Op::And);
522 }
523 stream.set_position(saved_pos);
524 }
525 let saved_pos = stream.position();
526 {
528 let saved_pos = stream.position();
529 if stream.expect_string(".xor").is_ok() {
530 return Ok(Op::Xor);
531 }
532 stream.set_position(saved_pos);
533 }
534 stream.set_position(saved_pos);
535 let saved_pos = stream.position();
536 {
538 let saved_pos = stream.position();
539 if stream.expect_string(".or").is_ok() {
540 return Ok(Op::Or);
541 }
542 stream.set_position(saved_pos);
543 }
544 stream.set_position(saved_pos);
545 let span = stream
546 .peek()
547 .map(|(_, s)| s.clone())
548 .unwrap_or(Span { start: 0, end: 0 });
549 let expected = &[".and", ".xor", ".or"];
550 let found = stream
551 .peek()
552 .map(|(t, _)| format!("{:?}", t))
553 .unwrap_or_else(|_| "<end of input>".to_string());
554 Err(crate::parser::unexpected_value(span, expected, found))
555 }
556 }
557
558 impl PtxParser for Scope {
559 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
560 {
562 let saved_pos = stream.position();
563 if stream.expect_string(".cluster").is_ok() {
564 return Ok(Scope::Cluster);
565 }
566 stream.set_position(saved_pos);
567 }
568 let span = stream
569 .peek()
570 .map(|(_, s)| s.clone())
571 .unwrap_or(Span { start: 0, end: 0 });
572 let expected = &[".cluster"];
573 let found = stream
574 .peek()
575 .map(|(t, _)| format!("{:?}", t))
576 .unwrap_or_else(|_| "<end of input>".to_string());
577 Err(crate::parser::unexpected_value(span, expected, found))
578 }
579 }
580
581 impl PtxParser for Sem {
582 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
583 {
585 let saved_pos = stream.position();
586 if stream.expect_string(".relaxed").is_ok() {
587 return Ok(Sem::Relaxed);
588 }
589 stream.set_position(saved_pos);
590 }
591 let span = stream
592 .peek()
593 .map(|(_, s)| s.clone())
594 .unwrap_or(Span { start: 0, end: 0 });
595 let expected = &[".relaxed"];
596 let found = stream
597 .peek()
598 .map(|(t, _)| format!("{:?}", t))
599 .unwrap_or_else(|_| "<end of input>".to_string());
600 Err(crate::parser::unexpected_value(span, expected, found))
601 }
602 }
603
604 impl PtxParser for Ss {
605 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
606 {
608 let saved_pos = stream.position();
609 if stream.expect_string(".shared::cluster").is_ok() {
610 return Ok(Ss::SharedCluster);
611 }
612 stream.set_position(saved_pos);
613 }
614 let span = stream
615 .peek()
616 .map(|(_, s)| s.clone())
617 .unwrap_or(Span { start: 0, end: 0 });
618 let expected = &[".shared::cluster"];
619 let found = stream
620 .peek()
621 .map(|(t, _)| format!("{:?}", t))
622 .unwrap_or_else(|_| "<end of input>".to_string());
623 Err(crate::parser::unexpected_value(span, expected, found))
624 }
625 }
626
627 impl PtxParser for Type {
628 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
629 {
631 let saved_pos = stream.position();
632 if stream.expect_string(".b32").is_ok() {
633 return Ok(Type::B32);
634 }
635 stream.set_position(saved_pos);
636 }
637 let span = stream
638 .peek()
639 .map(|(_, s)| s.clone())
640 .unwrap_or(Span { start: 0, end: 0 });
641 let expected = &[".b32"];
642 let found = stream
643 .peek()
644 .map(|(t, _)| format!("{:?}", t))
645 .unwrap_or_else(|_| "<end of input>".to_string());
646 Err(crate::parser::unexpected_value(span, expected, found))
647 }
648 }
649
650 impl PtxParser for RedAsyncSemScopeSsCompletionMechanismOpType2 {
651 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
652 stream.expect_string("red")?;
653 stream.expect_string(".async")?;
654 let async_ = ();
655 stream.expect_complete()?;
656 let sem = Sem::parse(stream)?;
657 stream.expect_complete()?;
658 let scope = Scope::parse(stream)?;
659 stream.expect_complete()?;
660 let saved_pos = stream.position();
661 let ss = match Ss::parse(stream) {
662 Ok(val) => Some(val),
663 Err(_) => {
664 stream.set_position(saved_pos);
665 None
666 }
667 };
668 stream.expect_complete()?;
669 let completion_mechanism = CompletionMechanism::parse(stream)?;
670 stream.expect_complete()?;
671 let op = Op::parse(stream)?;
672 stream.expect_complete()?;
673 let type_ = Type::parse(stream)?;
674 stream.expect_complete()?;
675 let a = AddressOperand::parse(stream)?;
676 stream.expect_complete()?;
677 stream.expect(&PtxToken::Comma)?;
678 let b = GeneralOperand::parse(stream)?;
679 stream.expect_complete()?;
680 stream.expect(&PtxToken::Comma)?;
681 let mbar = AddressOperand::parse(stream)?;
682 stream.expect_complete()?;
683 stream.expect_complete()?;
684 stream.expect(&PtxToken::Semicolon)?;
685 Ok(RedAsyncSemScopeSsCompletionMechanismOpType2 {
686 async_,
687 sem,
688 scope,
689 ss,
690 completion_mechanism,
691 op,
692 type_,
693 a,
694 b,
695 mbar,
696 })
697 }
698 }
699}
700
701pub mod section_3 {
702 use super::*;
703 use crate::r#type::instruction::red_async::section_3::*;
704
705 impl PtxParser for CompletionMechanism {
710 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
711 {
713 let saved_pos = stream.position();
714 if stream
715 .expect_string(".mbarrier::complete_tx::bytes")
716 .is_ok()
717 {
718 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
719 }
720 stream.set_position(saved_pos);
721 }
722 let span = stream
723 .peek()
724 .map(|(_, s)| s.clone())
725 .unwrap_or(Span { start: 0, end: 0 });
726 let expected = &[".mbarrier::complete_tx::bytes"];
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 Scope {
736 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
737 {
739 let saved_pos = stream.position();
740 if stream.expect_string(".cluster").is_ok() {
741 return Ok(Scope::Cluster);
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 = &[".cluster"];
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 Sem {
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(Sem::Relaxed);
765 }
766 stream.set_position(saved_pos);
767 }
768 let span = stream
769 .peek()
770 .map(|(_, s)| s.clone())
771 .unwrap_or(Span { start: 0, end: 0 });
772 let expected = &[".relaxed"];
773 let found = stream
774 .peek()
775 .map(|(t, _)| format!("{:?}", t))
776 .unwrap_or_else(|_| "<end of input>".to_string());
777 Err(crate::parser::unexpected_value(span, expected, found))
778 }
779 }
780
781 impl PtxParser for Ss {
782 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
783 {
785 let saved_pos = stream.position();
786 if stream.expect_string(".shared::cluster").is_ok() {
787 return Ok(Ss::SharedCluster);
788 }
789 stream.set_position(saved_pos);
790 }
791 let span = stream
792 .peek()
793 .map(|(_, s)| s.clone())
794 .unwrap_or(Span { start: 0, end: 0 });
795 let expected = &[".shared::cluster"];
796 let found = stream
797 .peek()
798 .map(|(t, _)| format!("{:?}", t))
799 .unwrap_or_else(|_| "<end of input>".to_string());
800 Err(crate::parser::unexpected_value(span, expected, found))
801 }
802 }
803
804 impl PtxParser for Type {
805 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
806 {
808 let saved_pos = stream.position();
809 if stream.expect_string(".u32").is_ok() {
810 return Ok(Type::U32);
811 }
812 stream.set_position(saved_pos);
813 }
814 let saved_pos = stream.position();
815 {
817 let saved_pos = stream.position();
818 if stream.expect_string(".s32").is_ok() {
819 return Ok(Type::S32);
820 }
821 stream.set_position(saved_pos);
822 }
823 stream.set_position(saved_pos);
824 let saved_pos = stream.position();
825 {
827 let saved_pos = stream.position();
828 if stream.expect_string(".u64").is_ok() {
829 return Ok(Type::U64);
830 }
831 stream.set_position(saved_pos);
832 }
833 stream.set_position(saved_pos);
834 let span = stream
835 .peek()
836 .map(|(_, s)| s.clone())
837 .unwrap_or(Span { start: 0, end: 0 });
838 let expected = &[".u32", ".s32", ".u64"];
839 let found = stream
840 .peek()
841 .map(|(t, _)| format!("{:?}", t))
842 .unwrap_or_else(|_| "<end of input>".to_string());
843 Err(crate::parser::unexpected_value(span, expected, found))
844 }
845 }
846
847 impl PtxParser for RedAsyncSemScopeSsCompletionMechanismAddType {
848 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
849 stream.expect_string("red")?;
850 stream.expect_string(".async")?;
851 let async_ = ();
852 stream.expect_complete()?;
853 let sem = Sem::parse(stream)?;
854 stream.expect_complete()?;
855 let scope = Scope::parse(stream)?;
856 stream.expect_complete()?;
857 let saved_pos = stream.position();
858 let ss = match Ss::parse(stream) {
859 Ok(val) => Some(val),
860 Err(_) => {
861 stream.set_position(saved_pos);
862 None
863 }
864 };
865 stream.expect_complete()?;
866 let completion_mechanism = CompletionMechanism::parse(stream)?;
867 stream.expect_complete()?;
868 stream.expect_string(".add")?;
869 let add = ();
870 stream.expect_complete()?;
871 let type_ = Type::parse(stream)?;
872 stream.expect_complete()?;
873 let a = AddressOperand::parse(stream)?;
874 stream.expect_complete()?;
875 stream.expect(&PtxToken::Comma)?;
876 let b = GeneralOperand::parse(stream)?;
877 stream.expect_complete()?;
878 stream.expect(&PtxToken::Comma)?;
879 let mbar = AddressOperand::parse(stream)?;
880 stream.expect_complete()?;
881 stream.expect_complete()?;
882 stream.expect(&PtxToken::Semicolon)?;
883 Ok(RedAsyncSemScopeSsCompletionMechanismAddType {
884 async_,
885 sem,
886 scope,
887 ss,
888 completion_mechanism,
889 add,
890 type_,
891 a,
892 b,
893 mbar,
894 })
895 }
896 }
897}
898
899pub mod section_4 {
900 use super::*;
901 use crate::r#type::instruction::red_async::section_4::*;
902
903 impl PtxParser for Scope {
908 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
909 {
911 let saved_pos = stream.position();
912 if stream.expect_string(".cluster").is_ok() {
913 return Ok(Scope::Cluster);
914 }
915 stream.set_position(saved_pos);
916 }
917 let saved_pos = stream.position();
918 {
920 let saved_pos = stream.position();
921 if stream.expect_string(".gpu").is_ok() {
922 return Ok(Scope::Gpu);
923 }
924 stream.set_position(saved_pos);
925 }
926 stream.set_position(saved_pos);
927 let span = stream
928 .peek()
929 .map(|(_, s)| s.clone())
930 .unwrap_or(Span { start: 0, end: 0 });
931 let expected = &[".cluster", ".gpu"];
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 Sem {
941 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
942 {
944 let saved_pos = stream.position();
945 if stream.expect_string(".release").is_ok() {
946 return Ok(Sem::Release);
947 }
948 stream.set_position(saved_pos);
949 }
950 let span = stream
951 .peek()
952 .map(|(_, s)| s.clone())
953 .unwrap_or(Span { start: 0, end: 0 });
954 let expected = &[".release"];
955 let found = stream
956 .peek()
957 .map(|(t, _)| format!("{:?}", t))
958 .unwrap_or_else(|_| "<end of input>".to_string());
959 Err(crate::parser::unexpected_value(span, expected, found))
960 }
961 }
962
963 impl PtxParser for Ss {
964 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
965 {
967 let saved_pos = stream.position();
968 if stream.expect_string(".global").is_ok() {
969 return Ok(Ss::Global);
970 }
971 stream.set_position(saved_pos);
972 }
973 let span = stream
974 .peek()
975 .map(|(_, s)| s.clone())
976 .unwrap_or(Span { start: 0, end: 0 });
977 let expected = &[".global"];
978 let found = stream
979 .peek()
980 .map(|(t, _)| format!("{:?}", t))
981 .unwrap_or_else(|_| "<end of input>".to_string());
982 Err(crate::parser::unexpected_value(span, expected, found))
983 }
984 }
985
986 impl PtxParser for Type {
987 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
988 {
990 let saved_pos = stream.position();
991 if stream.expect_string(".u32").is_ok() {
992 return Ok(Type::U32);
993 }
994 stream.set_position(saved_pos);
995 }
996 let saved_pos = stream.position();
997 {
999 let saved_pos = stream.position();
1000 if stream.expect_string(".s32").is_ok() {
1001 return Ok(Type::S32);
1002 }
1003 stream.set_position(saved_pos);
1004 }
1005 stream.set_position(saved_pos);
1006 let saved_pos = stream.position();
1007 {
1009 let saved_pos = stream.position();
1010 if stream.expect_string(".u64").is_ok() {
1011 return Ok(Type::U64);
1012 }
1013 stream.set_position(saved_pos);
1014 }
1015 stream.set_position(saved_pos);
1016 let saved_pos = stream.position();
1017 {
1019 let saved_pos = stream.position();
1020 if stream.expect_string(".s64").is_ok() {
1021 return Ok(Type::S64);
1022 }
1023 stream.set_position(saved_pos);
1024 }
1025 stream.set_position(saved_pos);
1026 let span = stream
1027 .peek()
1028 .map(|(_, s)| s.clone())
1029 .unwrap_or(Span { start: 0, end: 0 });
1030 let expected = &[".u32", ".s32", ".u64", ".s64"];
1031 let found = stream
1032 .peek()
1033 .map(|(t, _)| format!("{:?}", t))
1034 .unwrap_or_else(|_| "<end of input>".to_string());
1035 Err(crate::parser::unexpected_value(span, expected, found))
1036 }
1037 }
1038
1039 impl PtxParser for RedAsyncMmioSemScopeSsAddType {
1040 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1041 stream.expect_string("red")?;
1042 stream.expect_string(".async")?;
1043 let async_ = ();
1044 stream.expect_complete()?;
1045 let saved_pos = stream.position();
1046 let mmio = stream.expect_string(".mmio").is_ok();
1047 if !mmio {
1048 stream.set_position(saved_pos);
1049 }
1050 stream.expect_complete()?;
1051 let sem = Sem::parse(stream)?;
1052 stream.expect_complete()?;
1053 let scope = Scope::parse(stream)?;
1054 stream.expect_complete()?;
1055 let saved_pos = stream.position();
1056 let ss = match Ss::parse(stream) {
1057 Ok(val) => Some(val),
1058 Err(_) => {
1059 stream.set_position(saved_pos);
1060 None
1061 }
1062 };
1063 stream.expect_complete()?;
1064 stream.expect_string(".add")?;
1065 let add = ();
1066 stream.expect_complete()?;
1067 let type_ = Type::parse(stream)?;
1068 stream.expect_complete()?;
1069 let a = AddressOperand::parse(stream)?;
1070 stream.expect_complete()?;
1071 stream.expect(&PtxToken::Comma)?;
1072 let b = GeneralOperand::parse(stream)?;
1073 stream.expect_complete()?;
1074 stream.expect_complete()?;
1075 stream.expect(&PtxToken::Semicolon)?;
1076 Ok(RedAsyncMmioSemScopeSsAddType {
1077 async_,
1078 mmio,
1079 sem,
1080 scope,
1081 ss,
1082 add,
1083 type_,
1084 a,
1085 b,
1086 })
1087 }
1088 }
1089}