1#![allow(unused)]
20
21use crate::lexer::PtxToken;
22use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
23use crate::r#type::common::*;
24
25pub mod section_0 {
26 use super::*;
27 use crate::r#type::instruction::vop4::section_0::*;
28
29 impl PtxParser for Asel {
34 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
35 {
37 let saved_seq_pos = stream.position();
38 match (|| -> Result<_, PtxParseError> {
39 stream.expect_string(".b")?;
40 let b = ();
41 let n = N::parse(stream)?;
42 let n1 = N::parse(stream)?;
43 let n2 = N::parse(stream)?;
44 let n3 = N::parse(stream)?;
45 Ok((b, n, n1, n2, n3))
46 })() {
47 Ok((b, n, n1, n2, n3)) => {
48 return Ok(Asel::BNNNN(b, n, n1, n2, n3));
49 }
50 Err(_) => {
51 stream.set_position(saved_seq_pos);
52 }
53 }
54 }
55 let span = stream
56 .peek()
57 .map(|(_, s)| s.clone())
58 .unwrap_or(Span { start: 0, end: 0 });
59 let expected = &["<complex>"];
60 let found = stream
61 .peek()
62 .map(|(t, _)| format!("{:?}", t))
63 .unwrap_or_else(|_| "<end of input>".to_string());
64 Err(crate::parser::unexpected_value(span, expected, found))
65 }
66 }
67
68 impl PtxParser for Atype {
69 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
70 {
72 let saved_pos = stream.position();
73 if stream.expect_string(".u32").is_ok() {
74 return Ok(Atype::U32);
75 }
76 stream.set_position(saved_pos);
77 }
78 let saved_pos = stream.position();
79 {
81 let saved_pos = stream.position();
82 if stream.expect_string(".s32").is_ok() {
83 return Ok(Atype::S32);
84 }
85 stream.set_position(saved_pos);
86 }
87 stream.set_position(saved_pos);
88 let span = stream
89 .peek()
90 .map(|(_, s)| s.clone())
91 .unwrap_or(Span { start: 0, end: 0 });
92 let expected = &[".u32", ".s32"];
93 let found = stream
94 .peek()
95 .map(|(t, _)| format!("{:?}", t))
96 .unwrap_or_else(|_| "<end of input>".to_string());
97 Err(crate::parser::unexpected_value(span, expected, found))
98 }
99 }
100
101 impl PtxParser for Bsel {
102 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
103 {
105 let saved_seq_pos = stream.position();
106 match (|| -> Result<_, PtxParseError> {
107 stream.expect_string(".b")?;
108 let b = ();
109 let n = N::parse(stream)?;
110 let n1 = N::parse(stream)?;
111 let n2 = N::parse(stream)?;
112 let n3 = N::parse(stream)?;
113 Ok((b, n, n1, n2, n3))
114 })() {
115 Ok((b, n, n1, n2, n3)) => {
116 return Ok(Bsel::BNNNN(b, n, n1, n2, n3));
117 }
118 Err(_) => {
119 stream.set_position(saved_seq_pos);
120 }
121 }
122 }
123 let span = stream
124 .peek()
125 .map(|(_, s)| s.clone())
126 .unwrap_or(Span { start: 0, end: 0 });
127 let expected = &["<complex>"];
128 let found = stream
129 .peek()
130 .map(|(t, _)| format!("{:?}", t))
131 .unwrap_or_else(|_| "<end of input>".to_string());
132 Err(crate::parser::unexpected_value(span, expected, found))
133 }
134 }
135
136 impl PtxParser for Btype {
137 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
138 {
140 let saved_pos = stream.position();
141 if stream.expect_string(".u32").is_ok() {
142 return Ok(Btype::U32);
143 }
144 stream.set_position(saved_pos);
145 }
146 let saved_pos = stream.position();
147 {
149 let saved_pos = stream.position();
150 if stream.expect_string(".s32").is_ok() {
151 return Ok(Btype::S32);
152 }
153 stream.set_position(saved_pos);
154 }
155 stream.set_position(saved_pos);
156 let span = stream
157 .peek()
158 .map(|(_, s)| s.clone())
159 .unwrap_or(Span { start: 0, end: 0 });
160 let expected = &[".u32", ".s32"];
161 let found = stream
162 .peek()
163 .map(|(t, _)| format!("{:?}", t))
164 .unwrap_or_else(|_| "<end of input>".to_string());
165 Err(crate::parser::unexpected_value(span, expected, found))
166 }
167 }
168
169 impl PtxParser for Dtype {
170 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
171 {
173 let saved_pos = stream.position();
174 if stream.expect_string(".u32").is_ok() {
175 return Ok(Dtype::U32);
176 }
177 stream.set_position(saved_pos);
178 }
179 let saved_pos = stream.position();
180 {
182 let saved_pos = stream.position();
183 if stream.expect_string(".s32").is_ok() {
184 return Ok(Dtype::S32);
185 }
186 stream.set_position(saved_pos);
187 }
188 stream.set_position(saved_pos);
189 let span = stream
190 .peek()
191 .map(|(_, s)| s.clone())
192 .unwrap_or(Span { start: 0, end: 0 });
193 let expected = &[".u32", ".s32"];
194 let found = stream
195 .peek()
196 .map(|(t, _)| format!("{:?}", t))
197 .unwrap_or_else(|_| "<end of input>".to_string());
198 Err(crate::parser::unexpected_value(span, expected, found))
199 }
200 }
201
202 impl PtxParser for Mask {
203 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
204 {
206 let saved_pos = stream.position();
207 if stream.expect_string(".b3210").is_ok() {
208 return Ok(Mask::B3210);
209 }
210 stream.set_position(saved_pos);
211 }
212 let saved_pos = stream.position();
213 {
215 let saved_pos = stream.position();
216 if stream.expect_string(".b210").is_ok() {
217 return Ok(Mask::B210);
218 }
219 stream.set_position(saved_pos);
220 }
221 stream.set_position(saved_pos);
222 let saved_pos = stream.position();
223 {
225 let saved_pos = stream.position();
226 if stream.expect_string(".b310").is_ok() {
227 return Ok(Mask::B310);
228 }
229 stream.set_position(saved_pos);
230 }
231 stream.set_position(saved_pos);
232 let saved_pos = stream.position();
233 {
235 let saved_pos = stream.position();
236 if stream.expect_string(".b320").is_ok() {
237 return Ok(Mask::B320);
238 }
239 stream.set_position(saved_pos);
240 }
241 stream.set_position(saved_pos);
242 let saved_pos = stream.position();
243 {
245 let saved_pos = stream.position();
246 if stream.expect_string(".b321").is_ok() {
247 return Ok(Mask::B321);
248 }
249 stream.set_position(saved_pos);
250 }
251 stream.set_position(saved_pos);
252 let saved_pos = stream.position();
253 {
255 let saved_pos = stream.position();
256 if stream.expect_string(".b10").is_ok() {
257 return Ok(Mask::B10);
258 }
259 stream.set_position(saved_pos);
260 }
261 stream.set_position(saved_pos);
262 let saved_pos = stream.position();
263 {
265 let saved_pos = stream.position();
266 if stream.expect_string(".b20").is_ok() {
267 return Ok(Mask::B20);
268 }
269 stream.set_position(saved_pos);
270 }
271 stream.set_position(saved_pos);
272 let saved_pos = stream.position();
273 {
275 let saved_pos = stream.position();
276 if stream.expect_string(".b21").is_ok() {
277 return Ok(Mask::B21);
278 }
279 stream.set_position(saved_pos);
280 }
281 stream.set_position(saved_pos);
282 let saved_pos = stream.position();
283 {
285 let saved_pos = stream.position();
286 if stream.expect_string(".b30").is_ok() {
287 return Ok(Mask::B30);
288 }
289 stream.set_position(saved_pos);
290 }
291 stream.set_position(saved_pos);
292 let saved_pos = stream.position();
293 {
295 let saved_pos = stream.position();
296 if stream.expect_string(".b31").is_ok() {
297 return Ok(Mask::B31);
298 }
299 stream.set_position(saved_pos);
300 }
301 stream.set_position(saved_pos);
302 let saved_pos = stream.position();
303 {
305 let saved_pos = stream.position();
306 if stream.expect_string(".b32").is_ok() {
307 return Ok(Mask::B32);
308 }
309 stream.set_position(saved_pos);
310 }
311 stream.set_position(saved_pos);
312 let saved_pos = stream.position();
313 {
315 let saved_pos = stream.position();
316 if stream.expect_string(".b0").is_ok() {
317 return Ok(Mask::B0);
318 }
319 stream.set_position(saved_pos);
320 }
321 stream.set_position(saved_pos);
322 let saved_pos = stream.position();
323 {
325 let saved_pos = stream.position();
326 if stream.expect_string(".b1").is_ok() {
327 return Ok(Mask::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(Mask::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(Mask::B3);
348 }
349 stream.set_position(saved_pos);
350 }
351 stream.set_position(saved_pos);
352 let span = stream
353 .peek()
354 .map(|(_, s)| s.clone())
355 .unwrap_or(Span { start: 0, end: 0 });
356 let expected = &[
357 ".b3210", ".b210", ".b310", ".b320", ".b321", ".b10", ".b20", ".b21", ".b30",
358 ".b31", ".b32", ".b0", ".b1", ".b2", ".b3",
359 ];
360 let found = stream
361 .peek()
362 .map(|(t, _)| format!("{:?}", t))
363 .unwrap_or_else(|_| "<end of input>".to_string());
364 Err(crate::parser::unexpected_value(span, expected, found))
365 }
366 }
367
368 impl PtxParser for N {
369 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
370 {
372 let saved_pos = stream.position();
373 if stream.expect_string("0").is_ok() {
374 return Ok(N::_0);
375 }
376 stream.set_position(saved_pos);
377 }
378 let saved_pos = stream.position();
379 {
381 let saved_pos = stream.position();
382 if stream.expect_string("1").is_ok() {
383 return Ok(N::_1);
384 }
385 stream.set_position(saved_pos);
386 }
387 stream.set_position(saved_pos);
388 let saved_pos = stream.position();
389 {
391 let saved_pos = stream.position();
392 if stream.expect_string("2").is_ok() {
393 return Ok(N::_2);
394 }
395 stream.set_position(saved_pos);
396 }
397 stream.set_position(saved_pos);
398 let saved_pos = stream.position();
399 {
401 let saved_pos = stream.position();
402 if stream.expect_string("3").is_ok() {
403 return Ok(N::_3);
404 }
405 stream.set_position(saved_pos);
406 }
407 stream.set_position(saved_pos);
408 let saved_pos = stream.position();
409 {
411 let saved_pos = stream.position();
412 if stream.expect_string("4").is_ok() {
413 return Ok(N::_4);
414 }
415 stream.set_position(saved_pos);
416 }
417 stream.set_position(saved_pos);
418 let saved_pos = stream.position();
419 {
421 let saved_pos = stream.position();
422 if stream.expect_string("5").is_ok() {
423 return Ok(N::_5);
424 }
425 stream.set_position(saved_pos);
426 }
427 stream.set_position(saved_pos);
428 let saved_pos = stream.position();
429 {
431 let saved_pos = stream.position();
432 if stream.expect_string("6").is_ok() {
433 return Ok(N::_6);
434 }
435 stream.set_position(saved_pos);
436 }
437 stream.set_position(saved_pos);
438 let saved_pos = stream.position();
439 {
441 let saved_pos = stream.position();
442 if stream.expect_string("7").is_ok() {
443 return Ok(N::_7);
444 }
445 stream.set_position(saved_pos);
446 }
447 stream.set_position(saved_pos);
448 let span = stream
449 .peek()
450 .map(|(_, s)| s.clone())
451 .unwrap_or(Span { start: 0, end: 0 });
452 let expected = &["0", "1", "2", "3", "4", "5", "6", "7"];
453 let found = stream
454 .peek()
455 .map(|(t, _)| format!("{:?}", t))
456 .unwrap_or_else(|_| "<end of input>".to_string());
457 Err(crate::parser::unexpected_value(span, expected, found))
458 }
459 }
460
461 impl PtxParser for Vadd4DtypeAtypeBtypeSat {
462 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
463 stream.expect_string("vadd4")?;
464 let dtype = Dtype::parse(stream)?;
465 stream.expect_complete()?;
466 let atype = Atype::parse(stream)?;
467 stream.expect_complete()?;
468 let btype = Btype::parse(stream)?;
469 stream.expect_complete()?;
470 let saved_pos = stream.position();
471 let sat = stream.expect_string(".sat").is_ok();
472 if !sat {
473 stream.set_position(saved_pos);
474 }
475 stream.expect_complete()?;
476 let d = GeneralOperand::parse(stream)?;
477 let saved_pos = stream.position();
478 let mask = match Mask::parse(stream) {
479 Ok(val) => Some(val),
480 Err(_) => {
481 stream.set_position(saved_pos);
482 None
483 }
484 };
485 stream.expect_complete()?;
486 stream.expect(&PtxToken::Comma)?;
487 let a = GeneralOperand::parse(stream)?;
488 let saved_pos = stream.position();
489 let asel = match Asel::parse(stream) {
490 Ok(val) => Some(val),
491 Err(_) => {
492 stream.set_position(saved_pos);
493 None
494 }
495 };
496 stream.expect_complete()?;
497 stream.expect(&PtxToken::Comma)?;
498 let b = GeneralOperand::parse(stream)?;
499 let saved_pos = stream.position();
500 let bsel = match Bsel::parse(stream) {
501 Ok(val) => Some(val),
502 Err(_) => {
503 stream.set_position(saved_pos);
504 None
505 }
506 };
507 stream.expect_complete()?;
508 stream.expect(&PtxToken::Comma)?;
509 let c = GeneralOperand::parse(stream)?;
510 stream.expect_complete()?;
511 stream.expect_complete()?;
512 stream.expect(&PtxToken::Semicolon)?;
513 Ok(Vadd4DtypeAtypeBtypeSat {
514 dtype,
515 atype,
516 btype,
517 sat,
518 d,
519 mask,
520 a,
521 asel,
522 b,
523 bsel,
524 c,
525 })
526 }
527 }
528
529 impl PtxParser for Vsub4DtypeAtypeBtypeSat {
530 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
531 stream.expect_string("vsub4")?;
532 let dtype = Dtype::parse(stream)?;
533 stream.expect_complete()?;
534 let atype = Atype::parse(stream)?;
535 stream.expect_complete()?;
536 let btype = Btype::parse(stream)?;
537 stream.expect_complete()?;
538 let saved_pos = stream.position();
539 let sat = stream.expect_string(".sat").is_ok();
540 if !sat {
541 stream.set_position(saved_pos);
542 }
543 stream.expect_complete()?;
544 let d = GeneralOperand::parse(stream)?;
545 let saved_pos = stream.position();
546 let mask = match Mask::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 a = GeneralOperand::parse(stream)?;
556 let saved_pos = stream.position();
557 let asel = match Asel::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 b = GeneralOperand::parse(stream)?;
567 let saved_pos = stream.position();
568 let bsel = match Bsel::parse(stream) {
569 Ok(val) => Some(val),
570 Err(_) => {
571 stream.set_position(saved_pos);
572 None
573 }
574 };
575 stream.expect_complete()?;
576 stream.expect(&PtxToken::Comma)?;
577 let c = GeneralOperand::parse(stream)?;
578 stream.expect_complete()?;
579 stream.expect_complete()?;
580 stream.expect(&PtxToken::Semicolon)?;
581 Ok(Vsub4DtypeAtypeBtypeSat {
582 dtype,
583 atype,
584 btype,
585 sat,
586 d,
587 mask,
588 a,
589 asel,
590 b,
591 bsel,
592 c,
593 })
594 }
595 }
596
597 impl PtxParser for Vavrg4DtypeAtypeBtypeSat {
598 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
599 stream.expect_string("vavrg4")?;
600 let dtype = Dtype::parse(stream)?;
601 stream.expect_complete()?;
602 let atype = Atype::parse(stream)?;
603 stream.expect_complete()?;
604 let btype = Btype::parse(stream)?;
605 stream.expect_complete()?;
606 let saved_pos = stream.position();
607 let sat = stream.expect_string(".sat").is_ok();
608 if !sat {
609 stream.set_position(saved_pos);
610 }
611 stream.expect_complete()?;
612 let d = GeneralOperand::parse(stream)?;
613 let saved_pos = stream.position();
614 let mask = match Mask::parse(stream) {
615 Ok(val) => Some(val),
616 Err(_) => {
617 stream.set_position(saved_pos);
618 None
619 }
620 };
621 stream.expect_complete()?;
622 stream.expect(&PtxToken::Comma)?;
623 let a = GeneralOperand::parse(stream)?;
624 let saved_pos = stream.position();
625 let asel = match Asel::parse(stream) {
626 Ok(val) => Some(val),
627 Err(_) => {
628 stream.set_position(saved_pos);
629 None
630 }
631 };
632 stream.expect_complete()?;
633 stream.expect(&PtxToken::Comma)?;
634 let b = GeneralOperand::parse(stream)?;
635 let saved_pos = stream.position();
636 let bsel = match Bsel::parse(stream) {
637 Ok(val) => Some(val),
638 Err(_) => {
639 stream.set_position(saved_pos);
640 None
641 }
642 };
643 stream.expect_complete()?;
644 stream.expect(&PtxToken::Comma)?;
645 let c = GeneralOperand::parse(stream)?;
646 stream.expect_complete()?;
647 stream.expect_complete()?;
648 stream.expect(&PtxToken::Semicolon)?;
649 Ok(Vavrg4DtypeAtypeBtypeSat {
650 dtype,
651 atype,
652 btype,
653 sat,
654 d,
655 mask,
656 a,
657 asel,
658 b,
659 bsel,
660 c,
661 })
662 }
663 }
664
665 impl PtxParser for Vabsdiff4DtypeAtypeBtypeSat {
666 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
667 stream.expect_string("vabsdiff4")?;
668 let dtype = Dtype::parse(stream)?;
669 stream.expect_complete()?;
670 let atype = Atype::parse(stream)?;
671 stream.expect_complete()?;
672 let btype = Btype::parse(stream)?;
673 stream.expect_complete()?;
674 let saved_pos = stream.position();
675 let sat = stream.expect_string(".sat").is_ok();
676 if !sat {
677 stream.set_position(saved_pos);
678 }
679 stream.expect_complete()?;
680 let d = GeneralOperand::parse(stream)?;
681 let saved_pos = stream.position();
682 let mask = match Mask::parse(stream) {
683 Ok(val) => Some(val),
684 Err(_) => {
685 stream.set_position(saved_pos);
686 None
687 }
688 };
689 stream.expect_complete()?;
690 stream.expect(&PtxToken::Comma)?;
691 let a = GeneralOperand::parse(stream)?;
692 let saved_pos = stream.position();
693 let asel = match Asel::parse(stream) {
694 Ok(val) => Some(val),
695 Err(_) => {
696 stream.set_position(saved_pos);
697 None
698 }
699 };
700 stream.expect_complete()?;
701 stream.expect(&PtxToken::Comma)?;
702 let b = GeneralOperand::parse(stream)?;
703 let saved_pos = stream.position();
704 let bsel = match Bsel::parse(stream) {
705 Ok(val) => Some(val),
706 Err(_) => {
707 stream.set_position(saved_pos);
708 None
709 }
710 };
711 stream.expect_complete()?;
712 stream.expect(&PtxToken::Comma)?;
713 let c = GeneralOperand::parse(stream)?;
714 stream.expect_complete()?;
715 stream.expect_complete()?;
716 stream.expect(&PtxToken::Semicolon)?;
717 Ok(Vabsdiff4DtypeAtypeBtypeSat {
718 dtype,
719 atype,
720 btype,
721 sat,
722 d,
723 mask,
724 a,
725 asel,
726 b,
727 bsel,
728 c,
729 })
730 }
731 }
732
733 impl PtxParser for Vmin4DtypeAtypeBtypeSat {
734 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
735 stream.expect_string("vmin4")?;
736 let dtype = Dtype::parse(stream)?;
737 stream.expect_complete()?;
738 let atype = Atype::parse(stream)?;
739 stream.expect_complete()?;
740 let btype = Btype::parse(stream)?;
741 stream.expect_complete()?;
742 let saved_pos = stream.position();
743 let sat = stream.expect_string(".sat").is_ok();
744 if !sat {
745 stream.set_position(saved_pos);
746 }
747 stream.expect_complete()?;
748 let d = GeneralOperand::parse(stream)?;
749 let saved_pos = stream.position();
750 let mask = match Mask::parse(stream) {
751 Ok(val) => Some(val),
752 Err(_) => {
753 stream.set_position(saved_pos);
754 None
755 }
756 };
757 stream.expect_complete()?;
758 stream.expect(&PtxToken::Comma)?;
759 let a = GeneralOperand::parse(stream)?;
760 let saved_pos = stream.position();
761 let asel = match Asel::parse(stream) {
762 Ok(val) => Some(val),
763 Err(_) => {
764 stream.set_position(saved_pos);
765 None
766 }
767 };
768 stream.expect_complete()?;
769 stream.expect(&PtxToken::Comma)?;
770 let b = GeneralOperand::parse(stream)?;
771 let saved_pos = stream.position();
772 let bsel = match Bsel::parse(stream) {
773 Ok(val) => Some(val),
774 Err(_) => {
775 stream.set_position(saved_pos);
776 None
777 }
778 };
779 stream.expect_complete()?;
780 stream.expect(&PtxToken::Comma)?;
781 let c = GeneralOperand::parse(stream)?;
782 stream.expect_complete()?;
783 stream.expect_complete()?;
784 stream.expect(&PtxToken::Semicolon)?;
785 Ok(Vmin4DtypeAtypeBtypeSat {
786 dtype,
787 atype,
788 btype,
789 sat,
790 d,
791 mask,
792 a,
793 asel,
794 b,
795 bsel,
796 c,
797 })
798 }
799 }
800
801 impl PtxParser for Vmax4DtypeAtypeBtypeSat {
802 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
803 stream.expect_string("vmax4")?;
804 let dtype = Dtype::parse(stream)?;
805 stream.expect_complete()?;
806 let atype = Atype::parse(stream)?;
807 stream.expect_complete()?;
808 let btype = Btype::parse(stream)?;
809 stream.expect_complete()?;
810 let saved_pos = stream.position();
811 let sat = stream.expect_string(".sat").is_ok();
812 if !sat {
813 stream.set_position(saved_pos);
814 }
815 stream.expect_complete()?;
816 let d = GeneralOperand::parse(stream)?;
817 let saved_pos = stream.position();
818 let mask = match Mask::parse(stream) {
819 Ok(val) => Some(val),
820 Err(_) => {
821 stream.set_position(saved_pos);
822 None
823 }
824 };
825 stream.expect_complete()?;
826 stream.expect(&PtxToken::Comma)?;
827 let a = GeneralOperand::parse(stream)?;
828 let saved_pos = stream.position();
829 let asel = match Asel::parse(stream) {
830 Ok(val) => Some(val),
831 Err(_) => {
832 stream.set_position(saved_pos);
833 None
834 }
835 };
836 stream.expect_complete()?;
837 stream.expect(&PtxToken::Comma)?;
838 let b = GeneralOperand::parse(stream)?;
839 let saved_pos = stream.position();
840 let bsel = match Bsel::parse(stream) {
841 Ok(val) => Some(val),
842 Err(_) => {
843 stream.set_position(saved_pos);
844 None
845 }
846 };
847 stream.expect_complete()?;
848 stream.expect(&PtxToken::Comma)?;
849 let c = GeneralOperand::parse(stream)?;
850 stream.expect_complete()?;
851 stream.expect_complete()?;
852 stream.expect(&PtxToken::Semicolon)?;
853 Ok(Vmax4DtypeAtypeBtypeSat {
854 dtype,
855 atype,
856 btype,
857 sat,
858 d,
859 mask,
860 a,
861 asel,
862 b,
863 bsel,
864 c,
865 })
866 }
867 }
868
869 impl PtxParser for Vadd4DtypeAtypeBtypeAdd {
870 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
871 stream.expect_string("vadd4")?;
872 let dtype = Dtype::parse(stream)?;
873 stream.expect_complete()?;
874 let atype = Atype::parse(stream)?;
875 stream.expect_complete()?;
876 let btype = Btype::parse(stream)?;
877 stream.expect_complete()?;
878 stream.expect_string(".add")?;
879 let add = ();
880 stream.expect_complete()?;
881 let d = GeneralOperand::parse(stream)?;
882 let saved_pos = stream.position();
883 let mask = match Mask::parse(stream) {
884 Ok(val) => Some(val),
885 Err(_) => {
886 stream.set_position(saved_pos);
887 None
888 }
889 };
890 stream.expect_complete()?;
891 stream.expect(&PtxToken::Comma)?;
892 let a = GeneralOperand::parse(stream)?;
893 let saved_pos = stream.position();
894 let asel = match Asel::parse(stream) {
895 Ok(val) => Some(val),
896 Err(_) => {
897 stream.set_position(saved_pos);
898 None
899 }
900 };
901 stream.expect_complete()?;
902 stream.expect(&PtxToken::Comma)?;
903 let b = GeneralOperand::parse(stream)?;
904 let saved_pos = stream.position();
905 let bsel = match Bsel::parse(stream) {
906 Ok(val) => Some(val),
907 Err(_) => {
908 stream.set_position(saved_pos);
909 None
910 }
911 };
912 stream.expect_complete()?;
913 stream.expect(&PtxToken::Comma)?;
914 let c = GeneralOperand::parse(stream)?;
915 stream.expect_complete()?;
916 stream.expect_complete()?;
917 stream.expect(&PtxToken::Semicolon)?;
918 Ok(Vadd4DtypeAtypeBtypeAdd {
919 dtype,
920 atype,
921 btype,
922 add,
923 d,
924 mask,
925 a,
926 asel,
927 b,
928 bsel,
929 c,
930 })
931 }
932 }
933
934 impl PtxParser for Vsub4DtypeAtypeBtypeAdd {
935 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
936 stream.expect_string("vsub4")?;
937 let dtype = Dtype::parse(stream)?;
938 stream.expect_complete()?;
939 let atype = Atype::parse(stream)?;
940 stream.expect_complete()?;
941 let btype = Btype::parse(stream)?;
942 stream.expect_complete()?;
943 stream.expect_string(".add")?;
944 let add = ();
945 stream.expect_complete()?;
946 let d = GeneralOperand::parse(stream)?;
947 let saved_pos = stream.position();
948 let mask = match Mask::parse(stream) {
949 Ok(val) => Some(val),
950 Err(_) => {
951 stream.set_position(saved_pos);
952 None
953 }
954 };
955 stream.expect_complete()?;
956 stream.expect(&PtxToken::Comma)?;
957 let a = GeneralOperand::parse(stream)?;
958 let saved_pos = stream.position();
959 let asel = match Asel::parse(stream) {
960 Ok(val) => Some(val),
961 Err(_) => {
962 stream.set_position(saved_pos);
963 None
964 }
965 };
966 stream.expect_complete()?;
967 stream.expect(&PtxToken::Comma)?;
968 let b = GeneralOperand::parse(stream)?;
969 let saved_pos = stream.position();
970 let bsel = match Bsel::parse(stream) {
971 Ok(val) => Some(val),
972 Err(_) => {
973 stream.set_position(saved_pos);
974 None
975 }
976 };
977 stream.expect_complete()?;
978 stream.expect(&PtxToken::Comma)?;
979 let c = GeneralOperand::parse(stream)?;
980 stream.expect_complete()?;
981 stream.expect_complete()?;
982 stream.expect(&PtxToken::Semicolon)?;
983 Ok(Vsub4DtypeAtypeBtypeAdd {
984 dtype,
985 atype,
986 btype,
987 add,
988 d,
989 mask,
990 a,
991 asel,
992 b,
993 bsel,
994 c,
995 })
996 }
997 }
998
999 impl PtxParser for Vavrg4DtypeAtypeBtypeAdd {
1000 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1001 stream.expect_string("vavrg4")?;
1002 let dtype = Dtype::parse(stream)?;
1003 stream.expect_complete()?;
1004 let atype = Atype::parse(stream)?;
1005 stream.expect_complete()?;
1006 let btype = Btype::parse(stream)?;
1007 stream.expect_complete()?;
1008 stream.expect_string(".add")?;
1009 let add = ();
1010 stream.expect_complete()?;
1011 let d = GeneralOperand::parse(stream)?;
1012 let saved_pos = stream.position();
1013 let mask = match Mask::parse(stream) {
1014 Ok(val) => Some(val),
1015 Err(_) => {
1016 stream.set_position(saved_pos);
1017 None
1018 }
1019 };
1020 stream.expect_complete()?;
1021 stream.expect(&PtxToken::Comma)?;
1022 let a = GeneralOperand::parse(stream)?;
1023 let saved_pos = stream.position();
1024 let asel = match Asel::parse(stream) {
1025 Ok(val) => Some(val),
1026 Err(_) => {
1027 stream.set_position(saved_pos);
1028 None
1029 }
1030 };
1031 stream.expect_complete()?;
1032 stream.expect(&PtxToken::Comma)?;
1033 let b = GeneralOperand::parse(stream)?;
1034 let saved_pos = stream.position();
1035 let bsel = match Bsel::parse(stream) {
1036 Ok(val) => Some(val),
1037 Err(_) => {
1038 stream.set_position(saved_pos);
1039 None
1040 }
1041 };
1042 stream.expect_complete()?;
1043 stream.expect(&PtxToken::Comma)?;
1044 let c = GeneralOperand::parse(stream)?;
1045 stream.expect_complete()?;
1046 stream.expect_complete()?;
1047 stream.expect(&PtxToken::Semicolon)?;
1048 Ok(Vavrg4DtypeAtypeBtypeAdd {
1049 dtype,
1050 atype,
1051 btype,
1052 add,
1053 d,
1054 mask,
1055 a,
1056 asel,
1057 b,
1058 bsel,
1059 c,
1060 })
1061 }
1062 }
1063
1064 impl PtxParser for Vabsdiff4DtypeAtypeBtypeAdd {
1065 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1066 stream.expect_string("vabsdiff4")?;
1067 let dtype = Dtype::parse(stream)?;
1068 stream.expect_complete()?;
1069 let atype = Atype::parse(stream)?;
1070 stream.expect_complete()?;
1071 let btype = Btype::parse(stream)?;
1072 stream.expect_complete()?;
1073 stream.expect_string(".add")?;
1074 let add = ();
1075 stream.expect_complete()?;
1076 let d = GeneralOperand::parse(stream)?;
1077 let saved_pos = stream.position();
1078 let mask = match Mask::parse(stream) {
1079 Ok(val) => Some(val),
1080 Err(_) => {
1081 stream.set_position(saved_pos);
1082 None
1083 }
1084 };
1085 stream.expect_complete()?;
1086 stream.expect(&PtxToken::Comma)?;
1087 let a = GeneralOperand::parse(stream)?;
1088 let saved_pos = stream.position();
1089 let asel = match Asel::parse(stream) {
1090 Ok(val) => Some(val),
1091 Err(_) => {
1092 stream.set_position(saved_pos);
1093 None
1094 }
1095 };
1096 stream.expect_complete()?;
1097 stream.expect(&PtxToken::Comma)?;
1098 let b = GeneralOperand::parse(stream)?;
1099 let saved_pos = stream.position();
1100 let bsel = match Bsel::parse(stream) {
1101 Ok(val) => Some(val),
1102 Err(_) => {
1103 stream.set_position(saved_pos);
1104 None
1105 }
1106 };
1107 stream.expect_complete()?;
1108 stream.expect(&PtxToken::Comma)?;
1109 let c = GeneralOperand::parse(stream)?;
1110 stream.expect_complete()?;
1111 stream.expect_complete()?;
1112 stream.expect(&PtxToken::Semicolon)?;
1113 Ok(Vabsdiff4DtypeAtypeBtypeAdd {
1114 dtype,
1115 atype,
1116 btype,
1117 add,
1118 d,
1119 mask,
1120 a,
1121 asel,
1122 b,
1123 bsel,
1124 c,
1125 })
1126 }
1127 }
1128
1129 impl PtxParser for Vmin4DtypeAtypeBtypeAdd {
1130 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1131 stream.expect_string("vmin4")?;
1132 let dtype = Dtype::parse(stream)?;
1133 stream.expect_complete()?;
1134 let atype = Atype::parse(stream)?;
1135 stream.expect_complete()?;
1136 let btype = Btype::parse(stream)?;
1137 stream.expect_complete()?;
1138 stream.expect_string(".add")?;
1139 let add = ();
1140 stream.expect_complete()?;
1141 let d = GeneralOperand::parse(stream)?;
1142 let saved_pos = stream.position();
1143 let mask = match Mask::parse(stream) {
1144 Ok(val) => Some(val),
1145 Err(_) => {
1146 stream.set_position(saved_pos);
1147 None
1148 }
1149 };
1150 stream.expect_complete()?;
1151 stream.expect(&PtxToken::Comma)?;
1152 let a = GeneralOperand::parse(stream)?;
1153 let saved_pos = stream.position();
1154 let asel = match Asel::parse(stream) {
1155 Ok(val) => Some(val),
1156 Err(_) => {
1157 stream.set_position(saved_pos);
1158 None
1159 }
1160 };
1161 stream.expect_complete()?;
1162 stream.expect(&PtxToken::Comma)?;
1163 let b = GeneralOperand::parse(stream)?;
1164 let saved_pos = stream.position();
1165 let bsel = match Bsel::parse(stream) {
1166 Ok(val) => Some(val),
1167 Err(_) => {
1168 stream.set_position(saved_pos);
1169 None
1170 }
1171 };
1172 stream.expect_complete()?;
1173 stream.expect(&PtxToken::Comma)?;
1174 let c = GeneralOperand::parse(stream)?;
1175 stream.expect_complete()?;
1176 stream.expect_complete()?;
1177 stream.expect(&PtxToken::Semicolon)?;
1178 Ok(Vmin4DtypeAtypeBtypeAdd {
1179 dtype,
1180 atype,
1181 btype,
1182 add,
1183 d,
1184 mask,
1185 a,
1186 asel,
1187 b,
1188 bsel,
1189 c,
1190 })
1191 }
1192 }
1193
1194 impl PtxParser for Vmax4DtypeAtypeBtypeAdd {
1195 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1196 stream.expect_string("vmax4")?;
1197 let dtype = Dtype::parse(stream)?;
1198 stream.expect_complete()?;
1199 let atype = Atype::parse(stream)?;
1200 stream.expect_complete()?;
1201 let btype = Btype::parse(stream)?;
1202 stream.expect_complete()?;
1203 stream.expect_string(".add")?;
1204 let add = ();
1205 stream.expect_complete()?;
1206 let d = GeneralOperand::parse(stream)?;
1207 let saved_pos = stream.position();
1208 let mask = match Mask::parse(stream) {
1209 Ok(val) => Some(val),
1210 Err(_) => {
1211 stream.set_position(saved_pos);
1212 None
1213 }
1214 };
1215 stream.expect_complete()?;
1216 stream.expect(&PtxToken::Comma)?;
1217 let a = GeneralOperand::parse(stream)?;
1218 let saved_pos = stream.position();
1219 let asel = match Asel::parse(stream) {
1220 Ok(val) => Some(val),
1221 Err(_) => {
1222 stream.set_position(saved_pos);
1223 None
1224 }
1225 };
1226 stream.expect_complete()?;
1227 stream.expect(&PtxToken::Comma)?;
1228 let b = GeneralOperand::parse(stream)?;
1229 let saved_pos = stream.position();
1230 let bsel = match Bsel::parse(stream) {
1231 Ok(val) => Some(val),
1232 Err(_) => {
1233 stream.set_position(saved_pos);
1234 None
1235 }
1236 };
1237 stream.expect_complete()?;
1238 stream.expect(&PtxToken::Comma)?;
1239 let c = GeneralOperand::parse(stream)?;
1240 stream.expect_complete()?;
1241 stream.expect_complete()?;
1242 stream.expect(&PtxToken::Semicolon)?;
1243 Ok(Vmax4DtypeAtypeBtypeAdd {
1244 dtype,
1245 atype,
1246 btype,
1247 add,
1248 d,
1249 mask,
1250 a,
1251 asel,
1252 b,
1253 bsel,
1254 c,
1255 })
1256 }
1257 }
1258}