1#![allow(unused)]
23
24use crate::lexer::PtxToken;
25use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
26use crate::r#type::common::*;
27
28pub mod section_0 {
29 use super::*;
30 use crate::r#type::instruction::ld::section_0::*;
31
32 impl PtxParser for Cop {
37 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
38 {
40 let saved_pos = stream.position();
41 if stream.expect_string(".ca").is_ok() {
42 return Ok(Cop::Ca);
43 }
44 stream.set_position(saved_pos);
45 }
46 let saved_pos = stream.position();
47 {
49 let saved_pos = stream.position();
50 if stream.expect_string(".cg").is_ok() {
51 return Ok(Cop::Cg);
52 }
53 stream.set_position(saved_pos);
54 }
55 stream.set_position(saved_pos);
56 let saved_pos = stream.position();
57 {
59 let saved_pos = stream.position();
60 if stream.expect_string(".cs").is_ok() {
61 return Ok(Cop::Cs);
62 }
63 stream.set_position(saved_pos);
64 }
65 stream.set_position(saved_pos);
66 let saved_pos = stream.position();
67 {
69 let saved_pos = stream.position();
70 if stream.expect_string(".lu").is_ok() {
71 return Ok(Cop::Lu);
72 }
73 stream.set_position(saved_pos);
74 }
75 stream.set_position(saved_pos);
76 let saved_pos = stream.position();
77 {
79 let saved_pos = stream.position();
80 if stream.expect_string(".cv").is_ok() {
81 return Ok(Cop::Cv);
82 }
83 stream.set_position(saved_pos);
84 }
85 stream.set_position(saved_pos);
86 let span = stream
87 .peek()
88 .map(|(_, s)| s.clone())
89 .unwrap_or(Span { start: 0, end: 0 });
90 let expected = &[".ca", ".cg", ".cs", ".lu", ".cv"];
91 let found = stream
92 .peek()
93 .map(|(t, _)| format!("{:?}", t))
94 .unwrap_or_else(|_| "<end of input>".to_string());
95 Err(crate::parser::unexpected_value(span, expected, found))
96 }
97 }
98
99 impl PtxParser for Level1EvictionPriority {
100 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
101 {
103 let saved_pos = stream.position();
104 if stream.expect_string(".L1::evict_unchanged").is_ok() {
105 return Ok(Level1EvictionPriority::L1EvictUnchanged);
106 }
107 stream.set_position(saved_pos);
108 }
109 let saved_pos = stream.position();
110 {
112 let saved_pos = stream.position();
113 if stream.expect_string(".L1::evict_normal").is_ok() {
114 return Ok(Level1EvictionPriority::L1EvictNormal);
115 }
116 stream.set_position(saved_pos);
117 }
118 stream.set_position(saved_pos);
119 let saved_pos = stream.position();
120 {
122 let saved_pos = stream.position();
123 if stream.expect_string(".L1::evict_first").is_ok() {
124 return Ok(Level1EvictionPriority::L1EvictFirst);
125 }
126 stream.set_position(saved_pos);
127 }
128 stream.set_position(saved_pos);
129 let saved_pos = stream.position();
130 {
132 let saved_pos = stream.position();
133 if stream.expect_string(".L1::no_allocate").is_ok() {
134 return Ok(Level1EvictionPriority::L1NoAllocate);
135 }
136 stream.set_position(saved_pos);
137 }
138 stream.set_position(saved_pos);
139 let saved_pos = stream.position();
140 {
142 let saved_pos = stream.position();
143 if stream.expect_string(".L1::evict_last").is_ok() {
144 return Ok(Level1EvictionPriority::L1EvictLast);
145 }
146 stream.set_position(saved_pos);
147 }
148 stream.set_position(saved_pos);
149 let span = stream
150 .peek()
151 .map(|(_, s)| s.clone())
152 .unwrap_or(Span { start: 0, end: 0 });
153 let expected = &[
154 ".L1::evict_unchanged",
155 ".L1::evict_normal",
156 ".L1::evict_first",
157 ".L1::no_allocate",
158 ".L1::evict_last",
159 ];
160 let found = stream
161 .peek()
162 .map(|(t, _)| format!("{:?}", t))
163 .unwrap_or_else(|_| "<end of input>".to_string());
164 Err(crate::parser::unexpected_value(span, expected, found))
165 }
166 }
167
168 impl PtxParser for Level2EvictionPriority {
169 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
170 {
172 let saved_pos = stream.position();
173 if stream.expect_string(".L2::evict_normal").is_ok() {
174 return Ok(Level2EvictionPriority::L2EvictNormal);
175 }
176 stream.set_position(saved_pos);
177 }
178 let saved_pos = stream.position();
179 {
181 let saved_pos = stream.position();
182 if stream.expect_string(".L2::evict_first").is_ok() {
183 return Ok(Level2EvictionPriority::L2EvictFirst);
184 }
185 stream.set_position(saved_pos);
186 }
187 stream.set_position(saved_pos);
188 let saved_pos = stream.position();
189 {
191 let saved_pos = stream.position();
192 if stream.expect_string(".L2::evict_last").is_ok() {
193 return Ok(Level2EvictionPriority::L2EvictLast);
194 }
195 stream.set_position(saved_pos);
196 }
197 stream.set_position(saved_pos);
198 let span = stream
199 .peek()
200 .map(|(_, s)| s.clone())
201 .unwrap_or(Span { start: 0, end: 0 });
202 let expected = &[".L2::evict_normal", ".L2::evict_first", ".L2::evict_last"];
203 let found = stream
204 .peek()
205 .map(|(t, _)| format!("{:?}", t))
206 .unwrap_or_else(|_| "<end of input>".to_string());
207 Err(crate::parser::unexpected_value(span, expected, found))
208 }
209 }
210
211 impl PtxParser for LevelCacheHint {
212 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
213 {
215 let saved_pos = stream.position();
216 if stream.expect_string(".L2::cache_hint").is_ok() {
217 return Ok(LevelCacheHint::L2CacheHint);
218 }
219 stream.set_position(saved_pos);
220 }
221 let span = stream
222 .peek()
223 .map(|(_, s)| s.clone())
224 .unwrap_or(Span { start: 0, end: 0 });
225 let expected = &[".L2::cache_hint"];
226 let found = stream
227 .peek()
228 .map(|(t, _)| format!("{:?}", t))
229 .unwrap_or_else(|_| "<end of input>".to_string());
230 Err(crate::parser::unexpected_value(span, expected, found))
231 }
232 }
233
234 impl PtxParser for LevelPrefetchSize {
235 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
236 {
238 let saved_pos = stream.position();
239 if stream.expect_string(".L2::128B").is_ok() {
240 return Ok(LevelPrefetchSize::L2128b);
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(".L2::256B").is_ok() {
249 return Ok(LevelPrefetchSize::L2256b);
250 }
251 stream.set_position(saved_pos);
252 }
253 stream.set_position(saved_pos);
254 let saved_pos = stream.position();
255 {
257 let saved_pos = stream.position();
258 if stream.expect_string(".L2::64B").is_ok() {
259 return Ok(LevelPrefetchSize::L264b);
260 }
261 stream.set_position(saved_pos);
262 }
263 stream.set_position(saved_pos);
264 let span = stream
265 .peek()
266 .map(|(_, s)| s.clone())
267 .unwrap_or(Span { start: 0, end: 0 });
268 let expected = &[".L2::128B", ".L2::256B", ".L2::64B"];
269 let found = stream
270 .peek()
271 .map(|(t, _)| format!("{:?}", t))
272 .unwrap_or_else(|_| "<end of input>".to_string());
273 Err(crate::parser::unexpected_value(span, expected, found))
274 }
275 }
276
277 impl PtxParser for Scope {
278 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
279 {
281 let saved_pos = stream.position();
282 if stream.expect_string(".cluster").is_ok() {
283 return Ok(Scope::Cluster);
284 }
285 stream.set_position(saved_pos);
286 }
287 let saved_pos = stream.position();
288 {
290 let saved_pos = stream.position();
291 if stream.expect_string(".cta").is_ok() {
292 return Ok(Scope::Cta);
293 }
294 stream.set_position(saved_pos);
295 }
296 stream.set_position(saved_pos);
297 let saved_pos = stream.position();
298 {
300 let saved_pos = stream.position();
301 if stream.expect_string(".gpu").is_ok() {
302 return Ok(Scope::Gpu);
303 }
304 stream.set_position(saved_pos);
305 }
306 stream.set_position(saved_pos);
307 let saved_pos = stream.position();
308 {
310 let saved_pos = stream.position();
311 if stream.expect_string(".sys").is_ok() {
312 return Ok(Scope::Sys);
313 }
314 stream.set_position(saved_pos);
315 }
316 stream.set_position(saved_pos);
317 let span = stream
318 .peek()
319 .map(|(_, s)| s.clone())
320 .unwrap_or(Span { start: 0, end: 0 });
321 let expected = &[".cluster", ".cta", ".gpu", ".sys"];
322 let found = stream
323 .peek()
324 .map(|(t, _)| format!("{:?}", t))
325 .unwrap_or_else(|_| "<end of input>".to_string());
326 Err(crate::parser::unexpected_value(span, expected, found))
327 }
328 }
329
330 impl PtxParser for Ss {
331 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
332 {
334 let saved_pos = stream.position();
335 if stream.expect_string(".shared::cluster").is_ok() {
336 return Ok(Ss::SharedCluster);
337 }
338 stream.set_position(saved_pos);
339 }
340 let saved_pos = stream.position();
341 {
343 let saved_pos = stream.position();
344 if stream.expect_string(".param::entry").is_ok() {
345 return Ok(Ss::ParamEntry);
346 }
347 stream.set_position(saved_pos);
348 }
349 stream.set_position(saved_pos);
350 let saved_pos = stream.position();
351 {
353 let saved_pos = stream.position();
354 if stream.expect_string(".param::func").is_ok() {
355 return Ok(Ss::ParamFunc);
356 }
357 stream.set_position(saved_pos);
358 }
359 stream.set_position(saved_pos);
360 let saved_pos = stream.position();
361 {
363 let saved_pos = stream.position();
364 if stream.expect_string(".shared::cta").is_ok() {
365 return Ok(Ss::SharedCta);
366 }
367 stream.set_position(saved_pos);
368 }
369 stream.set_position(saved_pos);
370 let saved_pos = stream.position();
371 {
373 let saved_pos = stream.position();
374 if stream.expect_string(".global").is_ok() {
375 return Ok(Ss::Global);
376 }
377 stream.set_position(saved_pos);
378 }
379 stream.set_position(saved_pos);
380 let saved_pos = stream.position();
381 {
383 let saved_pos = stream.position();
384 if stream.expect_string(".shared").is_ok() {
385 return Ok(Ss::Shared);
386 }
387 stream.set_position(saved_pos);
388 }
389 stream.set_position(saved_pos);
390 let saved_pos = stream.position();
391 {
393 let saved_pos = stream.position();
394 if stream.expect_string(".const").is_ok() {
395 return Ok(Ss::Const);
396 }
397 stream.set_position(saved_pos);
398 }
399 stream.set_position(saved_pos);
400 let saved_pos = stream.position();
401 {
403 let saved_pos = stream.position();
404 if stream.expect_string(".local").is_ok() {
405 return Ok(Ss::Local);
406 }
407 stream.set_position(saved_pos);
408 }
409 stream.set_position(saved_pos);
410 let saved_pos = stream.position();
411 {
413 let saved_pos = stream.position();
414 if stream.expect_string(".param").is_ok() {
415 return Ok(Ss::Param);
416 }
417 stream.set_position(saved_pos);
418 }
419 stream.set_position(saved_pos);
420 let span = stream
421 .peek()
422 .map(|(_, s)| s.clone())
423 .unwrap_or(Span { start: 0, end: 0 });
424 let expected = &[
425 ".shared::cluster",
426 ".param::entry",
427 ".param::func",
428 ".shared::cta",
429 ".global",
430 ".shared",
431 ".const",
432 ".local",
433 ".param",
434 ];
435 let found = stream
436 .peek()
437 .map(|(t, _)| format!("{:?}", t))
438 .unwrap_or_else(|_| "<end of input>".to_string());
439 Err(crate::parser::unexpected_value(span, expected, found))
440 }
441 }
442
443 impl PtxParser for Type {
444 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
445 {
447 let saved_pos = stream.position();
448 if stream.expect_string(".b128").is_ok() {
449 return Ok(Type::B128);
450 }
451 stream.set_position(saved_pos);
452 }
453 let saved_pos = stream.position();
454 {
456 let saved_pos = stream.position();
457 if stream.expect_string(".b16").is_ok() {
458 return Ok(Type::B16);
459 }
460 stream.set_position(saved_pos);
461 }
462 stream.set_position(saved_pos);
463 let saved_pos = stream.position();
464 {
466 let saved_pos = stream.position();
467 if stream.expect_string(".b32").is_ok() {
468 return Ok(Type::B32);
469 }
470 stream.set_position(saved_pos);
471 }
472 stream.set_position(saved_pos);
473 let saved_pos = stream.position();
474 {
476 let saved_pos = stream.position();
477 if stream.expect_string(".b64").is_ok() {
478 return Ok(Type::B64);
479 }
480 stream.set_position(saved_pos);
481 }
482 stream.set_position(saved_pos);
483 let saved_pos = stream.position();
484 {
486 let saved_pos = stream.position();
487 if stream.expect_string(".u16").is_ok() {
488 return Ok(Type::U16);
489 }
490 stream.set_position(saved_pos);
491 }
492 stream.set_position(saved_pos);
493 let saved_pos = stream.position();
494 {
496 let saved_pos = stream.position();
497 if stream.expect_string(".u32").is_ok() {
498 return Ok(Type::U32);
499 }
500 stream.set_position(saved_pos);
501 }
502 stream.set_position(saved_pos);
503 let saved_pos = stream.position();
504 {
506 let saved_pos = stream.position();
507 if stream.expect_string(".u64").is_ok() {
508 return Ok(Type::U64);
509 }
510 stream.set_position(saved_pos);
511 }
512 stream.set_position(saved_pos);
513 let saved_pos = stream.position();
514 {
516 let saved_pos = stream.position();
517 if stream.expect_string(".s16").is_ok() {
518 return Ok(Type::S16);
519 }
520 stream.set_position(saved_pos);
521 }
522 stream.set_position(saved_pos);
523 let saved_pos = stream.position();
524 {
526 let saved_pos = stream.position();
527 if stream.expect_string(".s32").is_ok() {
528 return Ok(Type::S32);
529 }
530 stream.set_position(saved_pos);
531 }
532 stream.set_position(saved_pos);
533 let saved_pos = stream.position();
534 {
536 let saved_pos = stream.position();
537 if stream.expect_string(".s64").is_ok() {
538 return Ok(Type::S64);
539 }
540 stream.set_position(saved_pos);
541 }
542 stream.set_position(saved_pos);
543 let saved_pos = stream.position();
544 {
546 let saved_pos = stream.position();
547 if stream.expect_string(".f32").is_ok() {
548 return Ok(Type::F32);
549 }
550 stream.set_position(saved_pos);
551 }
552 stream.set_position(saved_pos);
553 let saved_pos = stream.position();
554 {
556 let saved_pos = stream.position();
557 if stream.expect_string(".f64").is_ok() {
558 return Ok(Type::F64);
559 }
560 stream.set_position(saved_pos);
561 }
562 stream.set_position(saved_pos);
563 let saved_pos = stream.position();
564 {
566 let saved_pos = stream.position();
567 if stream.expect_string(".b8").is_ok() {
568 return Ok(Type::B8);
569 }
570 stream.set_position(saved_pos);
571 }
572 stream.set_position(saved_pos);
573 let saved_pos = stream.position();
574 {
576 let saved_pos = stream.position();
577 if stream.expect_string(".u8").is_ok() {
578 return Ok(Type::U8);
579 }
580 stream.set_position(saved_pos);
581 }
582 stream.set_position(saved_pos);
583 let saved_pos = stream.position();
584 {
586 let saved_pos = stream.position();
587 if stream.expect_string(".s8").is_ok() {
588 return Ok(Type::S8);
589 }
590 stream.set_position(saved_pos);
591 }
592 stream.set_position(saved_pos);
593 let span = stream
594 .peek()
595 .map(|(_, s)| s.clone())
596 .unwrap_or(Span { start: 0, end: 0 });
597 let expected = &[
598 ".b128", ".b16", ".b32", ".b64", ".u16", ".u32", ".u64", ".s16", ".s32", ".s64",
599 ".f32", ".f64", ".b8", ".u8", ".s8",
600 ];
601 let found = stream
602 .peek()
603 .map(|(t, _)| format!("{:?}", t))
604 .unwrap_or_else(|_| "<end of input>".to_string());
605 Err(crate::parser::unexpected_value(span, expected, found))
606 }
607 }
608
609 impl PtxParser for Vec {
610 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
611 {
613 let saved_pos = stream.position();
614 if stream.expect_string(".v2").is_ok() {
615 return Ok(Vec::V2);
616 }
617 stream.set_position(saved_pos);
618 }
619 let saved_pos = stream.position();
620 {
622 let saved_pos = stream.position();
623 if stream.expect_string(".v4").is_ok() {
624 return Ok(Vec::V4);
625 }
626 stream.set_position(saved_pos);
627 }
628 stream.set_position(saved_pos);
629 let saved_pos = stream.position();
630 {
632 let saved_pos = stream.position();
633 if stream.expect_string(".v8").is_ok() {
634 return Ok(Vec::V8);
635 }
636 stream.set_position(saved_pos);
637 }
638 stream.set_position(saved_pos);
639 let span = stream
640 .peek()
641 .map(|(_, s)| s.clone())
642 .unwrap_or(Span { start: 0, end: 0 });
643 let expected = &[".v2", ".v4", ".v8"];
644 let found = stream
645 .peek()
646 .map(|(t, _)| format!("{:?}", t))
647 .unwrap_or_else(|_| "<end of input>".to_string());
648 Err(crate::parser::unexpected_value(span, expected, found))
649 }
650 }
651
652 impl PtxParser for LdWeakSsCopLevelCacheHintLevelPrefetchSizeVecType {
653 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
654 stream.expect_string("ld")?;
655 let saved_pos = stream.position();
656 let weak = stream.expect_string(".weak").is_ok();
657 if !weak {
658 stream.set_position(saved_pos);
659 }
660 stream.expect_complete()?;
661 let saved_pos = stream.position();
662 let ss = match Ss::parse(stream) {
663 Ok(val) => Some(val),
664 Err(_) => {
665 stream.set_position(saved_pos);
666 None
667 }
668 };
669 stream.expect_complete()?;
670 let saved_pos = stream.position();
671 let cop = match Cop::parse(stream) {
672 Ok(val) => Some(val),
673 Err(_) => {
674 stream.set_position(saved_pos);
675 None
676 }
677 };
678 stream.expect_complete()?;
679 let saved_pos = stream.position();
680 let level_cache_hint = match LevelCacheHint::parse(stream) {
681 Ok(val) => Some(val),
682 Err(_) => {
683 stream.set_position(saved_pos);
684 None
685 }
686 };
687 stream.expect_complete()?;
688 let saved_pos = stream.position();
689 let level_prefetch_size = match LevelPrefetchSize::parse(stream) {
690 Ok(val) => Some(val),
691 Err(_) => {
692 stream.set_position(saved_pos);
693 None
694 }
695 };
696 stream.expect_complete()?;
697 let saved_pos = stream.position();
698 let vec = match Vec::parse(stream) {
699 Ok(val) => Some(val),
700 Err(_) => {
701 stream.set_position(saved_pos);
702 None
703 }
704 };
705 stream.expect_complete()?;
706 let type_ = Type::parse(stream)?;
707 stream.expect_complete()?;
708 let d = GeneralOperand::parse(stream)?;
709 stream.expect_complete()?;
710 stream.expect(&PtxToken::Comma)?;
711 let a = AddressOperand::parse(stream)?;
712 let saved_pos = stream.position();
713 let unified = stream.expect_string(".unified").is_ok();
714 if !unified {
715 stream.set_position(saved_pos);
716 }
717 stream.expect_complete()?;
718 let saved_pos = stream.position();
719 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
720 if !has_comma {
721 stream.set_position(saved_pos);
722 }
723 let saved_pos = stream.position();
724 let cache_policy = match GeneralOperand::parse(stream) {
725 Ok(val) => Some(val),
726 Err(_) => {
727 stream.set_position(saved_pos);
728 None
729 }
730 };
731 stream.expect_complete()?;
732 stream.expect_complete()?;
733 stream.expect(&PtxToken::Semicolon)?;
734 Ok(LdWeakSsCopLevelCacheHintLevelPrefetchSizeVecType {
735 weak,
736 ss,
737 cop,
738 level_cache_hint,
739 level_prefetch_size,
740 vec,
741 type_,
742 d,
743 a,
744 unified,
745 cache_policy,
746 })
747 }
748 }
749
750 impl PtxParser for LdWeakSsLevel1EvictionPriorityLevel2EvictionPriorityLevelCacheHintLevelPrefetchSizeVecType {
751 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
752 stream.expect_string("ld")?;
753 let saved_pos = stream.position();
754 let weak = stream.expect_string(".weak").is_ok();
755 if !weak {
756 stream.set_position(saved_pos);
757 }
758 stream.expect_complete()?;
759 let saved_pos = stream.position();
760 let ss = match Ss::parse(stream) {
761 Ok(val) => Some(val),
762 Err(_) => {
763 stream.set_position(saved_pos);
764 None
765 }
766 };
767 stream.expect_complete()?;
768 let saved_pos = stream.position();
769 let level1_eviction_priority = match Level1EvictionPriority::parse(stream) {
770 Ok(val) => Some(val),
771 Err(_) => {
772 stream.set_position(saved_pos);
773 None
774 }
775 };
776 stream.expect_complete()?;
777 let saved_pos = stream.position();
778 let level2_eviction_priority = match Level2EvictionPriority::parse(stream) {
779 Ok(val) => Some(val),
780 Err(_) => {
781 stream.set_position(saved_pos);
782 None
783 }
784 };
785 stream.expect_complete()?;
786 let saved_pos = stream.position();
787 let level_cache_hint = match LevelCacheHint::parse(stream) {
788 Ok(val) => Some(val),
789 Err(_) => {
790 stream.set_position(saved_pos);
791 None
792 }
793 };
794 stream.expect_complete()?;
795 let saved_pos = stream.position();
796 let level_prefetch_size = match LevelPrefetchSize::parse(stream) {
797 Ok(val) => Some(val),
798 Err(_) => {
799 stream.set_position(saved_pos);
800 None
801 }
802 };
803 stream.expect_complete()?;
804 let saved_pos = stream.position();
805 let vec = match Vec::parse(stream) {
806 Ok(val) => Some(val),
807 Err(_) => {
808 stream.set_position(saved_pos);
809 None
810 }
811 };
812 stream.expect_complete()?;
813 let type_ = Type::parse(stream)?;
814 stream.expect_complete()?;
815 let d = GeneralOperand::parse(stream)?;
816 stream.expect_complete()?;
817 stream.expect(&PtxToken::Comma)?;
818 let a = AddressOperand::parse(stream)?;
819 let saved_pos = stream.position();
820 let unified = stream.expect_string(".unified").is_ok();
821 if !unified {
822 stream.set_position(saved_pos);
823 }
824 stream.expect_complete()?;
825 let saved_pos = stream.position();
826 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
827 if !has_comma {
828 stream.set_position(saved_pos);
829 }
830 let saved_pos = stream.position();
831 let cache_policy = match GeneralOperand::parse(stream) {
832 Ok(val) => Some(val),
833 Err(_) => {
834 stream.set_position(saved_pos);
835 None
836 }
837 };
838 stream.expect_complete()?;
839 stream.expect_complete()?;
840 stream.expect(&PtxToken::Semicolon)?;
841 Ok(LdWeakSsLevel1EvictionPriorityLevel2EvictionPriorityLevelCacheHintLevelPrefetchSizeVecType {
842 weak,
843 ss,
844 level1_eviction_priority,
845 level2_eviction_priority,
846 level_cache_hint,
847 level_prefetch_size,
848 vec,
849 type_,
850 d,
851 a,
852 unified,
853 cache_policy,
854 })
855 }
856 }
857
858 impl PtxParser for LdVolatileSsLevelPrefetchSizeVecType {
859 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
860 stream.expect_string("ld")?;
861 stream.expect_string(".volatile")?;
862 let volatile = ();
863 stream.expect_complete()?;
864 let saved_pos = stream.position();
865 let ss = match Ss::parse(stream) {
866 Ok(val) => Some(val),
867 Err(_) => {
868 stream.set_position(saved_pos);
869 None
870 }
871 };
872 stream.expect_complete()?;
873 let saved_pos = stream.position();
874 let level_prefetch_size = match LevelPrefetchSize::parse(stream) {
875 Ok(val) => Some(val),
876 Err(_) => {
877 stream.set_position(saved_pos);
878 None
879 }
880 };
881 stream.expect_complete()?;
882 let saved_pos = stream.position();
883 let vec = match Vec::parse(stream) {
884 Ok(val) => Some(val),
885 Err(_) => {
886 stream.set_position(saved_pos);
887 None
888 }
889 };
890 stream.expect_complete()?;
891 let type_ = Type::parse(stream)?;
892 stream.expect_complete()?;
893 let d = GeneralOperand::parse(stream)?;
894 stream.expect_complete()?;
895 stream.expect(&PtxToken::Comma)?;
896 let a = AddressOperand::parse(stream)?;
897 stream.expect_complete()?;
898 stream.expect_complete()?;
899 stream.expect(&PtxToken::Semicolon)?;
900 Ok(LdVolatileSsLevelPrefetchSizeVecType {
901 volatile,
902 ss,
903 level_prefetch_size,
904 vec,
905 type_,
906 d,
907 a,
908 })
909 }
910 }
911
912 impl PtxParser for LdRelaxedScopeSsLevel1EvictionPriorityLevel2EvictionPriorityLevelCacheHintLevelPrefetchSizeVecType {
913 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
914 stream.expect_string("ld")?;
915 stream.expect_string(".relaxed")?;
916 let relaxed = ();
917 stream.expect_complete()?;
918 let scope = Scope::parse(stream)?;
919 stream.expect_complete()?;
920 let saved_pos = stream.position();
921 let ss = match Ss::parse(stream) {
922 Ok(val) => Some(val),
923 Err(_) => {
924 stream.set_position(saved_pos);
925 None
926 }
927 };
928 stream.expect_complete()?;
929 let saved_pos = stream.position();
930 let level1_eviction_priority = match Level1EvictionPriority::parse(stream) {
931 Ok(val) => Some(val),
932 Err(_) => {
933 stream.set_position(saved_pos);
934 None
935 }
936 };
937 stream.expect_complete()?;
938 let saved_pos = stream.position();
939 let level2_eviction_priority = match Level2EvictionPriority::parse(stream) {
940 Ok(val) => Some(val),
941 Err(_) => {
942 stream.set_position(saved_pos);
943 None
944 }
945 };
946 stream.expect_complete()?;
947 let saved_pos = stream.position();
948 let level_cache_hint = match LevelCacheHint::parse(stream) {
949 Ok(val) => Some(val),
950 Err(_) => {
951 stream.set_position(saved_pos);
952 None
953 }
954 };
955 stream.expect_complete()?;
956 let saved_pos = stream.position();
957 let level_prefetch_size = match LevelPrefetchSize::parse(stream) {
958 Ok(val) => Some(val),
959 Err(_) => {
960 stream.set_position(saved_pos);
961 None
962 }
963 };
964 stream.expect_complete()?;
965 let saved_pos = stream.position();
966 let vec = match Vec::parse(stream) {
967 Ok(val) => Some(val),
968 Err(_) => {
969 stream.set_position(saved_pos);
970 None
971 }
972 };
973 stream.expect_complete()?;
974 let type_ = Type::parse(stream)?;
975 stream.expect_complete()?;
976 let d = GeneralOperand::parse(stream)?;
977 stream.expect_complete()?;
978 stream.expect(&PtxToken::Comma)?;
979 let a = AddressOperand::parse(stream)?;
980 stream.expect_complete()?;
981 let saved_pos = stream.position();
982 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
983 if !has_comma {
984 stream.set_position(saved_pos);
985 }
986 let saved_pos = stream.position();
987 let cache_policy = match GeneralOperand::parse(stream) {
988 Ok(val) => Some(val),
989 Err(_) => {
990 stream.set_position(saved_pos);
991 None
992 }
993 };
994 stream.expect_complete()?;
995 stream.expect_complete()?;
996 stream.expect(&PtxToken::Semicolon)?;
997 Ok(LdRelaxedScopeSsLevel1EvictionPriorityLevel2EvictionPriorityLevelCacheHintLevelPrefetchSizeVecType {
998 relaxed,
999 scope,
1000 ss,
1001 level1_eviction_priority,
1002 level2_eviction_priority,
1003 level_cache_hint,
1004 level_prefetch_size,
1005 vec,
1006 type_,
1007 d,
1008 a,
1009 cache_policy,
1010 })
1011 }
1012 }
1013
1014 impl PtxParser for LdAcquireScopeSsLevel1EvictionPriorityLevel2EvictionPriorityLevelCacheHintLevelPrefetchSizeVecType {
1015 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1016 stream.expect_string("ld")?;
1017 stream.expect_string(".acquire")?;
1018 let acquire = ();
1019 stream.expect_complete()?;
1020 let scope = Scope::parse(stream)?;
1021 stream.expect_complete()?;
1022 let saved_pos = stream.position();
1023 let ss = match Ss::parse(stream) {
1024 Ok(val) => Some(val),
1025 Err(_) => {
1026 stream.set_position(saved_pos);
1027 None
1028 }
1029 };
1030 stream.expect_complete()?;
1031 let saved_pos = stream.position();
1032 let level1_eviction_priority = match Level1EvictionPriority::parse(stream) {
1033 Ok(val) => Some(val),
1034 Err(_) => {
1035 stream.set_position(saved_pos);
1036 None
1037 }
1038 };
1039 stream.expect_complete()?;
1040 let saved_pos = stream.position();
1041 let level2_eviction_priority = match Level2EvictionPriority::parse(stream) {
1042 Ok(val) => Some(val),
1043 Err(_) => {
1044 stream.set_position(saved_pos);
1045 None
1046 }
1047 };
1048 stream.expect_complete()?;
1049 let saved_pos = stream.position();
1050 let level_cache_hint = match LevelCacheHint::parse(stream) {
1051 Ok(val) => Some(val),
1052 Err(_) => {
1053 stream.set_position(saved_pos);
1054 None
1055 }
1056 };
1057 stream.expect_complete()?;
1058 let saved_pos = stream.position();
1059 let level_prefetch_size = match LevelPrefetchSize::parse(stream) {
1060 Ok(val) => Some(val),
1061 Err(_) => {
1062 stream.set_position(saved_pos);
1063 None
1064 }
1065 };
1066 stream.expect_complete()?;
1067 let saved_pos = stream.position();
1068 let vec = match Vec::parse(stream) {
1069 Ok(val) => Some(val),
1070 Err(_) => {
1071 stream.set_position(saved_pos);
1072 None
1073 }
1074 };
1075 stream.expect_complete()?;
1076 let type_ = Type::parse(stream)?;
1077 stream.expect_complete()?;
1078 let d = GeneralOperand::parse(stream)?;
1079 stream.expect_complete()?;
1080 stream.expect(&PtxToken::Comma)?;
1081 let a = AddressOperand::parse(stream)?;
1082 stream.expect_complete()?;
1083 let saved_pos = stream.position();
1084 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
1085 if !has_comma {
1086 stream.set_position(saved_pos);
1087 }
1088 let saved_pos = stream.position();
1089 let cache_policy = match GeneralOperand::parse(stream) {
1090 Ok(val) => Some(val),
1091 Err(_) => {
1092 stream.set_position(saved_pos);
1093 None
1094 }
1095 };
1096 stream.expect_complete()?;
1097 stream.expect_complete()?;
1098 stream.expect(&PtxToken::Semicolon)?;
1099 Ok(LdAcquireScopeSsLevel1EvictionPriorityLevel2EvictionPriorityLevelCacheHintLevelPrefetchSizeVecType {
1100 acquire,
1101 scope,
1102 ss,
1103 level1_eviction_priority,
1104 level2_eviction_priority,
1105 level_cache_hint,
1106 level_prefetch_size,
1107 vec,
1108 type_,
1109 d,
1110 a,
1111 cache_policy,
1112 })
1113 }
1114 }
1115
1116 impl PtxParser for LdMmioRelaxedSysGlobalType {
1117 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1118 stream.expect_string("ld")?;
1119 stream.expect_string(".mmio")?;
1120 let mmio = ();
1121 stream.expect_complete()?;
1122 stream.expect_string(".relaxed")?;
1123 let relaxed = ();
1124 stream.expect_complete()?;
1125 stream.expect_string(".sys")?;
1126 let sys = ();
1127 stream.expect_complete()?;
1128 let saved_pos = stream.position();
1129 let global = stream.expect_string(".global").is_ok();
1130 if !global {
1131 stream.set_position(saved_pos);
1132 }
1133 stream.expect_complete()?;
1134 let type_ = Type::parse(stream)?;
1135 stream.expect_complete()?;
1136 let d = GeneralOperand::parse(stream)?;
1137 stream.expect_complete()?;
1138 stream.expect(&PtxToken::Comma)?;
1139 let a = AddressOperand::parse(stream)?;
1140 stream.expect_complete()?;
1141 stream.expect_complete()?;
1142 stream.expect(&PtxToken::Semicolon)?;
1143 Ok(LdMmioRelaxedSysGlobalType {
1144 mmio,
1145 relaxed,
1146 sys,
1147 global,
1148 type_,
1149 d,
1150 a,
1151 })
1152 }
1153 }
1154}