ptx_parser/parser/instruction/
st_async.rs1#![allow(unused)]
24
25use crate::lexer::PtxToken;
26use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
27use crate::r#type::common::*;
28
29pub mod section_0 {
30 use super::*;
31 use crate::r#type::instruction::st_async::section_0::*;
32
33 impl PtxParser for CompletionMechanism {
38 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
39 {
41 let saved_pos = stream.position();
42 if stream.expect_string(".mbarrier::complete_tx::bytes").is_ok() {
43 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
44 }
45 stream.set_position(saved_pos);
46 }
47 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
48 let expected = &[".mbarrier::complete_tx::bytes"];
49 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
50 Err(crate::parser::unexpected_value(span, expected, found))
51 }
52 }
53
54 impl PtxParser for Scope {
55 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
56 {
58 let saved_pos = stream.position();
59 if stream.expect_string(".cluster").is_ok() {
60 return Ok(Scope::Cluster);
61 }
62 stream.set_position(saved_pos);
63 }
64 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
65 let expected = &[".cluster"];
66 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
67 Err(crate::parser::unexpected_value(span, expected, found))
68 }
69 }
70
71 impl PtxParser for Sem {
72 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
73 {
75 let saved_pos = stream.position();
76 if stream.expect_string(".weak").is_ok() {
77 return Ok(Sem::Weak);
78 }
79 stream.set_position(saved_pos);
80 }
81 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
82 let expected = &[".weak"];
83 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
84 Err(crate::parser::unexpected_value(span, expected, found))
85 }
86 }
87
88 impl PtxParser for Ss {
89 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
90 {
92 let saved_pos = stream.position();
93 if stream.expect_string(".shared::cluster").is_ok() {
94 return Ok(Ss::SharedCluster);
95 }
96 stream.set_position(saved_pos);
97 }
98 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
99 let expected = &[".shared::cluster"];
100 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
101 Err(crate::parser::unexpected_value(span, expected, found))
102 }
103 }
104
105 impl PtxParser for Type {
106 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
107 {
109 let saved_pos = stream.position();
110 if stream.expect_string(".b32").is_ok() {
111 return Ok(Type::B32);
112 }
113 stream.set_position(saved_pos);
114 }
115 let saved_pos = stream.position();
116 {
118 let saved_pos = stream.position();
119 if stream.expect_string(".b64").is_ok() {
120 return Ok(Type::B64);
121 }
122 stream.set_position(saved_pos);
123 }
124 stream.set_position(saved_pos);
125 let saved_pos = stream.position();
126 {
128 let saved_pos = stream.position();
129 if stream.expect_string(".u32").is_ok() {
130 return Ok(Type::U32);
131 }
132 stream.set_position(saved_pos);
133 }
134 stream.set_position(saved_pos);
135 let saved_pos = stream.position();
136 {
138 let saved_pos = stream.position();
139 if stream.expect_string(".u64").is_ok() {
140 return Ok(Type::U64);
141 }
142 stream.set_position(saved_pos);
143 }
144 stream.set_position(saved_pos);
145 let saved_pos = stream.position();
146 {
148 let saved_pos = stream.position();
149 if stream.expect_string(".s32").is_ok() {
150 return Ok(Type::S32);
151 }
152 stream.set_position(saved_pos);
153 }
154 stream.set_position(saved_pos);
155 let saved_pos = stream.position();
156 {
158 let saved_pos = stream.position();
159 if stream.expect_string(".s64").is_ok() {
160 return Ok(Type::S64);
161 }
162 stream.set_position(saved_pos);
163 }
164 stream.set_position(saved_pos);
165 let saved_pos = stream.position();
166 {
168 let saved_pos = stream.position();
169 if stream.expect_string(".f32").is_ok() {
170 return Ok(Type::F32);
171 }
172 stream.set_position(saved_pos);
173 }
174 stream.set_position(saved_pos);
175 let saved_pos = stream.position();
176 {
178 let saved_pos = stream.position();
179 if stream.expect_string(".f64").is_ok() {
180 return Ok(Type::F64);
181 }
182 stream.set_position(saved_pos);
183 }
184 stream.set_position(saved_pos);
185 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
186 let expected = &[".b32", ".b64", ".u32", ".u64", ".s32", ".s64", ".f32", ".f64"];
187 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
188 Err(crate::parser::unexpected_value(span, expected, found))
189 }
190 }
191
192 impl PtxParser for Vec {
193 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
194 {
196 let saved_pos = stream.position();
197 if stream.expect_string(".v2").is_ok() {
198 return Ok(Vec::V2);
199 }
200 stream.set_position(saved_pos);
201 }
202 let saved_pos = stream.position();
203 {
205 let saved_pos = stream.position();
206 if stream.expect_string(".v4").is_ok() {
207 return Ok(Vec::V4);
208 }
209 stream.set_position(saved_pos);
210 }
211 stream.set_position(saved_pos);
212 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
213 let expected = &[".v2", ".v4"];
214 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
215 Err(crate::parser::unexpected_value(span, expected, found))
216 }
217 }
218
219 impl PtxParser for StAsyncSemScopeSsCompletionMechanismVecType {
220 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
221 stream.expect_string("st")?;
222 stream.expect_string(".async")?;
223 let async_ = ();
224 stream.expect_complete()?;
225 let saved_pos = stream.position();
226 let sem = match Sem::parse(stream) {
227 Ok(val) => Some(val),
228 Err(_) => {
229 stream.set_position(saved_pos);
230 None
231 }
232 };
233 stream.expect_complete()?;
234 let saved_pos = stream.position();
235 let scope = match Scope::parse(stream) {
236 Ok(val) => Some(val),
237 Err(_) => {
238 stream.set_position(saved_pos);
239 None
240 }
241 };
242 stream.expect_complete()?;
243 let saved_pos = stream.position();
244 let ss = match Ss::parse(stream) {
245 Ok(val) => Some(val),
246 Err(_) => {
247 stream.set_position(saved_pos);
248 None
249 }
250 };
251 stream.expect_complete()?;
252 let saved_pos = stream.position();
253 let completion_mechanism = match CompletionMechanism::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 vec = match Vec::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 type_ = Type::parse(stream)?;
271 stream.expect_complete()?;
272 let a = AddressOperand::parse(stream)?;
273 stream.expect_complete()?;
274 stream.expect(&PtxToken::Comma)?;
275 let b = GeneralOperand::parse(stream)?;
276 stream.expect_complete()?;
277 stream.expect(&PtxToken::Comma)?;
278 let mbar = AddressOperand::parse(stream)?;
279 stream.expect_complete()?;
280 stream.expect_complete()?;
281 stream.expect(&PtxToken::Semicolon)?;
282 Ok(StAsyncSemScopeSsCompletionMechanismVecType {
283 async_,
284 sem,
285 scope,
286 ss,
287 completion_mechanism,
288 vec,
289 type_,
290 a,
291 b,
292 mbar,
293 })
294 }
295 }
296
297
298}
299
300pub mod section_1 {
301 use super::*;
302 use crate::r#type::instruction::st_async::section_1::*;
303
304 impl PtxParser for Scope {
309 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
310 {
312 let saved_pos = stream.position();
313 if stream.expect_string(".gpu").is_ok() {
314 return Ok(Scope::Gpu);
315 }
316 stream.set_position(saved_pos);
317 }
318 let saved_pos = stream.position();
319 {
321 let saved_pos = stream.position();
322 if stream.expect_string(".sys").is_ok() {
323 return Ok(Scope::Sys);
324 }
325 stream.set_position(saved_pos);
326 }
327 stream.set_position(saved_pos);
328 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
329 let expected = &[".gpu", ".sys"];
330 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
331 Err(crate::parser::unexpected_value(span, expected, found))
332 }
333 }
334
335 impl PtxParser for Sem {
336 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
337 {
339 let saved_pos = stream.position();
340 if stream.expect_string(".release").is_ok() {
341 return Ok(Sem::Release);
342 }
343 stream.set_position(saved_pos);
344 }
345 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
346 let expected = &[".release"];
347 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
348 Err(crate::parser::unexpected_value(span, expected, found))
349 }
350 }
351
352 impl PtxParser for Ss {
353 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
354 {
356 let saved_pos = stream.position();
357 if stream.expect_string(".global").is_ok() {
358 return Ok(Ss::Global);
359 }
360 stream.set_position(saved_pos);
361 }
362 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
363 let expected = &[".global"];
364 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
365 Err(crate::parser::unexpected_value(span, expected, found))
366 }
367 }
368
369 impl PtxParser for Type {
370 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
371 {
373 let saved_pos = stream.position();
374 if stream.expect_string(".b16").is_ok() {
375 return Ok(Type::B16);
376 }
377 stream.set_position(saved_pos);
378 }
379 let saved_pos = stream.position();
380 {
382 let saved_pos = stream.position();
383 if stream.expect_string(".b32").is_ok() {
384 return Ok(Type::B32);
385 }
386 stream.set_position(saved_pos);
387 }
388 stream.set_position(saved_pos);
389 let saved_pos = stream.position();
390 {
392 let saved_pos = stream.position();
393 if stream.expect_string(".b64").is_ok() {
394 return Ok(Type::B64);
395 }
396 stream.set_position(saved_pos);
397 }
398 stream.set_position(saved_pos);
399 let saved_pos = stream.position();
400 {
402 let saved_pos = stream.position();
403 if stream.expect_string(".u16").is_ok() {
404 return Ok(Type::U16);
405 }
406 stream.set_position(saved_pos);
407 }
408 stream.set_position(saved_pos);
409 let saved_pos = stream.position();
410 {
412 let saved_pos = stream.position();
413 if stream.expect_string(".u32").is_ok() {
414 return Ok(Type::U32);
415 }
416 stream.set_position(saved_pos);
417 }
418 stream.set_position(saved_pos);
419 let saved_pos = stream.position();
420 {
422 let saved_pos = stream.position();
423 if stream.expect_string(".u64").is_ok() {
424 return Ok(Type::U64);
425 }
426 stream.set_position(saved_pos);
427 }
428 stream.set_position(saved_pos);
429 let saved_pos = stream.position();
430 {
432 let saved_pos = stream.position();
433 if stream.expect_string(".s16").is_ok() {
434 return Ok(Type::S16);
435 }
436 stream.set_position(saved_pos);
437 }
438 stream.set_position(saved_pos);
439 let saved_pos = stream.position();
440 {
442 let saved_pos = stream.position();
443 if stream.expect_string(".s32").is_ok() {
444 return Ok(Type::S32);
445 }
446 stream.set_position(saved_pos);
447 }
448 stream.set_position(saved_pos);
449 let saved_pos = stream.position();
450 {
452 let saved_pos = stream.position();
453 if stream.expect_string(".s64").is_ok() {
454 return Ok(Type::S64);
455 }
456 stream.set_position(saved_pos);
457 }
458 stream.set_position(saved_pos);
459 let saved_pos = stream.position();
460 {
462 let saved_pos = stream.position();
463 if stream.expect_string(".f32").is_ok() {
464 return Ok(Type::F32);
465 }
466 stream.set_position(saved_pos);
467 }
468 stream.set_position(saved_pos);
469 let saved_pos = stream.position();
470 {
472 let saved_pos = stream.position();
473 if stream.expect_string(".f64").is_ok() {
474 return Ok(Type::F64);
475 }
476 stream.set_position(saved_pos);
477 }
478 stream.set_position(saved_pos);
479 let saved_pos = stream.position();
480 {
482 let saved_pos = stream.position();
483 if stream.expect_string(".b8").is_ok() {
484 return Ok(Type::B8);
485 }
486 stream.set_position(saved_pos);
487 }
488 stream.set_position(saved_pos);
489 let saved_pos = stream.position();
490 {
492 let saved_pos = stream.position();
493 if stream.expect_string(".u8").is_ok() {
494 return Ok(Type::U8);
495 }
496 stream.set_position(saved_pos);
497 }
498 stream.set_position(saved_pos);
499 let saved_pos = stream.position();
500 {
502 let saved_pos = stream.position();
503 if stream.expect_string(".s8").is_ok() {
504 return Ok(Type::S8);
505 }
506 stream.set_position(saved_pos);
507 }
508 stream.set_position(saved_pos);
509 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
510 let expected = &[".b16", ".b32", ".b64", ".u16", ".u32", ".u64", ".s16", ".s32", ".s64", ".f32", ".f64", ".b8", ".u8", ".s8"];
511 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
512 Err(crate::parser::unexpected_value(span, expected, found))
513 }
514 }
515
516 impl PtxParser for StAsyncMmioSemScopeSsType {
517 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
518 stream.expect_string("st")?;
519 stream.expect_string(".async")?;
520 let async_ = ();
521 stream.expect_complete()?;
522 let saved_pos = stream.position();
523 let mmio = stream.expect_string(".mmio").is_ok();
524 if !mmio {
525 stream.set_position(saved_pos);
526 }
527 stream.expect_complete()?;
528 let sem = Sem::parse(stream)?;
529 stream.expect_complete()?;
530 let scope = Scope::parse(stream)?;
531 stream.expect_complete()?;
532 let saved_pos = stream.position();
533 let ss = match Ss::parse(stream) {
534 Ok(val) => Some(val),
535 Err(_) => {
536 stream.set_position(saved_pos);
537 None
538 }
539 };
540 stream.expect_complete()?;
541 let type_ = Type::parse(stream)?;
542 stream.expect_complete()?;
543 let a = AddressOperand::parse(stream)?;
544 stream.expect_complete()?;
545 stream.expect(&PtxToken::Comma)?;
546 let b = GeneralOperand::parse(stream)?;
547 stream.expect_complete()?;
548 stream.expect_complete()?;
549 stream.expect(&PtxToken::Semicolon)?;
550 Ok(StAsyncMmioSemScopeSsType {
551 async_,
552 mmio,
553 sem,
554 scope,
555 ss,
556 type_,
557 a,
558 b,
559 })
560 }
561 }
562
563
564}
565