ptx_parser/parser/instruction/
cp_async_bulk_prefetch.rs1#![allow(unused)]
8
9use crate::lexer::PtxToken;
10use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
11use crate::r#type::common::*;
12
13pub mod section_0 {
14 use super::*;
15 use crate::r#type::instruction::cp_async_bulk_prefetch::section_0::*;
16
17 impl PtxParser for LevelCacheHint {
22 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
23 {
25 let saved_pos = stream.position();
26 if stream.expect_string(".L2::cache_hint").is_ok() {
27 return Ok(LevelCacheHint::L2CacheHint);
28 }
29 stream.set_position(saved_pos);
30 }
31 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
32 let expected = &[".L2::cache_hint"];
33 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
34 Err(crate::parser::unexpected_value(span, expected, found))
35 }
36 }
37
38 impl PtxParser for Src {
39 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
40 {
42 let saved_pos = stream.position();
43 if stream.expect_string(".global").is_ok() {
44 return Ok(Src::Global);
45 }
46 stream.set_position(saved_pos);
47 }
48 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
49 let expected = &[".global"];
50 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
51 Err(crate::parser::unexpected_value(span, expected, found))
52 }
53 }
54
55 impl PtxParser for CpAsyncBulkPrefetchL2SrcLevelCacheHint {
56 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
57 stream.expect_string("cp")?;
58 stream.expect_string(".async")?;
59 let async_ = ();
60 stream.expect_complete()?;
61 stream.expect_string(".bulk")?;
62 let bulk = ();
63 stream.expect_complete()?;
64 stream.expect_string(".prefetch")?;
65 let prefetch = ();
66 stream.expect_complete()?;
67 stream.expect_string(".L2")?;
68 let l2 = ();
69 stream.expect_complete()?;
70 let src = Src::parse(stream)?;
71 stream.expect_complete()?;
72 let saved_pos = stream.position();
73 let level_cache_hint = match LevelCacheHint::parse(stream) {
74 Ok(val) => Some(val),
75 Err(_) => {
76 stream.set_position(saved_pos);
77 None
78 }
79 };
80 stream.expect_complete()?;
81 let srcmem = AddressOperand::parse(stream)?;
82 stream.expect_complete()?;
83 stream.expect(&PtxToken::Comma)?;
84 let size = GeneralOperand::parse(stream)?;
85 stream.expect_complete()?;
86 let saved_pos = stream.position();
87 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
88 if !has_comma {
89 stream.set_position(saved_pos);
90 }
91 let saved_pos = stream.position();
92 let cache_policy = match GeneralOperand::parse(stream) {
93 Ok(val) => Some(val),
94 Err(_) => {
95 stream.set_position(saved_pos);
96 None
97 }
98 };
99 stream.expect_complete()?;
100 stream.expect_complete()?;
101 stream.expect(&PtxToken::Semicolon)?;
102 Ok(CpAsyncBulkPrefetchL2SrcLevelCacheHint {
103 async_,
104 bulk,
105 prefetch,
106 l2,
107 src,
108 level_cache_hint,
109 srcmem,
110 size,
111 cache_policy,
112 })
113 }
114 }
115
116
117}
118