ptx_parser/parser/instruction/
vset.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::vset::section_0::*;
22
23 impl PtxParser for Asel {
28 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
29 {
31 let saved_pos = stream.position();
32 if stream.expect_string(".b0").is_ok() {
33 return Ok(Asel::B0);
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(".b1").is_ok() {
42 return Ok(Asel::B1);
43 }
44 stream.set_position(saved_pos);
45 }
46 stream.set_position(saved_pos);
47 let saved_pos = stream.position();
48 {
50 let saved_pos = stream.position();
51 if stream.expect_string(".b2").is_ok() {
52 return Ok(Asel::B2);
53 }
54 stream.set_position(saved_pos);
55 }
56 stream.set_position(saved_pos);
57 let saved_pos = stream.position();
58 {
60 let saved_pos = stream.position();
61 if stream.expect_string(".b3").is_ok() {
62 return Ok(Asel::B3);
63 }
64 stream.set_position(saved_pos);
65 }
66 stream.set_position(saved_pos);
67 let saved_pos = stream.position();
68 {
70 let saved_pos = stream.position();
71 if stream.expect_string(".h0").is_ok() {
72 return Ok(Asel::H0);
73 }
74 stream.set_position(saved_pos);
75 }
76 stream.set_position(saved_pos);
77 let saved_pos = stream.position();
78 {
80 let saved_pos = stream.position();
81 if stream.expect_string(".h1").is_ok() {
82 return Ok(Asel::H1);
83 }
84 stream.set_position(saved_pos);
85 }
86 stream.set_position(saved_pos);
87 let span = stream
88 .peek()
89 .map(|(_, s)| s.clone())
90 .unwrap_or(Span { start: 0, end: 0 });
91 let expected = &[".b0", ".b1", ".b2", ".b3", ".h0", ".h1"];
92 let found = stream
93 .peek()
94 .map(|(t, _)| format!("{:?}", t))
95 .unwrap_or_else(|_| "<end of input>".to_string());
96 Err(crate::parser::unexpected_value(span, expected, found))
97 }
98 }
99
100 impl PtxParser for Atype {
101 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
102 {
104 let saved_pos = stream.position();
105 if stream.expect_string(".u32").is_ok() {
106 return Ok(Atype::U32);
107 }
108 stream.set_position(saved_pos);
109 }
110 let saved_pos = stream.position();
111 {
113 let saved_pos = stream.position();
114 if stream.expect_string(".s32").is_ok() {
115 return Ok(Atype::S32);
116 }
117 stream.set_position(saved_pos);
118 }
119 stream.set_position(saved_pos);
120 let span = stream
121 .peek()
122 .map(|(_, s)| s.clone())
123 .unwrap_or(Span { start: 0, end: 0 });
124 let expected = &[".u32", ".s32"];
125 let found = stream
126 .peek()
127 .map(|(t, _)| format!("{:?}", t))
128 .unwrap_or_else(|_| "<end of input>".to_string());
129 Err(crate::parser::unexpected_value(span, expected, found))
130 }
131 }
132
133 impl PtxParser for Bsel {
134 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
135 {
137 let saved_pos = stream.position();
138 if stream.expect_string(".b0").is_ok() {
139 return Ok(Bsel::B0);
140 }
141 stream.set_position(saved_pos);
142 }
143 let saved_pos = stream.position();
144 {
146 let saved_pos = stream.position();
147 if stream.expect_string(".b1").is_ok() {
148 return Ok(Bsel::B1);
149 }
150 stream.set_position(saved_pos);
151 }
152 stream.set_position(saved_pos);
153 let saved_pos = stream.position();
154 {
156 let saved_pos = stream.position();
157 if stream.expect_string(".b2").is_ok() {
158 return Ok(Bsel::B2);
159 }
160 stream.set_position(saved_pos);
161 }
162 stream.set_position(saved_pos);
163 let saved_pos = stream.position();
164 {
166 let saved_pos = stream.position();
167 if stream.expect_string(".b3").is_ok() {
168 return Ok(Bsel::B3);
169 }
170 stream.set_position(saved_pos);
171 }
172 stream.set_position(saved_pos);
173 let saved_pos = stream.position();
174 {
176 let saved_pos = stream.position();
177 if stream.expect_string(".h0").is_ok() {
178 return Ok(Bsel::H0);
179 }
180 stream.set_position(saved_pos);
181 }
182 stream.set_position(saved_pos);
183 let saved_pos = stream.position();
184 {
186 let saved_pos = stream.position();
187 if stream.expect_string(".h1").is_ok() {
188 return Ok(Bsel::H1);
189 }
190 stream.set_position(saved_pos);
191 }
192 stream.set_position(saved_pos);
193 let span = stream
194 .peek()
195 .map(|(_, s)| s.clone())
196 .unwrap_or(Span { start: 0, end: 0 });
197 let expected = &[".b0", ".b1", ".b2", ".b3", ".h0", ".h1"];
198 let found = stream
199 .peek()
200 .map(|(t, _)| format!("{:?}", t))
201 .unwrap_or_else(|_| "<end of input>".to_string());
202 Err(crate::parser::unexpected_value(span, expected, found))
203 }
204 }
205
206 impl PtxParser for Btype {
207 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
208 {
210 let saved_pos = stream.position();
211 if stream.expect_string(".u32").is_ok() {
212 return Ok(Btype::U32);
213 }
214 stream.set_position(saved_pos);
215 }
216 let saved_pos = stream.position();
217 {
219 let saved_pos = stream.position();
220 if stream.expect_string(".s32").is_ok() {
221 return Ok(Btype::S32);
222 }
223 stream.set_position(saved_pos);
224 }
225 stream.set_position(saved_pos);
226 let span = stream
227 .peek()
228 .map(|(_, s)| s.clone())
229 .unwrap_or(Span { start: 0, end: 0 });
230 let expected = &[".u32", ".s32"];
231 let found = stream
232 .peek()
233 .map(|(t, _)| format!("{:?}", t))
234 .unwrap_or_else(|_| "<end of input>".to_string());
235 Err(crate::parser::unexpected_value(span, expected, found))
236 }
237 }
238
239 impl PtxParser for Cmp {
240 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
241 {
243 let saved_pos = stream.position();
244 if stream.expect_string(".eq").is_ok() {
245 return Ok(Cmp::Eq);
246 }
247 stream.set_position(saved_pos);
248 }
249 let saved_pos = stream.position();
250 {
252 let saved_pos = stream.position();
253 if stream.expect_string(".ne").is_ok() {
254 return Ok(Cmp::Ne);
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(".lt").is_ok() {
264 return Ok(Cmp::Lt);
265 }
266 stream.set_position(saved_pos);
267 }
268 stream.set_position(saved_pos);
269 let saved_pos = stream.position();
270 {
272 let saved_pos = stream.position();
273 if stream.expect_string(".le").is_ok() {
274 return Ok(Cmp::Le);
275 }
276 stream.set_position(saved_pos);
277 }
278 stream.set_position(saved_pos);
279 let saved_pos = stream.position();
280 {
282 let saved_pos = stream.position();
283 if stream.expect_string(".gt").is_ok() {
284 return Ok(Cmp::Gt);
285 }
286 stream.set_position(saved_pos);
287 }
288 stream.set_position(saved_pos);
289 let saved_pos = stream.position();
290 {
292 let saved_pos = stream.position();
293 if stream.expect_string(".ge").is_ok() {
294 return Ok(Cmp::Ge);
295 }
296 stream.set_position(saved_pos);
297 }
298 stream.set_position(saved_pos);
299 let span = stream
300 .peek()
301 .map(|(_, s)| s.clone())
302 .unwrap_or(Span { start: 0, end: 0 });
303 let expected = &[".eq", ".ne", ".lt", ".le", ".gt", ".ge"];
304 let found = stream
305 .peek()
306 .map(|(t, _)| format!("{:?}", t))
307 .unwrap_or_else(|_| "<end of input>".to_string());
308 Err(crate::parser::unexpected_value(span, expected, found))
309 }
310 }
311
312 impl PtxParser for Dsel {
313 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
314 {
316 let saved_pos = stream.position();
317 if stream.expect_string(".b0").is_ok() {
318 return Ok(Dsel::B0);
319 }
320 stream.set_position(saved_pos);
321 }
322 let saved_pos = stream.position();
323 {
325 let saved_pos = stream.position();
326 if stream.expect_string(".b1").is_ok() {
327 return Ok(Dsel::B1);
328 }
329 stream.set_position(saved_pos);
330 }
331 stream.set_position(saved_pos);
332 let saved_pos = stream.position();
333 {
335 let saved_pos = stream.position();
336 if stream.expect_string(".b2").is_ok() {
337 return Ok(Dsel::B2);
338 }
339 stream.set_position(saved_pos);
340 }
341 stream.set_position(saved_pos);
342 let saved_pos = stream.position();
343 {
345 let saved_pos = stream.position();
346 if stream.expect_string(".b3").is_ok() {
347 return Ok(Dsel::B3);
348 }
349 stream.set_position(saved_pos);
350 }
351 stream.set_position(saved_pos);
352 let saved_pos = stream.position();
353 {
355 let saved_pos = stream.position();
356 if stream.expect_string(".h0").is_ok() {
357 return Ok(Dsel::H0);
358 }
359 stream.set_position(saved_pos);
360 }
361 stream.set_position(saved_pos);
362 let saved_pos = stream.position();
363 {
365 let saved_pos = stream.position();
366 if stream.expect_string(".h1").is_ok() {
367 return Ok(Dsel::H1);
368 }
369 stream.set_position(saved_pos);
370 }
371 stream.set_position(saved_pos);
372 let span = stream
373 .peek()
374 .map(|(_, s)| s.clone())
375 .unwrap_or(Span { start: 0, end: 0 });
376 let expected = &[".b0", ".b1", ".b2", ".b3", ".h0", ".h1"];
377 let found = stream
378 .peek()
379 .map(|(t, _)| format!("{:?}", t))
380 .unwrap_or_else(|_| "<end of input>".to_string());
381 Err(crate::parser::unexpected_value(span, expected, found))
382 }
383 }
384
385 impl PtxParser for Op2 {
386 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
387 {
389 let saved_pos = stream.position();
390 if stream.expect_string(".add").is_ok() {
391 return Ok(Op2::Add);
392 }
393 stream.set_position(saved_pos);
394 }
395 let saved_pos = stream.position();
396 {
398 let saved_pos = stream.position();
399 if stream.expect_string(".min").is_ok() {
400 return Ok(Op2::Min);
401 }
402 stream.set_position(saved_pos);
403 }
404 stream.set_position(saved_pos);
405 let saved_pos = stream.position();
406 {
408 let saved_pos = stream.position();
409 if stream.expect_string(".max").is_ok() {
410 return Ok(Op2::Max);
411 }
412 stream.set_position(saved_pos);
413 }
414 stream.set_position(saved_pos);
415 let span = stream
416 .peek()
417 .map(|(_, s)| s.clone())
418 .unwrap_or(Span { start: 0, end: 0 });
419 let expected = &[".add", ".min", ".max"];
420 let found = stream
421 .peek()
422 .map(|(t, _)| format!("{:?}", t))
423 .unwrap_or_else(|_| "<end of input>".to_string());
424 Err(crate::parser::unexpected_value(span, expected, found))
425 }
426 }
427
428 impl PtxParser for VsetAtypeBtypeCmp {
429 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
430 stream.expect_string("vset")?;
431 let atype = Atype::parse(stream)?;
432 stream.expect_complete()?;
433 let btype = Btype::parse(stream)?;
434 stream.expect_complete()?;
435 let cmp = Cmp::parse(stream)?;
436 stream.expect_complete()?;
437 let d = GeneralOperand::parse(stream)?;
438 stream.expect_complete()?;
439 stream.expect(&PtxToken::Comma)?;
440 let a = GeneralOperand::parse(stream)?;
441 let saved_pos = stream.position();
442 let asel = match Asel::parse(stream) {
443 Ok(val) => Some(val),
444 Err(_) => {
445 stream.set_position(saved_pos);
446 None
447 }
448 };
449 stream.expect_complete()?;
450 stream.expect(&PtxToken::Comma)?;
451 let b = GeneralOperand::parse(stream)?;
452 let saved_pos = stream.position();
453 let bsel = match Bsel::parse(stream) {
454 Ok(val) => Some(val),
455 Err(_) => {
456 stream.set_position(saved_pos);
457 None
458 }
459 };
460 stream.expect_complete()?;
461 stream.expect_complete()?;
462 stream.expect(&PtxToken::Semicolon)?;
463 Ok(VsetAtypeBtypeCmp {
464 atype,
465 btype,
466 cmp,
467 d,
468 a,
469 asel,
470 b,
471 bsel,
472 })
473 }
474 }
475
476 impl PtxParser for VsetAtypeBtypeCmpOp2 {
477 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
478 stream.expect_string("vset")?;
479 let atype = Atype::parse(stream)?;
480 stream.expect_complete()?;
481 let btype = Btype::parse(stream)?;
482 stream.expect_complete()?;
483 let cmp = Cmp::parse(stream)?;
484 stream.expect_complete()?;
485 let op2 = Op2::parse(stream)?;
486 stream.expect_complete()?;
487 let d = GeneralOperand::parse(stream)?;
488 stream.expect_complete()?;
489 stream.expect(&PtxToken::Comma)?;
490 let a = GeneralOperand::parse(stream)?;
491 let saved_pos = stream.position();
492 let asel = match Asel::parse(stream) {
493 Ok(val) => Some(val),
494 Err(_) => {
495 stream.set_position(saved_pos);
496 None
497 }
498 };
499 stream.expect_complete()?;
500 stream.expect(&PtxToken::Comma)?;
501 let b = GeneralOperand::parse(stream)?;
502 let saved_pos = stream.position();
503 let bsel = match Bsel::parse(stream) {
504 Ok(val) => Some(val),
505 Err(_) => {
506 stream.set_position(saved_pos);
507 None
508 }
509 };
510 stream.expect_complete()?;
511 stream.expect(&PtxToken::Comma)?;
512 let c = GeneralOperand::parse(stream)?;
513 stream.expect_complete()?;
514 stream.expect_complete()?;
515 stream.expect(&PtxToken::Semicolon)?;
516 Ok(VsetAtypeBtypeCmpOp2 {
517 atype,
518 btype,
519 cmp,
520 op2,
521 d,
522 a,
523 asel,
524 b,
525 bsel,
526 c,
527 })
528 }
529 }
530
531 impl PtxParser for VsetAtypeBtypeCmp1 {
532 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
533 stream.expect_string("vset")?;
534 let atype = Atype::parse(stream)?;
535 stream.expect_complete()?;
536 let btype = Btype::parse(stream)?;
537 stream.expect_complete()?;
538 let cmp = Cmp::parse(stream)?;
539 stream.expect_complete()?;
540 let d = GeneralOperand::parse(stream)?;
541 let dsel = Dsel::parse(stream)?;
542 stream.expect_complete()?;
543 stream.expect(&PtxToken::Comma)?;
544 let a = GeneralOperand::parse(stream)?;
545 let saved_pos = stream.position();
546 let asel = match Asel::parse(stream) {
547 Ok(val) => Some(val),
548 Err(_) => {
549 stream.set_position(saved_pos);
550 None
551 }
552 };
553 stream.expect_complete()?;
554 stream.expect(&PtxToken::Comma)?;
555 let b = GeneralOperand::parse(stream)?;
556 let saved_pos = stream.position();
557 let bsel = match Bsel::parse(stream) {
558 Ok(val) => Some(val),
559 Err(_) => {
560 stream.set_position(saved_pos);
561 None
562 }
563 };
564 stream.expect_complete()?;
565 stream.expect(&PtxToken::Comma)?;
566 let c = GeneralOperand::parse(stream)?;
567 stream.expect_complete()?;
568 stream.expect_complete()?;
569 stream.expect(&PtxToken::Semicolon)?;
570 Ok(VsetAtypeBtypeCmp1 {
571 atype,
572 btype,
573 cmp,
574 d,
575 dsel,
576 a,
577 asel,
578 b,
579 bsel,
580 c,
581 })
582 }
583 }
584}