ptx_parser/parser/instruction/
membar.rs1#![allow(unused)]
28
29use crate::lexer::PtxToken;
30use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
31use crate::r#type::common::*;
32
33pub mod section_0 {
34 use super::*;
35 use crate::r#type::instruction::membar::section_0::*;
36
37 impl PtxParser for Level {
42 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
43 {
45 let saved_pos = stream.position();
46 if stream.expect_string(".cta").is_ok() {
47 return Ok(Level::Cta);
48 }
49 stream.set_position(saved_pos);
50 }
51 let saved_pos = stream.position();
52 {
54 let saved_pos = stream.position();
55 if stream.expect_string(".sys").is_ok() {
56 return Ok(Level::Sys);
57 }
58 stream.set_position(saved_pos);
59 }
60 stream.set_position(saved_pos);
61 let saved_pos = stream.position();
62 {
64 let saved_pos = stream.position();
65 if stream.expect_string(".gl").is_ok() {
66 return Ok(Level::Gl);
67 }
68 stream.set_position(saved_pos);
69 }
70 stream.set_position(saved_pos);
71 let span = stream
72 .peek()
73 .map(|(_, s)| s.clone())
74 .unwrap_or(Span { start: 0, end: 0 });
75 let expected = &[".cta", ".sys", ".gl"];
76 let found = stream
77 .peek()
78 .map(|(t, _)| format!("{:?}", t))
79 .unwrap_or_else(|_| "<end of input>".to_string());
80 Err(crate::parser::unexpected_value(span, expected, found))
81 }
82 }
83
84 impl PtxParser for OpRestrict {
85 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
86 {
88 let saved_pos = stream.position();
89 if stream.expect_string(".mbarrier_init").is_ok() {
90 return Ok(OpRestrict::MbarrierInit);
91 }
92 stream.set_position(saved_pos);
93 }
94 let span = stream
95 .peek()
96 .map(|(_, s)| s.clone())
97 .unwrap_or(Span { start: 0, end: 0 });
98 let expected = &[".mbarrier_init"];
99 let found = stream
100 .peek()
101 .map(|(t, _)| format!("{:?}", t))
102 .unwrap_or_else(|_| "<end of input>".to_string());
103 Err(crate::parser::unexpected_value(span, expected, found))
104 }
105 }
106
107 impl PtxParser for Proxykind {
108 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
109 {
111 let saved_pos = stream.position();
112 if stream.expect_string(".async.shared::cluster").is_ok() {
113 return Ok(Proxykind::AsyncSharedCluster);
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(".async.shared::cta").is_ok() {
122 return Ok(Proxykind::AsyncSharedCta);
123 }
124 stream.set_position(saved_pos);
125 }
126 stream.set_position(saved_pos);
127 let saved_pos = stream.position();
128 {
130 let saved_pos = stream.position();
131 if stream.expect_string(".async.global").is_ok() {
132 return Ok(Proxykind::AsyncGlobal);
133 }
134 stream.set_position(saved_pos);
135 }
136 stream.set_position(saved_pos);
137 let saved_pos = stream.position();
138 {
140 let saved_pos = stream.position();
141 if stream.expect_string(".alias").is_ok() {
142 return Ok(Proxykind::Alias);
143 }
144 stream.set_position(saved_pos);
145 }
146 stream.set_position(saved_pos);
147 let saved_pos = stream.position();
148 {
150 let saved_pos = stream.position();
151 if stream.expect_string(".async").is_ok() {
152 return Ok(Proxykind::Async);
153 }
154 stream.set_position(saved_pos);
155 }
156 stream.set_position(saved_pos);
157 let span = stream
158 .peek()
159 .map(|(_, s)| s.clone())
160 .unwrap_or(Span { start: 0, end: 0 });
161 let expected = &[
162 ".async.shared::cluster",
163 ".async.shared::cta",
164 ".async.global",
165 ".alias",
166 ".async",
167 ];
168 let found = stream
169 .peek()
170 .map(|(t, _)| format!("{:?}", t))
171 .unwrap_or_else(|_| "<end of input>".to_string());
172 Err(crate::parser::unexpected_value(span, expected, found))
173 }
174 }
175
176 impl PtxParser for Scope {
177 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
178 {
180 let saved_pos = stream.position();
181 if stream.expect_string(".cluster").is_ok() {
182 return Ok(Scope::Cluster);
183 }
184 stream.set_position(saved_pos);
185 }
186 let saved_pos = stream.position();
187 {
189 let saved_pos = stream.position();
190 if stream.expect_string(".cta").is_ok() {
191 return Ok(Scope::Cta);
192 }
193 stream.set_position(saved_pos);
194 }
195 stream.set_position(saved_pos);
196 let saved_pos = stream.position();
197 {
199 let saved_pos = stream.position();
200 if stream.expect_string(".gpu").is_ok() {
201 return Ok(Scope::Gpu);
202 }
203 stream.set_position(saved_pos);
204 }
205 stream.set_position(saved_pos);
206 let saved_pos = stream.position();
207 {
209 let saved_pos = stream.position();
210 if stream.expect_string(".sys").is_ok() {
211 return Ok(Scope::Sys);
212 }
213 stream.set_position(saved_pos);
214 }
215 stream.set_position(saved_pos);
216 let span = stream
217 .peek()
218 .map(|(_, s)| s.clone())
219 .unwrap_or(Span { start: 0, end: 0 });
220 let expected = &[".cluster", ".cta", ".gpu", ".sys"];
221 let found = stream
222 .peek()
223 .map(|(t, _)| format!("{:?}", t))
224 .unwrap_or_else(|_| "<end of input>".to_string());
225 Err(crate::parser::unexpected_value(span, expected, found))
226 }
227 }
228
229 impl PtxParser for Sem {
230 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
231 {
233 let saved_pos = stream.position();
234 if stream.expect_string(".acq_rel").is_ok() {
235 return Ok(Sem::AcqRel);
236 }
237 stream.set_position(saved_pos);
238 }
239 let saved_pos = stream.position();
240 {
242 let saved_pos = stream.position();
243 if stream.expect_string(".acquire").is_ok() {
244 return Ok(Sem::Acquire);
245 }
246 stream.set_position(saved_pos);
247 }
248 stream.set_position(saved_pos);
249 let saved_pos = stream.position();
250 {
252 let saved_pos = stream.position();
253 if stream.expect_string(".release").is_ok() {
254 return Ok(Sem::Release);
255 }
256 stream.set_position(saved_pos);
257 }
258 stream.set_position(saved_pos);
259 let saved_pos = stream.position();
260 {
262 let saved_pos = stream.position();
263 if stream.expect_string(".sc").is_ok() {
264 return Ok(Sem::Sc);
265 }
266 stream.set_position(saved_pos);
267 }
268 stream.set_position(saved_pos);
269 let span = stream
270 .peek()
271 .map(|(_, s)| s.clone())
272 .unwrap_or(Span { start: 0, end: 0 });
273 let expected = &[".acq_rel", ".acquire", ".release", ".sc"];
274 let found = stream
275 .peek()
276 .map(|(t, _)| format!("{:?}", t))
277 .unwrap_or_else(|_| "<end of input>".to_string());
278 Err(crate::parser::unexpected_value(span, expected, found))
279 }
280 }
281
282 impl PtxParser for ToProxykindFromProxykind {
283 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
284 {
286 let saved_pos = stream.position();
287 if stream.expect_string(".tensormap::generic").is_ok() {
288 return Ok(ToProxykindFromProxykind::TensormapGeneric);
289 }
290 stream.set_position(saved_pos);
291 }
292 let span = stream
293 .peek()
294 .map(|(_, s)| s.clone())
295 .unwrap_or(Span { start: 0, end: 0 });
296 let expected = &[".tensormap::generic"];
297 let found = stream
298 .peek()
299 .map(|(t, _)| format!("{:?}", t))
300 .unwrap_or_else(|_| "<end of input>".to_string());
301 Err(crate::parser::unexpected_value(span, expected, found))
302 }
303 }
304
305 impl PtxParser for FenceSemScope {
306 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
307 stream.expect_string("fence")?;
308 let saved_pos = stream.position();
309 let sem = match Sem::parse(stream) {
310 Ok(val) => Some(val),
311 Err(_) => {
312 stream.set_position(saved_pos);
313 None
314 }
315 };
316 stream.expect_complete()?;
317 let scope = Scope::parse(stream)?;
318 stream.expect_complete()?;
319 stream.expect_complete()?;
320 stream.expect(&PtxToken::Semicolon)?;
321 Ok(FenceSemScope { sem, scope })
322 }
323 }
324
325 impl PtxParser for FenceAcquireSyncRestrictSharedClusterCluster {
326 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
327 stream.expect_string("fence")?;
328 stream.expect_string(".acquire")?;
329 let acquire = ();
330 stream.expect_complete()?;
331 stream.expect_string(".sync_restrict::shared::cluster")?;
332 let sync_restrict_shared_cluster = ();
333 stream.expect_complete()?;
334 stream.expect_string(".cluster")?;
335 let cluster = ();
336 stream.expect_complete()?;
337 stream.expect_complete()?;
338 stream.expect(&PtxToken::Semicolon)?;
339 Ok(FenceAcquireSyncRestrictSharedClusterCluster {
340 acquire,
341 sync_restrict_shared_cluster,
342 cluster,
343 })
344 }
345 }
346
347 impl PtxParser for FenceReleaseSyncRestrictSharedCtaCluster {
348 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
349 stream.expect_string("fence")?;
350 stream.expect_string(".release")?;
351 let release = ();
352 stream.expect_complete()?;
353 stream.expect_string(".sync_restrict::shared::cta")?;
354 let sync_restrict_shared_cta = ();
355 stream.expect_complete()?;
356 stream.expect_string(".cluster")?;
357 let cluster = ();
358 stream.expect_complete()?;
359 stream.expect_complete()?;
360 stream.expect(&PtxToken::Semicolon)?;
361 Ok(FenceReleaseSyncRestrictSharedCtaCluster {
362 release,
363 sync_restrict_shared_cta,
364 cluster,
365 })
366 }
367 }
368
369 impl PtxParser for FenceOpRestrictReleaseCluster {
370 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
371 stream.expect_string("fence")?;
372 let op_restrict = OpRestrict::parse(stream)?;
373 stream.expect_complete()?;
374 stream.expect_string(".release")?;
375 let release = ();
376 stream.expect_complete()?;
377 stream.expect_string(".cluster")?;
378 let cluster = ();
379 stream.expect_complete()?;
380 stream.expect_complete()?;
381 stream.expect(&PtxToken::Semicolon)?;
382 Ok(FenceOpRestrictReleaseCluster {
383 op_restrict,
384 release,
385 cluster,
386 })
387 }
388 }
389
390 impl PtxParser for FenceProxyProxykind {
391 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
392 stream.expect_string("fence")?;
393 stream.expect_string(".proxy")?;
394 let proxy = ();
395 stream.expect_complete()?;
396 let proxykind = Proxykind::parse(stream)?;
397 stream.expect_complete()?;
398 stream.expect_complete()?;
399 stream.expect(&PtxToken::Semicolon)?;
400 Ok(FenceProxyProxykind { proxy, proxykind })
401 }
402 }
403
404 impl PtxParser for FenceProxyToProxykindFromProxykindReleaseScope {
405 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
406 stream.expect_string("fence")?;
407 stream.expect_string(".proxy")?;
408 let proxy = ();
409 stream.expect_complete()?;
410 let to_proxykind_from_proxykind = ToProxykindFromProxykind::parse(stream)?;
411 stream.expect_complete()?;
412 stream.expect_string(".release")?;
413 let release = ();
414 stream.expect_complete()?;
415 let scope = Scope::parse(stream)?;
416 stream.expect_complete()?;
417 stream.expect_complete()?;
418 stream.expect(&PtxToken::Semicolon)?;
419 Ok(FenceProxyToProxykindFromProxykindReleaseScope {
420 proxy,
421 to_proxykind_from_proxykind,
422 release,
423 scope,
424 })
425 }
426 }
427
428 impl PtxParser for FenceProxyToProxykindFromProxykindAcquireScope {
429 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
430 stream.expect_string("fence")?;
431 stream.expect_string(".proxy")?;
432 let proxy = ();
433 stream.expect_complete()?;
434 let to_proxykind_from_proxykind = ToProxykindFromProxykind::parse(stream)?;
435 stream.expect_complete()?;
436 stream.expect_string(".acquire")?;
437 let acquire = ();
438 stream.expect_complete()?;
439 let scope = Scope::parse(stream)?;
440 stream.expect_complete()?;
441 let addr = AddressOperand::parse(stream)?;
442 stream.expect_complete()?;
443 stream.expect(&PtxToken::Comma)?;
444 let size = GeneralOperand::parse(stream)?;
445 stream.expect_complete()?;
446 stream.expect_complete()?;
447 stream.expect(&PtxToken::Semicolon)?;
448 Ok(FenceProxyToProxykindFromProxykindAcquireScope {
449 proxy,
450 to_proxykind_from_proxykind,
451 acquire,
452 scope,
453 addr,
454 size,
455 })
456 }
457 }
458
459 impl PtxParser for FenceProxyAsyncGenericAcquireSyncRestrictSharedClusterCluster {
460 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
461 stream.expect_string("fence")?;
462 stream.expect_string(".proxy")?;
463 let proxy = ();
464 stream.expect_complete()?;
465 stream.expect_string(".async::generic")?;
466 let async_generic = ();
467 stream.expect_complete()?;
468 stream.expect_string(".acquire")?;
469 let acquire = ();
470 stream.expect_complete()?;
471 stream.expect_string(".sync_restrict::shared::cluster")?;
472 let sync_restrict_shared_cluster = ();
473 stream.expect_complete()?;
474 stream.expect_string(".cluster")?;
475 let cluster = ();
476 stream.expect_complete()?;
477 stream.expect_complete()?;
478 stream.expect(&PtxToken::Semicolon)?;
479 Ok(
480 FenceProxyAsyncGenericAcquireSyncRestrictSharedClusterCluster {
481 proxy,
482 async_generic,
483 acquire,
484 sync_restrict_shared_cluster,
485 cluster,
486 },
487 )
488 }
489 }
490
491 impl PtxParser for FenceProxyAsyncGenericReleaseSyncRestrictSharedCtaCluster {
492 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
493 stream.expect_string("fence")?;
494 stream.expect_string(".proxy")?;
495 let proxy = ();
496 stream.expect_complete()?;
497 stream.expect_string(".async::generic")?;
498 let async_generic = ();
499 stream.expect_complete()?;
500 stream.expect_string(".release")?;
501 let release = ();
502 stream.expect_complete()?;
503 stream.expect_string(".sync_restrict::shared::cta")?;
504 let sync_restrict_shared_cta = ();
505 stream.expect_complete()?;
506 stream.expect_string(".cluster")?;
507 let cluster = ();
508 stream.expect_complete()?;
509 stream.expect_complete()?;
510 stream.expect(&PtxToken::Semicolon)?;
511 Ok(FenceProxyAsyncGenericReleaseSyncRestrictSharedCtaCluster {
512 proxy,
513 async_generic,
514 release,
515 sync_restrict_shared_cta,
516 cluster,
517 })
518 }
519 }
520
521 impl PtxParser for MembarLevel {
522 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
523 stream.expect_string("membar")?;
524 let level = Level::parse(stream)?;
525 stream.expect_complete()?;
526 stream.expect_complete()?;
527 stream.expect(&PtxToken::Semicolon)?;
528 Ok(MembarLevel { level })
529 }
530 }
531
532 impl PtxParser for MembarProxyProxykind {
533 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
534 stream.expect_string("membar")?;
535 stream.expect_string(".proxy")?;
536 let proxy = ();
537 stream.expect_complete()?;
538 let proxykind = Proxykind::parse(stream)?;
539 stream.expect_complete()?;
540 stream.expect_complete()?;
541 stream.expect(&PtxToken::Semicolon)?;
542 Ok(MembarProxyProxykind { proxy, proxykind })
543 }
544 }
545}