ptx_parser/parser/instruction/
prefetch.rs1#![allow(unused)]
13
14use crate::lexer::PtxToken;
15use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
16use crate::r#type::common::*;
17
18pub mod section_0 {
19 use super::*;
20 use crate::r#type::instruction::prefetch::section_0::*;
21
22 impl PtxParser for Level {
27 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
28 {
30 let saved_pos = stream.position();
31 if stream.expect_string(".L1").is_ok() {
32 return Ok(Level::L1);
33 }
34 stream.set_position(saved_pos);
35 }
36 let saved_pos = stream.position();
37 {
39 let saved_pos = stream.position();
40 if stream.expect_string(".L2").is_ok() {
41 return Ok(Level::L2);
42 }
43 stream.set_position(saved_pos);
44 }
45 stream.set_position(saved_pos);
46 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
47 let expected = &[".L1", ".L2"];
48 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
49 Err(crate::parser::unexpected_value(span, expected, found))
50 }
51 }
52
53 impl PtxParser for LevelEvictionPriority {
54 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
55 {
57 let saved_pos = stream.position();
58 if stream.expect_string(".L2::evict_normal").is_ok() {
59 return Ok(LevelEvictionPriority::L2EvictNormal);
60 }
61 stream.set_position(saved_pos);
62 }
63 let saved_pos = stream.position();
64 {
66 let saved_pos = stream.position();
67 if stream.expect_string(".L2::evict_last").is_ok() {
68 return Ok(LevelEvictionPriority::L2EvictLast);
69 }
70 stream.set_position(saved_pos);
71 }
72 stream.set_position(saved_pos);
73 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
74 let expected = &[".L2::evict_normal", ".L2::evict_last"];
75 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
76 Err(crate::parser::unexpected_value(span, expected, found))
77 }
78 }
79
80 impl PtxParser for Space {
81 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
82 {
84 let saved_pos = stream.position();
85 if stream.expect_string(".global").is_ok() {
86 return Ok(Space::Global);
87 }
88 stream.set_position(saved_pos);
89 }
90 let saved_pos = stream.position();
91 {
93 let saved_pos = stream.position();
94 if stream.expect_string(".local").is_ok() {
95 return Ok(Space::Local);
96 }
97 stream.set_position(saved_pos);
98 }
99 stream.set_position(saved_pos);
100 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
101 let expected = &[".global", ".local"];
102 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
103 Err(crate::parser::unexpected_value(span, expected, found))
104 }
105 }
106
107 impl PtxParser for TensormapSpace {
108 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
109 {
111 let saved_pos = stream.position();
112 if stream.expect_string(".const").is_ok() {
113 return Ok(TensormapSpace::Const);
114 }
115 stream.set_position(saved_pos);
116 }
117 let saved_pos = stream.position();
118 {
120 let saved_pos = stream.position();
121 if stream.expect_string(".param").is_ok() {
122 return Ok(TensormapSpace::Param);
123 }
124 stream.set_position(saved_pos);
125 }
126 stream.set_position(saved_pos);
127 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
128 let expected = &[".const", ".param"];
129 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
130 Err(crate::parser::unexpected_value(span, expected, found))
131 }
132 }
133
134 impl PtxParser for PrefetchSpaceLevel {
135 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
136 stream.expect_string("prefetch")?;
137 let saved_pos = stream.position();
138 let space = match Space::parse(stream) {
139 Ok(val) => Some(val),
140 Err(_) => {
141 stream.set_position(saved_pos);
142 None
143 }
144 };
145 stream.expect_complete()?;
146 let level = Level::parse(stream)?;
147 stream.expect_complete()?;
148 let a = AddressOperand::parse(stream)?;
149 stream.expect_complete()?;
150 stream.expect_complete()?;
151 stream.expect(&PtxToken::Semicolon)?;
152 Ok(PrefetchSpaceLevel {
153 space,
154 level,
155 a,
156 })
157 }
158 }
159
160
161 impl PtxParser for PrefetchGlobalLevelEvictionPriority {
162 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
163 stream.expect_string("prefetch")?;
164 stream.expect_string(".global")?;
165 let global = ();
166 stream.expect_complete()?;
167 let level_eviction_priority = LevelEvictionPriority::parse(stream)?;
168 stream.expect_complete()?;
169 let a = AddressOperand::parse(stream)?;
170 stream.expect_complete()?;
171 stream.expect_complete()?;
172 stream.expect(&PtxToken::Semicolon)?;
173 Ok(PrefetchGlobalLevelEvictionPriority {
174 global,
175 level_eviction_priority,
176 a,
177 })
178 }
179 }
180
181
182 impl PtxParser for PrefetchuL1 {
183 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
184 stream.expect_string("prefetchu")?;
185 stream.expect_string(".L1")?;
186 let l1 = ();
187 stream.expect_complete()?;
188 let a = AddressOperand::parse(stream)?;
189 stream.expect_complete()?;
190 stream.expect_complete()?;
191 stream.expect(&PtxToken::Semicolon)?;
192 Ok(PrefetchuL1 {
193 l1,
194 a,
195 })
196 }
197 }
198
199
200 impl PtxParser for PrefetchTensormapSpaceTensormap {
201 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
202 stream.expect_string("prefetch")?;
203 let saved_pos = stream.position();
204 let tensormap_space = match TensormapSpace::parse(stream) {
205 Ok(val) => Some(val),
206 Err(_) => {
207 stream.set_position(saved_pos);
208 None
209 }
210 };
211 stream.expect_complete()?;
212 stream.expect_string(".tensormap")?;
213 let tensormap = ();
214 stream.expect_complete()?;
215 let a = AddressOperand::parse(stream)?;
216 stream.expect_complete()?;
217 stream.expect_complete()?;
218 stream.expect(&PtxToken::Semicolon)?;
219 Ok(PrefetchTensormapSpaceTensormap {
220 tensormap_space,
221 tensormap,
222 a,
223 })
224 }
225 }
226
227
228}
229