1#![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::vop::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 Dsel {
240 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
241 {
243 let saved_pos = stream.position();
244 if stream.expect_string(".b0").is_ok() {
245 return Ok(Dsel::B0);
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(".b1").is_ok() {
254 return Ok(Dsel::B1);
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(".b2").is_ok() {
264 return Ok(Dsel::B2);
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(".b3").is_ok() {
274 return Ok(Dsel::B3);
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(".h0").is_ok() {
284 return Ok(Dsel::H0);
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(".h1").is_ok() {
294 return Ok(Dsel::H1);
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 = &[".b0", ".b1", ".b2", ".b3", ".h0", ".h1"];
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 Dtype {
313 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
314 {
316 let saved_pos = stream.position();
317 if stream.expect_string(".u32").is_ok() {
318 return Ok(Dtype::U32);
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(".s32").is_ok() {
327 return Ok(Dtype::S32);
328 }
329 stream.set_position(saved_pos);
330 }
331 stream.set_position(saved_pos);
332 let span = stream
333 .peek()
334 .map(|(_, s)| s.clone())
335 .unwrap_or(Span { start: 0, end: 0 });
336 let expected = &[".u32", ".s32"];
337 let found = stream
338 .peek()
339 .map(|(t, _)| format!("{:?}", t))
340 .unwrap_or_else(|_| "<end of input>".to_string());
341 Err(crate::parser::unexpected_value(span, expected, found))
342 }
343 }
344
345 impl PtxParser for Op2 {
346 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
347 {
349 let saved_pos = stream.position();
350 if stream.expect_string(".add").is_ok() {
351 return Ok(Op2::Add);
352 }
353 stream.set_position(saved_pos);
354 }
355 let saved_pos = stream.position();
356 {
358 let saved_pos = stream.position();
359 if stream.expect_string(".min").is_ok() {
360 return Ok(Op2::Min);
361 }
362 stream.set_position(saved_pos);
363 }
364 stream.set_position(saved_pos);
365 let saved_pos = stream.position();
366 {
368 let saved_pos = stream.position();
369 if stream.expect_string(".max").is_ok() {
370 return Ok(Op2::Max);
371 }
372 stream.set_position(saved_pos);
373 }
374 stream.set_position(saved_pos);
375 let span = stream
376 .peek()
377 .map(|(_, s)| s.clone())
378 .unwrap_or(Span { start: 0, end: 0 });
379 let expected = &[".add", ".min", ".max"];
380 let found = stream
381 .peek()
382 .map(|(t, _)| format!("{:?}", t))
383 .unwrap_or_else(|_| "<end of input>".to_string());
384 Err(crate::parser::unexpected_value(span, expected, found))
385 }
386 }
387
388 impl PtxParser for VaddDtypeAtypeBtypeSat {
389 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
390 stream.expect_string("vadd")?;
391 let dtype = Dtype::parse(stream)?;
392 stream.expect_complete()?;
393 let atype = Atype::parse(stream)?;
394 stream.expect_complete()?;
395 let btype = Btype::parse(stream)?;
396 stream.expect_complete()?;
397 let saved_pos = stream.position();
398 let sat = stream.expect_string(".sat").is_ok();
399 if !sat {
400 stream.set_position(saved_pos);
401 }
402 stream.expect_complete()?;
403 let d = GeneralOperand::parse(stream)?;
404 stream.expect_complete()?;
405 stream.expect(&PtxToken::Comma)?;
406 let a = GeneralOperand::parse(stream)?;
407 let saved_pos = stream.position();
408 let asel = match Asel::parse(stream) {
409 Ok(val) => Some(val),
410 Err(_) => {
411 stream.set_position(saved_pos);
412 None
413 }
414 };
415 stream.expect_complete()?;
416 stream.expect(&PtxToken::Comma)?;
417 let b = GeneralOperand::parse(stream)?;
418 let saved_pos = stream.position();
419 let bsel = match Bsel::parse(stream) {
420 Ok(val) => Some(val),
421 Err(_) => {
422 stream.set_position(saved_pos);
423 None
424 }
425 };
426 stream.expect_complete()?;
427 stream.expect_complete()?;
428 stream.expect(&PtxToken::Semicolon)?;
429 Ok(VaddDtypeAtypeBtypeSat {
430 dtype,
431 atype,
432 btype,
433 sat,
434 d,
435 a,
436 asel,
437 b,
438 bsel,
439 })
440 }
441 }
442
443 impl PtxParser for VsubDtypeAtypeBtypeSat {
444 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
445 stream.expect_string("vsub")?;
446 let dtype = Dtype::parse(stream)?;
447 stream.expect_complete()?;
448 let atype = Atype::parse(stream)?;
449 stream.expect_complete()?;
450 let btype = Btype::parse(stream)?;
451 stream.expect_complete()?;
452 let saved_pos = stream.position();
453 let sat = stream.expect_string(".sat").is_ok();
454 if !sat {
455 stream.set_position(saved_pos);
456 }
457 stream.expect_complete()?;
458 let d = GeneralOperand::parse(stream)?;
459 stream.expect_complete()?;
460 stream.expect(&PtxToken::Comma)?;
461 let a = GeneralOperand::parse(stream)?;
462 let saved_pos = stream.position();
463 let asel = match Asel::parse(stream) {
464 Ok(val) => Some(val),
465 Err(_) => {
466 stream.set_position(saved_pos);
467 None
468 }
469 };
470 stream.expect_complete()?;
471 stream.expect(&PtxToken::Comma)?;
472 let b = GeneralOperand::parse(stream)?;
473 let saved_pos = stream.position();
474 let bsel = match Bsel::parse(stream) {
475 Ok(val) => Some(val),
476 Err(_) => {
477 stream.set_position(saved_pos);
478 None
479 }
480 };
481 stream.expect_complete()?;
482 stream.expect_complete()?;
483 stream.expect(&PtxToken::Semicolon)?;
484 Ok(VsubDtypeAtypeBtypeSat {
485 dtype,
486 atype,
487 btype,
488 sat,
489 d,
490 a,
491 asel,
492 b,
493 bsel,
494 })
495 }
496 }
497
498 impl PtxParser for VabsdiffDtypeAtypeBtypeSat {
499 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
500 stream.expect_string("vabsdiff")?;
501 let dtype = Dtype::parse(stream)?;
502 stream.expect_complete()?;
503 let atype = Atype::parse(stream)?;
504 stream.expect_complete()?;
505 let btype = Btype::parse(stream)?;
506 stream.expect_complete()?;
507 let saved_pos = stream.position();
508 let sat = stream.expect_string(".sat").is_ok();
509 if !sat {
510 stream.set_position(saved_pos);
511 }
512 stream.expect_complete()?;
513 let d = GeneralOperand::parse(stream)?;
514 stream.expect_complete()?;
515 stream.expect(&PtxToken::Comma)?;
516 let a = GeneralOperand::parse(stream)?;
517 let saved_pos = stream.position();
518 let asel = match Asel::parse(stream) {
519 Ok(val) => Some(val),
520 Err(_) => {
521 stream.set_position(saved_pos);
522 None
523 }
524 };
525 stream.expect_complete()?;
526 stream.expect(&PtxToken::Comma)?;
527 let b = GeneralOperand::parse(stream)?;
528 let saved_pos = stream.position();
529 let bsel = match Bsel::parse(stream) {
530 Ok(val) => Some(val),
531 Err(_) => {
532 stream.set_position(saved_pos);
533 None
534 }
535 };
536 stream.expect_complete()?;
537 stream.expect_complete()?;
538 stream.expect(&PtxToken::Semicolon)?;
539 Ok(VabsdiffDtypeAtypeBtypeSat {
540 dtype,
541 atype,
542 btype,
543 sat,
544 d,
545 a,
546 asel,
547 b,
548 bsel,
549 })
550 }
551 }
552
553 impl PtxParser for VminDtypeAtypeBtypeSat {
554 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
555 stream.expect_string("vmin")?;
556 let dtype = Dtype::parse(stream)?;
557 stream.expect_complete()?;
558 let atype = Atype::parse(stream)?;
559 stream.expect_complete()?;
560 let btype = Btype::parse(stream)?;
561 stream.expect_complete()?;
562 let saved_pos = stream.position();
563 let sat = stream.expect_string(".sat").is_ok();
564 if !sat {
565 stream.set_position(saved_pos);
566 }
567 stream.expect_complete()?;
568 let d = GeneralOperand::parse(stream)?;
569 stream.expect_complete()?;
570 stream.expect(&PtxToken::Comma)?;
571 let a = GeneralOperand::parse(stream)?;
572 let saved_pos = stream.position();
573 let asel = match Asel::parse(stream) {
574 Ok(val) => Some(val),
575 Err(_) => {
576 stream.set_position(saved_pos);
577 None
578 }
579 };
580 stream.expect_complete()?;
581 stream.expect(&PtxToken::Comma)?;
582 let b = GeneralOperand::parse(stream)?;
583 let saved_pos = stream.position();
584 let bsel = match Bsel::parse(stream) {
585 Ok(val) => Some(val),
586 Err(_) => {
587 stream.set_position(saved_pos);
588 None
589 }
590 };
591 stream.expect_complete()?;
592 stream.expect_complete()?;
593 stream.expect(&PtxToken::Semicolon)?;
594 Ok(VminDtypeAtypeBtypeSat {
595 dtype,
596 atype,
597 btype,
598 sat,
599 d,
600 a,
601 asel,
602 b,
603 bsel,
604 })
605 }
606 }
607
608 impl PtxParser for VmaxDtypeAtypeBtypeSat {
609 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
610 stream.expect_string("vmax")?;
611 let dtype = Dtype::parse(stream)?;
612 stream.expect_complete()?;
613 let atype = Atype::parse(stream)?;
614 stream.expect_complete()?;
615 let btype = Btype::parse(stream)?;
616 stream.expect_complete()?;
617 let saved_pos = stream.position();
618 let sat = stream.expect_string(".sat").is_ok();
619 if !sat {
620 stream.set_position(saved_pos);
621 }
622 stream.expect_complete()?;
623 let d = GeneralOperand::parse(stream)?;
624 stream.expect_complete()?;
625 stream.expect(&PtxToken::Comma)?;
626 let a = GeneralOperand::parse(stream)?;
627 let saved_pos = stream.position();
628 let asel = match Asel::parse(stream) {
629 Ok(val) => Some(val),
630 Err(_) => {
631 stream.set_position(saved_pos);
632 None
633 }
634 };
635 stream.expect_complete()?;
636 stream.expect(&PtxToken::Comma)?;
637 let b = GeneralOperand::parse(stream)?;
638 let saved_pos = stream.position();
639 let bsel = match Bsel::parse(stream) {
640 Ok(val) => Some(val),
641 Err(_) => {
642 stream.set_position(saved_pos);
643 None
644 }
645 };
646 stream.expect_complete()?;
647 stream.expect_complete()?;
648 stream.expect(&PtxToken::Semicolon)?;
649 Ok(VmaxDtypeAtypeBtypeSat {
650 dtype,
651 atype,
652 btype,
653 sat,
654 d,
655 a,
656 asel,
657 b,
658 bsel,
659 })
660 }
661 }
662
663 impl PtxParser for VaddDtypeAtypeBtypeSatOp2 {
664 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
665 stream.expect_string("vadd")?;
666 let dtype = Dtype::parse(stream)?;
667 stream.expect_complete()?;
668 let atype = Atype::parse(stream)?;
669 stream.expect_complete()?;
670 let btype = Btype::parse(stream)?;
671 stream.expect_complete()?;
672 let saved_pos = stream.position();
673 let sat = stream.expect_string(".sat").is_ok();
674 if !sat {
675 stream.set_position(saved_pos);
676 }
677 stream.expect_complete()?;
678 let op2 = Op2::parse(stream)?;
679 stream.expect_complete()?;
680 let d = GeneralOperand::parse(stream)?;
681 stream.expect_complete()?;
682 stream.expect(&PtxToken::Comma)?;
683 let a = GeneralOperand::parse(stream)?;
684 let saved_pos = stream.position();
685 let asel = match Asel::parse(stream) {
686 Ok(val) => Some(val),
687 Err(_) => {
688 stream.set_position(saved_pos);
689 None
690 }
691 };
692 stream.expect_complete()?;
693 stream.expect(&PtxToken::Comma)?;
694 let b = GeneralOperand::parse(stream)?;
695 let saved_pos = stream.position();
696 let bsel = match Bsel::parse(stream) {
697 Ok(val) => Some(val),
698 Err(_) => {
699 stream.set_position(saved_pos);
700 None
701 }
702 };
703 stream.expect_complete()?;
704 stream.expect(&PtxToken::Comma)?;
705 let c = GeneralOperand::parse(stream)?;
706 stream.expect_complete()?;
707 stream.expect_complete()?;
708 stream.expect(&PtxToken::Semicolon)?;
709 Ok(VaddDtypeAtypeBtypeSatOp2 {
710 dtype,
711 atype,
712 btype,
713 sat,
714 op2,
715 d,
716 a,
717 asel,
718 b,
719 bsel,
720 c,
721 })
722 }
723 }
724
725 impl PtxParser for VsubDtypeAtypeBtypeSatOp2 {
726 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
727 stream.expect_string("vsub")?;
728 let dtype = Dtype::parse(stream)?;
729 stream.expect_complete()?;
730 let atype = Atype::parse(stream)?;
731 stream.expect_complete()?;
732 let btype = Btype::parse(stream)?;
733 stream.expect_complete()?;
734 let saved_pos = stream.position();
735 let sat = stream.expect_string(".sat").is_ok();
736 if !sat {
737 stream.set_position(saved_pos);
738 }
739 stream.expect_complete()?;
740 let op2 = Op2::parse(stream)?;
741 stream.expect_complete()?;
742 let d = GeneralOperand::parse(stream)?;
743 stream.expect_complete()?;
744 stream.expect(&PtxToken::Comma)?;
745 let a = GeneralOperand::parse(stream)?;
746 let saved_pos = stream.position();
747 let asel = match Asel::parse(stream) {
748 Ok(val) => Some(val),
749 Err(_) => {
750 stream.set_position(saved_pos);
751 None
752 }
753 };
754 stream.expect_complete()?;
755 stream.expect(&PtxToken::Comma)?;
756 let b = GeneralOperand::parse(stream)?;
757 let saved_pos = stream.position();
758 let bsel = match Bsel::parse(stream) {
759 Ok(val) => Some(val),
760 Err(_) => {
761 stream.set_position(saved_pos);
762 None
763 }
764 };
765 stream.expect_complete()?;
766 stream.expect(&PtxToken::Comma)?;
767 let c = GeneralOperand::parse(stream)?;
768 stream.expect_complete()?;
769 stream.expect_complete()?;
770 stream.expect(&PtxToken::Semicolon)?;
771 Ok(VsubDtypeAtypeBtypeSatOp2 {
772 dtype,
773 atype,
774 btype,
775 sat,
776 op2,
777 d,
778 a,
779 asel,
780 b,
781 bsel,
782 c,
783 })
784 }
785 }
786
787 impl PtxParser for VabsdiffDtypeAtypeBtypeSatOp2 {
788 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
789 stream.expect_string("vabsdiff")?;
790 let dtype = Dtype::parse(stream)?;
791 stream.expect_complete()?;
792 let atype = Atype::parse(stream)?;
793 stream.expect_complete()?;
794 let btype = Btype::parse(stream)?;
795 stream.expect_complete()?;
796 let saved_pos = stream.position();
797 let sat = stream.expect_string(".sat").is_ok();
798 if !sat {
799 stream.set_position(saved_pos);
800 }
801 stream.expect_complete()?;
802 let op2 = Op2::parse(stream)?;
803 stream.expect_complete()?;
804 let d = GeneralOperand::parse(stream)?;
805 stream.expect_complete()?;
806 stream.expect(&PtxToken::Comma)?;
807 let a = GeneralOperand::parse(stream)?;
808 let saved_pos = stream.position();
809 let asel = match Asel::parse(stream) {
810 Ok(val) => Some(val),
811 Err(_) => {
812 stream.set_position(saved_pos);
813 None
814 }
815 };
816 stream.expect_complete()?;
817 stream.expect(&PtxToken::Comma)?;
818 let b = GeneralOperand::parse(stream)?;
819 let saved_pos = stream.position();
820 let bsel = match Bsel::parse(stream) {
821 Ok(val) => Some(val),
822 Err(_) => {
823 stream.set_position(saved_pos);
824 None
825 }
826 };
827 stream.expect_complete()?;
828 stream.expect(&PtxToken::Comma)?;
829 let c = GeneralOperand::parse(stream)?;
830 stream.expect_complete()?;
831 stream.expect_complete()?;
832 stream.expect(&PtxToken::Semicolon)?;
833 Ok(VabsdiffDtypeAtypeBtypeSatOp2 {
834 dtype,
835 atype,
836 btype,
837 sat,
838 op2,
839 d,
840 a,
841 asel,
842 b,
843 bsel,
844 c,
845 })
846 }
847 }
848
849 impl PtxParser for VminDtypeAtypeBtypeSatOp2 {
850 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
851 stream.expect_string("vmin")?;
852 let dtype = Dtype::parse(stream)?;
853 stream.expect_complete()?;
854 let atype = Atype::parse(stream)?;
855 stream.expect_complete()?;
856 let btype = Btype::parse(stream)?;
857 stream.expect_complete()?;
858 let saved_pos = stream.position();
859 let sat = stream.expect_string(".sat").is_ok();
860 if !sat {
861 stream.set_position(saved_pos);
862 }
863 stream.expect_complete()?;
864 let op2 = Op2::parse(stream)?;
865 stream.expect_complete()?;
866 let d = GeneralOperand::parse(stream)?;
867 stream.expect_complete()?;
868 stream.expect(&PtxToken::Comma)?;
869 let a = GeneralOperand::parse(stream)?;
870 let saved_pos = stream.position();
871 let asel = match Asel::parse(stream) {
872 Ok(val) => Some(val),
873 Err(_) => {
874 stream.set_position(saved_pos);
875 None
876 }
877 };
878 stream.expect_complete()?;
879 stream.expect(&PtxToken::Comma)?;
880 let b = GeneralOperand::parse(stream)?;
881 let saved_pos = stream.position();
882 let bsel = match Bsel::parse(stream) {
883 Ok(val) => Some(val),
884 Err(_) => {
885 stream.set_position(saved_pos);
886 None
887 }
888 };
889 stream.expect_complete()?;
890 stream.expect(&PtxToken::Comma)?;
891 let c = GeneralOperand::parse(stream)?;
892 stream.expect_complete()?;
893 stream.expect_complete()?;
894 stream.expect(&PtxToken::Semicolon)?;
895 Ok(VminDtypeAtypeBtypeSatOp2 {
896 dtype,
897 atype,
898 btype,
899 sat,
900 op2,
901 d,
902 a,
903 asel,
904 b,
905 bsel,
906 c,
907 })
908 }
909 }
910
911 impl PtxParser for VmaxDtypeAtypeBtypeSatOp2 {
912 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
913 stream.expect_string("vmax")?;
914 let dtype = Dtype::parse(stream)?;
915 stream.expect_complete()?;
916 let atype = Atype::parse(stream)?;
917 stream.expect_complete()?;
918 let btype = Btype::parse(stream)?;
919 stream.expect_complete()?;
920 let saved_pos = stream.position();
921 let sat = stream.expect_string(".sat").is_ok();
922 if !sat {
923 stream.set_position(saved_pos);
924 }
925 stream.expect_complete()?;
926 let op2 = Op2::parse(stream)?;
927 stream.expect_complete()?;
928 let d = GeneralOperand::parse(stream)?;
929 stream.expect_complete()?;
930 stream.expect(&PtxToken::Comma)?;
931 let a = GeneralOperand::parse(stream)?;
932 let saved_pos = stream.position();
933 let asel = match Asel::parse(stream) {
934 Ok(val) => Some(val),
935 Err(_) => {
936 stream.set_position(saved_pos);
937 None
938 }
939 };
940 stream.expect_complete()?;
941 stream.expect(&PtxToken::Comma)?;
942 let b = GeneralOperand::parse(stream)?;
943 let saved_pos = stream.position();
944 let bsel = match Bsel::parse(stream) {
945 Ok(val) => Some(val),
946 Err(_) => {
947 stream.set_position(saved_pos);
948 None
949 }
950 };
951 stream.expect_complete()?;
952 stream.expect(&PtxToken::Comma)?;
953 let c = GeneralOperand::parse(stream)?;
954 stream.expect_complete()?;
955 stream.expect_complete()?;
956 stream.expect(&PtxToken::Semicolon)?;
957 Ok(VmaxDtypeAtypeBtypeSatOp2 {
958 dtype,
959 atype,
960 btype,
961 sat,
962 op2,
963 d,
964 a,
965 asel,
966 b,
967 bsel,
968 c,
969 })
970 }
971 }
972
973 impl PtxParser for VaddDtypeAtypeBtypeSat1 {
974 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
975 stream.expect_string("vadd")?;
976 let dtype = Dtype::parse(stream)?;
977 stream.expect_complete()?;
978 let atype = Atype::parse(stream)?;
979 stream.expect_complete()?;
980 let btype = Btype::parse(stream)?;
981 stream.expect_complete()?;
982 let saved_pos = stream.position();
983 let sat = stream.expect_string(".sat").is_ok();
984 if !sat {
985 stream.set_position(saved_pos);
986 }
987 stream.expect_complete()?;
988 let d = GeneralOperand::parse(stream)?;
989 let dsel = Dsel::parse(stream)?;
990 stream.expect_complete()?;
991 stream.expect(&PtxToken::Comma)?;
992 let a = GeneralOperand::parse(stream)?;
993 let saved_pos = stream.position();
994 let asel = match Asel::parse(stream) {
995 Ok(val) => Some(val),
996 Err(_) => {
997 stream.set_position(saved_pos);
998 None
999 }
1000 };
1001 stream.expect_complete()?;
1002 stream.expect(&PtxToken::Comma)?;
1003 let b = GeneralOperand::parse(stream)?;
1004 let saved_pos = stream.position();
1005 let bsel = match Bsel::parse(stream) {
1006 Ok(val) => Some(val),
1007 Err(_) => {
1008 stream.set_position(saved_pos);
1009 None
1010 }
1011 };
1012 stream.expect_complete()?;
1013 stream.expect(&PtxToken::Comma)?;
1014 let c = GeneralOperand::parse(stream)?;
1015 stream.expect_complete()?;
1016 stream.expect_complete()?;
1017 stream.expect(&PtxToken::Semicolon)?;
1018 Ok(VaddDtypeAtypeBtypeSat1 {
1019 dtype,
1020 atype,
1021 btype,
1022 sat,
1023 d,
1024 dsel,
1025 a,
1026 asel,
1027 b,
1028 bsel,
1029 c,
1030 })
1031 }
1032 }
1033
1034 impl PtxParser for VsubDtypeAtypeBtypeSat1 {
1035 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1036 stream.expect_string("vsub")?;
1037 let dtype = Dtype::parse(stream)?;
1038 stream.expect_complete()?;
1039 let atype = Atype::parse(stream)?;
1040 stream.expect_complete()?;
1041 let btype = Btype::parse(stream)?;
1042 stream.expect_complete()?;
1043 let saved_pos = stream.position();
1044 let sat = stream.expect_string(".sat").is_ok();
1045 if !sat {
1046 stream.set_position(saved_pos);
1047 }
1048 stream.expect_complete()?;
1049 let d = GeneralOperand::parse(stream)?;
1050 let dsel = Dsel::parse(stream)?;
1051 stream.expect_complete()?;
1052 stream.expect(&PtxToken::Comma)?;
1053 let a = GeneralOperand::parse(stream)?;
1054 let saved_pos = stream.position();
1055 let asel = match Asel::parse(stream) {
1056 Ok(val) => Some(val),
1057 Err(_) => {
1058 stream.set_position(saved_pos);
1059 None
1060 }
1061 };
1062 stream.expect_complete()?;
1063 stream.expect(&PtxToken::Comma)?;
1064 let b = GeneralOperand::parse(stream)?;
1065 let saved_pos = stream.position();
1066 let bsel = match Bsel::parse(stream) {
1067 Ok(val) => Some(val),
1068 Err(_) => {
1069 stream.set_position(saved_pos);
1070 None
1071 }
1072 };
1073 stream.expect_complete()?;
1074 stream.expect(&PtxToken::Comma)?;
1075 let c = GeneralOperand::parse(stream)?;
1076 stream.expect_complete()?;
1077 stream.expect_complete()?;
1078 stream.expect(&PtxToken::Semicolon)?;
1079 Ok(VsubDtypeAtypeBtypeSat1 {
1080 dtype,
1081 atype,
1082 btype,
1083 sat,
1084 d,
1085 dsel,
1086 a,
1087 asel,
1088 b,
1089 bsel,
1090 c,
1091 })
1092 }
1093 }
1094
1095 impl PtxParser for VabsdiffDtypeAtypeBtypeSat1 {
1096 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1097 stream.expect_string("vabsdiff")?;
1098 let dtype = Dtype::parse(stream)?;
1099 stream.expect_complete()?;
1100 let atype = Atype::parse(stream)?;
1101 stream.expect_complete()?;
1102 let btype = Btype::parse(stream)?;
1103 stream.expect_complete()?;
1104 let saved_pos = stream.position();
1105 let sat = stream.expect_string(".sat").is_ok();
1106 if !sat {
1107 stream.set_position(saved_pos);
1108 }
1109 stream.expect_complete()?;
1110 let d = GeneralOperand::parse(stream)?;
1111 let dsel = Dsel::parse(stream)?;
1112 stream.expect_complete()?;
1113 stream.expect(&PtxToken::Comma)?;
1114 let a = GeneralOperand::parse(stream)?;
1115 let saved_pos = stream.position();
1116 let asel = match Asel::parse(stream) {
1117 Ok(val) => Some(val),
1118 Err(_) => {
1119 stream.set_position(saved_pos);
1120 None
1121 }
1122 };
1123 stream.expect_complete()?;
1124 stream.expect(&PtxToken::Comma)?;
1125 let b = GeneralOperand::parse(stream)?;
1126 let saved_pos = stream.position();
1127 let bsel = match Bsel::parse(stream) {
1128 Ok(val) => Some(val),
1129 Err(_) => {
1130 stream.set_position(saved_pos);
1131 None
1132 }
1133 };
1134 stream.expect_complete()?;
1135 stream.expect(&PtxToken::Comma)?;
1136 let c = GeneralOperand::parse(stream)?;
1137 stream.expect_complete()?;
1138 stream.expect_complete()?;
1139 stream.expect(&PtxToken::Semicolon)?;
1140 Ok(VabsdiffDtypeAtypeBtypeSat1 {
1141 dtype,
1142 atype,
1143 btype,
1144 sat,
1145 d,
1146 dsel,
1147 a,
1148 asel,
1149 b,
1150 bsel,
1151 c,
1152 })
1153 }
1154 }
1155
1156 impl PtxParser for VminDtypeAtypeBtypeSat1 {
1157 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1158 stream.expect_string("vmin")?;
1159 let dtype = Dtype::parse(stream)?;
1160 stream.expect_complete()?;
1161 let atype = Atype::parse(stream)?;
1162 stream.expect_complete()?;
1163 let btype = Btype::parse(stream)?;
1164 stream.expect_complete()?;
1165 let saved_pos = stream.position();
1166 let sat = stream.expect_string(".sat").is_ok();
1167 if !sat {
1168 stream.set_position(saved_pos);
1169 }
1170 stream.expect_complete()?;
1171 let d = GeneralOperand::parse(stream)?;
1172 let dsel = Dsel::parse(stream)?;
1173 stream.expect_complete()?;
1174 stream.expect(&PtxToken::Comma)?;
1175 let a = GeneralOperand::parse(stream)?;
1176 let saved_pos = stream.position();
1177 let asel = match Asel::parse(stream) {
1178 Ok(val) => Some(val),
1179 Err(_) => {
1180 stream.set_position(saved_pos);
1181 None
1182 }
1183 };
1184 stream.expect_complete()?;
1185 stream.expect(&PtxToken::Comma)?;
1186 let b = GeneralOperand::parse(stream)?;
1187 let saved_pos = stream.position();
1188 let bsel = match Bsel::parse(stream) {
1189 Ok(val) => Some(val),
1190 Err(_) => {
1191 stream.set_position(saved_pos);
1192 None
1193 }
1194 };
1195 stream.expect_complete()?;
1196 stream.expect(&PtxToken::Comma)?;
1197 let c = GeneralOperand::parse(stream)?;
1198 stream.expect_complete()?;
1199 stream.expect_complete()?;
1200 stream.expect(&PtxToken::Semicolon)?;
1201 Ok(VminDtypeAtypeBtypeSat1 {
1202 dtype,
1203 atype,
1204 btype,
1205 sat,
1206 d,
1207 dsel,
1208 a,
1209 asel,
1210 b,
1211 bsel,
1212 c,
1213 })
1214 }
1215 }
1216
1217 impl PtxParser for VmaxDtypeAtypeBtypeSat1 {
1218 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1219 stream.expect_string("vmax")?;
1220 let dtype = Dtype::parse(stream)?;
1221 stream.expect_complete()?;
1222 let atype = Atype::parse(stream)?;
1223 stream.expect_complete()?;
1224 let btype = Btype::parse(stream)?;
1225 stream.expect_complete()?;
1226 let saved_pos = stream.position();
1227 let sat = stream.expect_string(".sat").is_ok();
1228 if !sat {
1229 stream.set_position(saved_pos);
1230 }
1231 stream.expect_complete()?;
1232 let d = GeneralOperand::parse(stream)?;
1233 let dsel = Dsel::parse(stream)?;
1234 stream.expect_complete()?;
1235 stream.expect(&PtxToken::Comma)?;
1236 let a = GeneralOperand::parse(stream)?;
1237 let saved_pos = stream.position();
1238 let asel = match Asel::parse(stream) {
1239 Ok(val) => Some(val),
1240 Err(_) => {
1241 stream.set_position(saved_pos);
1242 None
1243 }
1244 };
1245 stream.expect_complete()?;
1246 stream.expect(&PtxToken::Comma)?;
1247 let b = GeneralOperand::parse(stream)?;
1248 let saved_pos = stream.position();
1249 let bsel = match Bsel::parse(stream) {
1250 Ok(val) => Some(val),
1251 Err(_) => {
1252 stream.set_position(saved_pos);
1253 None
1254 }
1255 };
1256 stream.expect_complete()?;
1257 stream.expect(&PtxToken::Comma)?;
1258 let c = GeneralOperand::parse(stream)?;
1259 stream.expect_complete()?;
1260 stream.expect_complete()?;
1261 stream.expect(&PtxToken::Semicolon)?;
1262 Ok(VmaxDtypeAtypeBtypeSat1 {
1263 dtype,
1264 atype,
1265 btype,
1266 sat,
1267 d,
1268 dsel,
1269 a,
1270 asel,
1271 b,
1272 bsel,
1273 c,
1274 })
1275 }
1276 }
1277}