ptx_parser/parser/instruction/
mbarrier_complete_tx.rs1#![allow(unused)]
9
10use crate::lexer::PtxToken;
11use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
12use crate::r#type::common::*;
13
14pub mod section_0 {
15 use super::*;
16 use crate::r#type::instruction::mbarrier_complete_tx::section_0::*;
17
18 impl PtxParser for Scope {
23 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
24 {
26 let saved_pos = stream.position();
27 if stream.expect_string(".cluster").is_ok() {
28 return Ok(Scope::Cluster);
29 }
30 stream.set_position(saved_pos);
31 }
32 let saved_pos = stream.position();
33 {
35 let saved_pos = stream.position();
36 if stream.expect_string(".cta").is_ok() {
37 return Ok(Scope::Cta);
38 }
39 stream.set_position(saved_pos);
40 }
41 stream.set_position(saved_pos);
42 let span = stream
43 .peek()
44 .map(|(_, s)| s.clone())
45 .unwrap_or(Span { start: 0, end: 0 });
46 let expected = &[".cluster", ".cta"];
47 let found = stream
48 .peek()
49 .map(|(t, _)| format!("{:?}", t))
50 .unwrap_or_else(|_| "<end of input>".to_string());
51 Err(crate::parser::unexpected_value(span, expected, found))
52 }
53 }
54
55 impl PtxParser for Sem {
56 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
57 {
59 let saved_pos = stream.position();
60 if stream.expect_string(".relaxed").is_ok() {
61 return Ok(Sem::Relaxed);
62 }
63 stream.set_position(saved_pos);
64 }
65 let span = stream
66 .peek()
67 .map(|(_, s)| s.clone())
68 .unwrap_or(Span { start: 0, end: 0 });
69 let expected = &[".relaxed"];
70 let found = stream
71 .peek()
72 .map(|(t, _)| format!("{:?}", t))
73 .unwrap_or_else(|_| "<end of input>".to_string());
74 Err(crate::parser::unexpected_value(span, expected, found))
75 }
76 }
77
78 impl PtxParser for Space {
79 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
80 {
82 let saved_pos = stream.position();
83 if stream.expect_string(".shared::cluster").is_ok() {
84 return Ok(Space::SharedCluster);
85 }
86 stream.set_position(saved_pos);
87 }
88 let saved_pos = stream.position();
89 {
91 let saved_pos = stream.position();
92 if stream.expect_string(".shared::cta").is_ok() {
93 return Ok(Space::SharedCta);
94 }
95 stream.set_position(saved_pos);
96 }
97 stream.set_position(saved_pos);
98 let saved_pos = stream.position();
99 {
101 let saved_pos = stream.position();
102 if stream.expect_string(".shared").is_ok() {
103 return Ok(Space::Shared);
104 }
105 stream.set_position(saved_pos);
106 }
107 stream.set_position(saved_pos);
108 let span = stream
109 .peek()
110 .map(|(_, s)| s.clone())
111 .unwrap_or(Span { start: 0, end: 0 });
112 let expected = &[".shared::cluster", ".shared::cta", ".shared"];
113 let found = stream
114 .peek()
115 .map(|(t, _)| format!("{:?}", t))
116 .unwrap_or_else(|_| "<end of input>".to_string());
117 Err(crate::parser::unexpected_value(span, expected, found))
118 }
119 }
120
121 impl PtxParser for MbarrierCompleteTxSemScopeSpaceB64 {
122 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
123 stream.expect_string("mbarrier")?;
124 stream.expect_string(".complete_tx")?;
125 let complete_tx = ();
126 stream.expect_complete()?;
127 let saved_pos = stream.position();
128 let sem = match Sem::parse(stream) {
129 Ok(val) => Some(val),
130 Err(_) => {
131 stream.set_position(saved_pos);
132 None
133 }
134 };
135 stream.expect_complete()?;
136 let saved_pos = stream.position();
137 let scope = match Scope::parse(stream) {
138 Ok(val) => Some(val),
139 Err(_) => {
140 stream.set_position(saved_pos);
141 None
142 }
143 };
144 stream.expect_complete()?;
145 let saved_pos = stream.position();
146 let space = match Space::parse(stream) {
147 Ok(val) => Some(val),
148 Err(_) => {
149 stream.set_position(saved_pos);
150 None
151 }
152 };
153 stream.expect_complete()?;
154 stream.expect_string(".b64")?;
155 let b64 = ();
156 stream.expect_complete()?;
157 let addr = AddressOperand::parse(stream)?;
158 stream.expect_complete()?;
159 stream.expect(&PtxToken::Comma)?;
160 let txcount = GeneralOperand::parse(stream)?;
161 stream.expect_complete()?;
162 stream.expect_complete()?;
163 stream.expect(&PtxToken::Semicolon)?;
164 Ok(MbarrierCompleteTxSemScopeSpaceB64 {
165 complete_tx,
166 sem,
167 scope,
168 space,
169 b64,
170 addr,
171 txcount,
172 })
173 }
174 }
175}