ptx_parser/parser/instruction/
mbarrier_arrive.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::mbarrier_arrive::section_0::*;
21
22 impl PtxParser for Scope {
27 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
28 {
30 let saved_pos = stream.position();
31 if stream.expect_string(".cluster").is_ok() {
32 return Ok(Scope::Cluster);
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(".cta").is_ok() {
41 return Ok(Scope::Cta);
42 }
43 stream.set_position(saved_pos);
44 }
45 stream.set_position(saved_pos);
46 let span = stream
47 .peek()
48 .map(|(_, s)| s.clone())
49 .unwrap_or(Span { start: 0, end: 0 });
50 let expected = &[".cluster", ".cta"];
51 let found = stream
52 .peek()
53 .map(|(t, _)| format!("{:?}", t))
54 .unwrap_or_else(|_| "<end of input>".to_string());
55 Err(crate::parser::unexpected_value(span, expected, found))
56 }
57 }
58
59 impl PtxParser for Sem {
60 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
61 {
63 let saved_pos = stream.position();
64 if stream.expect_string(".release").is_ok() {
65 return Ok(Sem::Release);
66 }
67 stream.set_position(saved_pos);
68 }
69 let saved_pos = stream.position();
70 {
72 let saved_pos = stream.position();
73 if stream.expect_string(".relaxed").is_ok() {
74 return Ok(Sem::Relaxed);
75 }
76 stream.set_position(saved_pos);
77 }
78 stream.set_position(saved_pos);
79 let span = stream
80 .peek()
81 .map(|(_, s)| s.clone())
82 .unwrap_or(Span { start: 0, end: 0 });
83 let expected = &[".release", ".relaxed"];
84 let found = stream
85 .peek()
86 .map(|(t, _)| format!("{:?}", t))
87 .unwrap_or_else(|_| "<end of input>".to_string());
88 Err(crate::parser::unexpected_value(span, expected, found))
89 }
90 }
91
92 impl PtxParser for State {
93 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
94 {
96 let saved_pos = stream.position();
97 if stream.expect_string(".shared::cta").is_ok() {
98 return Ok(State::SharedCta);
99 }
100 stream.set_position(saved_pos);
101 }
102 let saved_pos = stream.position();
103 {
105 let saved_pos = stream.position();
106 if stream.expect_string(".shared").is_ok() {
107 return Ok(State::Shared);
108 }
109 stream.set_position(saved_pos);
110 }
111 stream.set_position(saved_pos);
112 let span = stream
113 .peek()
114 .map(|(_, s)| s.clone())
115 .unwrap_or(Span { start: 0, end: 0 });
116 let expected = &[".shared::cta", ".shared"];
117 let found = stream
118 .peek()
119 .map(|(t, _)| format!("{:?}", t))
120 .unwrap_or_else(|_| "<end of input>".to_string());
121 Err(crate::parser::unexpected_value(span, expected, found))
122 }
123 }
124
125 impl PtxParser for MbarrierArriveSemScopeStateB64 {
126 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
127 stream.expect_string("mbarrier")?;
128 stream.expect_string(".arrive")?;
129 let arrive = ();
130 stream.expect_complete()?;
131 let saved_pos = stream.position();
132 let sem = match Sem::parse(stream) {
133 Ok(val) => Some(val),
134 Err(_) => {
135 stream.set_position(saved_pos);
136 None
137 }
138 };
139 stream.expect_complete()?;
140 let saved_pos = stream.position();
141 let scope = match Scope::parse(stream) {
142 Ok(val) => Some(val),
143 Err(_) => {
144 stream.set_position(saved_pos);
145 None
146 }
147 };
148 stream.expect_complete()?;
149 let saved_pos = stream.position();
150 let state = match State::parse(stream) {
151 Ok(val) => Some(val),
152 Err(_) => {
153 stream.set_position(saved_pos);
154 None
155 }
156 };
157 stream.expect_complete()?;
158 stream.expect_string(".b64")?;
159 let b64 = ();
160 stream.expect_complete()?;
161 let state2 = GeneralOperand::parse(stream)?;
162 stream.expect_complete()?;
163 stream.expect(&PtxToken::Comma)?;
164 let addr = AddressOperand::parse(stream)?;
165 stream.expect_complete()?;
166 let saved_pos = stream.position();
167 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
168 if !has_comma {
169 stream.set_position(saved_pos);
170 }
171 let saved_pos = stream.position();
172 let count = match GeneralOperand::parse(stream) {
173 Ok(val) => Some(val),
174 Err(_) => {
175 stream.set_position(saved_pos);
176 None
177 }
178 };
179 stream.expect_complete()?;
180 stream.expect_complete()?;
181 stream.expect(&PtxToken::Semicolon)?;
182 Ok(MbarrierArriveSemScopeStateB64 {
183 arrive,
184 sem,
185 scope,
186 state,
187 b64,
188 state2,
189 addr,
190 count,
191 })
192 }
193 }
194
195 impl PtxParser for MbarrierArriveSemScopeSharedClusterB64 {
196 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
197 stream.expect_string("mbarrier")?;
198 stream.expect_string(".arrive")?;
199 let arrive = ();
200 stream.expect_complete()?;
201 let saved_pos = stream.position();
202 let sem = match Sem::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 scope = match Scope::parse(stream) {
212 Ok(val) => Some(val),
213 Err(_) => {
214 stream.set_position(saved_pos);
215 None
216 }
217 };
218 stream.expect_complete()?;
219 let saved_pos = stream.position();
220 let shared_cluster = stream.expect_string(".shared::cluster").is_ok();
221 if !shared_cluster {
222 stream.set_position(saved_pos);
223 }
224 stream.expect_complete()?;
225 stream.expect_string(".b64")?;
226 let b64 = ();
227 stream.expect_complete()?;
228 let operand = GeneralOperand::parse(stream)?;
229 stream.expect_complete()?;
230 stream.expect(&PtxToken::Comma)?;
231 let addr = AddressOperand::parse(stream)?;
232 stream.expect_complete()?;
233 let saved_pos = stream.position();
234 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
235 if !has_comma {
236 stream.set_position(saved_pos);
237 }
238 let saved_pos = stream.position();
239 let count = match GeneralOperand::parse(stream) {
240 Ok(val) => Some(val),
241 Err(_) => {
242 stream.set_position(saved_pos);
243 None
244 }
245 };
246 stream.expect_complete()?;
247 stream.expect_complete()?;
248 stream.expect(&PtxToken::Semicolon)?;
249 Ok(MbarrierArriveSemScopeSharedClusterB64 {
250 arrive,
251 sem,
252 scope,
253 shared_cluster,
254 b64,
255 operand,
256 addr,
257 count,
258 })
259 }
260 }
261
262 impl PtxParser for MbarrierArriveExpectTxSemScopeStateB64 {
263 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
264 stream.expect_string("mbarrier")?;
265 stream.expect_string(".arrive")?;
266 let arrive = ();
267 stream.expect_complete()?;
268 stream.expect_string(".expect_tx")?;
269 let expect_tx = ();
270 stream.expect_complete()?;
271 let saved_pos = stream.position();
272 let sem = match Sem::parse(stream) {
273 Ok(val) => Some(val),
274 Err(_) => {
275 stream.set_position(saved_pos);
276 None
277 }
278 };
279 stream.expect_complete()?;
280 let saved_pos = stream.position();
281 let scope = match Scope::parse(stream) {
282 Ok(val) => Some(val),
283 Err(_) => {
284 stream.set_position(saved_pos);
285 None
286 }
287 };
288 stream.expect_complete()?;
289 let saved_pos = stream.position();
290 let state = match State::parse(stream) {
291 Ok(val) => Some(val),
292 Err(_) => {
293 stream.set_position(saved_pos);
294 None
295 }
296 };
297 stream.expect_complete()?;
298 stream.expect_string(".b64")?;
299 let b64 = ();
300 stream.expect_complete()?;
301 let state2 = GeneralOperand::parse(stream)?;
302 stream.expect_complete()?;
303 stream.expect(&PtxToken::Comma)?;
304 let addr = AddressOperand::parse(stream)?;
305 stream.expect_complete()?;
306 stream.expect(&PtxToken::Comma)?;
307 let txcount = GeneralOperand::parse(stream)?;
308 stream.expect_complete()?;
309 stream.expect_complete()?;
310 stream.expect(&PtxToken::Semicolon)?;
311 Ok(MbarrierArriveExpectTxSemScopeStateB64 {
312 arrive,
313 expect_tx,
314 sem,
315 scope,
316 state,
317 b64,
318 state2,
319 addr,
320 txcount,
321 })
322 }
323 }
324
325 impl PtxParser for MbarrierArriveExpectTxSemScopeSharedClusterB64 {
326 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
327 stream.expect_string("mbarrier")?;
328 stream.expect_string(".arrive")?;
329 let arrive = ();
330 stream.expect_complete()?;
331 stream.expect_string(".expect_tx")?;
332 let expect_tx = ();
333 stream.expect_complete()?;
334 let saved_pos = stream.position();
335 let sem = match Sem::parse(stream) {
336 Ok(val) => Some(val),
337 Err(_) => {
338 stream.set_position(saved_pos);
339 None
340 }
341 };
342 stream.expect_complete()?;
343 let saved_pos = stream.position();
344 let scope = match Scope::parse(stream) {
345 Ok(val) => Some(val),
346 Err(_) => {
347 stream.set_position(saved_pos);
348 None
349 }
350 };
351 stream.expect_complete()?;
352 let saved_pos = stream.position();
353 let shared_cluster = stream.expect_string(".shared::cluster").is_ok();
354 if !shared_cluster {
355 stream.set_position(saved_pos);
356 }
357 stream.expect_complete()?;
358 stream.expect_string(".b64")?;
359 let b64 = ();
360 stream.expect_complete()?;
361 let operand = GeneralOperand::parse(stream)?;
362 stream.expect_complete()?;
363 stream.expect(&PtxToken::Comma)?;
364 let addr = AddressOperand::parse(stream)?;
365 stream.expect_complete()?;
366 stream.expect(&PtxToken::Comma)?;
367 let txcount = GeneralOperand::parse(stream)?;
368 stream.expect_complete()?;
369 stream.expect_complete()?;
370 stream.expect(&PtxToken::Semicolon)?;
371 Ok(MbarrierArriveExpectTxSemScopeSharedClusterB64 {
372 arrive,
373 expect_tx,
374 sem,
375 scope,
376 shared_cluster,
377 b64,
378 operand,
379 addr,
380 txcount,
381 })
382 }
383 }
384
385 impl PtxParser for MbarrierArriveNocompleteReleaseCtaStateB64 {
386 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
387 stream.expect_string("mbarrier")?;
388 stream.expect_string(".arrive")?;
389 let arrive = ();
390 stream.expect_complete()?;
391 stream.expect_string(".noComplete")?;
392 let nocomplete = ();
393 stream.expect_complete()?;
394 let saved_pos = stream.position();
395 let release = stream.expect_string(".release").is_ok();
396 if !release {
397 stream.set_position(saved_pos);
398 }
399 stream.expect_complete()?;
400 let saved_pos = stream.position();
401 let cta = stream.expect_string(".cta").is_ok();
402 if !cta {
403 stream.set_position(saved_pos);
404 }
405 stream.expect_complete()?;
406 let saved_pos = stream.position();
407 let state = match State::parse(stream) {
408 Ok(val) => Some(val),
409 Err(_) => {
410 stream.set_position(saved_pos);
411 None
412 }
413 };
414 stream.expect_complete()?;
415 stream.expect_string(".b64")?;
416 let b64 = ();
417 stream.expect_complete()?;
418 let state2 = GeneralOperand::parse(stream)?;
419 stream.expect_complete()?;
420 stream.expect(&PtxToken::Comma)?;
421 let addr = AddressOperand::parse(stream)?;
422 stream.expect_complete()?;
423 stream.expect(&PtxToken::Comma)?;
424 let count = GeneralOperand::parse(stream)?;
425 stream.expect_complete()?;
426 stream.expect_complete()?;
427 stream.expect(&PtxToken::Semicolon)?;
428 Ok(MbarrierArriveNocompleteReleaseCtaStateB64 {
429 arrive,
430 nocomplete,
431 release,
432 cta,
433 state,
434 b64,
435 state2,
436 addr,
437 count,
438 })
439 }
440 }
441}