1#![allow(unused)]
30
31use crate::lexer::PtxToken;
32use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
33use crate::r#type::common::*;
34
35pub mod section_0 {
36 use super::*;
37 use crate::r#type::instruction::red::section_0::*;
38
39 impl PtxParser for LevelCacheHint {
44 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
45 {
47 let saved_pos = stream.position();
48 if stream.expect_string(".L2::cache_hint").is_ok() {
49 return Ok(LevelCacheHint::L2CacheHint);
50 }
51 stream.set_position(saved_pos);
52 }
53 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
54 let expected = &[".L2::cache_hint"];
55 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
56 Err(crate::parser::unexpected_value(span, expected, found))
57 }
58 }
59
60 impl PtxParser for Op {
61 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
62 {
64 let saved_pos = stream.position();
65 if stream.expect_string(".and").is_ok() {
66 return Ok(Op::And);
67 }
68 stream.set_position(saved_pos);
69 }
70 let saved_pos = stream.position();
71 {
73 let saved_pos = stream.position();
74 if stream.expect_string(".xor").is_ok() {
75 return Ok(Op::Xor);
76 }
77 stream.set_position(saved_pos);
78 }
79 stream.set_position(saved_pos);
80 let saved_pos = stream.position();
81 {
83 let saved_pos = stream.position();
84 if stream.expect_string(".add").is_ok() {
85 return Ok(Op::Add);
86 }
87 stream.set_position(saved_pos);
88 }
89 stream.set_position(saved_pos);
90 let saved_pos = stream.position();
91 {
93 let saved_pos = stream.position();
94 if stream.expect_string(".inc").is_ok() {
95 return Ok(Op::Inc);
96 }
97 stream.set_position(saved_pos);
98 }
99 stream.set_position(saved_pos);
100 let saved_pos = stream.position();
101 {
103 let saved_pos = stream.position();
104 if stream.expect_string(".dec").is_ok() {
105 return Ok(Op::Dec);
106 }
107 stream.set_position(saved_pos);
108 }
109 stream.set_position(saved_pos);
110 let saved_pos = stream.position();
111 {
113 let saved_pos = stream.position();
114 if stream.expect_string(".min").is_ok() {
115 return Ok(Op::Min);
116 }
117 stream.set_position(saved_pos);
118 }
119 stream.set_position(saved_pos);
120 let saved_pos = stream.position();
121 {
123 let saved_pos = stream.position();
124 if stream.expect_string(".max").is_ok() {
125 return Ok(Op::Max);
126 }
127 stream.set_position(saved_pos);
128 }
129 stream.set_position(saved_pos);
130 let saved_pos = stream.position();
131 {
133 let saved_pos = stream.position();
134 if stream.expect_string(".or").is_ok() {
135 return Ok(Op::Or);
136 }
137 stream.set_position(saved_pos);
138 }
139 stream.set_position(saved_pos);
140 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
141 let expected = &[".and", ".xor", ".add", ".inc", ".dec", ".min", ".max", ".or"];
142 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
143 Err(crate::parser::unexpected_value(span, expected, found))
144 }
145 }
146
147 impl PtxParser for Scope {
148 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
149 {
151 let saved_pos = stream.position();
152 if stream.expect_string(".cluster").is_ok() {
153 return Ok(Scope::Cluster);
154 }
155 stream.set_position(saved_pos);
156 }
157 let saved_pos = stream.position();
158 {
160 let saved_pos = stream.position();
161 if stream.expect_string(".cta").is_ok() {
162 return Ok(Scope::Cta);
163 }
164 stream.set_position(saved_pos);
165 }
166 stream.set_position(saved_pos);
167 let saved_pos = stream.position();
168 {
170 let saved_pos = stream.position();
171 if stream.expect_string(".gpu").is_ok() {
172 return Ok(Scope::Gpu);
173 }
174 stream.set_position(saved_pos);
175 }
176 stream.set_position(saved_pos);
177 let saved_pos = stream.position();
178 {
180 let saved_pos = stream.position();
181 if stream.expect_string(".sys").is_ok() {
182 return Ok(Scope::Sys);
183 }
184 stream.set_position(saved_pos);
185 }
186 stream.set_position(saved_pos);
187 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
188 let expected = &[".cluster", ".cta", ".gpu", ".sys"];
189 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
190 Err(crate::parser::unexpected_value(span, expected, found))
191 }
192 }
193
194 impl PtxParser for Sem {
195 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
196 {
198 let saved_pos = stream.position();
199 if stream.expect_string(".relaxed").is_ok() {
200 return Ok(Sem::Relaxed);
201 }
202 stream.set_position(saved_pos);
203 }
204 let saved_pos = stream.position();
205 {
207 let saved_pos = stream.position();
208 if stream.expect_string(".release").is_ok() {
209 return Ok(Sem::Release);
210 }
211 stream.set_position(saved_pos);
212 }
213 stream.set_position(saved_pos);
214 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
215 let expected = &[".relaxed", ".release"];
216 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
217 Err(crate::parser::unexpected_value(span, expected, found))
218 }
219 }
220
221 impl PtxParser for Space {
222 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
223 {
225 let saved_pos = stream.position();
226 if stream.expect_string(".shared::cluster").is_ok() {
227 return Ok(Space::SharedCluster);
228 }
229 stream.set_position(saved_pos);
230 }
231 let saved_pos = stream.position();
232 {
234 let saved_pos = stream.position();
235 if stream.expect_string(".shared::cta").is_ok() {
236 return Ok(Space::SharedCta);
237 }
238 stream.set_position(saved_pos);
239 }
240 stream.set_position(saved_pos);
241 let saved_pos = stream.position();
242 {
244 let saved_pos = stream.position();
245 if stream.expect_string(".global").is_ok() {
246 return Ok(Space::Global);
247 }
248 stream.set_position(saved_pos);
249 }
250 stream.set_position(saved_pos);
251 let saved_pos = stream.position();
252 {
254 let saved_pos = stream.position();
255 if stream.expect_string(".shared").is_ok() {
256 return Ok(Space::Shared);
257 }
258 stream.set_position(saved_pos);
259 }
260 stream.set_position(saved_pos);
261 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
262 let expected = &[".shared::cluster", ".shared::cta", ".global", ".shared"];
263 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
264 Err(crate::parser::unexpected_value(span, expected, found))
265 }
266 }
267
268 impl PtxParser for Type {
269 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
270 {
272 let saved_pos = stream.position();
273 if stream.expect_string(".b32").is_ok() {
274 return Ok(Type::B32);
275 }
276 stream.set_position(saved_pos);
277 }
278 let saved_pos = stream.position();
279 {
281 let saved_pos = stream.position();
282 if stream.expect_string(".b64").is_ok() {
283 return Ok(Type::B64);
284 }
285 stream.set_position(saved_pos);
286 }
287 stream.set_position(saved_pos);
288 let saved_pos = stream.position();
289 {
291 let saved_pos = stream.position();
292 if stream.expect_string(".u32").is_ok() {
293 return Ok(Type::U32);
294 }
295 stream.set_position(saved_pos);
296 }
297 stream.set_position(saved_pos);
298 let saved_pos = stream.position();
299 {
301 let saved_pos = stream.position();
302 if stream.expect_string(".u64").is_ok() {
303 return Ok(Type::U64);
304 }
305 stream.set_position(saved_pos);
306 }
307 stream.set_position(saved_pos);
308 let saved_pos = stream.position();
309 {
311 let saved_pos = stream.position();
312 if stream.expect_string(".s32").is_ok() {
313 return Ok(Type::S32);
314 }
315 stream.set_position(saved_pos);
316 }
317 stream.set_position(saved_pos);
318 let saved_pos = stream.position();
319 {
321 let saved_pos = stream.position();
322 if stream.expect_string(".s64").is_ok() {
323 return Ok(Type::S64);
324 }
325 stream.set_position(saved_pos);
326 }
327 stream.set_position(saved_pos);
328 let saved_pos = stream.position();
329 {
331 let saved_pos = stream.position();
332 if stream.expect_string(".f32").is_ok() {
333 return Ok(Type::F32);
334 }
335 stream.set_position(saved_pos);
336 }
337 stream.set_position(saved_pos);
338 let saved_pos = stream.position();
339 {
341 let saved_pos = stream.position();
342 if stream.expect_string(".f64").is_ok() {
343 return Ok(Type::F64);
344 }
345 stream.set_position(saved_pos);
346 }
347 stream.set_position(saved_pos);
348 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
349 let expected = &[".b32", ".b64", ".u32", ".u64", ".s32", ".s64", ".f32", ".f64"];
350 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
351 Err(crate::parser::unexpected_value(span, expected, found))
352 }
353 }
354
355 impl PtxParser for RedOpSpaceSemScopeLevelCacheHintType {
356 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
357 stream.expect_string("red")?;
358 let op = Op::parse(stream)?;
359 stream.expect_complete()?;
360 let saved_pos = stream.position();
361 let space = match Space::parse(stream) {
362 Ok(val) => Some(val),
363 Err(_) => {
364 stream.set_position(saved_pos);
365 None
366 }
367 };
368 stream.expect_complete()?;
369 let saved_pos = stream.position();
370 let sem = match Sem::parse(stream) {
371 Ok(val) => Some(val),
372 Err(_) => {
373 stream.set_position(saved_pos);
374 None
375 }
376 };
377 stream.expect_complete()?;
378 let saved_pos = stream.position();
379 let scope = match Scope::parse(stream) {
380 Ok(val) => Some(val),
381 Err(_) => {
382 stream.set_position(saved_pos);
383 None
384 }
385 };
386 stream.expect_complete()?;
387 let saved_pos = stream.position();
388 let level_cache_hint = match LevelCacheHint::parse(stream) {
389 Ok(val) => Some(val),
390 Err(_) => {
391 stream.set_position(saved_pos);
392 None
393 }
394 };
395 stream.expect_complete()?;
396 let type_ = Type::parse(stream)?;
397 stream.expect_complete()?;
398 let a = AddressOperand::parse(stream)?;
399 stream.expect_complete()?;
400 stream.expect(&PtxToken::Comma)?;
401 let b = GeneralOperand::parse(stream)?;
402 stream.expect_complete()?;
403 let saved_pos = stream.position();
404 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
405 if !has_comma {
406 stream.set_position(saved_pos);
407 }
408 let saved_pos = stream.position();
409 let cache_policy = match GeneralOperand::parse(stream) {
410 Ok(val) => Some(val),
411 Err(_) => {
412 stream.set_position(saved_pos);
413 None
414 }
415 };
416 stream.expect_complete()?;
417 stream.expect_complete()?;
418 stream.expect(&PtxToken::Semicolon)?;
419 Ok(RedOpSpaceSemScopeLevelCacheHintType {
420 op,
421 space,
422 sem,
423 scope,
424 level_cache_hint,
425 type_,
426 a,
427 b,
428 cache_policy,
429 })
430 }
431 }
432
433
434 impl PtxParser for RedAddSpaceSemScopeNoftzLevelCacheHintF16 {
435 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
436 stream.expect_string("red")?;
437 stream.expect_string(".add")?;
438 let add = ();
439 stream.expect_complete()?;
440 let saved_pos = stream.position();
441 let space = match Space::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 saved_pos = stream.position();
450 let sem = match Sem::parse(stream) {
451 Ok(val) => Some(val),
452 Err(_) => {
453 stream.set_position(saved_pos);
454 None
455 }
456 };
457 stream.expect_complete()?;
458 let saved_pos = stream.position();
459 let scope = match Scope::parse(stream) {
460 Ok(val) => Some(val),
461 Err(_) => {
462 stream.set_position(saved_pos);
463 None
464 }
465 };
466 stream.expect_complete()?;
467 stream.expect_string(".noftz")?;
468 let noftz = ();
469 stream.expect_complete()?;
470 let saved_pos = stream.position();
471 let level_cache_hint = match LevelCacheHint::parse(stream) {
472 Ok(val) => Some(val),
473 Err(_) => {
474 stream.set_position(saved_pos);
475 None
476 }
477 };
478 stream.expect_complete()?;
479 stream.expect_string(".f16")?;
480 let f16 = ();
481 stream.expect_complete()?;
482 let a = AddressOperand::parse(stream)?;
483 stream.expect_complete()?;
484 stream.expect(&PtxToken::Comma)?;
485 let b = GeneralOperand::parse(stream)?;
486 stream.expect_complete()?;
487 let saved_pos = stream.position();
488 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
489 if !has_comma {
490 stream.set_position(saved_pos);
491 }
492 let saved_pos = stream.position();
493 let cache_policy = match GeneralOperand::parse(stream) {
494 Ok(val) => Some(val),
495 Err(_) => {
496 stream.set_position(saved_pos);
497 None
498 }
499 };
500 stream.expect_complete()?;
501 stream.expect_complete()?;
502 stream.expect(&PtxToken::Semicolon)?;
503 Ok(RedAddSpaceSemScopeNoftzLevelCacheHintF16 {
504 add,
505 space,
506 sem,
507 scope,
508 noftz,
509 level_cache_hint,
510 f16,
511 a,
512 b,
513 cache_policy,
514 })
515 }
516 }
517
518
519 impl PtxParser for RedAddSpaceSemScopeNoftzLevelCacheHintF16x2 {
520 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
521 stream.expect_string("red")?;
522 stream.expect_string(".add")?;
523 let add = ();
524 stream.expect_complete()?;
525 let saved_pos = stream.position();
526 let space = match Space::parse(stream) {
527 Ok(val) => Some(val),
528 Err(_) => {
529 stream.set_position(saved_pos);
530 None
531 }
532 };
533 stream.expect_complete()?;
534 let saved_pos = stream.position();
535 let sem = match Sem::parse(stream) {
536 Ok(val) => Some(val),
537 Err(_) => {
538 stream.set_position(saved_pos);
539 None
540 }
541 };
542 stream.expect_complete()?;
543 let saved_pos = stream.position();
544 let scope = match Scope::parse(stream) {
545 Ok(val) => Some(val),
546 Err(_) => {
547 stream.set_position(saved_pos);
548 None
549 }
550 };
551 stream.expect_complete()?;
552 stream.expect_string(".noftz")?;
553 let noftz = ();
554 stream.expect_complete()?;
555 let saved_pos = stream.position();
556 let level_cache_hint = match LevelCacheHint::parse(stream) {
557 Ok(val) => Some(val),
558 Err(_) => {
559 stream.set_position(saved_pos);
560 None
561 }
562 };
563 stream.expect_complete()?;
564 stream.expect_string(".f16x2")?;
565 let f16x2 = ();
566 stream.expect_complete()?;
567 let a = AddressOperand::parse(stream)?;
568 stream.expect_complete()?;
569 stream.expect(&PtxToken::Comma)?;
570 let b = GeneralOperand::parse(stream)?;
571 stream.expect_complete()?;
572 let saved_pos = stream.position();
573 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
574 if !has_comma {
575 stream.set_position(saved_pos);
576 }
577 let saved_pos = stream.position();
578 let cache_policy = match GeneralOperand::parse(stream) {
579 Ok(val) => Some(val),
580 Err(_) => {
581 stream.set_position(saved_pos);
582 None
583 }
584 };
585 stream.expect_complete()?;
586 stream.expect_complete()?;
587 stream.expect(&PtxToken::Semicolon)?;
588 Ok(RedAddSpaceSemScopeNoftzLevelCacheHintF16x2 {
589 add,
590 space,
591 sem,
592 scope,
593 noftz,
594 level_cache_hint,
595 f16x2,
596 a,
597 b,
598 cache_policy,
599 })
600 }
601 }
602
603
604 impl PtxParser for RedAddSpaceSemScopeNoftzLevelCacheHintBf16 {
605 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
606 stream.expect_string("red")?;
607 stream.expect_string(".add")?;
608 let add = ();
609 stream.expect_complete()?;
610 let saved_pos = stream.position();
611 let space = match Space::parse(stream) {
612 Ok(val) => Some(val),
613 Err(_) => {
614 stream.set_position(saved_pos);
615 None
616 }
617 };
618 stream.expect_complete()?;
619 let saved_pos = stream.position();
620 let sem = match Sem::parse(stream) {
621 Ok(val) => Some(val),
622 Err(_) => {
623 stream.set_position(saved_pos);
624 None
625 }
626 };
627 stream.expect_complete()?;
628 let saved_pos = stream.position();
629 let scope = match Scope::parse(stream) {
630 Ok(val) => Some(val),
631 Err(_) => {
632 stream.set_position(saved_pos);
633 None
634 }
635 };
636 stream.expect_complete()?;
637 stream.expect_string(".noftz")?;
638 let noftz = ();
639 stream.expect_complete()?;
640 let saved_pos = stream.position();
641 let level_cache_hint = match LevelCacheHint::parse(stream) {
642 Ok(val) => Some(val),
643 Err(_) => {
644 stream.set_position(saved_pos);
645 None
646 }
647 };
648 stream.expect_complete()?;
649 stream.expect_string(".bf16")?;
650 let bf16 = ();
651 stream.expect_complete()?;
652 let a = AddressOperand::parse(stream)?;
653 stream.expect_complete()?;
654 stream.expect(&PtxToken::Comma)?;
655 let b = GeneralOperand::parse(stream)?;
656 stream.expect_complete()?;
657 let saved_pos = stream.position();
658 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
659 if !has_comma {
660 stream.set_position(saved_pos);
661 }
662 let saved_pos = stream.position();
663 let cache_policy = match GeneralOperand::parse(stream) {
664 Ok(val) => Some(val),
665 Err(_) => {
666 stream.set_position(saved_pos);
667 None
668 }
669 };
670 stream.expect_complete()?;
671 stream.expect_complete()?;
672 stream.expect(&PtxToken::Semicolon)?;
673 Ok(RedAddSpaceSemScopeNoftzLevelCacheHintBf16 {
674 add,
675 space,
676 sem,
677 scope,
678 noftz,
679 level_cache_hint,
680 bf16,
681 a,
682 b,
683 cache_policy,
684 })
685 }
686 }
687
688
689 impl PtxParser for RedAddSpaceSemScopeNoftzLevelCacheHintBf16x2 {
690 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
691 stream.expect_string("red")?;
692 stream.expect_string(".add")?;
693 let add = ();
694 stream.expect_complete()?;
695 let saved_pos = stream.position();
696 let space = match Space::parse(stream) {
697 Ok(val) => Some(val),
698 Err(_) => {
699 stream.set_position(saved_pos);
700 None
701 }
702 };
703 stream.expect_complete()?;
704 let saved_pos = stream.position();
705 let sem = match Sem::parse(stream) {
706 Ok(val) => Some(val),
707 Err(_) => {
708 stream.set_position(saved_pos);
709 None
710 }
711 };
712 stream.expect_complete()?;
713 let saved_pos = stream.position();
714 let scope = match Scope::parse(stream) {
715 Ok(val) => Some(val),
716 Err(_) => {
717 stream.set_position(saved_pos);
718 None
719 }
720 };
721 stream.expect_complete()?;
722 stream.expect_string(".noftz")?;
723 let noftz = ();
724 stream.expect_complete()?;
725 let saved_pos = stream.position();
726 let level_cache_hint = match LevelCacheHint::parse(stream) {
727 Ok(val) => Some(val),
728 Err(_) => {
729 stream.set_position(saved_pos);
730 None
731 }
732 };
733 stream.expect_complete()?;
734 stream.expect_string(".bf16x2")?;
735 let bf16x2 = ();
736 stream.expect_complete()?;
737 let a = AddressOperand::parse(stream)?;
738 stream.expect_complete()?;
739 stream.expect(&PtxToken::Comma)?;
740 let b = GeneralOperand::parse(stream)?;
741 stream.expect_complete()?;
742 let saved_pos = stream.position();
743 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
744 if !has_comma {
745 stream.set_position(saved_pos);
746 }
747 let saved_pos = stream.position();
748 let cache_policy = match GeneralOperand::parse(stream) {
749 Ok(val) => Some(val),
750 Err(_) => {
751 stream.set_position(saved_pos);
752 None
753 }
754 };
755 stream.expect_complete()?;
756 stream.expect_complete()?;
757 stream.expect(&PtxToken::Semicolon)?;
758 Ok(RedAddSpaceSemScopeNoftzLevelCacheHintBf16x2 {
759 add,
760 space,
761 sem,
762 scope,
763 noftz,
764 level_cache_hint,
765 bf16x2,
766 a,
767 b,
768 cache_policy,
769 })
770 }
771 }
772
773
774}
775
776pub mod section_1 {
777 use super::*;
778 use crate::r#type::instruction::red::section_1::*;
779
780 impl PtxParser for HalfWordType {
785 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
786 {
788 let saved_pos = stream.position();
789 if stream.expect_string(".bf16").is_ok() {
790 return Ok(HalfWordType::Bf16);
791 }
792 stream.set_position(saved_pos);
793 }
794 let saved_pos = stream.position();
795 {
797 let saved_pos = stream.position();
798 if stream.expect_string(".f16").is_ok() {
799 return Ok(HalfWordType::F16);
800 }
801 stream.set_position(saved_pos);
802 }
803 stream.set_position(saved_pos);
804 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
805 let expected = &[".bf16", ".f16"];
806 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
807 Err(crate::parser::unexpected_value(span, expected, found))
808 }
809 }
810
811 impl PtxParser for LevelCacheHint {
812 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
813 {
815 let saved_pos = stream.position();
816 if stream.expect_string(".L2::cache_hint").is_ok() {
817 return Ok(LevelCacheHint::L2CacheHint);
818 }
819 stream.set_position(saved_pos);
820 }
821 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
822 let expected = &[".L2::cache_hint"];
823 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
824 Err(crate::parser::unexpected_value(span, expected, found))
825 }
826 }
827
828 impl PtxParser for Op {
829 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
830 {
832 let saved_pos = stream.position();
833 if stream.expect_string(".add").is_ok() {
834 return Ok(Op::Add);
835 }
836 stream.set_position(saved_pos);
837 }
838 let saved_pos = stream.position();
839 {
841 let saved_pos = stream.position();
842 if stream.expect_string(".min").is_ok() {
843 return Ok(Op::Min);
844 }
845 stream.set_position(saved_pos);
846 }
847 stream.set_position(saved_pos);
848 let saved_pos = stream.position();
849 {
851 let saved_pos = stream.position();
852 if stream.expect_string(".max").is_ok() {
853 return Ok(Op::Max);
854 }
855 stream.set_position(saved_pos);
856 }
857 stream.set_position(saved_pos);
858 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
859 let expected = &[".add", ".min", ".max"];
860 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
861 Err(crate::parser::unexpected_value(span, expected, found))
862 }
863 }
864
865 impl PtxParser for PackedType {
866 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
867 {
869 let saved_pos = stream.position();
870 if stream.expect_string(".bf16x2").is_ok() {
871 return Ok(PackedType::Bf16x2);
872 }
873 stream.set_position(saved_pos);
874 }
875 let saved_pos = stream.position();
876 {
878 let saved_pos = stream.position();
879 if stream.expect_string(".f16x2").is_ok() {
880 return Ok(PackedType::F16x2);
881 }
882 stream.set_position(saved_pos);
883 }
884 stream.set_position(saved_pos);
885 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
886 let expected = &[".bf16x2", ".f16x2"];
887 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
888 Err(crate::parser::unexpected_value(span, expected, found))
889 }
890 }
891
892 impl PtxParser for Scope {
893 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
894 {
896 let saved_pos = stream.position();
897 if stream.expect_string(".cluster").is_ok() {
898 return Ok(Scope::Cluster);
899 }
900 stream.set_position(saved_pos);
901 }
902 let saved_pos = stream.position();
903 {
905 let saved_pos = stream.position();
906 if stream.expect_string(".cta").is_ok() {
907 return Ok(Scope::Cta);
908 }
909 stream.set_position(saved_pos);
910 }
911 stream.set_position(saved_pos);
912 let saved_pos = stream.position();
913 {
915 let saved_pos = stream.position();
916 if stream.expect_string(".gpu").is_ok() {
917 return Ok(Scope::Gpu);
918 }
919 stream.set_position(saved_pos);
920 }
921 stream.set_position(saved_pos);
922 let saved_pos = stream.position();
923 {
925 let saved_pos = stream.position();
926 if stream.expect_string(".sys").is_ok() {
927 return Ok(Scope::Sys);
928 }
929 stream.set_position(saved_pos);
930 }
931 stream.set_position(saved_pos);
932 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
933 let expected = &[".cluster", ".cta", ".gpu", ".sys"];
934 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
935 Err(crate::parser::unexpected_value(span, expected, found))
936 }
937 }
938
939 impl PtxParser for Sem {
940 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
941 {
943 let saved_pos = stream.position();
944 if stream.expect_string(".relaxed").is_ok() {
945 return Ok(Sem::Relaxed);
946 }
947 stream.set_position(saved_pos);
948 }
949 let saved_pos = stream.position();
950 {
952 let saved_pos = stream.position();
953 if stream.expect_string(".release").is_ok() {
954 return Ok(Sem::Release);
955 }
956 stream.set_position(saved_pos);
957 }
958 stream.set_position(saved_pos);
959 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
960 let expected = &[".relaxed", ".release"];
961 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
962 Err(crate::parser::unexpected_value(span, expected, found))
963 }
964 }
965
966 impl PtxParser for Space {
967 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
968 {
970 let saved_pos = stream.position();
971 if stream.expect_string(".shared::cluster").is_ok() {
972 return Ok(Space::SharedCluster);
973 }
974 stream.set_position(saved_pos);
975 }
976 let saved_pos = stream.position();
977 {
979 let saved_pos = stream.position();
980 if stream.expect_string(".shared::cta").is_ok() {
981 return Ok(Space::SharedCta);
982 }
983 stream.set_position(saved_pos);
984 }
985 stream.set_position(saved_pos);
986 let saved_pos = stream.position();
987 {
989 let saved_pos = stream.position();
990 if stream.expect_string(".global").is_ok() {
991 return Ok(Space::Global);
992 }
993 stream.set_position(saved_pos);
994 }
995 stream.set_position(saved_pos);
996 let saved_pos = stream.position();
997 {
999 let saved_pos = stream.position();
1000 if stream.expect_string(".shared").is_ok() {
1001 return Ok(Space::Shared);
1002 }
1003 stream.set_position(saved_pos);
1004 }
1005 stream.set_position(saved_pos);
1006 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
1007 let expected = &[".shared::cluster", ".shared::cta", ".global", ".shared"];
1008 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
1009 Err(crate::parser::unexpected_value(span, expected, found))
1010 }
1011 }
1012
1013 impl PtxParser for Vec16Bit {
1014 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1015 {
1017 let saved_pos = stream.position();
1018 if stream.expect_string(".v2").is_ok() {
1019 return Ok(Vec16Bit::V2);
1020 }
1021 stream.set_position(saved_pos);
1022 }
1023 let saved_pos = stream.position();
1024 {
1026 let saved_pos = stream.position();
1027 if stream.expect_string(".v4").is_ok() {
1028 return Ok(Vec16Bit::V4);
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(".v8").is_ok() {
1038 return Ok(Vec16Bit::V8);
1039 }
1040 stream.set_position(saved_pos);
1041 }
1042 stream.set_position(saved_pos);
1043 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
1044 let expected = &[".v2", ".v4", ".v8"];
1045 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
1046 Err(crate::parser::unexpected_value(span, expected, found))
1047 }
1048 }
1049
1050 impl PtxParser for Vec32Bit {
1051 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1052 {
1054 let saved_pos = stream.position();
1055 if stream.expect_string(".v2").is_ok() {
1056 return Ok(Vec32Bit::V2);
1057 }
1058 stream.set_position(saved_pos);
1059 }
1060 let saved_pos = stream.position();
1061 {
1063 let saved_pos = stream.position();
1064 if stream.expect_string(".v4").is_ok() {
1065 return Ok(Vec32Bit::V4);
1066 }
1067 stream.set_position(saved_pos);
1068 }
1069 stream.set_position(saved_pos);
1070 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
1071 let expected = &[".v2", ".v4"];
1072 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
1073 Err(crate::parser::unexpected_value(span, expected, found))
1074 }
1075 }
1076
1077 impl PtxParser for RedAddSpaceSemScopeLevelCacheHintVec32BitF32 {
1078 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1079 stream.expect_string("red")?;
1080 stream.expect_string(".add")?;
1081 let add = ();
1082 stream.expect_complete()?;
1083 let saved_pos = stream.position();
1084 let space = match Space::parse(stream) {
1085 Ok(val) => Some(val),
1086 Err(_) => {
1087 stream.set_position(saved_pos);
1088 None
1089 }
1090 };
1091 stream.expect_complete()?;
1092 let saved_pos = stream.position();
1093 let sem = match Sem::parse(stream) {
1094 Ok(val) => Some(val),
1095 Err(_) => {
1096 stream.set_position(saved_pos);
1097 None
1098 }
1099 };
1100 stream.expect_complete()?;
1101 let saved_pos = stream.position();
1102 let scope = match Scope::parse(stream) {
1103 Ok(val) => Some(val),
1104 Err(_) => {
1105 stream.set_position(saved_pos);
1106 None
1107 }
1108 };
1109 stream.expect_complete()?;
1110 let saved_pos = stream.position();
1111 let level_cache_hint = match LevelCacheHint::parse(stream) {
1112 Ok(val) => Some(val),
1113 Err(_) => {
1114 stream.set_position(saved_pos);
1115 None
1116 }
1117 };
1118 stream.expect_complete()?;
1119 let vec_32_bit = Vec32Bit::parse(stream)?;
1120 stream.expect_complete()?;
1121 stream.expect_string(".f32")?;
1122 let f32 = ();
1123 stream.expect_complete()?;
1124 let a = AddressOperand::parse(stream)?;
1125 stream.expect_complete()?;
1126 stream.expect(&PtxToken::Comma)?;
1127 let b = GeneralOperand::parse(stream)?;
1128 stream.expect_complete()?;
1129 let saved_pos = stream.position();
1130 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
1131 if !has_comma {
1132 stream.set_position(saved_pos);
1133 }
1134 let saved_pos = stream.position();
1135 let cache_policy = match GeneralOperand::parse(stream) {
1136 Ok(val) => Some(val),
1137 Err(_) => {
1138 stream.set_position(saved_pos);
1139 None
1140 }
1141 };
1142 stream.expect_complete()?;
1143 stream.expect_complete()?;
1144 stream.expect(&PtxToken::Semicolon)?;
1145 Ok(RedAddSpaceSemScopeLevelCacheHintVec32BitF32 {
1146 add,
1147 space,
1148 sem,
1149 scope,
1150 level_cache_hint,
1151 vec_32_bit,
1152 f32,
1153 a,
1154 b,
1155 cache_policy,
1156 })
1157 }
1158 }
1159
1160
1161 impl PtxParser for RedOpSpaceSemScopeNoftzLevelCacheHintVec16BitHalfWordType {
1162 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1163 stream.expect_string("red")?;
1164 let op = Op::parse(stream)?;
1165 stream.expect_complete()?;
1166 let saved_pos = stream.position();
1167 let space = match Space::parse(stream) {
1168 Ok(val) => Some(val),
1169 Err(_) => {
1170 stream.set_position(saved_pos);
1171 None
1172 }
1173 };
1174 stream.expect_complete()?;
1175 let saved_pos = stream.position();
1176 let sem = match Sem::parse(stream) {
1177 Ok(val) => Some(val),
1178 Err(_) => {
1179 stream.set_position(saved_pos);
1180 None
1181 }
1182 };
1183 stream.expect_complete()?;
1184 let saved_pos = stream.position();
1185 let scope = match Scope::parse(stream) {
1186 Ok(val) => Some(val),
1187 Err(_) => {
1188 stream.set_position(saved_pos);
1189 None
1190 }
1191 };
1192 stream.expect_complete()?;
1193 stream.expect_string(".noftz")?;
1194 let noftz = ();
1195 stream.expect_complete()?;
1196 let saved_pos = stream.position();
1197 let level_cache_hint = match LevelCacheHint::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 vec_16_bit = Vec16Bit::parse(stream)?;
1206 stream.expect_complete()?;
1207 let half_word_type = HalfWordType::parse(stream)?;
1208 stream.expect_complete()?;
1209 let a = AddressOperand::parse(stream)?;
1210 stream.expect_complete()?;
1211 stream.expect(&PtxToken::Comma)?;
1212 let b = GeneralOperand::parse(stream)?;
1213 stream.expect_complete()?;
1214 let saved_pos = stream.position();
1215 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
1216 if !has_comma {
1217 stream.set_position(saved_pos);
1218 }
1219 let saved_pos = stream.position();
1220 let cache_policy = match GeneralOperand::parse(stream) {
1221 Ok(val) => Some(val),
1222 Err(_) => {
1223 stream.set_position(saved_pos);
1224 None
1225 }
1226 };
1227 stream.expect_complete()?;
1228 stream.expect_complete()?;
1229 stream.expect(&PtxToken::Semicolon)?;
1230 Ok(RedOpSpaceSemScopeNoftzLevelCacheHintVec16BitHalfWordType {
1231 op,
1232 space,
1233 sem,
1234 scope,
1235 noftz,
1236 level_cache_hint,
1237 vec_16_bit,
1238 half_word_type,
1239 a,
1240 b,
1241 cache_policy,
1242 })
1243 }
1244 }
1245
1246
1247 impl PtxParser for RedOpSpaceSemScopeNoftzLevelCacheHintVec32BitPackedType {
1248 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1249 stream.expect_string("red")?;
1250 let op = Op::parse(stream)?;
1251 stream.expect_complete()?;
1252 let saved_pos = stream.position();
1253 let space = match Space::parse(stream) {
1254 Ok(val) => Some(val),
1255 Err(_) => {
1256 stream.set_position(saved_pos);
1257 None
1258 }
1259 };
1260 stream.expect_complete()?;
1261 let saved_pos = stream.position();
1262 let sem = match Sem::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 scope = match Scope::parse(stream) {
1272 Ok(val) => Some(val),
1273 Err(_) => {
1274 stream.set_position(saved_pos);
1275 None
1276 }
1277 };
1278 stream.expect_complete()?;
1279 stream.expect_string(".noftz")?;
1280 let noftz = ();
1281 stream.expect_complete()?;
1282 let saved_pos = stream.position();
1283 let level_cache_hint = match LevelCacheHint::parse(stream) {
1284 Ok(val) => Some(val),
1285 Err(_) => {
1286 stream.set_position(saved_pos);
1287 None
1288 }
1289 };
1290 stream.expect_complete()?;
1291 let vec_32_bit = Vec32Bit::parse(stream)?;
1292 stream.expect_complete()?;
1293 let packed_type = PackedType::parse(stream)?;
1294 stream.expect_complete()?;
1295 let a = AddressOperand::parse(stream)?;
1296 stream.expect_complete()?;
1297 stream.expect(&PtxToken::Comma)?;
1298 let b = GeneralOperand::parse(stream)?;
1299 stream.expect_complete()?;
1300 let saved_pos = stream.position();
1301 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
1302 if !has_comma {
1303 stream.set_position(saved_pos);
1304 }
1305 let saved_pos = stream.position();
1306 let cache_policy = match GeneralOperand::parse(stream) {
1307 Ok(val) => Some(val),
1308 Err(_) => {
1309 stream.set_position(saved_pos);
1310 None
1311 }
1312 };
1313 stream.expect_complete()?;
1314 stream.expect_complete()?;
1315 stream.expect(&PtxToken::Semicolon)?;
1316 Ok(RedOpSpaceSemScopeNoftzLevelCacheHintVec32BitPackedType {
1317 op,
1318 space,
1319 sem,
1320 scope,
1321 noftz,
1322 level_cache_hint,
1323 vec_32_bit,
1324 packed_type,
1325 a,
1326 b,
1327 cache_policy,
1328 })
1329 }
1330 }
1331
1332
1333}
1334