1#![allow(unused)]
15
16use crate::lexer::PtxToken;
17use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
18use crate::r#type::common::*;
19
20pub mod section_0 {
21 use super::*;
22 use crate::r#type::instruction::vop2::section_0::*;
23
24 impl PtxParser for Asel {
29 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
30 {
32 let saved_pos = stream.position();
33 if stream.expect_string(".h00").is_ok() {
34 return Ok(Asel::H00);
35 }
36 stream.set_position(saved_pos);
37 }
38 let saved_pos = stream.position();
39 {
41 let saved_pos = stream.position();
42 if stream.expect_string(".h01").is_ok() {
43 return Ok(Asel::H01);
44 }
45 stream.set_position(saved_pos);
46 }
47 stream.set_position(saved_pos);
48 let saved_pos = stream.position();
49 {
51 let saved_pos = stream.position();
52 if stream.expect_string(".h02").is_ok() {
53 return Ok(Asel::H02);
54 }
55 stream.set_position(saved_pos);
56 }
57 stream.set_position(saved_pos);
58 let saved_pos = stream.position();
59 {
61 let saved_pos = stream.position();
62 if stream.expect_string(".h03").is_ok() {
63 return Ok(Asel::H03);
64 }
65 stream.set_position(saved_pos);
66 }
67 stream.set_position(saved_pos);
68 let saved_pos = stream.position();
69 {
71 let saved_pos = stream.position();
72 if stream.expect_string(".h10").is_ok() {
73 return Ok(Asel::H10);
74 }
75 stream.set_position(saved_pos);
76 }
77 stream.set_position(saved_pos);
78 let saved_pos = stream.position();
79 {
81 let saved_pos = stream.position();
82 if stream.expect_string(".h11").is_ok() {
83 return Ok(Asel::H11);
84 }
85 stream.set_position(saved_pos);
86 }
87 stream.set_position(saved_pos);
88 let saved_pos = stream.position();
89 {
91 let saved_pos = stream.position();
92 if stream.expect_string(".h12").is_ok() {
93 return Ok(Asel::H12);
94 }
95 stream.set_position(saved_pos);
96 }
97 stream.set_position(saved_pos);
98 let saved_pos = stream.position();
99 {
101 let saved_pos = stream.position();
102 if stream.expect_string(".h13").is_ok() {
103 return Ok(Asel::H13);
104 }
105 stream.set_position(saved_pos);
106 }
107 stream.set_position(saved_pos);
108 let saved_pos = stream.position();
109 {
111 let saved_pos = stream.position();
112 if stream.expect_string(".h20").is_ok() {
113 return Ok(Asel::H20);
114 }
115 stream.set_position(saved_pos);
116 }
117 stream.set_position(saved_pos);
118 let saved_pos = stream.position();
119 {
121 let saved_pos = stream.position();
122 if stream.expect_string(".h21").is_ok() {
123 return Ok(Asel::H21);
124 }
125 stream.set_position(saved_pos);
126 }
127 stream.set_position(saved_pos);
128 let saved_pos = stream.position();
129 {
131 let saved_pos = stream.position();
132 if stream.expect_string(".h22").is_ok() {
133 return Ok(Asel::H22);
134 }
135 stream.set_position(saved_pos);
136 }
137 stream.set_position(saved_pos);
138 let saved_pos = stream.position();
139 {
141 let saved_pos = stream.position();
142 if stream.expect_string(".h23").is_ok() {
143 return Ok(Asel::H23);
144 }
145 stream.set_position(saved_pos);
146 }
147 stream.set_position(saved_pos);
148 let saved_pos = stream.position();
149 {
151 let saved_pos = stream.position();
152 if stream.expect_string(".h30").is_ok() {
153 return Ok(Asel::H30);
154 }
155 stream.set_position(saved_pos);
156 }
157 stream.set_position(saved_pos);
158 let saved_pos = stream.position();
159 {
161 let saved_pos = stream.position();
162 if stream.expect_string(".h31").is_ok() {
163 return Ok(Asel::H31);
164 }
165 stream.set_position(saved_pos);
166 }
167 stream.set_position(saved_pos);
168 let saved_pos = stream.position();
169 {
171 let saved_pos = stream.position();
172 if stream.expect_string(".h32").is_ok() {
173 return Ok(Asel::H32);
174 }
175 stream.set_position(saved_pos);
176 }
177 stream.set_position(saved_pos);
178 let saved_pos = stream.position();
179 {
181 let saved_pos = stream.position();
182 if stream.expect_string(".h33").is_ok() {
183 return Ok(Asel::H33);
184 }
185 stream.set_position(saved_pos);
186 }
187 stream.set_position(saved_pos);
188 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
189 let expected = &[".h00", ".h01", ".h02", ".h03", ".h10", ".h11", ".h12", ".h13", ".h20", ".h21", ".h22", ".h23", ".h30", ".h31", ".h32", ".h33"];
190 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
191 Err(crate::parser::unexpected_value(span, expected, found))
192 }
193 }
194
195 impl PtxParser for Atype {
196 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
197 {
199 let saved_pos = stream.position();
200 if stream.expect_string(".u32").is_ok() {
201 return Ok(Atype::U32);
202 }
203 stream.set_position(saved_pos);
204 }
205 let saved_pos = stream.position();
206 {
208 let saved_pos = stream.position();
209 if stream.expect_string(".s32").is_ok() {
210 return Ok(Atype::S32);
211 }
212 stream.set_position(saved_pos);
213 }
214 stream.set_position(saved_pos);
215 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
216 let expected = &[".u32", ".s32"];
217 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
218 Err(crate::parser::unexpected_value(span, expected, found))
219 }
220 }
221
222 impl PtxParser for Bsel {
223 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
224 {
226 let saved_pos = stream.position();
227 if stream.expect_string(".h00").is_ok() {
228 return Ok(Bsel::H00);
229 }
230 stream.set_position(saved_pos);
231 }
232 let saved_pos = stream.position();
233 {
235 let saved_pos = stream.position();
236 if stream.expect_string(".h01").is_ok() {
237 return Ok(Bsel::H01);
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(".h02").is_ok() {
247 return Ok(Bsel::H02);
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(".h03").is_ok() {
257 return Ok(Bsel::H03);
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(".h10").is_ok() {
267 return Ok(Bsel::H10);
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(".h11").is_ok() {
277 return Ok(Bsel::H11);
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(".h12").is_ok() {
287 return Ok(Bsel::H12);
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(".h13").is_ok() {
297 return Ok(Bsel::H13);
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(".h20").is_ok() {
307 return Ok(Bsel::H20);
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(".h21").is_ok() {
317 return Ok(Bsel::H21);
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(".h22").is_ok() {
327 return Ok(Bsel::H22);
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(".h23").is_ok() {
337 return Ok(Bsel::H23);
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(".h30").is_ok() {
347 return Ok(Bsel::H30);
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(".h31").is_ok() {
357 return Ok(Bsel::H31);
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(".h32").is_ok() {
367 return Ok(Bsel::H32);
368 }
369 stream.set_position(saved_pos);
370 }
371 stream.set_position(saved_pos);
372 let saved_pos = stream.position();
373 {
375 let saved_pos = stream.position();
376 if stream.expect_string(".h33").is_ok() {
377 return Ok(Bsel::H33);
378 }
379 stream.set_position(saved_pos);
380 }
381 stream.set_position(saved_pos);
382 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
383 let expected = &[".h00", ".h01", ".h02", ".h03", ".h10", ".h11", ".h12", ".h13", ".h20", ".h21", ".h22", ".h23", ".h30", ".h31", ".h32", ".h33"];
384 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
385 Err(crate::parser::unexpected_value(span, expected, found))
386 }
387 }
388
389 impl PtxParser for Btype {
390 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
391 {
393 let saved_pos = stream.position();
394 if stream.expect_string(".u32").is_ok() {
395 return Ok(Btype::U32);
396 }
397 stream.set_position(saved_pos);
398 }
399 let saved_pos = stream.position();
400 {
402 let saved_pos = stream.position();
403 if stream.expect_string(".s32").is_ok() {
404 return Ok(Btype::S32);
405 }
406 stream.set_position(saved_pos);
407 }
408 stream.set_position(saved_pos);
409 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
410 let expected = &[".u32", ".s32"];
411 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
412 Err(crate::parser::unexpected_value(span, expected, found))
413 }
414 }
415
416 impl PtxParser for Dtype {
417 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
418 {
420 let saved_pos = stream.position();
421 if stream.expect_string(".u32").is_ok() {
422 return Ok(Dtype::U32);
423 }
424 stream.set_position(saved_pos);
425 }
426 let saved_pos = stream.position();
427 {
429 let saved_pos = stream.position();
430 if stream.expect_string(".s32").is_ok() {
431 return Ok(Dtype::S32);
432 }
433 stream.set_position(saved_pos);
434 }
435 stream.set_position(saved_pos);
436 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
437 let expected = &[".u32", ".s32"];
438 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
439 Err(crate::parser::unexpected_value(span, expected, found))
440 }
441 }
442
443 impl PtxParser for Mask {
444 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
445 {
447 let saved_pos = stream.position();
448 if stream.expect_string(".h10").is_ok() {
449 return Ok(Mask::H10);
450 }
451 stream.set_position(saved_pos);
452 }
453 let saved_pos = stream.position();
454 {
456 let saved_pos = stream.position();
457 if stream.expect_string(".h0").is_ok() {
458 return Ok(Mask::H0);
459 }
460 stream.set_position(saved_pos);
461 }
462 stream.set_position(saved_pos);
463 let saved_pos = stream.position();
464 {
466 let saved_pos = stream.position();
467 if stream.expect_string(".h1").is_ok() {
468 return Ok(Mask::H1);
469 }
470 stream.set_position(saved_pos);
471 }
472 stream.set_position(saved_pos);
473 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
474 let expected = &[".h10", ".h0", ".h1"];
475 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
476 Err(crate::parser::unexpected_value(span, expected, found))
477 }
478 }
479
480 impl PtxParser for Vadd2DtypeAtypeBtypeSat {
481 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
482 stream.expect_string("vadd2")?;
483 let dtype = Dtype::parse(stream)?;
484 stream.expect_complete()?;
485 let atype = Atype::parse(stream)?;
486 stream.expect_complete()?;
487 let btype = Btype::parse(stream)?;
488 stream.expect_complete()?;
489 let saved_pos = stream.position();
490 let sat = stream.expect_string(".sat").is_ok();
491 if !sat {
492 stream.set_position(saved_pos);
493 }
494 stream.expect_complete()?;
495 let d = GeneralOperand::parse(stream)?;
496 let saved_pos = stream.position();
497 let mask = match Mask::parse(stream) {
498 Ok(val) => Some(val),
499 Err(_) => {
500 stream.set_position(saved_pos);
501 None
502 }
503 };
504 stream.expect_complete()?;
505 stream.expect(&PtxToken::Comma)?;
506 let a = GeneralOperand::parse(stream)?;
507 let saved_pos = stream.position();
508 let asel = match Asel::parse(stream) {
509 Ok(val) => Some(val),
510 Err(_) => {
511 stream.set_position(saved_pos);
512 None
513 }
514 };
515 stream.expect_complete()?;
516 stream.expect(&PtxToken::Comma)?;
517 let b = GeneralOperand::parse(stream)?;
518 let saved_pos = stream.position();
519 let bsel = match Bsel::parse(stream) {
520 Ok(val) => Some(val),
521 Err(_) => {
522 stream.set_position(saved_pos);
523 None
524 }
525 };
526 stream.expect_complete()?;
527 stream.expect(&PtxToken::Comma)?;
528 let c = GeneralOperand::parse(stream)?;
529 stream.expect_complete()?;
530 stream.expect_complete()?;
531 stream.expect(&PtxToken::Semicolon)?;
532 Ok(Vadd2DtypeAtypeBtypeSat {
533 dtype,
534 atype,
535 btype,
536 sat,
537 d,
538 mask,
539 a,
540 asel,
541 b,
542 bsel,
543 c,
544 })
545 }
546 }
547
548
549 impl PtxParser for Vsub2DtypeAtypeBtypeSat {
550 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
551 stream.expect_string("vsub2")?;
552 let dtype = Dtype::parse(stream)?;
553 stream.expect_complete()?;
554 let atype = Atype::parse(stream)?;
555 stream.expect_complete()?;
556 let btype = Btype::parse(stream)?;
557 stream.expect_complete()?;
558 let saved_pos = stream.position();
559 let sat = stream.expect_string(".sat").is_ok();
560 if !sat {
561 stream.set_position(saved_pos);
562 }
563 stream.expect_complete()?;
564 let d = GeneralOperand::parse(stream)?;
565 let saved_pos = stream.position();
566 let mask = match Mask::parse(stream) {
567 Ok(val) => Some(val),
568 Err(_) => {
569 stream.set_position(saved_pos);
570 None
571 }
572 };
573 stream.expect_complete()?;
574 stream.expect(&PtxToken::Comma)?;
575 let a = GeneralOperand::parse(stream)?;
576 let saved_pos = stream.position();
577 let asel = match Asel::parse(stream) {
578 Ok(val) => Some(val),
579 Err(_) => {
580 stream.set_position(saved_pos);
581 None
582 }
583 };
584 stream.expect_complete()?;
585 stream.expect(&PtxToken::Comma)?;
586 let b = GeneralOperand::parse(stream)?;
587 let saved_pos = stream.position();
588 let bsel = match Bsel::parse(stream) {
589 Ok(val) => Some(val),
590 Err(_) => {
591 stream.set_position(saved_pos);
592 None
593 }
594 };
595 stream.expect_complete()?;
596 stream.expect(&PtxToken::Comma)?;
597 let c = GeneralOperand::parse(stream)?;
598 stream.expect_complete()?;
599 stream.expect_complete()?;
600 stream.expect(&PtxToken::Semicolon)?;
601 Ok(Vsub2DtypeAtypeBtypeSat {
602 dtype,
603 atype,
604 btype,
605 sat,
606 d,
607 mask,
608 a,
609 asel,
610 b,
611 bsel,
612 c,
613 })
614 }
615 }
616
617
618 impl PtxParser for Vavrg2DtypeAtypeBtypeSat {
619 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
620 stream.expect_string("vavrg2")?;
621 let dtype = Dtype::parse(stream)?;
622 stream.expect_complete()?;
623 let atype = Atype::parse(stream)?;
624 stream.expect_complete()?;
625 let btype = Btype::parse(stream)?;
626 stream.expect_complete()?;
627 let saved_pos = stream.position();
628 let sat = stream.expect_string(".sat").is_ok();
629 if !sat {
630 stream.set_position(saved_pos);
631 }
632 stream.expect_complete()?;
633 let d = GeneralOperand::parse(stream)?;
634 let saved_pos = stream.position();
635 let mask = match Mask::parse(stream) {
636 Ok(val) => Some(val),
637 Err(_) => {
638 stream.set_position(saved_pos);
639 None
640 }
641 };
642 stream.expect_complete()?;
643 stream.expect(&PtxToken::Comma)?;
644 let a = GeneralOperand::parse(stream)?;
645 let saved_pos = stream.position();
646 let asel = match Asel::parse(stream) {
647 Ok(val) => Some(val),
648 Err(_) => {
649 stream.set_position(saved_pos);
650 None
651 }
652 };
653 stream.expect_complete()?;
654 stream.expect(&PtxToken::Comma)?;
655 let b = GeneralOperand::parse(stream)?;
656 let saved_pos = stream.position();
657 let bsel = match Bsel::parse(stream) {
658 Ok(val) => Some(val),
659 Err(_) => {
660 stream.set_position(saved_pos);
661 None
662 }
663 };
664 stream.expect_complete()?;
665 stream.expect(&PtxToken::Comma)?;
666 let c = GeneralOperand::parse(stream)?;
667 stream.expect_complete()?;
668 stream.expect_complete()?;
669 stream.expect(&PtxToken::Semicolon)?;
670 Ok(Vavrg2DtypeAtypeBtypeSat {
671 dtype,
672 atype,
673 btype,
674 sat,
675 d,
676 mask,
677 a,
678 asel,
679 b,
680 bsel,
681 c,
682 })
683 }
684 }
685
686
687 impl PtxParser for Vabsdiff2DtypeAtypeBtypeSat {
688 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
689 stream.expect_string("vabsdiff2")?;
690 let dtype = Dtype::parse(stream)?;
691 stream.expect_complete()?;
692 let atype = Atype::parse(stream)?;
693 stream.expect_complete()?;
694 let btype = Btype::parse(stream)?;
695 stream.expect_complete()?;
696 let saved_pos = stream.position();
697 let sat = stream.expect_string(".sat").is_ok();
698 if !sat {
699 stream.set_position(saved_pos);
700 }
701 stream.expect_complete()?;
702 let d = GeneralOperand::parse(stream)?;
703 let saved_pos = stream.position();
704 let mask = match Mask::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 a = GeneralOperand::parse(stream)?;
714 let saved_pos = stream.position();
715 let asel = match Asel::parse(stream) {
716 Ok(val) => Some(val),
717 Err(_) => {
718 stream.set_position(saved_pos);
719 None
720 }
721 };
722 stream.expect_complete()?;
723 stream.expect(&PtxToken::Comma)?;
724 let b = GeneralOperand::parse(stream)?;
725 let saved_pos = stream.position();
726 let bsel = match Bsel::parse(stream) {
727 Ok(val) => Some(val),
728 Err(_) => {
729 stream.set_position(saved_pos);
730 None
731 }
732 };
733 stream.expect_complete()?;
734 stream.expect(&PtxToken::Comma)?;
735 let c = GeneralOperand::parse(stream)?;
736 stream.expect_complete()?;
737 stream.expect_complete()?;
738 stream.expect(&PtxToken::Semicolon)?;
739 Ok(Vabsdiff2DtypeAtypeBtypeSat {
740 dtype,
741 atype,
742 btype,
743 sat,
744 d,
745 mask,
746 a,
747 asel,
748 b,
749 bsel,
750 c,
751 })
752 }
753 }
754
755
756 impl PtxParser for Vmin2DtypeAtypeBtypeSat {
757 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
758 stream.expect_string("vmin2")?;
759 let dtype = Dtype::parse(stream)?;
760 stream.expect_complete()?;
761 let atype = Atype::parse(stream)?;
762 stream.expect_complete()?;
763 let btype = Btype::parse(stream)?;
764 stream.expect_complete()?;
765 let saved_pos = stream.position();
766 let sat = stream.expect_string(".sat").is_ok();
767 if !sat {
768 stream.set_position(saved_pos);
769 }
770 stream.expect_complete()?;
771 let d = GeneralOperand::parse(stream)?;
772 let saved_pos = stream.position();
773 let mask = match Mask::parse(stream) {
774 Ok(val) => Some(val),
775 Err(_) => {
776 stream.set_position(saved_pos);
777 None
778 }
779 };
780 stream.expect_complete()?;
781 stream.expect(&PtxToken::Comma)?;
782 let a = GeneralOperand::parse(stream)?;
783 let saved_pos = stream.position();
784 let asel = match Asel::parse(stream) {
785 Ok(val) => Some(val),
786 Err(_) => {
787 stream.set_position(saved_pos);
788 None
789 }
790 };
791 stream.expect_complete()?;
792 stream.expect(&PtxToken::Comma)?;
793 let b = GeneralOperand::parse(stream)?;
794 let saved_pos = stream.position();
795 let bsel = match Bsel::parse(stream) {
796 Ok(val) => Some(val),
797 Err(_) => {
798 stream.set_position(saved_pos);
799 None
800 }
801 };
802 stream.expect_complete()?;
803 stream.expect(&PtxToken::Comma)?;
804 let c = GeneralOperand::parse(stream)?;
805 stream.expect_complete()?;
806 stream.expect_complete()?;
807 stream.expect(&PtxToken::Semicolon)?;
808 Ok(Vmin2DtypeAtypeBtypeSat {
809 dtype,
810 atype,
811 btype,
812 sat,
813 d,
814 mask,
815 a,
816 asel,
817 b,
818 bsel,
819 c,
820 })
821 }
822 }
823
824
825 impl PtxParser for Vmax2DtypeAtypeBtypeSat {
826 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
827 stream.expect_string("vmax2")?;
828 let dtype = Dtype::parse(stream)?;
829 stream.expect_complete()?;
830 let atype = Atype::parse(stream)?;
831 stream.expect_complete()?;
832 let btype = Btype::parse(stream)?;
833 stream.expect_complete()?;
834 let saved_pos = stream.position();
835 let sat = stream.expect_string(".sat").is_ok();
836 if !sat {
837 stream.set_position(saved_pos);
838 }
839 stream.expect_complete()?;
840 let d = GeneralOperand::parse(stream)?;
841 let saved_pos = stream.position();
842 let mask = match Mask::parse(stream) {
843 Ok(val) => Some(val),
844 Err(_) => {
845 stream.set_position(saved_pos);
846 None
847 }
848 };
849 stream.expect_complete()?;
850 stream.expect(&PtxToken::Comma)?;
851 let a = GeneralOperand::parse(stream)?;
852 let saved_pos = stream.position();
853 let asel = match Asel::parse(stream) {
854 Ok(val) => Some(val),
855 Err(_) => {
856 stream.set_position(saved_pos);
857 None
858 }
859 };
860 stream.expect_complete()?;
861 stream.expect(&PtxToken::Comma)?;
862 let b = GeneralOperand::parse(stream)?;
863 let saved_pos = stream.position();
864 let bsel = match Bsel::parse(stream) {
865 Ok(val) => Some(val),
866 Err(_) => {
867 stream.set_position(saved_pos);
868 None
869 }
870 };
871 stream.expect_complete()?;
872 stream.expect(&PtxToken::Comma)?;
873 let c = GeneralOperand::parse(stream)?;
874 stream.expect_complete()?;
875 stream.expect_complete()?;
876 stream.expect(&PtxToken::Semicolon)?;
877 Ok(Vmax2DtypeAtypeBtypeSat {
878 dtype,
879 atype,
880 btype,
881 sat,
882 d,
883 mask,
884 a,
885 asel,
886 b,
887 bsel,
888 c,
889 })
890 }
891 }
892
893
894 impl PtxParser for Vadd2DtypeAtypeBtypeAdd {
895 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
896 stream.expect_string("vadd2")?;
897 let dtype = Dtype::parse(stream)?;
898 stream.expect_complete()?;
899 let atype = Atype::parse(stream)?;
900 stream.expect_complete()?;
901 let btype = Btype::parse(stream)?;
902 stream.expect_complete()?;
903 stream.expect_string(".add")?;
904 let add = ();
905 stream.expect_complete()?;
906 let d = GeneralOperand::parse(stream)?;
907 let saved_pos = stream.position();
908 let mask = match Mask::parse(stream) {
909 Ok(val) => Some(val),
910 Err(_) => {
911 stream.set_position(saved_pos);
912 None
913 }
914 };
915 stream.expect_complete()?;
916 stream.expect(&PtxToken::Comma)?;
917 let a = GeneralOperand::parse(stream)?;
918 let saved_pos = stream.position();
919 let asel = match Asel::parse(stream) {
920 Ok(val) => Some(val),
921 Err(_) => {
922 stream.set_position(saved_pos);
923 None
924 }
925 };
926 stream.expect_complete()?;
927 stream.expect(&PtxToken::Comma)?;
928 let b = GeneralOperand::parse(stream)?;
929 let saved_pos = stream.position();
930 let bsel = match Bsel::parse(stream) {
931 Ok(val) => Some(val),
932 Err(_) => {
933 stream.set_position(saved_pos);
934 None
935 }
936 };
937 stream.expect_complete()?;
938 stream.expect(&PtxToken::Comma)?;
939 let c = GeneralOperand::parse(stream)?;
940 stream.expect_complete()?;
941 stream.expect_complete()?;
942 stream.expect(&PtxToken::Semicolon)?;
943 Ok(Vadd2DtypeAtypeBtypeAdd {
944 dtype,
945 atype,
946 btype,
947 add,
948 d,
949 mask,
950 a,
951 asel,
952 b,
953 bsel,
954 c,
955 })
956 }
957 }
958
959
960 impl PtxParser for Vsub2DtypeAtypeBtypeAdd {
961 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
962 stream.expect_string("vsub2")?;
963 let dtype = Dtype::parse(stream)?;
964 stream.expect_complete()?;
965 let atype = Atype::parse(stream)?;
966 stream.expect_complete()?;
967 let btype = Btype::parse(stream)?;
968 stream.expect_complete()?;
969 stream.expect_string(".add")?;
970 let add = ();
971 stream.expect_complete()?;
972 let d = GeneralOperand::parse(stream)?;
973 let saved_pos = stream.position();
974 let mask = match Mask::parse(stream) {
975 Ok(val) => Some(val),
976 Err(_) => {
977 stream.set_position(saved_pos);
978 None
979 }
980 };
981 stream.expect_complete()?;
982 stream.expect(&PtxToken::Comma)?;
983 let a = GeneralOperand::parse(stream)?;
984 let saved_pos = stream.position();
985 let asel = match Asel::parse(stream) {
986 Ok(val) => Some(val),
987 Err(_) => {
988 stream.set_position(saved_pos);
989 None
990 }
991 };
992 stream.expect_complete()?;
993 stream.expect(&PtxToken::Comma)?;
994 let b = GeneralOperand::parse(stream)?;
995 let saved_pos = stream.position();
996 let bsel = match Bsel::parse(stream) {
997 Ok(val) => Some(val),
998 Err(_) => {
999 stream.set_position(saved_pos);
1000 None
1001 }
1002 };
1003 stream.expect_complete()?;
1004 stream.expect(&PtxToken::Comma)?;
1005 let c = GeneralOperand::parse(stream)?;
1006 stream.expect_complete()?;
1007 stream.expect_complete()?;
1008 stream.expect(&PtxToken::Semicolon)?;
1009 Ok(Vsub2DtypeAtypeBtypeAdd {
1010 dtype,
1011 atype,
1012 btype,
1013 add,
1014 d,
1015 mask,
1016 a,
1017 asel,
1018 b,
1019 bsel,
1020 c,
1021 })
1022 }
1023 }
1024
1025
1026 impl PtxParser for Vavrg2DtypeAtypeBtypeAdd {
1027 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1028 stream.expect_string("vavrg2")?;
1029 let dtype = Dtype::parse(stream)?;
1030 stream.expect_complete()?;
1031 let atype = Atype::parse(stream)?;
1032 stream.expect_complete()?;
1033 let btype = Btype::parse(stream)?;
1034 stream.expect_complete()?;
1035 stream.expect_string(".add")?;
1036 let add = ();
1037 stream.expect_complete()?;
1038 let d = GeneralOperand::parse(stream)?;
1039 let saved_pos = stream.position();
1040 let mask = match Mask::parse(stream) {
1041 Ok(val) => Some(val),
1042 Err(_) => {
1043 stream.set_position(saved_pos);
1044 None
1045 }
1046 };
1047 stream.expect_complete()?;
1048 stream.expect(&PtxToken::Comma)?;
1049 let a = GeneralOperand::parse(stream)?;
1050 let saved_pos = stream.position();
1051 let asel = match Asel::parse(stream) {
1052 Ok(val) => Some(val),
1053 Err(_) => {
1054 stream.set_position(saved_pos);
1055 None
1056 }
1057 };
1058 stream.expect_complete()?;
1059 stream.expect(&PtxToken::Comma)?;
1060 let b = GeneralOperand::parse(stream)?;
1061 let saved_pos = stream.position();
1062 let bsel = match Bsel::parse(stream) {
1063 Ok(val) => Some(val),
1064 Err(_) => {
1065 stream.set_position(saved_pos);
1066 None
1067 }
1068 };
1069 stream.expect_complete()?;
1070 stream.expect(&PtxToken::Comma)?;
1071 let c = GeneralOperand::parse(stream)?;
1072 stream.expect_complete()?;
1073 stream.expect_complete()?;
1074 stream.expect(&PtxToken::Semicolon)?;
1075 Ok(Vavrg2DtypeAtypeBtypeAdd {
1076 dtype,
1077 atype,
1078 btype,
1079 add,
1080 d,
1081 mask,
1082 a,
1083 asel,
1084 b,
1085 bsel,
1086 c,
1087 })
1088 }
1089 }
1090
1091
1092 impl PtxParser for Vabsdiff2DtypeAtypeBtypeAdd {
1093 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1094 stream.expect_string("vabsdiff2")?;
1095 let dtype = Dtype::parse(stream)?;
1096 stream.expect_complete()?;
1097 let atype = Atype::parse(stream)?;
1098 stream.expect_complete()?;
1099 let btype = Btype::parse(stream)?;
1100 stream.expect_complete()?;
1101 stream.expect_string(".add")?;
1102 let add = ();
1103 stream.expect_complete()?;
1104 let d = GeneralOperand::parse(stream)?;
1105 let saved_pos = stream.position();
1106 let mask = match Mask::parse(stream) {
1107 Ok(val) => Some(val),
1108 Err(_) => {
1109 stream.set_position(saved_pos);
1110 None
1111 }
1112 };
1113 stream.expect_complete()?;
1114 stream.expect(&PtxToken::Comma)?;
1115 let a = GeneralOperand::parse(stream)?;
1116 let saved_pos = stream.position();
1117 let asel = match Asel::parse(stream) {
1118 Ok(val) => Some(val),
1119 Err(_) => {
1120 stream.set_position(saved_pos);
1121 None
1122 }
1123 };
1124 stream.expect_complete()?;
1125 stream.expect(&PtxToken::Comma)?;
1126 let b = GeneralOperand::parse(stream)?;
1127 let saved_pos = stream.position();
1128 let bsel = match Bsel::parse(stream) {
1129 Ok(val) => Some(val),
1130 Err(_) => {
1131 stream.set_position(saved_pos);
1132 None
1133 }
1134 };
1135 stream.expect_complete()?;
1136 stream.expect(&PtxToken::Comma)?;
1137 let c = GeneralOperand::parse(stream)?;
1138 stream.expect_complete()?;
1139 stream.expect_complete()?;
1140 stream.expect(&PtxToken::Semicolon)?;
1141 Ok(Vabsdiff2DtypeAtypeBtypeAdd {
1142 dtype,
1143 atype,
1144 btype,
1145 add,
1146 d,
1147 mask,
1148 a,
1149 asel,
1150 b,
1151 bsel,
1152 c,
1153 })
1154 }
1155 }
1156
1157
1158 impl PtxParser for Vmin2DtypeAtypeBtypeAdd {
1159 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1160 stream.expect_string("vmin2")?;
1161 let dtype = Dtype::parse(stream)?;
1162 stream.expect_complete()?;
1163 let atype = Atype::parse(stream)?;
1164 stream.expect_complete()?;
1165 let btype = Btype::parse(stream)?;
1166 stream.expect_complete()?;
1167 stream.expect_string(".add")?;
1168 let add = ();
1169 stream.expect_complete()?;
1170 let d = GeneralOperand::parse(stream)?;
1171 let saved_pos = stream.position();
1172 let mask = match Mask::parse(stream) {
1173 Ok(val) => Some(val),
1174 Err(_) => {
1175 stream.set_position(saved_pos);
1176 None
1177 }
1178 };
1179 stream.expect_complete()?;
1180 stream.expect(&PtxToken::Comma)?;
1181 let a = GeneralOperand::parse(stream)?;
1182 let saved_pos = stream.position();
1183 let asel = match Asel::parse(stream) {
1184 Ok(val) => Some(val),
1185 Err(_) => {
1186 stream.set_position(saved_pos);
1187 None
1188 }
1189 };
1190 stream.expect_complete()?;
1191 stream.expect(&PtxToken::Comma)?;
1192 let b = GeneralOperand::parse(stream)?;
1193 let saved_pos = stream.position();
1194 let bsel = match Bsel::parse(stream) {
1195 Ok(val) => Some(val),
1196 Err(_) => {
1197 stream.set_position(saved_pos);
1198 None
1199 }
1200 };
1201 stream.expect_complete()?;
1202 stream.expect(&PtxToken::Comma)?;
1203 let c = GeneralOperand::parse(stream)?;
1204 stream.expect_complete()?;
1205 stream.expect_complete()?;
1206 stream.expect(&PtxToken::Semicolon)?;
1207 Ok(Vmin2DtypeAtypeBtypeAdd {
1208 dtype,
1209 atype,
1210 btype,
1211 add,
1212 d,
1213 mask,
1214 a,
1215 asel,
1216 b,
1217 bsel,
1218 c,
1219 })
1220 }
1221 }
1222
1223
1224 impl PtxParser for Vmax2DtypeAtypeBtypeAdd {
1225 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1226 stream.expect_string("vmax2")?;
1227 let dtype = Dtype::parse(stream)?;
1228 stream.expect_complete()?;
1229 let atype = Atype::parse(stream)?;
1230 stream.expect_complete()?;
1231 let btype = Btype::parse(stream)?;
1232 stream.expect_complete()?;
1233 stream.expect_string(".add")?;
1234 let add = ();
1235 stream.expect_complete()?;
1236 let d = GeneralOperand::parse(stream)?;
1237 let saved_pos = stream.position();
1238 let mask = match Mask::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 a = GeneralOperand::parse(stream)?;
1248 let saved_pos = stream.position();
1249 let asel = match Asel::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 b = GeneralOperand::parse(stream)?;
1259 let saved_pos = stream.position();
1260 let bsel = match Bsel::parse(stream) {
1261 Ok(val) => Some(val),
1262 Err(_) => {
1263 stream.set_position(saved_pos);
1264 None
1265 }
1266 };
1267 stream.expect_complete()?;
1268 stream.expect(&PtxToken::Comma)?;
1269 let c = GeneralOperand::parse(stream)?;
1270 stream.expect_complete()?;
1271 stream.expect_complete()?;
1272 stream.expect(&PtxToken::Semicolon)?;
1273 Ok(Vmax2DtypeAtypeBtypeAdd {
1274 dtype,
1275 atype,
1276 btype,
1277 add,
1278 d,
1279 mask,
1280 a,
1281 asel,
1282 b,
1283 bsel,
1284 c,
1285 })
1286 }
1287 }
1288
1289
1290}
1291