ptx_parser/parser/instruction/
add.rs1#![allow(unused)]
25
26use crate::lexer::PtxToken;
27use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
28use crate::r#type::common::*;
29
30pub mod section_0 {
31 use super::*;
32 use crate::r#type::instruction::add::section_0::*;
33
34 impl PtxParser for Type {
39 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
40 {
42 let saved_pos = stream.position();
43 if stream.expect_string(".u16x2").is_ok() {
44 return Ok(Type::U16x2);
45 }
46 stream.set_position(saved_pos);
47 }
48 let saved_pos = stream.position();
49 {
51 let saved_pos = stream.position();
52 if stream.expect_string(".s16x2").is_ok() {
53 return Ok(Type::S16x2);
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(".u16").is_ok() {
63 return Ok(Type::U16);
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(".u32").is_ok() {
73 return Ok(Type::U32);
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(".u64").is_ok() {
83 return Ok(Type::U64);
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(".s16").is_ok() {
93 return Ok(Type::S16);
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(".s32").is_ok() {
103 return Ok(Type::S32);
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(".s64").is_ok() {
113 return Ok(Type::S64);
114 }
115 stream.set_position(saved_pos);
116 }
117 stream.set_position(saved_pos);
118 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
119 let expected = &[".u16x2", ".s16x2", ".u16", ".u32", ".u64", ".s16", ".s32", ".s64"];
120 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
121 Err(crate::parser::unexpected_value(span, expected, found))
122 }
123 }
124
125 impl PtxParser for AddType {
126 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
127 stream.expect_string("add")?;
128 let type_ = Type::parse(stream)?;
129 stream.expect_complete()?;
130 let d = GeneralOperand::parse(stream)?;
131 stream.expect_complete()?;
132 stream.expect(&PtxToken::Comma)?;
133 let a = GeneralOperand::parse(stream)?;
134 stream.expect_complete()?;
135 stream.expect(&PtxToken::Comma)?;
136 let b = GeneralOperand::parse(stream)?;
137 stream.expect_complete()?;
138 stream.expect_complete()?;
139 stream.expect(&PtxToken::Semicolon)?;
140 Ok(AddType {
141 type_,
142 d,
143 a,
144 b,
145 })
146 }
147 }
148
149
150 impl PtxParser for AddSatS32 {
151 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
152 stream.expect_string("add")?;
153 let saved_pos = stream.position();
154 let sat = stream.expect_string(".sat").is_ok();
155 if !sat {
156 stream.set_position(saved_pos);
157 }
158 stream.expect_complete()?;
159 stream.expect_string(".s32")?;
160 let s32 = ();
161 stream.expect_complete()?;
162 let d = GeneralOperand::parse(stream)?;
163 stream.expect_complete()?;
164 stream.expect(&PtxToken::Comma)?;
165 let a = GeneralOperand::parse(stream)?;
166 stream.expect_complete()?;
167 stream.expect(&PtxToken::Comma)?;
168 let b = GeneralOperand::parse(stream)?;
169 stream.expect_complete()?;
170 stream.expect_complete()?;
171 stream.expect(&PtxToken::Semicolon)?;
172 Ok(AddSatS32 {
173 sat,
174 s32,
175 d,
176 a,
177 b,
178 })
179 }
180 }
181
182
183}
184
185pub mod section_1 {
186 use super::*;
187 use crate::r#type::instruction::add::section_1::*;
188
189 impl PtxParser for Rnd {
194 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
195 {
197 let saved_pos = stream.position();
198 if stream.expect_string(".rn").is_ok() {
199 return Ok(Rnd::Rn);
200 }
201 stream.set_position(saved_pos);
202 }
203 let saved_pos = stream.position();
204 {
206 let saved_pos = stream.position();
207 if stream.expect_string(".rz").is_ok() {
208 return Ok(Rnd::Rz);
209 }
210 stream.set_position(saved_pos);
211 }
212 stream.set_position(saved_pos);
213 let saved_pos = stream.position();
214 {
216 let saved_pos = stream.position();
217 if stream.expect_string(".rm").is_ok() {
218 return Ok(Rnd::Rm);
219 }
220 stream.set_position(saved_pos);
221 }
222 stream.set_position(saved_pos);
223 let saved_pos = stream.position();
224 {
226 let saved_pos = stream.position();
227 if stream.expect_string(".rp").is_ok() {
228 return Ok(Rnd::Rp);
229 }
230 stream.set_position(saved_pos);
231 }
232 stream.set_position(saved_pos);
233 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
234 let expected = &[".rn", ".rz", ".rm", ".rp"];
235 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
236 Err(crate::parser::unexpected_value(span, expected, found))
237 }
238 }
239
240 impl PtxParser for AddRndFtzSatF32 {
241 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
242 stream.expect_string("add")?;
243 let saved_pos = stream.position();
244 let rnd = match Rnd::parse(stream) {
245 Ok(val) => Some(val),
246 Err(_) => {
247 stream.set_position(saved_pos);
248 None
249 }
250 };
251 stream.expect_complete()?;
252 let saved_pos = stream.position();
253 let ftz = stream.expect_string(".ftz").is_ok();
254 if !ftz {
255 stream.set_position(saved_pos);
256 }
257 stream.expect_complete()?;
258 let saved_pos = stream.position();
259 let sat = stream.expect_string(".sat").is_ok();
260 if !sat {
261 stream.set_position(saved_pos);
262 }
263 stream.expect_complete()?;
264 stream.expect_string(".f32")?;
265 let f32 = ();
266 stream.expect_complete()?;
267 let d = GeneralOperand::parse(stream)?;
268 stream.expect_complete()?;
269 stream.expect(&PtxToken::Comma)?;
270 let a = GeneralOperand::parse(stream)?;
271 stream.expect_complete()?;
272 stream.expect(&PtxToken::Comma)?;
273 let b = GeneralOperand::parse(stream)?;
274 stream.expect_complete()?;
275 stream.expect_complete()?;
276 stream.expect(&PtxToken::Semicolon)?;
277 Ok(AddRndFtzSatF32 {
278 rnd,
279 ftz,
280 sat,
281 f32,
282 d,
283 a,
284 b,
285 })
286 }
287 }
288
289
290 impl PtxParser for AddRndFtzF32x2 {
291 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
292 stream.expect_string("add")?;
293 let saved_pos = stream.position();
294 let rnd = match Rnd::parse(stream) {
295 Ok(val) => Some(val),
296 Err(_) => {
297 stream.set_position(saved_pos);
298 None
299 }
300 };
301 stream.expect_complete()?;
302 let saved_pos = stream.position();
303 let ftz = stream.expect_string(".ftz").is_ok();
304 if !ftz {
305 stream.set_position(saved_pos);
306 }
307 stream.expect_complete()?;
308 stream.expect_string(".f32x2")?;
309 let f32x2 = ();
310 stream.expect_complete()?;
311 let d = GeneralOperand::parse(stream)?;
312 stream.expect_complete()?;
313 stream.expect(&PtxToken::Comma)?;
314 let a = GeneralOperand::parse(stream)?;
315 stream.expect_complete()?;
316 stream.expect(&PtxToken::Comma)?;
317 let b = GeneralOperand::parse(stream)?;
318 stream.expect_complete()?;
319 stream.expect_complete()?;
320 stream.expect(&PtxToken::Semicolon)?;
321 Ok(AddRndFtzF32x2 {
322 rnd,
323 ftz,
324 f32x2,
325 d,
326 a,
327 b,
328 })
329 }
330 }
331
332
333 impl PtxParser for AddRndF64 {
334 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
335 stream.expect_string("add")?;
336 let saved_pos = stream.position();
337 let rnd = match Rnd::parse(stream) {
338 Ok(val) => Some(val),
339 Err(_) => {
340 stream.set_position(saved_pos);
341 None
342 }
343 };
344 stream.expect_complete()?;
345 stream.expect_string(".f64")?;
346 let f64 = ();
347 stream.expect_complete()?;
348 let d = GeneralOperand::parse(stream)?;
349 stream.expect_complete()?;
350 stream.expect(&PtxToken::Comma)?;
351 let a = GeneralOperand::parse(stream)?;
352 stream.expect_complete()?;
353 stream.expect(&PtxToken::Comma)?;
354 let b = GeneralOperand::parse(stream)?;
355 stream.expect_complete()?;
356 stream.expect_complete()?;
357 stream.expect(&PtxToken::Semicolon)?;
358 Ok(AddRndF64 {
359 rnd,
360 f64,
361 d,
362 a,
363 b,
364 })
365 }
366 }
367
368
369}
370
371pub mod section_2 {
372 use super::*;
373 use crate::r#type::instruction::add::section_2::*;
374
375 impl PtxParser for Rnd {
380 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
381 {
383 let saved_pos = stream.position();
384 if stream.expect_string(".rn").is_ok() {
385 return Ok(Rnd::Rn);
386 }
387 stream.set_position(saved_pos);
388 }
389 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
390 let expected = &[".rn"];
391 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
392 Err(crate::parser::unexpected_value(span, expected, found))
393 }
394 }
395
396 impl PtxParser for AddRndFtzSatF16 {
397 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
398 stream.expect_string("add")?;
399 let saved_pos = stream.position();
400 let rnd = match Rnd::parse(stream) {
401 Ok(val) => Some(val),
402 Err(_) => {
403 stream.set_position(saved_pos);
404 None
405 }
406 };
407 stream.expect_complete()?;
408 let saved_pos = stream.position();
409 let ftz = stream.expect_string(".ftz").is_ok();
410 if !ftz {
411 stream.set_position(saved_pos);
412 }
413 stream.expect_complete()?;
414 let saved_pos = stream.position();
415 let sat = stream.expect_string(".sat").is_ok();
416 if !sat {
417 stream.set_position(saved_pos);
418 }
419 stream.expect_complete()?;
420 stream.expect_string(".f16")?;
421 let f16 = ();
422 stream.expect_complete()?;
423 let d = GeneralOperand::parse(stream)?;
424 stream.expect_complete()?;
425 stream.expect(&PtxToken::Comma)?;
426 let a = GeneralOperand::parse(stream)?;
427 stream.expect_complete()?;
428 stream.expect(&PtxToken::Comma)?;
429 let b = GeneralOperand::parse(stream)?;
430 stream.expect_complete()?;
431 stream.expect_complete()?;
432 stream.expect(&PtxToken::Semicolon)?;
433 Ok(AddRndFtzSatF16 {
434 rnd,
435 ftz,
436 sat,
437 f16,
438 d,
439 a,
440 b,
441 })
442 }
443 }
444
445
446 impl PtxParser for AddRndFtzSatF16x2 {
447 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
448 stream.expect_string("add")?;
449 let saved_pos = stream.position();
450 let rnd = match Rnd::parse(stream) {
451 Ok(val) => Some(val),
452 Err(_) => {
453 stream.set_position(saved_pos);
454 None
455 }
456 };
457 stream.expect_complete()?;
458 let saved_pos = stream.position();
459 let ftz = stream.expect_string(".ftz").is_ok();
460 if !ftz {
461 stream.set_position(saved_pos);
462 }
463 stream.expect_complete()?;
464 let saved_pos = stream.position();
465 let sat = stream.expect_string(".sat").is_ok();
466 if !sat {
467 stream.set_position(saved_pos);
468 }
469 stream.expect_complete()?;
470 stream.expect_string(".f16x2")?;
471 let f16x2 = ();
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 stream.expect_complete()?;
478 stream.expect(&PtxToken::Comma)?;
479 let b = GeneralOperand::parse(stream)?;
480 stream.expect_complete()?;
481 stream.expect_complete()?;
482 stream.expect(&PtxToken::Semicolon)?;
483 Ok(AddRndFtzSatF16x2 {
484 rnd,
485 ftz,
486 sat,
487 f16x2,
488 d,
489 a,
490 b,
491 })
492 }
493 }
494
495
496 impl PtxParser for AddRndBf16 {
497 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
498 stream.expect_string("add")?;
499 let saved_pos = stream.position();
500 let rnd = match Rnd::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_string(".bf16")?;
509 let bf16 = ();
510 stream.expect_complete()?;
511 let d = GeneralOperand::parse(stream)?;
512 stream.expect_complete()?;
513 stream.expect(&PtxToken::Comma)?;
514 let a = GeneralOperand::parse(stream)?;
515 stream.expect_complete()?;
516 stream.expect(&PtxToken::Comma)?;
517 let b = GeneralOperand::parse(stream)?;
518 stream.expect_complete()?;
519 stream.expect_complete()?;
520 stream.expect(&PtxToken::Semicolon)?;
521 Ok(AddRndBf16 {
522 rnd,
523 bf16,
524 d,
525 a,
526 b,
527 })
528 }
529 }
530
531
532 impl PtxParser for AddRndBf16x2 {
533 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
534 stream.expect_string("add")?;
535 let saved_pos = stream.position();
536 let rnd = match Rnd::parse(stream) {
537 Ok(val) => Some(val),
538 Err(_) => {
539 stream.set_position(saved_pos);
540 None
541 }
542 };
543 stream.expect_complete()?;
544 stream.expect_string(".bf16x2")?;
545 let bf16x2 = ();
546 stream.expect_complete()?;
547 let d = GeneralOperand::parse(stream)?;
548 stream.expect_complete()?;
549 stream.expect(&PtxToken::Comma)?;
550 let a = GeneralOperand::parse(stream)?;
551 stream.expect_complete()?;
552 stream.expect(&PtxToken::Comma)?;
553 let b = GeneralOperand::parse(stream)?;
554 stream.expect_complete()?;
555 stream.expect_complete()?;
556 stream.expect(&PtxToken::Semicolon)?;
557 Ok(AddRndBf16x2 {
558 rnd,
559 bf16x2,
560 d,
561 a,
562 b,
563 })
564 }
565 }
566
567
568}
569
570pub mod section_3 {
571 use super::*;
572 use crate::r#type::instruction::add::section_3::*;
573
574 impl PtxParser for Atype {
579 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
580 {
582 let saved_pos = stream.position();
583 if stream.expect_string(".bf16").is_ok() {
584 return Ok(Atype::Bf16);
585 }
586 stream.set_position(saved_pos);
587 }
588 let saved_pos = stream.position();
589 {
591 let saved_pos = stream.position();
592 if stream.expect_string(".f16").is_ok() {
593 return Ok(Atype::F16);
594 }
595 stream.set_position(saved_pos);
596 }
597 stream.set_position(saved_pos);
598 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
599 let expected = &[".bf16", ".f16"];
600 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
601 Err(crate::parser::unexpected_value(span, expected, found))
602 }
603 }
604
605 impl PtxParser for Rnd {
606 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
607 {
609 let saved_pos = stream.position();
610 if stream.expect_string(".rn").is_ok() {
611 return Ok(Rnd::Rn);
612 }
613 stream.set_position(saved_pos);
614 }
615 let saved_pos = stream.position();
616 {
618 let saved_pos = stream.position();
619 if stream.expect_string(".rz").is_ok() {
620 return Ok(Rnd::Rz);
621 }
622 stream.set_position(saved_pos);
623 }
624 stream.set_position(saved_pos);
625 let saved_pos = stream.position();
626 {
628 let saved_pos = stream.position();
629 if stream.expect_string(".rm").is_ok() {
630 return Ok(Rnd::Rm);
631 }
632 stream.set_position(saved_pos);
633 }
634 stream.set_position(saved_pos);
635 let saved_pos = stream.position();
636 {
638 let saved_pos = stream.position();
639 if stream.expect_string(".rp").is_ok() {
640 return Ok(Rnd::Rp);
641 }
642 stream.set_position(saved_pos);
643 }
644 stream.set_position(saved_pos);
645 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
646 let expected = &[".rn", ".rz", ".rm", ".rp"];
647 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
648 Err(crate::parser::unexpected_value(span, expected, found))
649 }
650 }
651
652 impl PtxParser for AddRndSatF32Atype {
653 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
654 stream.expect_string("add")?;
655 let saved_pos = stream.position();
656 let rnd = match Rnd::parse(stream) {
657 Ok(val) => Some(val),
658 Err(_) => {
659 stream.set_position(saved_pos);
660 None
661 }
662 };
663 stream.expect_complete()?;
664 let saved_pos = stream.position();
665 let sat = stream.expect_string(".sat").is_ok();
666 if !sat {
667 stream.set_position(saved_pos);
668 }
669 stream.expect_complete()?;
670 stream.expect_string(".f32")?;
671 let f32 = ();
672 stream.expect_complete()?;
673 let atype = Atype::parse(stream)?;
674 stream.expect_complete()?;
675 let d = GeneralOperand::parse(stream)?;
676 stream.expect_complete()?;
677 stream.expect(&PtxToken::Comma)?;
678 let a = GeneralOperand::parse(stream)?;
679 stream.expect_complete()?;
680 stream.expect(&PtxToken::Comma)?;
681 let c = GeneralOperand::parse(stream)?;
682 stream.expect_complete()?;
683 stream.expect_complete()?;
684 stream.expect(&PtxToken::Semicolon)?;
685 Ok(AddRndSatF32Atype {
686 rnd,
687 sat,
688 f32,
689 atype,
690 d,
691 a,
692 c,
693 })
694 }
695 }
696
697
698}
699