ptx_parser/parser/instruction/
bar.rs1#![allow(unused)]
14
15use crate::lexer::PtxToken;
16use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
17use crate::r#type::common::*;
18
19pub mod section_0 {
20 use super::*;
21 use crate::r#type::instruction::bar::section_0::*;
22
23 impl PtxParser for Op {
28 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
29 {
31 let saved_pos = stream.position();
32 if stream.expect_string(".and").is_ok() {
33 return Ok(Op::And);
34 }
35 stream.set_position(saved_pos);
36 }
37 let saved_pos = stream.position();
38 {
40 let saved_pos = stream.position();
41 if stream.expect_string(".or").is_ok() {
42 return Ok(Op::Or);
43 }
44 stream.set_position(saved_pos);
45 }
46 stream.set_position(saved_pos);
47 let span = stream
48 .peek()
49 .map(|(_, s)| s.clone())
50 .unwrap_or(Span { start: 0, end: 0 });
51 let expected = &[".and", ".or"];
52 let found = stream
53 .peek()
54 .map(|(t, _)| format!("{:?}", t))
55 .unwrap_or_else(|_| "<end of input>".to_string());
56 Err(crate::parser::unexpected_value(span, expected, found))
57 }
58 }
59
60 impl PtxParser for BarrierCtaSyncAligned {
61 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
62 stream.expect_string("barrier")?;
63 let saved_pos = stream.position();
64 let cta = stream.expect_string(".cta").is_ok();
65 if !cta {
66 stream.set_position(saved_pos);
67 }
68 stream.expect_complete()?;
69 stream.expect_string(".sync")?;
70 let sync = ();
71 stream.expect_complete()?;
72 let saved_pos = stream.position();
73 let aligned = stream.expect_string(".aligned").is_ok();
74 if !aligned {
75 stream.set_position(saved_pos);
76 }
77 stream.expect_complete()?;
78 let a = GeneralOperand::parse(stream)?;
79 stream.expect_complete()?;
80 let saved_pos = stream.position();
81 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
82 if !has_comma {
83 stream.set_position(saved_pos);
84 }
85 let saved_pos = stream.position();
86 let b = match GeneralOperand::parse(stream) {
87 Ok(val) => Some(val),
88 Err(_) => {
89 stream.set_position(saved_pos);
90 None
91 }
92 };
93 stream.expect_complete()?;
94 stream.expect_complete()?;
95 stream.expect(&PtxToken::Semicolon)?;
96 Ok(BarrierCtaSyncAligned {
97 cta,
98 sync,
99 aligned,
100 a,
101 b,
102 })
103 }
104 }
105
106 impl PtxParser for BarrierCtaArriveAligned {
107 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
108 stream.expect_string("barrier")?;
109 let saved_pos = stream.position();
110 let cta = stream.expect_string(".cta").is_ok();
111 if !cta {
112 stream.set_position(saved_pos);
113 }
114 stream.expect_complete()?;
115 stream.expect_string(".arrive")?;
116 let arrive = ();
117 stream.expect_complete()?;
118 let saved_pos = stream.position();
119 let aligned = stream.expect_string(".aligned").is_ok();
120 if !aligned {
121 stream.set_position(saved_pos);
122 }
123 stream.expect_complete()?;
124 let a = GeneralOperand::parse(stream)?;
125 stream.expect_complete()?;
126 stream.expect(&PtxToken::Comma)?;
127 let b = GeneralOperand::parse(stream)?;
128 stream.expect_complete()?;
129 stream.expect_complete()?;
130 stream.expect(&PtxToken::Semicolon)?;
131 Ok(BarrierCtaArriveAligned {
132 cta,
133 arrive,
134 aligned,
135 a,
136 b,
137 })
138 }
139 }
140
141 impl PtxParser for BarrierCtaRedPopcAlignedU32 {
142 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
143 stream.expect_string("barrier")?;
144 let saved_pos = stream.position();
145 let cta = stream.expect_string(".cta").is_ok();
146 if !cta {
147 stream.set_position(saved_pos);
148 }
149 stream.expect_complete()?;
150 stream.expect_string(".red")?;
151 let red = ();
152 stream.expect_complete()?;
153 stream.expect_string(".popc")?;
154 let popc = ();
155 stream.expect_complete()?;
156 let saved_pos = stream.position();
157 let aligned = stream.expect_string(".aligned").is_ok();
158 if !aligned {
159 stream.set_position(saved_pos);
160 }
161 stream.expect_complete()?;
162 stream.expect_string(".u32")?;
163 let u32 = ();
164 stream.expect_complete()?;
165 let d = GeneralOperand::parse(stream)?;
166 stream.expect_complete()?;
167 stream.expect(&PtxToken::Comma)?;
168 let a = GeneralOperand::parse(stream)?;
169 stream.expect_complete()?;
170 let saved_pos = stream.position();
171 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
172 if !has_comma {
173 stream.set_position(saved_pos);
174 }
175 let saved_pos = stream.position();
176 let b = match GeneralOperand::parse(stream) {
177 Ok(val) => Some(val),
178 Err(_) => {
179 stream.set_position(saved_pos);
180 None
181 }
182 };
183 stream.expect_complete()?;
184 stream.expect(&PtxToken::Comma)?;
185 let c_op = stream
186 .consume_if(|t| matches!(t, PtxToken::Exclaim))
187 .is_some();
188 let c = GeneralOperand::parse(stream)?;
189 stream.expect_complete()?;
190 stream.expect_complete()?;
191 stream.expect(&PtxToken::Semicolon)?;
192 Ok(BarrierCtaRedPopcAlignedU32 {
193 cta,
194 red,
195 popc,
196 aligned,
197 u32,
198 d,
199 a,
200 b,
201 c_op,
202 c,
203 })
204 }
205 }
206
207 impl PtxParser for BarrierCtaRedOpAlignedPred {
208 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
209 stream.expect_string("barrier")?;
210 let saved_pos = stream.position();
211 let cta = stream.expect_string(".cta").is_ok();
212 if !cta {
213 stream.set_position(saved_pos);
214 }
215 stream.expect_complete()?;
216 stream.expect_string(".red")?;
217 let red = ();
218 stream.expect_complete()?;
219 let op = Op::parse(stream)?;
220 stream.expect_complete()?;
221 let saved_pos = stream.position();
222 let aligned = stream.expect_string(".aligned").is_ok();
223 if !aligned {
224 stream.set_position(saved_pos);
225 }
226 stream.expect_complete()?;
227 stream.expect_string(".pred")?;
228 let pred = ();
229 stream.expect_complete()?;
230 let p = GeneralOperand::parse(stream)?;
231 stream.expect_complete()?;
232 stream.expect(&PtxToken::Comma)?;
233 let a = GeneralOperand::parse(stream)?;
234 stream.expect_complete()?;
235 let saved_pos = stream.position();
236 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
237 if !has_comma {
238 stream.set_position(saved_pos);
239 }
240 let saved_pos = stream.position();
241 let b = match GeneralOperand::parse(stream) {
242 Ok(val) => Some(val),
243 Err(_) => {
244 stream.set_position(saved_pos);
245 None
246 }
247 };
248 stream.expect_complete()?;
249 stream.expect(&PtxToken::Comma)?;
250 let c_op = stream
251 .consume_if(|t| matches!(t, PtxToken::Exclaim))
252 .is_some();
253 let c = GeneralOperand::parse(stream)?;
254 stream.expect_complete()?;
255 stream.expect_complete()?;
256 stream.expect(&PtxToken::Semicolon)?;
257 Ok(BarrierCtaRedOpAlignedPred {
258 cta,
259 red,
260 op,
261 aligned,
262 pred,
263 p,
264 a,
265 b,
266 c_op,
267 c,
268 })
269 }
270 }
271
272 impl PtxParser for BarCtaSync {
273 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
274 stream.expect_string("bar")?;
275 let saved_pos = stream.position();
276 let cta = stream.expect_string(".cta").is_ok();
277 if !cta {
278 stream.set_position(saved_pos);
279 }
280 stream.expect_complete()?;
281 stream.expect_string(".sync")?;
282 let sync = ();
283 stream.expect_complete()?;
284 let a = GeneralOperand::parse(stream)?;
285 stream.expect_complete()?;
286 let saved_pos = stream.position();
287 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
288 if !has_comma {
289 stream.set_position(saved_pos);
290 }
291 let saved_pos = stream.position();
292 let b = match GeneralOperand::parse(stream) {
293 Ok(val) => Some(val),
294 Err(_) => {
295 stream.set_position(saved_pos);
296 None
297 }
298 };
299 stream.expect_complete()?;
300 stream.expect_complete()?;
301 stream.expect(&PtxToken::Semicolon)?;
302 Ok(BarCtaSync { cta, sync, a, b })
303 }
304 }
305
306 impl PtxParser for BarCtaArrive {
307 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
308 stream.expect_string("bar")?;
309 let saved_pos = stream.position();
310 let cta = stream.expect_string(".cta").is_ok();
311 if !cta {
312 stream.set_position(saved_pos);
313 }
314 stream.expect_complete()?;
315 stream.expect_string(".arrive")?;
316 let arrive = ();
317 stream.expect_complete()?;
318 let a = GeneralOperand::parse(stream)?;
319 stream.expect_complete()?;
320 stream.expect(&PtxToken::Comma)?;
321 let b = GeneralOperand::parse(stream)?;
322 stream.expect_complete()?;
323 stream.expect_complete()?;
324 stream.expect(&PtxToken::Semicolon)?;
325 Ok(BarCtaArrive { cta, arrive, a, b })
326 }
327 }
328
329 impl PtxParser for BarCtaRedPopcU32 {
330 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
331 stream.expect_string("bar")?;
332 let saved_pos = stream.position();
333 let cta = stream.expect_string(".cta").is_ok();
334 if !cta {
335 stream.set_position(saved_pos);
336 }
337 stream.expect_complete()?;
338 stream.expect_string(".red")?;
339 let red = ();
340 stream.expect_complete()?;
341 stream.expect_string(".popc")?;
342 let popc = ();
343 stream.expect_complete()?;
344 stream.expect_string(".u32")?;
345 let u32 = ();
346 stream.expect_complete()?;
347 let d = GeneralOperand::parse(stream)?;
348 stream.expect_complete()?;
349 stream.expect(&PtxToken::Comma)?;
350 let a = GeneralOperand::parse(stream)?;
351 stream.expect_complete()?;
352 let saved_pos = stream.position();
353 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
354 if !has_comma {
355 stream.set_position(saved_pos);
356 }
357 let saved_pos = stream.position();
358 let b = match GeneralOperand::parse(stream) {
359 Ok(val) => Some(val),
360 Err(_) => {
361 stream.set_position(saved_pos);
362 None
363 }
364 };
365 stream.expect_complete()?;
366 stream.expect(&PtxToken::Comma)?;
367 let c_op = stream
368 .consume_if(|t| matches!(t, PtxToken::Exclaim))
369 .is_some();
370 let c = GeneralOperand::parse(stream)?;
371 stream.expect_complete()?;
372 stream.expect_complete()?;
373 stream.expect(&PtxToken::Semicolon)?;
374 Ok(BarCtaRedPopcU32 {
375 cta,
376 red,
377 popc,
378 u32,
379 d,
380 a,
381 b,
382 c_op,
383 c,
384 })
385 }
386 }
387
388 impl PtxParser for BarCtaRedOpPred {
389 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
390 stream.expect_string("bar")?;
391 let saved_pos = stream.position();
392 let cta = stream.expect_string(".cta").is_ok();
393 if !cta {
394 stream.set_position(saved_pos);
395 }
396 stream.expect_complete()?;
397 stream.expect_string(".red")?;
398 let red = ();
399 stream.expect_complete()?;
400 let op = Op::parse(stream)?;
401 stream.expect_complete()?;
402 stream.expect_string(".pred")?;
403 let pred = ();
404 stream.expect_complete()?;
405 let p = GeneralOperand::parse(stream)?;
406 stream.expect_complete()?;
407 stream.expect(&PtxToken::Comma)?;
408 let a = GeneralOperand::parse(stream)?;
409 stream.expect_complete()?;
410 let saved_pos = stream.position();
411 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
412 if !has_comma {
413 stream.set_position(saved_pos);
414 }
415 let saved_pos = stream.position();
416 let b = match GeneralOperand::parse(stream) {
417 Ok(val) => Some(val),
418 Err(_) => {
419 stream.set_position(saved_pos);
420 None
421 }
422 };
423 stream.expect_complete()?;
424 stream.expect(&PtxToken::Comma)?;
425 let c_op = stream
426 .consume_if(|t| matches!(t, PtxToken::Exclaim))
427 .is_some();
428 let c = GeneralOperand::parse(stream)?;
429 stream.expect_complete()?;
430 stream.expect_complete()?;
431 stream.expect(&PtxToken::Semicolon)?;
432 Ok(BarCtaRedOpPred {
433 cta,
434 red,
435 op,
436 pred,
437 p,
438 a,
439 b,
440 c_op,
441 c,
442 })
443 }
444 }
445}