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