ptx_parser/parser/instruction/
mbarrier_test_wait.rs1#![allow(unused)]
12
13use crate::lexer::PtxToken;
14use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
15use crate::r#type::common::*;
16
17pub mod section_0 {
18 use super::*;
19 use crate::r#type::instruction::mbarrier_test_wait::section_0::*;
20
21 impl PtxParser for Scope {
26 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
27 {
29 let saved_pos = stream.position();
30 if stream.expect_string(".cluster").is_ok() {
31 return Ok(Scope::Cluster);
32 }
33 stream.set_position(saved_pos);
34 }
35 let saved_pos = stream.position();
36 {
38 let saved_pos = stream.position();
39 if stream.expect_string(".cta").is_ok() {
40 return Ok(Scope::Cta);
41 }
42 stream.set_position(saved_pos);
43 }
44 stream.set_position(saved_pos);
45 let span = stream
46 .peek()
47 .map(|(_, s)| s.clone())
48 .unwrap_or(Span { start: 0, end: 0 });
49 let expected = &[".cluster", ".cta"];
50 let found = stream
51 .peek()
52 .map(|(t, _)| format!("{:?}", t))
53 .unwrap_or_else(|_| "<end of input>".to_string());
54 Err(crate::parser::unexpected_value(span, expected, found))
55 }
56 }
57
58 impl PtxParser for Sem {
59 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
60 {
62 let saved_pos = stream.position();
63 if stream.expect_string(".acquire").is_ok() {
64 return Ok(Sem::Acquire);
65 }
66 stream.set_position(saved_pos);
67 }
68 let saved_pos = stream.position();
69 {
71 let saved_pos = stream.position();
72 if stream.expect_string(".relaxed").is_ok() {
73 return Ok(Sem::Relaxed);
74 }
75 stream.set_position(saved_pos);
76 }
77 stream.set_position(saved_pos);
78 let span = stream
79 .peek()
80 .map(|(_, s)| s.clone())
81 .unwrap_or(Span { start: 0, end: 0 });
82 let expected = &[".acquire", ".relaxed"];
83 let found = stream
84 .peek()
85 .map(|(t, _)| format!("{:?}", t))
86 .unwrap_or_else(|_| "<end of input>".to_string());
87 Err(crate::parser::unexpected_value(span, expected, found))
88 }
89 }
90
91 impl PtxParser for State {
92 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
93 {
95 let saved_pos = stream.position();
96 if stream.expect_string(".shared::cta").is_ok() {
97 return Ok(State::SharedCta);
98 }
99 stream.set_position(saved_pos);
100 }
101 let saved_pos = stream.position();
102 {
104 let saved_pos = stream.position();
105 if stream.expect_string(".shared").is_ok() {
106 return Ok(State::Shared);
107 }
108 stream.set_position(saved_pos);
109 }
110 stream.set_position(saved_pos);
111 let span = stream
112 .peek()
113 .map(|(_, s)| s.clone())
114 .unwrap_or(Span { start: 0, end: 0 });
115 let expected = &[".shared::cta", ".shared"];
116 let found = stream
117 .peek()
118 .map(|(t, _)| format!("{:?}", t))
119 .unwrap_or_else(|_| "<end of input>".to_string());
120 Err(crate::parser::unexpected_value(span, expected, found))
121 }
122 }
123
124 impl PtxParser for MbarrierTestWaitSemScopeStateB64 {
125 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
126 stream.expect_string("mbarrier")?;
127 stream.expect_string(".test_wait")?;
128 let test_wait = ();
129 stream.expect_complete()?;
130 let saved_pos = stream.position();
131 let sem = match Sem::parse(stream) {
132 Ok(val) => Some(val),
133 Err(_) => {
134 stream.set_position(saved_pos);
135 None
136 }
137 };
138 stream.expect_complete()?;
139 let saved_pos = stream.position();
140 let scope = match Scope::parse(stream) {
141 Ok(val) => Some(val),
142 Err(_) => {
143 stream.set_position(saved_pos);
144 None
145 }
146 };
147 stream.expect_complete()?;
148 let saved_pos = stream.position();
149 let state = match State::parse(stream) {
150 Ok(val) => Some(val),
151 Err(_) => {
152 stream.set_position(saved_pos);
153 None
154 }
155 };
156 stream.expect_complete()?;
157 stream.expect_string(".b64")?;
158 let b64 = ();
159 stream.expect_complete()?;
160 let waitcomplete = GeneralOperand::parse(stream)?;
161 stream.expect_complete()?;
162 stream.expect(&PtxToken::Comma)?;
163 let addr = AddressOperand::parse(stream)?;
164 stream.expect_complete()?;
165 stream.expect(&PtxToken::Comma)?;
166 let state2 = GeneralOperand::parse(stream)?;
167 stream.expect_complete()?;
168 stream.expect_complete()?;
169 stream.expect(&PtxToken::Semicolon)?;
170 Ok(MbarrierTestWaitSemScopeStateB64 {
171 test_wait,
172 sem,
173 scope,
174 state,
175 b64,
176 waitcomplete,
177 addr,
178 state2,
179 })
180 }
181 }
182
183 impl PtxParser for MbarrierTestWaitParitySemScopeStateB64 {
184 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
185 stream.expect_string("mbarrier")?;
186 stream.expect_string(".test_wait")?;
187 let test_wait = ();
188 stream.expect_complete()?;
189 stream.expect_string(".parity")?;
190 let parity = ();
191 stream.expect_complete()?;
192 let saved_pos = stream.position();
193 let sem = match Sem::parse(stream) {
194 Ok(val) => Some(val),
195 Err(_) => {
196 stream.set_position(saved_pos);
197 None
198 }
199 };
200 stream.expect_complete()?;
201 let saved_pos = stream.position();
202 let scope = match Scope::parse(stream) {
203 Ok(val) => Some(val),
204 Err(_) => {
205 stream.set_position(saved_pos);
206 None
207 }
208 };
209 stream.expect_complete()?;
210 let saved_pos = stream.position();
211 let state = match State::parse(stream) {
212 Ok(val) => Some(val),
213 Err(_) => {
214 stream.set_position(saved_pos);
215 None
216 }
217 };
218 stream.expect_complete()?;
219 stream.expect_string(".b64")?;
220 let b64 = ();
221 stream.expect_complete()?;
222 let waitcomplete = GeneralOperand::parse(stream)?;
223 stream.expect_complete()?;
224 stream.expect(&PtxToken::Comma)?;
225 let addr = AddressOperand::parse(stream)?;
226 stream.expect_complete()?;
227 stream.expect(&PtxToken::Comma)?;
228 let phaseparity = GeneralOperand::parse(stream)?;
229 stream.expect_complete()?;
230 stream.expect_complete()?;
231 stream.expect(&PtxToken::Semicolon)?;
232 Ok(MbarrierTestWaitParitySemScopeStateB64 {
233 test_wait,
234 parity,
235 sem,
236 scope,
237 state,
238 b64,
239 waitcomplete,
240 addr,
241 phaseparity,
242 })
243 }
244 }
245
246 impl PtxParser for MbarrierTryWaitSemScopeStateB64 {
247 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
248 stream.expect_string("mbarrier")?;
249 stream.expect_string(".try_wait")?;
250 let try_wait = ();
251 stream.expect_complete()?;
252 let saved_pos = stream.position();
253 let sem = match Sem::parse(stream) {
254 Ok(val) => Some(val),
255 Err(_) => {
256 stream.set_position(saved_pos);
257 None
258 }
259 };
260 stream.expect_complete()?;
261 let saved_pos = stream.position();
262 let scope = match Scope::parse(stream) {
263 Ok(val) => Some(val),
264 Err(_) => {
265 stream.set_position(saved_pos);
266 None
267 }
268 };
269 stream.expect_complete()?;
270 let saved_pos = stream.position();
271 let state = match State::parse(stream) {
272 Ok(val) => Some(val),
273 Err(_) => {
274 stream.set_position(saved_pos);
275 None
276 }
277 };
278 stream.expect_complete()?;
279 stream.expect_string(".b64")?;
280 let b64 = ();
281 stream.expect_complete()?;
282 let waitcomplete = GeneralOperand::parse(stream)?;
283 stream.expect_complete()?;
284 stream.expect(&PtxToken::Comma)?;
285 let addr = AddressOperand::parse(stream)?;
286 stream.expect_complete()?;
287 stream.expect(&PtxToken::Comma)?;
288 let state2 = GeneralOperand::parse(stream)?;
289 stream.expect_complete()?;
290 let saved_pos = stream.position();
291 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
292 if !has_comma {
293 stream.set_position(saved_pos);
294 }
295 let saved_pos = stream.position();
296 let suspendtimehint = match GeneralOperand::parse(stream) {
297 Ok(val) => Some(val),
298 Err(_) => {
299 stream.set_position(saved_pos);
300 None
301 }
302 };
303 stream.expect_complete()?;
304 stream.expect_complete()?;
305 stream.expect(&PtxToken::Semicolon)?;
306 Ok(MbarrierTryWaitSemScopeStateB64 {
307 try_wait,
308 sem,
309 scope,
310 state,
311 b64,
312 waitcomplete,
313 addr,
314 state2,
315 suspendtimehint,
316 })
317 }
318 }
319
320 impl PtxParser for MbarrierTryWaitParitySemScopeStateB64 {
321 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
322 stream.expect_string("mbarrier")?;
323 stream.expect_string(".try_wait")?;
324 let try_wait = ();
325 stream.expect_complete()?;
326 stream.expect_string(".parity")?;
327 let parity = ();
328 stream.expect_complete()?;
329 let saved_pos = stream.position();
330 let sem = match Sem::parse(stream) {
331 Ok(val) => Some(val),
332 Err(_) => {
333 stream.set_position(saved_pos);
334 None
335 }
336 };
337 stream.expect_complete()?;
338 let saved_pos = stream.position();
339 let scope = match Scope::parse(stream) {
340 Ok(val) => Some(val),
341 Err(_) => {
342 stream.set_position(saved_pos);
343 None
344 }
345 };
346 stream.expect_complete()?;
347 let saved_pos = stream.position();
348 let state = match State::parse(stream) {
349 Ok(val) => Some(val),
350 Err(_) => {
351 stream.set_position(saved_pos);
352 None
353 }
354 };
355 stream.expect_complete()?;
356 stream.expect_string(".b64")?;
357 let b64 = ();
358 stream.expect_complete()?;
359 let waitcomplete = GeneralOperand::parse(stream)?;
360 stream.expect_complete()?;
361 stream.expect(&PtxToken::Comma)?;
362 let addr = AddressOperand::parse(stream)?;
363 stream.expect_complete()?;
364 stream.expect(&PtxToken::Comma)?;
365 let phaseparity = GeneralOperand::parse(stream)?;
366 stream.expect_complete()?;
367 let saved_pos = stream.position();
368 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
369 if !has_comma {
370 stream.set_position(saved_pos);
371 }
372 let saved_pos = stream.position();
373 let suspendtimehint = match GeneralOperand::parse(stream) {
374 Ok(val) => Some(val),
375 Err(_) => {
376 stream.set_position(saved_pos);
377 None
378 }
379 };
380 stream.expect_complete()?;
381 stream.expect_complete()?;
382 stream.expect(&PtxToken::Semicolon)?;
383 Ok(MbarrierTryWaitParitySemScopeStateB64 {
384 try_wait,
385 parity,
386 sem,
387 scope,
388 state,
389 b64,
390 waitcomplete,
391 addr,
392 phaseparity,
393 suspendtimehint,
394 })
395 }
396 }
397}