ptx_parser/parser/instruction/
barrier_cluster.rs1#![allow(unused)]
8
9use crate::lexer::PtxToken;
10use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
11use crate::r#type::common::*;
12
13pub mod section_0 {
14 use super::*;
15 use crate::r#type::instruction::barrier_cluster::section_0::*;
16
17 impl PtxParser for Sem {
22 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
23 {
25 let saved_pos = stream.position();
26 if stream.expect_string(".release").is_ok() {
27 return Ok(Sem::Release);
28 }
29 stream.set_position(saved_pos);
30 }
31 let saved_pos = stream.position();
32 {
34 let saved_pos = stream.position();
35 if stream.expect_string(".relaxed").is_ok() {
36 return Ok(Sem::Relaxed);
37 }
38 stream.set_position(saved_pos);
39 }
40 stream.set_position(saved_pos);
41 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
42 let expected = &[".release", ".relaxed"];
43 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
44 Err(crate::parser::unexpected_value(span, expected, found))
45 }
46 }
47
48 impl PtxParser for BarrierClusterArriveSemAligned {
49 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
50 stream.expect_string("barrier")?;
51 stream.expect_string(".cluster")?;
52 let cluster = ();
53 stream.expect_complete()?;
54 stream.expect_string(".arrive")?;
55 let arrive = ();
56 stream.expect_complete()?;
57 let saved_pos = stream.position();
58 let sem = match Sem::parse(stream) {
59 Ok(val) => Some(val),
60 Err(_) => {
61 stream.set_position(saved_pos);
62 None
63 }
64 };
65 stream.expect_complete()?;
66 let saved_pos = stream.position();
67 let aligned = stream.expect_string(".aligned").is_ok();
68 if !aligned {
69 stream.set_position(saved_pos);
70 }
71 stream.expect_complete()?;
72 stream.expect_complete()?;
73 stream.expect(&PtxToken::Semicolon)?;
74 Ok(BarrierClusterArriveSemAligned {
75 cluster,
76 arrive,
77 sem,
78 aligned,
79 })
80 }
81 }
82
83
84 impl PtxParser for BarrierClusterWaitAcquireAligned {
85 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
86 stream.expect_string("barrier")?;
87 stream.expect_string(".cluster")?;
88 let cluster = ();
89 stream.expect_complete()?;
90 stream.expect_string(".wait")?;
91 let wait = ();
92 stream.expect_complete()?;
93 let saved_pos = stream.position();
94 let acquire = stream.expect_string(".acquire").is_ok();
95 if !acquire {
96 stream.set_position(saved_pos);
97 }
98 stream.expect_complete()?;
99 let saved_pos = stream.position();
100 let aligned = stream.expect_string(".aligned").is_ok();
101 if !aligned {
102 stream.set_position(saved_pos);
103 }
104 stream.expect_complete()?;
105 stream.expect_complete()?;
106 stream.expect(&PtxToken::Semicolon)?;
107 Ok(BarrierClusterWaitAcquireAligned {
108 cluster,
109 wait,
110 acquire,
111 aligned,
112 })
113 }
114 }
115
116
117}
118