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.expect_string(".mbarrier::complete_tx::bytes").is_ok() {
65 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
66 }
67 stream.set_position(saved_pos);
68 }
69 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
70 let expected = &[".mbarrier::complete_tx::bytes"];
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(".inc").is_ok() {
82 return Ok(Op::Inc);
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(".dec").is_ok() {
91 return Ok(Op::Dec);
92 }
93 stream.set_position(saved_pos);
94 }
95 stream.set_position(saved_pos);
96 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
97 let expected = &[".inc", ".dec"];
98 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
99 Err(crate::parser::unexpected_value(span, expected, found))
100 }
101 }
102
103 impl PtxParser for Scope {
104 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
105 {
107 let saved_pos = stream.position();
108 if stream.expect_string(".cluster").is_ok() {
109 return Ok(Scope::Cluster);
110 }
111 stream.set_position(saved_pos);
112 }
113 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
114 let expected = &[".cluster"];
115 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
116 Err(crate::parser::unexpected_value(span, expected, found))
117 }
118 }
119
120 impl PtxParser for Sem {
121 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
122 {
124 let saved_pos = stream.position();
125 if stream.expect_string(".relaxed").is_ok() {
126 return Ok(Sem::Relaxed);
127 }
128 stream.set_position(saved_pos);
129 }
130 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
131 let expected = &[".relaxed"];
132 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
133 Err(crate::parser::unexpected_value(span, expected, found))
134 }
135 }
136
137 impl PtxParser for Ss {
138 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
139 {
141 let saved_pos = stream.position();
142 if stream.expect_string(".shared::cluster").is_ok() {
143 return Ok(Ss::SharedCluster);
144 }
145 stream.set_position(saved_pos);
146 }
147 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
148 let expected = &[".shared::cluster"];
149 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
150 Err(crate::parser::unexpected_value(span, expected, found))
151 }
152 }
153
154 impl PtxParser for Type {
155 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
156 {
158 let saved_pos = stream.position();
159 if stream.expect_string(".u32").is_ok() {
160 return Ok(Type::U32);
161 }
162 stream.set_position(saved_pos);
163 }
164 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
165 let expected = &[".u32"];
166 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
167 Err(crate::parser::unexpected_value(span, expected, found))
168 }
169 }
170
171 impl PtxParser for RedAsyncSemScopeSsCompletionMechanismOpType {
172 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
173 stream.expect_string("red")?;
174 stream.expect_string(".async")?;
175 let async_ = ();
176 stream.expect_complete()?;
177 let sem = Sem::parse(stream)?;
178 stream.expect_complete()?;
179 let scope = Scope::parse(stream)?;
180 stream.expect_complete()?;
181 let saved_pos = stream.position();
182 let ss = match Ss::parse(stream) {
183 Ok(val) => Some(val),
184 Err(_) => {
185 stream.set_position(saved_pos);
186 None
187 }
188 };
189 stream.expect_complete()?;
190 let completion_mechanism = CompletionMechanism::parse(stream)?;
191 stream.expect_complete()?;
192 let op = Op::parse(stream)?;
193 stream.expect_complete()?;
194 let type_ = Type::parse(stream)?;
195 stream.expect_complete()?;
196 let a = AddressOperand::parse(stream)?;
197 stream.expect_complete()?;
198 stream.expect(&PtxToken::Comma)?;
199 let b = GeneralOperand::parse(stream)?;
200 stream.expect_complete()?;
201 stream.expect(&PtxToken::Comma)?;
202 let mbar = AddressOperand::parse(stream)?;
203 stream.expect_complete()?;
204 stream.expect_complete()?;
205 stream.expect(&PtxToken::Semicolon)?;
206 Ok(RedAsyncSemScopeSsCompletionMechanismOpType {
207 async_,
208 sem,
209 scope,
210 ss,
211 completion_mechanism,
212 op,
213 type_,
214 a,
215 b,
216 mbar,
217 })
218 }
219 }
220
221
222}
223
224pub mod section_1 {
225 use super::*;
226 use crate::r#type::instruction::red_async::section_1::*;
227
228 impl PtxParser for CompletionMechanism {
233 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
234 {
236 let saved_pos = stream.position();
237 if stream.expect_string(".mbarrier::complete_tx::bytes").is_ok() {
238 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
239 }
240 stream.set_position(saved_pos);
241 }
242 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
243 let expected = &[".mbarrier::complete_tx::bytes"];
244 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
245 Err(crate::parser::unexpected_value(span, expected, found))
246 }
247 }
248
249 impl PtxParser for Op {
250 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
251 {
253 let saved_pos = stream.position();
254 if stream.expect_string(".min").is_ok() {
255 return Ok(Op::Min);
256 }
257 stream.set_position(saved_pos);
258 }
259 let saved_pos = stream.position();
260 {
262 let saved_pos = stream.position();
263 if stream.expect_string(".max").is_ok() {
264 return Ok(Op::Max);
265 }
266 stream.set_position(saved_pos);
267 }
268 stream.set_position(saved_pos);
269 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
270 let expected = &[".min", ".max"];
271 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
272 Err(crate::parser::unexpected_value(span, expected, found))
273 }
274 }
275
276 impl PtxParser for Scope {
277 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
278 {
280 let saved_pos = stream.position();
281 if stream.expect_string(".cluster").is_ok() {
282 return Ok(Scope::Cluster);
283 }
284 stream.set_position(saved_pos);
285 }
286 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
287 let expected = &[".cluster"];
288 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
289 Err(crate::parser::unexpected_value(span, expected, found))
290 }
291 }
292
293 impl PtxParser for Sem {
294 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
295 {
297 let saved_pos = stream.position();
298 if stream.expect_string(".relaxed").is_ok() {
299 return Ok(Sem::Relaxed);
300 }
301 stream.set_position(saved_pos);
302 }
303 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
304 let expected = &[".relaxed"];
305 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
306 Err(crate::parser::unexpected_value(span, expected, found))
307 }
308 }
309
310 impl PtxParser for Ss {
311 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
312 {
314 let saved_pos = stream.position();
315 if stream.expect_string(".shared::cluster").is_ok() {
316 return Ok(Ss::SharedCluster);
317 }
318 stream.set_position(saved_pos);
319 }
320 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
321 let expected = &[".shared::cluster"];
322 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
323 Err(crate::parser::unexpected_value(span, expected, found))
324 }
325 }
326
327 impl PtxParser for Type {
328 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
329 {
331 let saved_pos = stream.position();
332 if stream.expect_string(".u32").is_ok() {
333 return Ok(Type::U32);
334 }
335 stream.set_position(saved_pos);
336 }
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 span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
348 let expected = &[".u32", ".s32"];
349 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
350 Err(crate::parser::unexpected_value(span, expected, found))
351 }
352 }
353
354 impl PtxParser for RedAsyncSemScopeSsCompletionMechanismOpType1 {
355 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
356 stream.expect_string("red")?;
357 stream.expect_string(".async")?;
358 let async_ = ();
359 stream.expect_complete()?;
360 let sem = Sem::parse(stream)?;
361 stream.expect_complete()?;
362 let scope = Scope::parse(stream)?;
363 stream.expect_complete()?;
364 let saved_pos = stream.position();
365 let ss = match Ss::parse(stream) {
366 Ok(val) => Some(val),
367 Err(_) => {
368 stream.set_position(saved_pos);
369 None
370 }
371 };
372 stream.expect_complete()?;
373 let completion_mechanism = CompletionMechanism::parse(stream)?;
374 stream.expect_complete()?;
375 let op = Op::parse(stream)?;
376 stream.expect_complete()?;
377 let type_ = Type::parse(stream)?;
378 stream.expect_complete()?;
379 let a = AddressOperand::parse(stream)?;
380 stream.expect_complete()?;
381 stream.expect(&PtxToken::Comma)?;
382 let b = GeneralOperand::parse(stream)?;
383 stream.expect_complete()?;
384 stream.expect(&PtxToken::Comma)?;
385 let mbar = AddressOperand::parse(stream)?;
386 stream.expect_complete()?;
387 stream.expect_complete()?;
388 stream.expect(&PtxToken::Semicolon)?;
389 Ok(RedAsyncSemScopeSsCompletionMechanismOpType1 {
390 async_,
391 sem,
392 scope,
393 ss,
394 completion_mechanism,
395 op,
396 type_,
397 a,
398 b,
399 mbar,
400 })
401 }
402 }
403
404
405}
406
407pub mod section_2 {
408 use super::*;
409 use crate::r#type::instruction::red_async::section_2::*;
410
411 impl PtxParser for CompletionMechanism {
416 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
417 {
419 let saved_pos = stream.position();
420 if stream.expect_string(".mbarrier::complete_tx::bytes").is_ok() {
421 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
422 }
423 stream.set_position(saved_pos);
424 }
425 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
426 let expected = &[".mbarrier::complete_tx::bytes"];
427 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
428 Err(crate::parser::unexpected_value(span, expected, found))
429 }
430 }
431
432 impl PtxParser for Op {
433 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
434 {
436 let saved_pos = stream.position();
437 if stream.expect_string(".and").is_ok() {
438 return Ok(Op::And);
439 }
440 stream.set_position(saved_pos);
441 }
442 let saved_pos = stream.position();
443 {
445 let saved_pos = stream.position();
446 if stream.expect_string(".xor").is_ok() {
447 return Ok(Op::Xor);
448 }
449 stream.set_position(saved_pos);
450 }
451 stream.set_position(saved_pos);
452 let saved_pos = stream.position();
453 {
455 let saved_pos = stream.position();
456 if stream.expect_string(".or").is_ok() {
457 return Ok(Op::Or);
458 }
459 stream.set_position(saved_pos);
460 }
461 stream.set_position(saved_pos);
462 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
463 let expected = &[".and", ".xor", ".or"];
464 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
465 Err(crate::parser::unexpected_value(span, expected, found))
466 }
467 }
468
469 impl PtxParser for Scope {
470 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
471 {
473 let saved_pos = stream.position();
474 if stream.expect_string(".cluster").is_ok() {
475 return Ok(Scope::Cluster);
476 }
477 stream.set_position(saved_pos);
478 }
479 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
480 let expected = &[".cluster"];
481 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
482 Err(crate::parser::unexpected_value(span, expected, found))
483 }
484 }
485
486 impl PtxParser for Sem {
487 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
488 {
490 let saved_pos = stream.position();
491 if stream.expect_string(".relaxed").is_ok() {
492 return Ok(Sem::Relaxed);
493 }
494 stream.set_position(saved_pos);
495 }
496 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
497 let expected = &[".relaxed"];
498 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
499 Err(crate::parser::unexpected_value(span, expected, found))
500 }
501 }
502
503 impl PtxParser for Ss {
504 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
505 {
507 let saved_pos = stream.position();
508 if stream.expect_string(".shared::cluster").is_ok() {
509 return Ok(Ss::SharedCluster);
510 }
511 stream.set_position(saved_pos);
512 }
513 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
514 let expected = &[".shared::cluster"];
515 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
516 Err(crate::parser::unexpected_value(span, expected, found))
517 }
518 }
519
520 impl PtxParser for Type {
521 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
522 {
524 let saved_pos = stream.position();
525 if stream.expect_string(".b32").is_ok() {
526 return Ok(Type::B32);
527 }
528 stream.set_position(saved_pos);
529 }
530 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
531 let expected = &[".b32"];
532 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
533 Err(crate::parser::unexpected_value(span, expected, found))
534 }
535 }
536
537 impl PtxParser for RedAsyncSemScopeSsCompletionMechanismOpType2 {
538 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
539 stream.expect_string("red")?;
540 stream.expect_string(".async")?;
541 let async_ = ();
542 stream.expect_complete()?;
543 let sem = Sem::parse(stream)?;
544 stream.expect_complete()?;
545 let scope = Scope::parse(stream)?;
546 stream.expect_complete()?;
547 let saved_pos = stream.position();
548 let ss = match Ss::parse(stream) {
549 Ok(val) => Some(val),
550 Err(_) => {
551 stream.set_position(saved_pos);
552 None
553 }
554 };
555 stream.expect_complete()?;
556 let completion_mechanism = CompletionMechanism::parse(stream)?;
557 stream.expect_complete()?;
558 let op = Op::parse(stream)?;
559 stream.expect_complete()?;
560 let type_ = Type::parse(stream)?;
561 stream.expect_complete()?;
562 let a = AddressOperand::parse(stream)?;
563 stream.expect_complete()?;
564 stream.expect(&PtxToken::Comma)?;
565 let b = GeneralOperand::parse(stream)?;
566 stream.expect_complete()?;
567 stream.expect(&PtxToken::Comma)?;
568 let mbar = AddressOperand::parse(stream)?;
569 stream.expect_complete()?;
570 stream.expect_complete()?;
571 stream.expect(&PtxToken::Semicolon)?;
572 Ok(RedAsyncSemScopeSsCompletionMechanismOpType2 {
573 async_,
574 sem,
575 scope,
576 ss,
577 completion_mechanism,
578 op,
579 type_,
580 a,
581 b,
582 mbar,
583 })
584 }
585 }
586
587
588}
589
590pub mod section_3 {
591 use super::*;
592 use crate::r#type::instruction::red_async::section_3::*;
593
594 impl PtxParser for CompletionMechanism {
599 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
600 {
602 let saved_pos = stream.position();
603 if stream.expect_string(".mbarrier::complete_tx::bytes").is_ok() {
604 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
605 }
606 stream.set_position(saved_pos);
607 }
608 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
609 let expected = &[".mbarrier::complete_tx::bytes"];
610 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
611 Err(crate::parser::unexpected_value(span, expected, found))
612 }
613 }
614
615 impl PtxParser for Scope {
616 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
617 {
619 let saved_pos = stream.position();
620 if stream.expect_string(".cluster").is_ok() {
621 return Ok(Scope::Cluster);
622 }
623 stream.set_position(saved_pos);
624 }
625 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
626 let expected = &[".cluster"];
627 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
628 Err(crate::parser::unexpected_value(span, expected, found))
629 }
630 }
631
632 impl PtxParser for Sem {
633 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
634 {
636 let saved_pos = stream.position();
637 if stream.expect_string(".relaxed").is_ok() {
638 return Ok(Sem::Relaxed);
639 }
640 stream.set_position(saved_pos);
641 }
642 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
643 let expected = &[".relaxed"];
644 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
645 Err(crate::parser::unexpected_value(span, expected, found))
646 }
647 }
648
649 impl PtxParser for Ss {
650 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
651 {
653 let saved_pos = stream.position();
654 if stream.expect_string(".shared::cluster").is_ok() {
655 return Ok(Ss::SharedCluster);
656 }
657 stream.set_position(saved_pos);
658 }
659 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
660 let expected = &[".shared::cluster"];
661 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
662 Err(crate::parser::unexpected_value(span, expected, found))
663 }
664 }
665
666 impl PtxParser for Type {
667 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
668 {
670 let saved_pos = stream.position();
671 if stream.expect_string(".u32").is_ok() {
672 return Ok(Type::U32);
673 }
674 stream.set_position(saved_pos);
675 }
676 let saved_pos = stream.position();
677 {
679 let saved_pos = stream.position();
680 if stream.expect_string(".s32").is_ok() {
681 return Ok(Type::S32);
682 }
683 stream.set_position(saved_pos);
684 }
685 stream.set_position(saved_pos);
686 let saved_pos = stream.position();
687 {
689 let saved_pos = stream.position();
690 if stream.expect_string(".u64").is_ok() {
691 return Ok(Type::U64);
692 }
693 stream.set_position(saved_pos);
694 }
695 stream.set_position(saved_pos);
696 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
697 let expected = &[".u32", ".s32", ".u64"];
698 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
699 Err(crate::parser::unexpected_value(span, expected, found))
700 }
701 }
702
703 impl PtxParser for RedAsyncSemScopeSsCompletionMechanismAddType {
704 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
705 stream.expect_string("red")?;
706 stream.expect_string(".async")?;
707 let async_ = ();
708 stream.expect_complete()?;
709 let sem = Sem::parse(stream)?;
710 stream.expect_complete()?;
711 let scope = Scope::parse(stream)?;
712 stream.expect_complete()?;
713 let saved_pos = stream.position();
714 let ss = match Ss::parse(stream) {
715 Ok(val) => Some(val),
716 Err(_) => {
717 stream.set_position(saved_pos);
718 None
719 }
720 };
721 stream.expect_complete()?;
722 let completion_mechanism = CompletionMechanism::parse(stream)?;
723 stream.expect_complete()?;
724 stream.expect_string(".add")?;
725 let add = ();
726 stream.expect_complete()?;
727 let type_ = Type::parse(stream)?;
728 stream.expect_complete()?;
729 let a = AddressOperand::parse(stream)?;
730 stream.expect_complete()?;
731 stream.expect(&PtxToken::Comma)?;
732 let b = GeneralOperand::parse(stream)?;
733 stream.expect_complete()?;
734 stream.expect(&PtxToken::Comma)?;
735 let mbar = AddressOperand::parse(stream)?;
736 stream.expect_complete()?;
737 stream.expect_complete()?;
738 stream.expect(&PtxToken::Semicolon)?;
739 Ok(RedAsyncSemScopeSsCompletionMechanismAddType {
740 async_,
741 sem,
742 scope,
743 ss,
744 completion_mechanism,
745 add,
746 type_,
747 a,
748 b,
749 mbar,
750 })
751 }
752 }
753
754
755}
756
757pub mod section_4 {
758 use super::*;
759 use crate::r#type::instruction::red_async::section_4::*;
760
761 impl PtxParser for Scope {
766 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
767 {
769 let saved_pos = stream.position();
770 if stream.expect_string(".cluster").is_ok() {
771 return Ok(Scope::Cluster);
772 }
773 stream.set_position(saved_pos);
774 }
775 let saved_pos = stream.position();
776 {
778 let saved_pos = stream.position();
779 if stream.expect_string(".gpu").is_ok() {
780 return Ok(Scope::Gpu);
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 = &[".cluster", ".gpu"];
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 Sem {
793 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
794 {
796 let saved_pos = stream.position();
797 if stream.expect_string(".release").is_ok() {
798 return Ok(Sem::Release);
799 }
800 stream.set_position(saved_pos);
801 }
802 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
803 let expected = &[".release"];
804 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
805 Err(crate::parser::unexpected_value(span, expected, found))
806 }
807 }
808
809 impl PtxParser for Ss {
810 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
811 {
813 let saved_pos = stream.position();
814 if stream.expect_string(".global").is_ok() {
815 return Ok(Ss::Global);
816 }
817 stream.set_position(saved_pos);
818 }
819 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
820 let expected = &[".global"];
821 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
822 Err(crate::parser::unexpected_value(span, expected, found))
823 }
824 }
825
826 impl PtxParser for Type {
827 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
828 {
830 let saved_pos = stream.position();
831 if stream.expect_string(".u32").is_ok() {
832 return Ok(Type::U32);
833 }
834 stream.set_position(saved_pos);
835 }
836 let saved_pos = stream.position();
837 {
839 let saved_pos = stream.position();
840 if stream.expect_string(".s32").is_ok() {
841 return Ok(Type::S32);
842 }
843 stream.set_position(saved_pos);
844 }
845 stream.set_position(saved_pos);
846 let saved_pos = stream.position();
847 {
849 let saved_pos = stream.position();
850 if stream.expect_string(".u64").is_ok() {
851 return Ok(Type::U64);
852 }
853 stream.set_position(saved_pos);
854 }
855 stream.set_position(saved_pos);
856 let saved_pos = stream.position();
857 {
859 let saved_pos = stream.position();
860 if stream.expect_string(".s64").is_ok() {
861 return Ok(Type::S64);
862 }
863 stream.set_position(saved_pos);
864 }
865 stream.set_position(saved_pos);
866 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
867 let expected = &[".u32", ".s32", ".u64", ".s64"];
868 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
869 Err(crate::parser::unexpected_value(span, expected, found))
870 }
871 }
872
873 impl PtxParser for RedAsyncMmioSemScopeSsAddType {
874 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
875 stream.expect_string("red")?;
876 stream.expect_string(".async")?;
877 let async_ = ();
878 stream.expect_complete()?;
879 let saved_pos = stream.position();
880 let mmio = stream.expect_string(".mmio").is_ok();
881 if !mmio {
882 stream.set_position(saved_pos);
883 }
884 stream.expect_complete()?;
885 let sem = Sem::parse(stream)?;
886 stream.expect_complete()?;
887 let scope = Scope::parse(stream)?;
888 stream.expect_complete()?;
889 let saved_pos = stream.position();
890 let ss = match Ss::parse(stream) {
891 Ok(val) => Some(val),
892 Err(_) => {
893 stream.set_position(saved_pos);
894 None
895 }
896 };
897 stream.expect_complete()?;
898 stream.expect_string(".add")?;
899 let add = ();
900 stream.expect_complete()?;
901 let type_ = Type::parse(stream)?;
902 stream.expect_complete()?;
903 let a = AddressOperand::parse(stream)?;
904 stream.expect_complete()?;
905 stream.expect(&PtxToken::Comma)?;
906 let b = GeneralOperand::parse(stream)?;
907 stream.expect_complete()?;
908 stream.expect_complete()?;
909 stream.expect(&PtxToken::Semicolon)?;
910 Ok(RedAsyncMmioSemScopeSsAddType {
911 async_,
912 mmio,
913 sem,
914 scope,
915 ss,
916 add,
917 type_,
918 a,
919 b,
920 })
921 }
922 }
923
924
925}
926