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.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
88 let expected = &[".b0", ".b1", ".b2", ".b3", ".h0", ".h1"];
89 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
90 Err(crate::parser::unexpected_value(span, expected, found))
91 }
92 }
93
94 impl PtxParser for Atype {
95 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
96 {
98 let saved_pos = stream.position();
99 if stream.expect_string(".u32").is_ok() {
100 return Ok(Atype::U32);
101 }
102 stream.set_position(saved_pos);
103 }
104 let saved_pos = stream.position();
105 {
107 let saved_pos = stream.position();
108 if stream.expect_string(".s32").is_ok() {
109 return Ok(Atype::S32);
110 }
111 stream.set_position(saved_pos);
112 }
113 stream.set_position(saved_pos);
114 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
115 let expected = &[".u32", ".s32"];
116 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
117 Err(crate::parser::unexpected_value(span, expected, found))
118 }
119 }
120
121 impl PtxParser for Bsel {
122 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
123 {
125 let saved_pos = stream.position();
126 if stream.expect_string(".b0").is_ok() {
127 return Ok(Bsel::B0);
128 }
129 stream.set_position(saved_pos);
130 }
131 let saved_pos = stream.position();
132 {
134 let saved_pos = stream.position();
135 if stream.expect_string(".b1").is_ok() {
136 return Ok(Bsel::B1);
137 }
138 stream.set_position(saved_pos);
139 }
140 stream.set_position(saved_pos);
141 let saved_pos = stream.position();
142 {
144 let saved_pos = stream.position();
145 if stream.expect_string(".b2").is_ok() {
146 return Ok(Bsel::B2);
147 }
148 stream.set_position(saved_pos);
149 }
150 stream.set_position(saved_pos);
151 let saved_pos = stream.position();
152 {
154 let saved_pos = stream.position();
155 if stream.expect_string(".b3").is_ok() {
156 return Ok(Bsel::B3);
157 }
158 stream.set_position(saved_pos);
159 }
160 stream.set_position(saved_pos);
161 let saved_pos = stream.position();
162 {
164 let saved_pos = stream.position();
165 if stream.expect_string(".h0").is_ok() {
166 return Ok(Bsel::H0);
167 }
168 stream.set_position(saved_pos);
169 }
170 stream.set_position(saved_pos);
171 let saved_pos = stream.position();
172 {
174 let saved_pos = stream.position();
175 if stream.expect_string(".h1").is_ok() {
176 return Ok(Bsel::H1);
177 }
178 stream.set_position(saved_pos);
179 }
180 stream.set_position(saved_pos);
181 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
182 let expected = &[".b0", ".b1", ".b2", ".b3", ".h0", ".h1"];
183 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
184 Err(crate::parser::unexpected_value(span, expected, found))
185 }
186 }
187
188 impl PtxParser for Btype {
189 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
190 {
192 let saved_pos = stream.position();
193 if stream.expect_string(".u32").is_ok() {
194 return Ok(Btype::U32);
195 }
196 stream.set_position(saved_pos);
197 }
198 let saved_pos = stream.position();
199 {
201 let saved_pos = stream.position();
202 if stream.expect_string(".s32").is_ok() {
203 return Ok(Btype::S32);
204 }
205 stream.set_position(saved_pos);
206 }
207 stream.set_position(saved_pos);
208 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
209 let expected = &[".u32", ".s32"];
210 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
211 Err(crate::parser::unexpected_value(span, expected, found))
212 }
213 }
214
215 impl PtxParser for Dsel {
216 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
217 {
219 let saved_pos = stream.position();
220 if stream.expect_string(".b0").is_ok() {
221 return Ok(Dsel::B0);
222 }
223 stream.set_position(saved_pos);
224 }
225 let saved_pos = stream.position();
226 {
228 let saved_pos = stream.position();
229 if stream.expect_string(".b1").is_ok() {
230 return Ok(Dsel::B1);
231 }
232 stream.set_position(saved_pos);
233 }
234 stream.set_position(saved_pos);
235 let saved_pos = stream.position();
236 {
238 let saved_pos = stream.position();
239 if stream.expect_string(".b2").is_ok() {
240 return Ok(Dsel::B2);
241 }
242 stream.set_position(saved_pos);
243 }
244 stream.set_position(saved_pos);
245 let saved_pos = stream.position();
246 {
248 let saved_pos = stream.position();
249 if stream.expect_string(".b3").is_ok() {
250 return Ok(Dsel::B3);
251 }
252 stream.set_position(saved_pos);
253 }
254 stream.set_position(saved_pos);
255 let saved_pos = stream.position();
256 {
258 let saved_pos = stream.position();
259 if stream.expect_string(".h0").is_ok() {
260 return Ok(Dsel::H0);
261 }
262 stream.set_position(saved_pos);
263 }
264 stream.set_position(saved_pos);
265 let saved_pos = stream.position();
266 {
268 let saved_pos = stream.position();
269 if stream.expect_string(".h1").is_ok() {
270 return Ok(Dsel::H1);
271 }
272 stream.set_position(saved_pos);
273 }
274 stream.set_position(saved_pos);
275 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
276 let expected = &[".b0", ".b1", ".b2", ".b3", ".h0", ".h1"];
277 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
278 Err(crate::parser::unexpected_value(span, expected, found))
279 }
280 }
281
282 impl PtxParser for Dtype {
283 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
284 {
286 let saved_pos = stream.position();
287 if stream.expect_string(".u32").is_ok() {
288 return Ok(Dtype::U32);
289 }
290 stream.set_position(saved_pos);
291 }
292 let saved_pos = stream.position();
293 {
295 let saved_pos = stream.position();
296 if stream.expect_string(".s32").is_ok() {
297 return Ok(Dtype::S32);
298 }
299 stream.set_position(saved_pos);
300 }
301 stream.set_position(saved_pos);
302 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
303 let expected = &[".u32", ".s32"];
304 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
305 Err(crate::parser::unexpected_value(span, expected, found))
306 }
307 }
308
309 impl PtxParser for Op2 {
310 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
311 {
313 let saved_pos = stream.position();
314 if stream.expect_string(".add").is_ok() {
315 return Ok(Op2::Add);
316 }
317 stream.set_position(saved_pos);
318 }
319 let saved_pos = stream.position();
320 {
322 let saved_pos = stream.position();
323 if stream.expect_string(".min").is_ok() {
324 return Ok(Op2::Min);
325 }
326 stream.set_position(saved_pos);
327 }
328 stream.set_position(saved_pos);
329 let saved_pos = stream.position();
330 {
332 let saved_pos = stream.position();
333 if stream.expect_string(".max").is_ok() {
334 return Ok(Op2::Max);
335 }
336 stream.set_position(saved_pos);
337 }
338 stream.set_position(saved_pos);
339 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
340 let expected = &[".add", ".min", ".max"];
341 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
342 Err(crate::parser::unexpected_value(span, expected, found))
343 }
344 }
345
346 impl PtxParser for VaddDtypeAtypeBtypeSat {
347 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
348 stream.expect_string("vadd")?;
349 let dtype = Dtype::parse(stream)?;
350 stream.expect_complete()?;
351 let atype = Atype::parse(stream)?;
352 stream.expect_complete()?;
353 let btype = Btype::parse(stream)?;
354 stream.expect_complete()?;
355 let saved_pos = stream.position();
356 let sat = stream.expect_string(".sat").is_ok();
357 if !sat {
358 stream.set_position(saved_pos);
359 }
360 stream.expect_complete()?;
361 let d = GeneralOperand::parse(stream)?;
362 stream.expect_complete()?;
363 stream.expect(&PtxToken::Comma)?;
364 let a = GeneralOperand::parse(stream)?;
365 let saved_pos = stream.position();
366 let asel = match Asel::parse(stream) {
367 Ok(val) => Some(val),
368 Err(_) => {
369 stream.set_position(saved_pos);
370 None
371 }
372 };
373 stream.expect_complete()?;
374 stream.expect(&PtxToken::Comma)?;
375 let b = GeneralOperand::parse(stream)?;
376 let saved_pos = stream.position();
377 let bsel = match Bsel::parse(stream) {
378 Ok(val) => Some(val),
379 Err(_) => {
380 stream.set_position(saved_pos);
381 None
382 }
383 };
384 stream.expect_complete()?;
385 stream.expect_complete()?;
386 stream.expect(&PtxToken::Semicolon)?;
387 Ok(VaddDtypeAtypeBtypeSat {
388 dtype,
389 atype,
390 btype,
391 sat,
392 d,
393 a,
394 asel,
395 b,
396 bsel,
397 })
398 }
399 }
400
401
402 impl PtxParser for VsubDtypeAtypeBtypeSat {
403 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
404 stream.expect_string("vsub")?;
405 let dtype = Dtype::parse(stream)?;
406 stream.expect_complete()?;
407 let atype = Atype::parse(stream)?;
408 stream.expect_complete()?;
409 let btype = Btype::parse(stream)?;
410 stream.expect_complete()?;
411 let saved_pos = stream.position();
412 let sat = stream.expect_string(".sat").is_ok();
413 if !sat {
414 stream.set_position(saved_pos);
415 }
416 stream.expect_complete()?;
417 let d = GeneralOperand::parse(stream)?;
418 stream.expect_complete()?;
419 stream.expect(&PtxToken::Comma)?;
420 let a = GeneralOperand::parse(stream)?;
421 let saved_pos = stream.position();
422 let asel = match Asel::parse(stream) {
423 Ok(val) => Some(val),
424 Err(_) => {
425 stream.set_position(saved_pos);
426 None
427 }
428 };
429 stream.expect_complete()?;
430 stream.expect(&PtxToken::Comma)?;
431 let b = GeneralOperand::parse(stream)?;
432 let saved_pos = stream.position();
433 let bsel = match Bsel::parse(stream) {
434 Ok(val) => Some(val),
435 Err(_) => {
436 stream.set_position(saved_pos);
437 None
438 }
439 };
440 stream.expect_complete()?;
441 stream.expect_complete()?;
442 stream.expect(&PtxToken::Semicolon)?;
443 Ok(VsubDtypeAtypeBtypeSat {
444 dtype,
445 atype,
446 btype,
447 sat,
448 d,
449 a,
450 asel,
451 b,
452 bsel,
453 })
454 }
455 }
456
457
458 impl PtxParser for VabsdiffDtypeAtypeBtypeSat {
459 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
460 stream.expect_string("vabsdiff")?;
461 let dtype = Dtype::parse(stream)?;
462 stream.expect_complete()?;
463 let atype = Atype::parse(stream)?;
464 stream.expect_complete()?;
465 let btype = Btype::parse(stream)?;
466 stream.expect_complete()?;
467 let saved_pos = stream.position();
468 let sat = stream.expect_string(".sat").is_ok();
469 if !sat {
470 stream.set_position(saved_pos);
471 }
472 stream.expect_complete()?;
473 let d = GeneralOperand::parse(stream)?;
474 stream.expect_complete()?;
475 stream.expect(&PtxToken::Comma)?;
476 let a = GeneralOperand::parse(stream)?;
477 let saved_pos = stream.position();
478 let asel = match Asel::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 b = GeneralOperand::parse(stream)?;
488 let saved_pos = stream.position();
489 let bsel = match Bsel::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_complete()?;
498 stream.expect(&PtxToken::Semicolon)?;
499 Ok(VabsdiffDtypeAtypeBtypeSat {
500 dtype,
501 atype,
502 btype,
503 sat,
504 d,
505 a,
506 asel,
507 b,
508 bsel,
509 })
510 }
511 }
512
513
514 impl PtxParser for VminDtypeAtypeBtypeSat {
515 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
516 stream.expect_string("vmin")?;
517 let dtype = Dtype::parse(stream)?;
518 stream.expect_complete()?;
519 let atype = Atype::parse(stream)?;
520 stream.expect_complete()?;
521 let btype = Btype::parse(stream)?;
522 stream.expect_complete()?;
523 let saved_pos = stream.position();
524 let sat = stream.expect_string(".sat").is_ok();
525 if !sat {
526 stream.set_position(saved_pos);
527 }
528 stream.expect_complete()?;
529 let d = GeneralOperand::parse(stream)?;
530 stream.expect_complete()?;
531 stream.expect(&PtxToken::Comma)?;
532 let a = GeneralOperand::parse(stream)?;
533 let saved_pos = stream.position();
534 let asel = match Asel::parse(stream) {
535 Ok(val) => Some(val),
536 Err(_) => {
537 stream.set_position(saved_pos);
538 None
539 }
540 };
541 stream.expect_complete()?;
542 stream.expect(&PtxToken::Comma)?;
543 let b = GeneralOperand::parse(stream)?;
544 let saved_pos = stream.position();
545 let bsel = match Bsel::parse(stream) {
546 Ok(val) => Some(val),
547 Err(_) => {
548 stream.set_position(saved_pos);
549 None
550 }
551 };
552 stream.expect_complete()?;
553 stream.expect_complete()?;
554 stream.expect(&PtxToken::Semicolon)?;
555 Ok(VminDtypeAtypeBtypeSat {
556 dtype,
557 atype,
558 btype,
559 sat,
560 d,
561 a,
562 asel,
563 b,
564 bsel,
565 })
566 }
567 }
568
569
570 impl PtxParser for VmaxDtypeAtypeBtypeSat {
571 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
572 stream.expect_string("vmax")?;
573 let dtype = Dtype::parse(stream)?;
574 stream.expect_complete()?;
575 let atype = Atype::parse(stream)?;
576 stream.expect_complete()?;
577 let btype = Btype::parse(stream)?;
578 stream.expect_complete()?;
579 let saved_pos = stream.position();
580 let sat = stream.expect_string(".sat").is_ok();
581 if !sat {
582 stream.set_position(saved_pos);
583 }
584 stream.expect_complete()?;
585 let d = GeneralOperand::parse(stream)?;
586 stream.expect_complete()?;
587 stream.expect(&PtxToken::Comma)?;
588 let a = GeneralOperand::parse(stream)?;
589 let saved_pos = stream.position();
590 let asel = match Asel::parse(stream) {
591 Ok(val) => Some(val),
592 Err(_) => {
593 stream.set_position(saved_pos);
594 None
595 }
596 };
597 stream.expect_complete()?;
598 stream.expect(&PtxToken::Comma)?;
599 let b = GeneralOperand::parse(stream)?;
600 let saved_pos = stream.position();
601 let bsel = match Bsel::parse(stream) {
602 Ok(val) => Some(val),
603 Err(_) => {
604 stream.set_position(saved_pos);
605 None
606 }
607 };
608 stream.expect_complete()?;
609 stream.expect_complete()?;
610 stream.expect(&PtxToken::Semicolon)?;
611 Ok(VmaxDtypeAtypeBtypeSat {
612 dtype,
613 atype,
614 btype,
615 sat,
616 d,
617 a,
618 asel,
619 b,
620 bsel,
621 })
622 }
623 }
624
625
626 impl PtxParser for VaddDtypeAtypeBtypeSatOp2 {
627 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
628 stream.expect_string("vadd")?;
629 let dtype = Dtype::parse(stream)?;
630 stream.expect_complete()?;
631 let atype = Atype::parse(stream)?;
632 stream.expect_complete()?;
633 let btype = Btype::parse(stream)?;
634 stream.expect_complete()?;
635 let saved_pos = stream.position();
636 let sat = stream.expect_string(".sat").is_ok();
637 if !sat {
638 stream.set_position(saved_pos);
639 }
640 stream.expect_complete()?;
641 let op2 = Op2::parse(stream)?;
642 stream.expect_complete()?;
643 let d = GeneralOperand::parse(stream)?;
644 stream.expect_complete()?;
645 stream.expect(&PtxToken::Comma)?;
646 let a = GeneralOperand::parse(stream)?;
647 let saved_pos = stream.position();
648 let asel = match Asel::parse(stream) {
649 Ok(val) => Some(val),
650 Err(_) => {
651 stream.set_position(saved_pos);
652 None
653 }
654 };
655 stream.expect_complete()?;
656 stream.expect(&PtxToken::Comma)?;
657 let b = GeneralOperand::parse(stream)?;
658 let saved_pos = stream.position();
659 let bsel = match Bsel::parse(stream) {
660 Ok(val) => Some(val),
661 Err(_) => {
662 stream.set_position(saved_pos);
663 None
664 }
665 };
666 stream.expect_complete()?;
667 stream.expect(&PtxToken::Comma)?;
668 let c = GeneralOperand::parse(stream)?;
669 stream.expect_complete()?;
670 stream.expect_complete()?;
671 stream.expect(&PtxToken::Semicolon)?;
672 Ok(VaddDtypeAtypeBtypeSatOp2 {
673 dtype,
674 atype,
675 btype,
676 sat,
677 op2,
678 d,
679 a,
680 asel,
681 b,
682 bsel,
683 c,
684 })
685 }
686 }
687
688
689 impl PtxParser for VsubDtypeAtypeBtypeSatOp2 {
690 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
691 stream.expect_string("vsub")?;
692 let dtype = Dtype::parse(stream)?;
693 stream.expect_complete()?;
694 let atype = Atype::parse(stream)?;
695 stream.expect_complete()?;
696 let btype = Btype::parse(stream)?;
697 stream.expect_complete()?;
698 let saved_pos = stream.position();
699 let sat = stream.expect_string(".sat").is_ok();
700 if !sat {
701 stream.set_position(saved_pos);
702 }
703 stream.expect_complete()?;
704 let op2 = Op2::parse(stream)?;
705 stream.expect_complete()?;
706 let d = GeneralOperand::parse(stream)?;
707 stream.expect_complete()?;
708 stream.expect(&PtxToken::Comma)?;
709 let a = GeneralOperand::parse(stream)?;
710 let saved_pos = stream.position();
711 let asel = match Asel::parse(stream) {
712 Ok(val) => Some(val),
713 Err(_) => {
714 stream.set_position(saved_pos);
715 None
716 }
717 };
718 stream.expect_complete()?;
719 stream.expect(&PtxToken::Comma)?;
720 let b = GeneralOperand::parse(stream)?;
721 let saved_pos = stream.position();
722 let bsel = match Bsel::parse(stream) {
723 Ok(val) => Some(val),
724 Err(_) => {
725 stream.set_position(saved_pos);
726 None
727 }
728 };
729 stream.expect_complete()?;
730 stream.expect(&PtxToken::Comma)?;
731 let c = GeneralOperand::parse(stream)?;
732 stream.expect_complete()?;
733 stream.expect_complete()?;
734 stream.expect(&PtxToken::Semicolon)?;
735 Ok(VsubDtypeAtypeBtypeSatOp2 {
736 dtype,
737 atype,
738 btype,
739 sat,
740 op2,
741 d,
742 a,
743 asel,
744 b,
745 bsel,
746 c,
747 })
748 }
749 }
750
751
752 impl PtxParser for VabsdiffDtypeAtypeBtypeSatOp2 {
753 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
754 stream.expect_string("vabsdiff")?;
755 let dtype = Dtype::parse(stream)?;
756 stream.expect_complete()?;
757 let atype = Atype::parse(stream)?;
758 stream.expect_complete()?;
759 let btype = Btype::parse(stream)?;
760 stream.expect_complete()?;
761 let saved_pos = stream.position();
762 let sat = stream.expect_string(".sat").is_ok();
763 if !sat {
764 stream.set_position(saved_pos);
765 }
766 stream.expect_complete()?;
767 let op2 = Op2::parse(stream)?;
768 stream.expect_complete()?;
769 let d = GeneralOperand::parse(stream)?;
770 stream.expect_complete()?;
771 stream.expect(&PtxToken::Comma)?;
772 let a = GeneralOperand::parse(stream)?;
773 let saved_pos = stream.position();
774 let asel = match Asel::parse(stream) {
775 Ok(val) => Some(val),
776 Err(_) => {
777 stream.set_position(saved_pos);
778 None
779 }
780 };
781 stream.expect_complete()?;
782 stream.expect(&PtxToken::Comma)?;
783 let b = GeneralOperand::parse(stream)?;
784 let saved_pos = stream.position();
785 let bsel = match Bsel::parse(stream) {
786 Ok(val) => Some(val),
787 Err(_) => {
788 stream.set_position(saved_pos);
789 None
790 }
791 };
792 stream.expect_complete()?;
793 stream.expect(&PtxToken::Comma)?;
794 let c = GeneralOperand::parse(stream)?;
795 stream.expect_complete()?;
796 stream.expect_complete()?;
797 stream.expect(&PtxToken::Semicolon)?;
798 Ok(VabsdiffDtypeAtypeBtypeSatOp2 {
799 dtype,
800 atype,
801 btype,
802 sat,
803 op2,
804 d,
805 a,
806 asel,
807 b,
808 bsel,
809 c,
810 })
811 }
812 }
813
814
815 impl PtxParser for VminDtypeAtypeBtypeSatOp2 {
816 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
817 stream.expect_string("vmin")?;
818 let dtype = Dtype::parse(stream)?;
819 stream.expect_complete()?;
820 let atype = Atype::parse(stream)?;
821 stream.expect_complete()?;
822 let btype = Btype::parse(stream)?;
823 stream.expect_complete()?;
824 let saved_pos = stream.position();
825 let sat = stream.expect_string(".sat").is_ok();
826 if !sat {
827 stream.set_position(saved_pos);
828 }
829 stream.expect_complete()?;
830 let op2 = Op2::parse(stream)?;
831 stream.expect_complete()?;
832 let d = GeneralOperand::parse(stream)?;
833 stream.expect_complete()?;
834 stream.expect(&PtxToken::Comma)?;
835 let a = GeneralOperand::parse(stream)?;
836 let saved_pos = stream.position();
837 let asel = match Asel::parse(stream) {
838 Ok(val) => Some(val),
839 Err(_) => {
840 stream.set_position(saved_pos);
841 None
842 }
843 };
844 stream.expect_complete()?;
845 stream.expect(&PtxToken::Comma)?;
846 let b = GeneralOperand::parse(stream)?;
847 let saved_pos = stream.position();
848 let bsel = match Bsel::parse(stream) {
849 Ok(val) => Some(val),
850 Err(_) => {
851 stream.set_position(saved_pos);
852 None
853 }
854 };
855 stream.expect_complete()?;
856 stream.expect(&PtxToken::Comma)?;
857 let c = GeneralOperand::parse(stream)?;
858 stream.expect_complete()?;
859 stream.expect_complete()?;
860 stream.expect(&PtxToken::Semicolon)?;
861 Ok(VminDtypeAtypeBtypeSatOp2 {
862 dtype,
863 atype,
864 btype,
865 sat,
866 op2,
867 d,
868 a,
869 asel,
870 b,
871 bsel,
872 c,
873 })
874 }
875 }
876
877
878 impl PtxParser for VmaxDtypeAtypeBtypeSatOp2 {
879 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
880 stream.expect_string("vmax")?;
881 let dtype = Dtype::parse(stream)?;
882 stream.expect_complete()?;
883 let atype = Atype::parse(stream)?;
884 stream.expect_complete()?;
885 let btype = Btype::parse(stream)?;
886 stream.expect_complete()?;
887 let saved_pos = stream.position();
888 let sat = stream.expect_string(".sat").is_ok();
889 if !sat {
890 stream.set_position(saved_pos);
891 }
892 stream.expect_complete()?;
893 let op2 = Op2::parse(stream)?;
894 stream.expect_complete()?;
895 let d = GeneralOperand::parse(stream)?;
896 stream.expect_complete()?;
897 stream.expect(&PtxToken::Comma)?;
898 let a = GeneralOperand::parse(stream)?;
899 let saved_pos = stream.position();
900 let asel = match Asel::parse(stream) {
901 Ok(val) => Some(val),
902 Err(_) => {
903 stream.set_position(saved_pos);
904 None
905 }
906 };
907 stream.expect_complete()?;
908 stream.expect(&PtxToken::Comma)?;
909 let b = GeneralOperand::parse(stream)?;
910 let saved_pos = stream.position();
911 let bsel = match Bsel::parse(stream) {
912 Ok(val) => Some(val),
913 Err(_) => {
914 stream.set_position(saved_pos);
915 None
916 }
917 };
918 stream.expect_complete()?;
919 stream.expect(&PtxToken::Comma)?;
920 let c = GeneralOperand::parse(stream)?;
921 stream.expect_complete()?;
922 stream.expect_complete()?;
923 stream.expect(&PtxToken::Semicolon)?;
924 Ok(VmaxDtypeAtypeBtypeSatOp2 {
925 dtype,
926 atype,
927 btype,
928 sat,
929 op2,
930 d,
931 a,
932 asel,
933 b,
934 bsel,
935 c,
936 })
937 }
938 }
939
940
941 impl PtxParser for VaddDtypeAtypeBtypeSat1 {
942 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
943 stream.expect_string("vadd")?;
944 let dtype = Dtype::parse(stream)?;
945 stream.expect_complete()?;
946 let atype = Atype::parse(stream)?;
947 stream.expect_complete()?;
948 let btype = Btype::parse(stream)?;
949 stream.expect_complete()?;
950 let saved_pos = stream.position();
951 let sat = stream.expect_string(".sat").is_ok();
952 if !sat {
953 stream.set_position(saved_pos);
954 }
955 stream.expect_complete()?;
956 let d = GeneralOperand::parse(stream)?;
957 let dsel = Dsel::parse(stream)?;
958 stream.expect_complete()?;
959 stream.expect(&PtxToken::Comma)?;
960 let a = GeneralOperand::parse(stream)?;
961 let saved_pos = stream.position();
962 let asel = match Asel::parse(stream) {
963 Ok(val) => Some(val),
964 Err(_) => {
965 stream.set_position(saved_pos);
966 None
967 }
968 };
969 stream.expect_complete()?;
970 stream.expect(&PtxToken::Comma)?;
971 let b = GeneralOperand::parse(stream)?;
972 let saved_pos = stream.position();
973 let bsel = match Bsel::parse(stream) {
974 Ok(val) => Some(val),
975 Err(_) => {
976 stream.set_position(saved_pos);
977 None
978 }
979 };
980 stream.expect_complete()?;
981 stream.expect(&PtxToken::Comma)?;
982 let c = GeneralOperand::parse(stream)?;
983 stream.expect_complete()?;
984 stream.expect_complete()?;
985 stream.expect(&PtxToken::Semicolon)?;
986 Ok(VaddDtypeAtypeBtypeSat1 {
987 dtype,
988 atype,
989 btype,
990 sat,
991 d,
992 dsel,
993 a,
994 asel,
995 b,
996 bsel,
997 c,
998 })
999 }
1000 }
1001
1002
1003 impl PtxParser for VsubDtypeAtypeBtypeSat1 {
1004 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1005 stream.expect_string("vsub")?;
1006 let dtype = Dtype::parse(stream)?;
1007 stream.expect_complete()?;
1008 let atype = Atype::parse(stream)?;
1009 stream.expect_complete()?;
1010 let btype = Btype::parse(stream)?;
1011 stream.expect_complete()?;
1012 let saved_pos = stream.position();
1013 let sat = stream.expect_string(".sat").is_ok();
1014 if !sat {
1015 stream.set_position(saved_pos);
1016 }
1017 stream.expect_complete()?;
1018 let d = GeneralOperand::parse(stream)?;
1019 let dsel = Dsel::parse(stream)?;
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(VsubDtypeAtypeBtypeSat1 {
1049 dtype,
1050 atype,
1051 btype,
1052 sat,
1053 d,
1054 dsel,
1055 a,
1056 asel,
1057 b,
1058 bsel,
1059 c,
1060 })
1061 }
1062 }
1063
1064
1065 impl PtxParser for VabsdiffDtypeAtypeBtypeSat1 {
1066 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1067 stream.expect_string("vabsdiff")?;
1068 let dtype = Dtype::parse(stream)?;
1069 stream.expect_complete()?;
1070 let atype = Atype::parse(stream)?;
1071 stream.expect_complete()?;
1072 let btype = Btype::parse(stream)?;
1073 stream.expect_complete()?;
1074 let saved_pos = stream.position();
1075 let sat = stream.expect_string(".sat").is_ok();
1076 if !sat {
1077 stream.set_position(saved_pos);
1078 }
1079 stream.expect_complete()?;
1080 let d = GeneralOperand::parse(stream)?;
1081 let dsel = Dsel::parse(stream)?;
1082 stream.expect_complete()?;
1083 stream.expect(&PtxToken::Comma)?;
1084 let a = GeneralOperand::parse(stream)?;
1085 let saved_pos = stream.position();
1086 let asel = match Asel::parse(stream) {
1087 Ok(val) => Some(val),
1088 Err(_) => {
1089 stream.set_position(saved_pos);
1090 None
1091 }
1092 };
1093 stream.expect_complete()?;
1094 stream.expect(&PtxToken::Comma)?;
1095 let b = GeneralOperand::parse(stream)?;
1096 let saved_pos = stream.position();
1097 let bsel = match Bsel::parse(stream) {
1098 Ok(val) => Some(val),
1099 Err(_) => {
1100 stream.set_position(saved_pos);
1101 None
1102 }
1103 };
1104 stream.expect_complete()?;
1105 stream.expect(&PtxToken::Comma)?;
1106 let c = GeneralOperand::parse(stream)?;
1107 stream.expect_complete()?;
1108 stream.expect_complete()?;
1109 stream.expect(&PtxToken::Semicolon)?;
1110 Ok(VabsdiffDtypeAtypeBtypeSat1 {
1111 dtype,
1112 atype,
1113 btype,
1114 sat,
1115 d,
1116 dsel,
1117 a,
1118 asel,
1119 b,
1120 bsel,
1121 c,
1122 })
1123 }
1124 }
1125
1126
1127 impl PtxParser for VminDtypeAtypeBtypeSat1 {
1128 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1129 stream.expect_string("vmin")?;
1130 let dtype = Dtype::parse(stream)?;
1131 stream.expect_complete()?;
1132 let atype = Atype::parse(stream)?;
1133 stream.expect_complete()?;
1134 let btype = Btype::parse(stream)?;
1135 stream.expect_complete()?;
1136 let saved_pos = stream.position();
1137 let sat = stream.expect_string(".sat").is_ok();
1138 if !sat {
1139 stream.set_position(saved_pos);
1140 }
1141 stream.expect_complete()?;
1142 let d = GeneralOperand::parse(stream)?;
1143 let dsel = Dsel::parse(stream)?;
1144 stream.expect_complete()?;
1145 stream.expect(&PtxToken::Comma)?;
1146 let a = GeneralOperand::parse(stream)?;
1147 let saved_pos = stream.position();
1148 let asel = match Asel::parse(stream) {
1149 Ok(val) => Some(val),
1150 Err(_) => {
1151 stream.set_position(saved_pos);
1152 None
1153 }
1154 };
1155 stream.expect_complete()?;
1156 stream.expect(&PtxToken::Comma)?;
1157 let b = GeneralOperand::parse(stream)?;
1158 let saved_pos = stream.position();
1159 let bsel = match Bsel::parse(stream) {
1160 Ok(val) => Some(val),
1161 Err(_) => {
1162 stream.set_position(saved_pos);
1163 None
1164 }
1165 };
1166 stream.expect_complete()?;
1167 stream.expect(&PtxToken::Comma)?;
1168 let c = GeneralOperand::parse(stream)?;
1169 stream.expect_complete()?;
1170 stream.expect_complete()?;
1171 stream.expect(&PtxToken::Semicolon)?;
1172 Ok(VminDtypeAtypeBtypeSat1 {
1173 dtype,
1174 atype,
1175 btype,
1176 sat,
1177 d,
1178 dsel,
1179 a,
1180 asel,
1181 b,
1182 bsel,
1183 c,
1184 })
1185 }
1186 }
1187
1188
1189 impl PtxParser for VmaxDtypeAtypeBtypeSat1 {
1190 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
1191 stream.expect_string("vmax")?;
1192 let dtype = Dtype::parse(stream)?;
1193 stream.expect_complete()?;
1194 let atype = Atype::parse(stream)?;
1195 stream.expect_complete()?;
1196 let btype = Btype::parse(stream)?;
1197 stream.expect_complete()?;
1198 let saved_pos = stream.position();
1199 let sat = stream.expect_string(".sat").is_ok();
1200 if !sat {
1201 stream.set_position(saved_pos);
1202 }
1203 stream.expect_complete()?;
1204 let d = GeneralOperand::parse(stream)?;
1205 let dsel = Dsel::parse(stream)?;
1206 stream.expect_complete()?;
1207 stream.expect(&PtxToken::Comma)?;
1208 let a = GeneralOperand::parse(stream)?;
1209 let saved_pos = stream.position();
1210 let asel = match Asel::parse(stream) {
1211 Ok(val) => Some(val),
1212 Err(_) => {
1213 stream.set_position(saved_pos);
1214 None
1215 }
1216 };
1217 stream.expect_complete()?;
1218 stream.expect(&PtxToken::Comma)?;
1219 let b = GeneralOperand::parse(stream)?;
1220 let saved_pos = stream.position();
1221 let bsel = match Bsel::parse(stream) {
1222 Ok(val) => Some(val),
1223 Err(_) => {
1224 stream.set_position(saved_pos);
1225 None
1226 }
1227 };
1228 stream.expect_complete()?;
1229 stream.expect(&PtxToken::Comma)?;
1230 let c = GeneralOperand::parse(stream)?;
1231 stream.expect_complete()?;
1232 stream.expect_complete()?;
1233 stream.expect(&PtxToken::Semicolon)?;
1234 Ok(VmaxDtypeAtypeBtypeSat1 {
1235 dtype,
1236 atype,
1237 btype,
1238 sat,
1239 d,
1240 dsel,
1241 a,
1242 asel,
1243 b,
1244 bsel,
1245 c,
1246 })
1247 }
1248 }
1249
1250
1251}
1252