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