ptx_parser/parser/instruction/
ld_global_nc.rs1#![allow(unused)]
19
20use crate::lexer::PtxToken;
21use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
22use crate::r#type::common::*;
23
24pub mod section_0 {
25 use super::*;
26 use crate::r#type::instruction::ld_global_nc::section_0::*;
27
28 impl PtxParser for Cop {
33 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
34 {
36 let saved_pos = stream.position();
37 if stream.expect_string(".ca").is_ok() {
38 return Ok(Cop::Ca);
39 }
40 stream.set_position(saved_pos);
41 }
42 let saved_pos = stream.position();
43 {
45 let saved_pos = stream.position();
46 if stream.expect_string(".cg").is_ok() {
47 return Ok(Cop::Cg);
48 }
49 stream.set_position(saved_pos);
50 }
51 stream.set_position(saved_pos);
52 let saved_pos = stream.position();
53 {
55 let saved_pos = stream.position();
56 if stream.expect_string(".cs").is_ok() {
57 return Ok(Cop::Cs);
58 }
59 stream.set_position(saved_pos);
60 }
61 stream.set_position(saved_pos);
62 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
63 let expected = &[".ca", ".cg", ".cs"];
64 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
65 Err(crate::parser::unexpected_value(span, expected, found))
66 }
67 }
68
69 impl PtxParser for Level1EvictionPriority {
70 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
71 {
73 let saved_pos = stream.position();
74 if stream.expect_string(".L1::evict_unchanged").is_ok() {
75 return Ok(Level1EvictionPriority::L1EvictUnchanged);
76 }
77 stream.set_position(saved_pos);
78 }
79 let saved_pos = stream.position();
80 {
82 let saved_pos = stream.position();
83 if stream.expect_string(".L1::evict_normal").is_ok() {
84 return Ok(Level1EvictionPriority::L1EvictNormal);
85 }
86 stream.set_position(saved_pos);
87 }
88 stream.set_position(saved_pos);
89 let saved_pos = stream.position();
90 {
92 let saved_pos = stream.position();
93 if stream.expect_string(".L1::evict_first").is_ok() {
94 return Ok(Level1EvictionPriority::L1EvictFirst);
95 }
96 stream.set_position(saved_pos);
97 }
98 stream.set_position(saved_pos);
99 let saved_pos = stream.position();
100 {
102 let saved_pos = stream.position();
103 if stream.expect_string(".L1::no_allocate").is_ok() {
104 return Ok(Level1EvictionPriority::L1NoAllocate);
105 }
106 stream.set_position(saved_pos);
107 }
108 stream.set_position(saved_pos);
109 let saved_pos = stream.position();
110 {
112 let saved_pos = stream.position();
113 if stream.expect_string(".L1::evict_last").is_ok() {
114 return Ok(Level1EvictionPriority::L1EvictLast);
115 }
116 stream.set_position(saved_pos);
117 }
118 stream.set_position(saved_pos);
119 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
120 let expected = &[".L1::evict_unchanged", ".L1::evict_normal", ".L1::evict_first", ".L1::no_allocate", ".L1::evict_last"];
121 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
122 Err(crate::parser::unexpected_value(span, expected, found))
123 }
124 }
125
126 impl PtxParser for Level2EvictionPriority {
127 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
128 {
130 let saved_pos = stream.position();
131 if stream.expect_string(".L2::evict_normal").is_ok() {
132 return Ok(Level2EvictionPriority::L2EvictNormal);
133 }
134 stream.set_position(saved_pos);
135 }
136 let saved_pos = stream.position();
137 {
139 let saved_pos = stream.position();
140 if stream.expect_string(".L2::evict_first").is_ok() {
141 return Ok(Level2EvictionPriority::L2EvictFirst);
142 }
143 stream.set_position(saved_pos);
144 }
145 stream.set_position(saved_pos);
146 let saved_pos = stream.position();
147 {
149 let saved_pos = stream.position();
150 if stream.expect_string(".L2::evict_last").is_ok() {
151 return Ok(Level2EvictionPriority::L2EvictLast);
152 }
153 stream.set_position(saved_pos);
154 }
155 stream.set_position(saved_pos);
156 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
157 let expected = &[".L2::evict_normal", ".L2::evict_first", ".L2::evict_last"];
158 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
159 Err(crate::parser::unexpected_value(span, expected, found))
160 }
161 }
162
163 impl PtxParser for LevelCacheHint {
164 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
165 {
167 let saved_pos = stream.position();
168 if stream.expect_string(".L2::cache_hint").is_ok() {
169 return Ok(LevelCacheHint::L2CacheHint);
170 }
171 stream.set_position(saved_pos);
172 }
173 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
174 let expected = &[".L2::cache_hint"];
175 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
176 Err(crate::parser::unexpected_value(span, expected, found))
177 }
178 }
179
180 impl PtxParser for LevelPrefetchSize {
181 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
182 {
184 let saved_pos = stream.position();
185 if stream.expect_string(".L2::128B").is_ok() {
186 return Ok(LevelPrefetchSize::L2128b);
187 }
188 stream.set_position(saved_pos);
189 }
190 let saved_pos = stream.position();
191 {
193 let saved_pos = stream.position();
194 if stream.expect_string(".L2::256B").is_ok() {
195 return Ok(LevelPrefetchSize::L2256b);
196 }
197 stream.set_position(saved_pos);
198 }
199 stream.set_position(saved_pos);
200 let saved_pos = stream.position();
201 {
203 let saved_pos = stream.position();
204 if stream.expect_string(".L2::64B").is_ok() {
205 return Ok(LevelPrefetchSize::L264b);
206 }
207 stream.set_position(saved_pos);
208 }
209 stream.set_position(saved_pos);
210 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
211 let expected = &[".L2::128B", ".L2::256B", ".L2::64B"];
212 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
213 Err(crate::parser::unexpected_value(span, expected, found))
214 }
215 }
216
217 impl PtxParser for Type {
218 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
219 {
221 let saved_pos = stream.position();
222 if stream.expect_string(".b128").is_ok() {
223 return Ok(Type::B128);
224 }
225 stream.set_position(saved_pos);
226 }
227 let saved_pos = stream.position();
228 {
230 let saved_pos = stream.position();
231 if stream.expect_string(".b16").is_ok() {
232 return Ok(Type::B16);
233 }
234 stream.set_position(saved_pos);
235 }
236 stream.set_position(saved_pos);
237 let saved_pos = stream.position();
238 {
240 let saved_pos = stream.position();
241 if stream.expect_string(".b32").is_ok() {
242 return Ok(Type::B32);
243 }
244 stream.set_position(saved_pos);
245 }
246 stream.set_position(saved_pos);
247 let saved_pos = stream.position();
248 {
250 let saved_pos = stream.position();
251 if stream.expect_string(".b64").is_ok() {
252 return Ok(Type::B64);
253 }
254 stream.set_position(saved_pos);
255 }
256 stream.set_position(saved_pos);
257 let saved_pos = stream.position();
258 {
260 let saved_pos = stream.position();
261 if stream.expect_string(".u16").is_ok() {
262 return Ok(Type::U16);
263 }
264 stream.set_position(saved_pos);
265 }
266 stream.set_position(saved_pos);
267 let saved_pos = stream.position();
268 {
270 let saved_pos = stream.position();
271 if stream.expect_string(".u32").is_ok() {
272 return Ok(Type::U32);
273 }
274 stream.set_position(saved_pos);
275 }
276 stream.set_position(saved_pos);
277 let saved_pos = stream.position();
278 {
280 let saved_pos = stream.position();
281 if stream.expect_string(".u64").is_ok() {
282 return Ok(Type::U64);
283 }
284 stream.set_position(saved_pos);
285 }
286 stream.set_position(saved_pos);
287 let saved_pos = stream.position();
288 {
290 let saved_pos = stream.position();
291 if stream.expect_string(".s16").is_ok() {
292 return Ok(Type::S16);
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(".s32").is_ok() {
302 return Ok(Type::S32);
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(".s64").is_ok() {
312 return Ok(Type::S64);
313 }
314 stream.set_position(saved_pos);
315 }
316 stream.set_position(saved_pos);
317 let saved_pos = stream.position();
318 {
320 let saved_pos = stream.position();
321 if stream.expect_string(".f32").is_ok() {
322 return Ok(Type::F32);
323 }
324 stream.set_position(saved_pos);
325 }
326 stream.set_position(saved_pos);
327 let saved_pos = stream.position();
328 {
330 let saved_pos = stream.position();
331 if stream.expect_string(".f64").is_ok() {
332 return Ok(Type::F64);
333 }
334 stream.set_position(saved_pos);
335 }
336 stream.set_position(saved_pos);
337 let saved_pos = stream.position();
338 {
340 let saved_pos = stream.position();
341 if stream.expect_string(".b8").is_ok() {
342 return Ok(Type::B8);
343 }
344 stream.set_position(saved_pos);
345 }
346 stream.set_position(saved_pos);
347 let saved_pos = stream.position();
348 {
350 let saved_pos = stream.position();
351 if stream.expect_string(".u8").is_ok() {
352 return Ok(Type::U8);
353 }
354 stream.set_position(saved_pos);
355 }
356 stream.set_position(saved_pos);
357 let saved_pos = stream.position();
358 {
360 let saved_pos = stream.position();
361 if stream.expect_string(".s8").is_ok() {
362 return Ok(Type::S8);
363 }
364 stream.set_position(saved_pos);
365 }
366 stream.set_position(saved_pos);
367 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
368 let expected = &[".b128", ".b16", ".b32", ".b64", ".u16", ".u32", ".u64", ".s16", ".s32", ".s64", ".f32", ".f64", ".b8", ".u8", ".s8"];
369 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
370 Err(crate::parser::unexpected_value(span, expected, found))
371 }
372 }
373
374 impl PtxParser for Vec {
375 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
376 {
378 let saved_pos = stream.position();
379 if stream.expect_string(".v2").is_ok() {
380 return Ok(Vec::V2);
381 }
382 stream.set_position(saved_pos);
383 }
384 let saved_pos = stream.position();
385 {
387 let saved_pos = stream.position();
388 if stream.expect_string(".v4").is_ok() {
389 return Ok(Vec::V4);
390 }
391 stream.set_position(saved_pos);
392 }
393 stream.set_position(saved_pos);
394 let saved_pos = stream.position();
395 {
397 let saved_pos = stream.position();
398 if stream.expect_string(".v8").is_ok() {
399 return Ok(Vec::V8);
400 }
401 stream.set_position(saved_pos);
402 }
403 stream.set_position(saved_pos);
404 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
405 let expected = &[".v2", ".v4", ".v8"];
406 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
407 Err(crate::parser::unexpected_value(span, expected, found))
408 }
409 }
410
411 impl PtxParser for LdGlobalCopNcLevelCacheHintLevelPrefetchSizeType {
412 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
413 stream.expect_string("ld")?;
414 stream.expect_string(".global")?;
415 let global = ();
416 stream.expect_complete()?;
417 let saved_pos = stream.position();
418 let cop = match Cop::parse(stream) {
419 Ok(val) => Some(val),
420 Err(_) => {
421 stream.set_position(saved_pos);
422 None
423 }
424 };
425 stream.expect_complete()?;
426 stream.expect_string(".nc")?;
427 let nc = ();
428 stream.expect_complete()?;
429 let saved_pos = stream.position();
430 let level_cache_hint = match LevelCacheHint::parse(stream) {
431 Ok(val) => Some(val),
432 Err(_) => {
433 stream.set_position(saved_pos);
434 None
435 }
436 };
437 stream.expect_complete()?;
438 let saved_pos = stream.position();
439 let level_prefetch_size = match LevelPrefetchSize::parse(stream) {
440 Ok(val) => Some(val),
441 Err(_) => {
442 stream.set_position(saved_pos);
443 None
444 }
445 };
446 stream.expect_complete()?;
447 let type_ = Type::parse(stream)?;
448 stream.expect_complete()?;
449 let d = GeneralOperand::parse(stream)?;
450 stream.expect_complete()?;
451 stream.expect(&PtxToken::Comma)?;
452 let a = AddressOperand::parse(stream)?;
453 stream.expect_complete()?;
454 let saved_pos = stream.position();
455 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
456 if !has_comma {
457 stream.set_position(saved_pos);
458 }
459 let saved_pos = stream.position();
460 let cache_policy = match GeneralOperand::parse(stream) {
461 Ok(val) => Some(val),
462 Err(_) => {
463 stream.set_position(saved_pos);
464 None
465 }
466 };
467 stream.expect_complete()?;
468 stream.expect_complete()?;
469 stream.expect(&PtxToken::Semicolon)?;
470 Ok(LdGlobalCopNcLevelCacheHintLevelPrefetchSizeType {
471 global,
472 cop,
473 nc,
474 level_cache_hint,
475 level_prefetch_size,
476 type_,
477 d,
478 a,
479 cache_policy,
480 })
481 }
482 }
483
484
485 impl PtxParser for LdGlobalCopNcLevelCacheHintLevelPrefetchSizeVecType {
486 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
487 stream.expect_string("ld")?;
488 stream.expect_string(".global")?;
489 let global = ();
490 stream.expect_complete()?;
491 let saved_pos = stream.position();
492 let cop = match Cop::parse(stream) {
493 Ok(val) => Some(val),
494 Err(_) => {
495 stream.set_position(saved_pos);
496 None
497 }
498 };
499 stream.expect_complete()?;
500 stream.expect_string(".nc")?;
501 let nc = ();
502 stream.expect_complete()?;
503 let saved_pos = stream.position();
504 let level_cache_hint = match LevelCacheHint::parse(stream) {
505 Ok(val) => Some(val),
506 Err(_) => {
507 stream.set_position(saved_pos);
508 None
509 }
510 };
511 stream.expect_complete()?;
512 let saved_pos = stream.position();
513 let level_prefetch_size = match LevelPrefetchSize::parse(stream) {
514 Ok(val) => Some(val),
515 Err(_) => {
516 stream.set_position(saved_pos);
517 None
518 }
519 };
520 stream.expect_complete()?;
521 let vec = Vec::parse(stream)?;
522 stream.expect_complete()?;
523 let type_ = Type::parse(stream)?;
524 stream.expect_complete()?;
525 let d = GeneralOperand::parse(stream)?;
526 stream.expect_complete()?;
527 stream.expect(&PtxToken::Comma)?;
528 let a = AddressOperand::parse(stream)?;
529 stream.expect_complete()?;
530 let saved_pos = stream.position();
531 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
532 if !has_comma {
533 stream.set_position(saved_pos);
534 }
535 let saved_pos = stream.position();
536 let cache_policy = match GeneralOperand::parse(stream) {
537 Ok(val) => Some(val),
538 Err(_) => {
539 stream.set_position(saved_pos);
540 None
541 }
542 };
543 stream.expect_complete()?;
544 stream.expect_complete()?;
545 stream.expect(&PtxToken::Semicolon)?;
546 Ok(LdGlobalCopNcLevelCacheHintLevelPrefetchSizeVecType {
547 global,
548 cop,
549 nc,
550 level_cache_hint,
551 level_prefetch_size,
552 vec,
553 type_,
554 d,
555 a,
556 cache_policy,
557 })
558 }
559 }
560
561
562 impl PtxParser for LdGlobalNcLevel1EvictionPriorityLevel2EvictionPriorityLevelCacheHintLevelPrefetchSizeType {
563 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
564 stream.expect_string("ld")?;
565 stream.expect_string(".global")?;
566 let global = ();
567 stream.expect_complete()?;
568 stream.expect_string(".nc")?;
569 let nc = ();
570 stream.expect_complete()?;
571 let saved_pos = stream.position();
572 let level1_eviction_priority = match Level1EvictionPriority::parse(stream) {
573 Ok(val) => Some(val),
574 Err(_) => {
575 stream.set_position(saved_pos);
576 None
577 }
578 };
579 stream.expect_complete()?;
580 let saved_pos = stream.position();
581 let level2_eviction_priority = match Level2EvictionPriority::parse(stream) {
582 Ok(val) => Some(val),
583 Err(_) => {
584 stream.set_position(saved_pos);
585 None
586 }
587 };
588 stream.expect_complete()?;
589 let saved_pos = stream.position();
590 let level_cache_hint = match LevelCacheHint::parse(stream) {
591 Ok(val) => Some(val),
592 Err(_) => {
593 stream.set_position(saved_pos);
594 None
595 }
596 };
597 stream.expect_complete()?;
598 let saved_pos = stream.position();
599 let level_prefetch_size = match LevelPrefetchSize::parse(stream) {
600 Ok(val) => Some(val),
601 Err(_) => {
602 stream.set_position(saved_pos);
603 None
604 }
605 };
606 stream.expect_complete()?;
607 let type_ = Type::parse(stream)?;
608 stream.expect_complete()?;
609 let d = GeneralOperand::parse(stream)?;
610 stream.expect_complete()?;
611 stream.expect(&PtxToken::Comma)?;
612 let a = AddressOperand::parse(stream)?;
613 stream.expect_complete()?;
614 let saved_pos = stream.position();
615 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
616 if !has_comma {
617 stream.set_position(saved_pos);
618 }
619 let saved_pos = stream.position();
620 let cache_policy = match GeneralOperand::parse(stream) {
621 Ok(val) => Some(val),
622 Err(_) => {
623 stream.set_position(saved_pos);
624 None
625 }
626 };
627 stream.expect_complete()?;
628 stream.expect_complete()?;
629 stream.expect(&PtxToken::Semicolon)?;
630 Ok(LdGlobalNcLevel1EvictionPriorityLevel2EvictionPriorityLevelCacheHintLevelPrefetchSizeType {
631 global,
632 nc,
633 level1_eviction_priority,
634 level2_eviction_priority,
635 level_cache_hint,
636 level_prefetch_size,
637 type_,
638 d,
639 a,
640 cache_policy,
641 })
642 }
643 }
644
645
646 impl PtxParser for LdGlobalNcLevel1EvictionPriorityLevel2EvictionPriorityLevelCacheHintLevelPrefetchSizeVecType {
647 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
648 stream.expect_string("ld")?;
649 stream.expect_string(".global")?;
650 let global = ();
651 stream.expect_complete()?;
652 stream.expect_string(".nc")?;
653 let nc = ();
654 stream.expect_complete()?;
655 let saved_pos = stream.position();
656 let level1_eviction_priority = match Level1EvictionPriority::parse(stream) {
657 Ok(val) => Some(val),
658 Err(_) => {
659 stream.set_position(saved_pos);
660 None
661 }
662 };
663 stream.expect_complete()?;
664 let saved_pos = stream.position();
665 let level2_eviction_priority = match Level2EvictionPriority::parse(stream) {
666 Ok(val) => Some(val),
667 Err(_) => {
668 stream.set_position(saved_pos);
669 None
670 }
671 };
672 stream.expect_complete()?;
673 let saved_pos = stream.position();
674 let level_cache_hint = match LevelCacheHint::parse(stream) {
675 Ok(val) => Some(val),
676 Err(_) => {
677 stream.set_position(saved_pos);
678 None
679 }
680 };
681 stream.expect_complete()?;
682 let saved_pos = stream.position();
683 let level_prefetch_size = match LevelPrefetchSize::parse(stream) {
684 Ok(val) => Some(val),
685 Err(_) => {
686 stream.set_position(saved_pos);
687 None
688 }
689 };
690 stream.expect_complete()?;
691 let vec = Vec::parse(stream)?;
692 stream.expect_complete()?;
693 let type_ = Type::parse(stream)?;
694 stream.expect_complete()?;
695 let d = GeneralOperand::parse(stream)?;
696 stream.expect_complete()?;
697 stream.expect(&PtxToken::Comma)?;
698 let a = AddressOperand::parse(stream)?;
699 stream.expect_complete()?;
700 let saved_pos = stream.position();
701 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
702 if !has_comma {
703 stream.set_position(saved_pos);
704 }
705 let saved_pos = stream.position();
706 let cache_policy = match GeneralOperand::parse(stream) {
707 Ok(val) => Some(val),
708 Err(_) => {
709 stream.set_position(saved_pos);
710 None
711 }
712 };
713 stream.expect_complete()?;
714 stream.expect_complete()?;
715 stream.expect(&PtxToken::Semicolon)?;
716 Ok(LdGlobalNcLevel1EvictionPriorityLevel2EvictionPriorityLevelCacheHintLevelPrefetchSizeVecType {
717 global,
718 nc,
719 level1_eviction_priority,
720 level2_eviction_priority,
721 level_cache_hint,
722 level_prefetch_size,
723 vec,
724 type_,
725 d,
726 a,
727 cache_policy,
728 })
729 }
730 }
731
732
733}
734