ptx_parser/unparser/instruction/
vop4.rs

1//! Original PTX specification:
2//!
3//! // SIMD instruction with secondary SIMD merge operation
4//! vop4.dtype.atype.btype{.sat}  d{.mask}, a{.asel}, b{.bsel}, c;
5//! // SIMD instruction with secondary accumulate operation
6//! vop4.dtype.atype.btype.add  d{.mask}, a{.asel}, b{.bsel}, c;
7//! vop4  = { vadd4, vsub4, vavrg4, vabsdiff4, vmin4, vmax4 };
8//! .dtype = .atype = .btype = { .u32, .s32 };
9//! .mask  = { .b0,
10//! .b1, .b10,
11//! .b2, .b20, .b21, .b210,
12//! .b3, .b30, .b31, .b310, .b32, .b320, .b321, .b3210 };
13//! // defaults to .b3210
14//! .asel = .bsel = { .b.n.n.n.n };
15//! .n = { 0, 1, 2, 3, 4, 5, 6, 7};
16//! // .asel defaults to .b3210
17//! // .bsel defaults to .b7654
18
19#![allow(unused)]
20
21use crate::lexer::PtxToken;
22use crate::unparser::{PtxUnparser, common::*};
23
24pub mod section_0 {
25    use super::*;
26    use crate::r#type::instruction::vop4::section_0::*;
27
28    impl PtxUnparser for Vadd4DtypeAtypeBtypeSat {
29        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
30            push_opcode(tokens, "vadd4");
31                    match &self.dtype {
32                            Dtype::U32 => {
33                                    push_directive(tokens, "u32");
34                            }
35                            Dtype::S32 => {
36                                    push_directive(tokens, "s32");
37                            }
38                    }
39                    match &self.atype {
40                            Atype::U32 => {
41                                    push_directive(tokens, "u32");
42                            }
43                            Atype::S32 => {
44                                    push_directive(tokens, "s32");
45                            }
46                    }
47                    match &self.btype {
48                            Btype::U32 => {
49                                    push_directive(tokens, "u32");
50                            }
51                            Btype::S32 => {
52                                    push_directive(tokens, "s32");
53                            }
54                    }
55                    if self.sat {
56                            push_directive(tokens, "sat");
57                    }
58                    self.d.unparse_tokens(tokens);
59                    if let Some(mask_0) = self.mask.as_ref() {
60                            match mask_0 {
61                                    Mask::B3210 => {
62                                            push_directive(tokens, "b3210");
63                                    }
64                                    Mask::B210 => {
65                                            push_directive(tokens, "b210");
66                                    }
67                                    Mask::B310 => {
68                                            push_directive(tokens, "b310");
69                                    }
70                                    Mask::B320 => {
71                                            push_directive(tokens, "b320");
72                                    }
73                                    Mask::B321 => {
74                                            push_directive(tokens, "b321");
75                                    }
76                                    Mask::B10 => {
77                                            push_directive(tokens, "b10");
78                                    }
79                                    Mask::B20 => {
80                                            push_directive(tokens, "b20");
81                                    }
82                                    Mask::B21 => {
83                                            push_directive(tokens, "b21");
84                                    }
85                                    Mask::B30 => {
86                                            push_directive(tokens, "b30");
87                                    }
88                                    Mask::B31 => {
89                                            push_directive(tokens, "b31");
90                                    }
91                                    Mask::B32 => {
92                                            push_directive(tokens, "b32");
93                                    }
94                                    Mask::B0 => {
95                                            push_directive(tokens, "b0");
96                                    }
97                                    Mask::B1 => {
98                                            push_directive(tokens, "b1");
99                                    }
100                                    Mask::B2 => {
101                                            push_directive(tokens, "b2");
102                                    }
103                                    Mask::B3 => {
104                                            push_directive(tokens, "b3");
105                                    }
106                            }
107                    }
108            tokens.push(PtxToken::Comma);
109                    self.a.unparse_tokens(tokens);
110                    if let Some(asel_1) = self.asel.as_ref() {
111                            match asel_1 {
112                                    Asel::BNNNN(_, n1, n2, n3, n4) => {
113                                            let mut combined = String::new();
114                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
115                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
116                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
117                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
118                                            tokens.push(PtxToken::Dot);
119                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
120                                    }
121                            }
122                    }
123            tokens.push(PtxToken::Comma);
124                    self.b.unparse_tokens(tokens);
125                    if let Some(bsel_2) = self.bsel.as_ref() {
126                            match bsel_2 {
127                                    Bsel::BNNNN(_, n1, n2, n3, n4) => {
128                                            let mut combined = String::new();
129                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
130                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
131                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
132                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
133                                            tokens.push(PtxToken::Dot);
134                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
135                                    }
136                            }
137                    }
138            tokens.push(PtxToken::Comma);
139                    self.c.unparse_tokens(tokens);
140            tokens.push(PtxToken::Semicolon);
141        }
142    }
143
144    impl PtxUnparser for Vsub4DtypeAtypeBtypeSat {
145        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
146            push_opcode(tokens, "vsub4");
147                    match &self.dtype {
148                            Dtype::U32 => {
149                                    push_directive(tokens, "u32");
150                            }
151                            Dtype::S32 => {
152                                    push_directive(tokens, "s32");
153                            }
154                    }
155                    match &self.atype {
156                            Atype::U32 => {
157                                    push_directive(tokens, "u32");
158                            }
159                            Atype::S32 => {
160                                    push_directive(tokens, "s32");
161                            }
162                    }
163                    match &self.btype {
164                            Btype::U32 => {
165                                    push_directive(tokens, "u32");
166                            }
167                            Btype::S32 => {
168                                    push_directive(tokens, "s32");
169                            }
170                    }
171                    if self.sat {
172                            push_directive(tokens, "sat");
173                    }
174                    self.d.unparse_tokens(tokens);
175                    if let Some(mask_3) = self.mask.as_ref() {
176                            match mask_3 {
177                                    Mask::B3210 => {
178                                            push_directive(tokens, "b3210");
179                                    }
180                                    Mask::B210 => {
181                                            push_directive(tokens, "b210");
182                                    }
183                                    Mask::B310 => {
184                                            push_directive(tokens, "b310");
185                                    }
186                                    Mask::B320 => {
187                                            push_directive(tokens, "b320");
188                                    }
189                                    Mask::B321 => {
190                                            push_directive(tokens, "b321");
191                                    }
192                                    Mask::B10 => {
193                                            push_directive(tokens, "b10");
194                                    }
195                                    Mask::B20 => {
196                                            push_directive(tokens, "b20");
197                                    }
198                                    Mask::B21 => {
199                                            push_directive(tokens, "b21");
200                                    }
201                                    Mask::B30 => {
202                                            push_directive(tokens, "b30");
203                                    }
204                                    Mask::B31 => {
205                                            push_directive(tokens, "b31");
206                                    }
207                                    Mask::B32 => {
208                                            push_directive(tokens, "b32");
209                                    }
210                                    Mask::B0 => {
211                                            push_directive(tokens, "b0");
212                                    }
213                                    Mask::B1 => {
214                                            push_directive(tokens, "b1");
215                                    }
216                                    Mask::B2 => {
217                                            push_directive(tokens, "b2");
218                                    }
219                                    Mask::B3 => {
220                                            push_directive(tokens, "b3");
221                                    }
222                            }
223                    }
224            tokens.push(PtxToken::Comma);
225                    self.a.unparse_tokens(tokens);
226                    if let Some(asel_4) = self.asel.as_ref() {
227                            match asel_4 {
228                                    Asel::BNNNN(_, n1, n2, n3, n4) => {
229                                            let mut combined = String::new();
230                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
231                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
232                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
233                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
234                                            tokens.push(PtxToken::Dot);
235                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
236                                    }
237                            }
238                    }
239            tokens.push(PtxToken::Comma);
240                    self.b.unparse_tokens(tokens);
241                    if let Some(bsel_5) = self.bsel.as_ref() {
242                            match bsel_5 {
243                                    Bsel::BNNNN(_, n1, n2, n3, n4) => {
244                                            let mut combined = String::new();
245                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
246                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
247                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
248                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
249                                            tokens.push(PtxToken::Dot);
250                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
251                                    }
252                            }
253                    }
254            tokens.push(PtxToken::Comma);
255                    self.c.unparse_tokens(tokens);
256            tokens.push(PtxToken::Semicolon);
257        }
258    }
259
260    impl PtxUnparser for Vavrg4DtypeAtypeBtypeSat {
261        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
262            push_opcode(tokens, "vavrg4");
263                    match &self.dtype {
264                            Dtype::U32 => {
265                                    push_directive(tokens, "u32");
266                            }
267                            Dtype::S32 => {
268                                    push_directive(tokens, "s32");
269                            }
270                    }
271                    match &self.atype {
272                            Atype::U32 => {
273                                    push_directive(tokens, "u32");
274                            }
275                            Atype::S32 => {
276                                    push_directive(tokens, "s32");
277                            }
278                    }
279                    match &self.btype {
280                            Btype::U32 => {
281                                    push_directive(tokens, "u32");
282                            }
283                            Btype::S32 => {
284                                    push_directive(tokens, "s32");
285                            }
286                    }
287                    if self.sat {
288                            push_directive(tokens, "sat");
289                    }
290                    self.d.unparse_tokens(tokens);
291                    if let Some(mask_6) = self.mask.as_ref() {
292                            match mask_6 {
293                                    Mask::B3210 => {
294                                            push_directive(tokens, "b3210");
295                                    }
296                                    Mask::B210 => {
297                                            push_directive(tokens, "b210");
298                                    }
299                                    Mask::B310 => {
300                                            push_directive(tokens, "b310");
301                                    }
302                                    Mask::B320 => {
303                                            push_directive(tokens, "b320");
304                                    }
305                                    Mask::B321 => {
306                                            push_directive(tokens, "b321");
307                                    }
308                                    Mask::B10 => {
309                                            push_directive(tokens, "b10");
310                                    }
311                                    Mask::B20 => {
312                                            push_directive(tokens, "b20");
313                                    }
314                                    Mask::B21 => {
315                                            push_directive(tokens, "b21");
316                                    }
317                                    Mask::B30 => {
318                                            push_directive(tokens, "b30");
319                                    }
320                                    Mask::B31 => {
321                                            push_directive(tokens, "b31");
322                                    }
323                                    Mask::B32 => {
324                                            push_directive(tokens, "b32");
325                                    }
326                                    Mask::B0 => {
327                                            push_directive(tokens, "b0");
328                                    }
329                                    Mask::B1 => {
330                                            push_directive(tokens, "b1");
331                                    }
332                                    Mask::B2 => {
333                                            push_directive(tokens, "b2");
334                                    }
335                                    Mask::B3 => {
336                                            push_directive(tokens, "b3");
337                                    }
338                            }
339                    }
340            tokens.push(PtxToken::Comma);
341                    self.a.unparse_tokens(tokens);
342                    if let Some(asel_7) = self.asel.as_ref() {
343                            match asel_7 {
344                                    Asel::BNNNN(_, n1, n2, n3, n4) => {
345                                            let mut combined = String::new();
346                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
347                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
348                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
349                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
350                                            tokens.push(PtxToken::Dot);
351                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
352                                    }
353                            }
354                    }
355            tokens.push(PtxToken::Comma);
356                    self.b.unparse_tokens(tokens);
357                    if let Some(bsel_8) = self.bsel.as_ref() {
358                            match bsel_8 {
359                                    Bsel::BNNNN(_, n1, n2, n3, n4) => {
360                                            let mut combined = String::new();
361                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
362                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
363                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
364                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
365                                            tokens.push(PtxToken::Dot);
366                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
367                                    }
368                            }
369                    }
370            tokens.push(PtxToken::Comma);
371                    self.c.unparse_tokens(tokens);
372            tokens.push(PtxToken::Semicolon);
373        }
374    }
375
376    impl PtxUnparser for Vabsdiff4DtypeAtypeBtypeSat {
377        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
378            push_opcode(tokens, "vabsdiff4");
379                    match &self.dtype {
380                            Dtype::U32 => {
381                                    push_directive(tokens, "u32");
382                            }
383                            Dtype::S32 => {
384                                    push_directive(tokens, "s32");
385                            }
386                    }
387                    match &self.atype {
388                            Atype::U32 => {
389                                    push_directive(tokens, "u32");
390                            }
391                            Atype::S32 => {
392                                    push_directive(tokens, "s32");
393                            }
394                    }
395                    match &self.btype {
396                            Btype::U32 => {
397                                    push_directive(tokens, "u32");
398                            }
399                            Btype::S32 => {
400                                    push_directive(tokens, "s32");
401                            }
402                    }
403                    if self.sat {
404                            push_directive(tokens, "sat");
405                    }
406                    self.d.unparse_tokens(tokens);
407                    if let Some(mask_9) = self.mask.as_ref() {
408                            match mask_9 {
409                                    Mask::B3210 => {
410                                            push_directive(tokens, "b3210");
411                                    }
412                                    Mask::B210 => {
413                                            push_directive(tokens, "b210");
414                                    }
415                                    Mask::B310 => {
416                                            push_directive(tokens, "b310");
417                                    }
418                                    Mask::B320 => {
419                                            push_directive(tokens, "b320");
420                                    }
421                                    Mask::B321 => {
422                                            push_directive(tokens, "b321");
423                                    }
424                                    Mask::B10 => {
425                                            push_directive(tokens, "b10");
426                                    }
427                                    Mask::B20 => {
428                                            push_directive(tokens, "b20");
429                                    }
430                                    Mask::B21 => {
431                                            push_directive(tokens, "b21");
432                                    }
433                                    Mask::B30 => {
434                                            push_directive(tokens, "b30");
435                                    }
436                                    Mask::B31 => {
437                                            push_directive(tokens, "b31");
438                                    }
439                                    Mask::B32 => {
440                                            push_directive(tokens, "b32");
441                                    }
442                                    Mask::B0 => {
443                                            push_directive(tokens, "b0");
444                                    }
445                                    Mask::B1 => {
446                                            push_directive(tokens, "b1");
447                                    }
448                                    Mask::B2 => {
449                                            push_directive(tokens, "b2");
450                                    }
451                                    Mask::B3 => {
452                                            push_directive(tokens, "b3");
453                                    }
454                            }
455                    }
456            tokens.push(PtxToken::Comma);
457                    self.a.unparse_tokens(tokens);
458                    if let Some(asel_10) = self.asel.as_ref() {
459                            match asel_10 {
460                                    Asel::BNNNN(_, n1, n2, n3, n4) => {
461                                            let mut combined = String::new();
462                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
463                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
464                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
465                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
466                                            tokens.push(PtxToken::Dot);
467                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
468                                    }
469                            }
470                    }
471            tokens.push(PtxToken::Comma);
472                    self.b.unparse_tokens(tokens);
473                    if let Some(bsel_11) = self.bsel.as_ref() {
474                            match bsel_11 {
475                                    Bsel::BNNNN(_, n1, n2, n3, n4) => {
476                                            let mut combined = String::new();
477                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
478                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
479                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
480                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
481                                            tokens.push(PtxToken::Dot);
482                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
483                                    }
484                            }
485                    }
486            tokens.push(PtxToken::Comma);
487                    self.c.unparse_tokens(tokens);
488            tokens.push(PtxToken::Semicolon);
489        }
490    }
491
492    impl PtxUnparser for Vmin4DtypeAtypeBtypeSat {
493        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
494            push_opcode(tokens, "vmin4");
495                    match &self.dtype {
496                            Dtype::U32 => {
497                                    push_directive(tokens, "u32");
498                            }
499                            Dtype::S32 => {
500                                    push_directive(tokens, "s32");
501                            }
502                    }
503                    match &self.atype {
504                            Atype::U32 => {
505                                    push_directive(tokens, "u32");
506                            }
507                            Atype::S32 => {
508                                    push_directive(tokens, "s32");
509                            }
510                    }
511                    match &self.btype {
512                            Btype::U32 => {
513                                    push_directive(tokens, "u32");
514                            }
515                            Btype::S32 => {
516                                    push_directive(tokens, "s32");
517                            }
518                    }
519                    if self.sat {
520                            push_directive(tokens, "sat");
521                    }
522                    self.d.unparse_tokens(tokens);
523                    if let Some(mask_12) = self.mask.as_ref() {
524                            match mask_12 {
525                                    Mask::B3210 => {
526                                            push_directive(tokens, "b3210");
527                                    }
528                                    Mask::B210 => {
529                                            push_directive(tokens, "b210");
530                                    }
531                                    Mask::B310 => {
532                                            push_directive(tokens, "b310");
533                                    }
534                                    Mask::B320 => {
535                                            push_directive(tokens, "b320");
536                                    }
537                                    Mask::B321 => {
538                                            push_directive(tokens, "b321");
539                                    }
540                                    Mask::B10 => {
541                                            push_directive(tokens, "b10");
542                                    }
543                                    Mask::B20 => {
544                                            push_directive(tokens, "b20");
545                                    }
546                                    Mask::B21 => {
547                                            push_directive(tokens, "b21");
548                                    }
549                                    Mask::B30 => {
550                                            push_directive(tokens, "b30");
551                                    }
552                                    Mask::B31 => {
553                                            push_directive(tokens, "b31");
554                                    }
555                                    Mask::B32 => {
556                                            push_directive(tokens, "b32");
557                                    }
558                                    Mask::B0 => {
559                                            push_directive(tokens, "b0");
560                                    }
561                                    Mask::B1 => {
562                                            push_directive(tokens, "b1");
563                                    }
564                                    Mask::B2 => {
565                                            push_directive(tokens, "b2");
566                                    }
567                                    Mask::B3 => {
568                                            push_directive(tokens, "b3");
569                                    }
570                            }
571                    }
572            tokens.push(PtxToken::Comma);
573                    self.a.unparse_tokens(tokens);
574                    if let Some(asel_13) = self.asel.as_ref() {
575                            match asel_13 {
576                                    Asel::BNNNN(_, n1, n2, n3, n4) => {
577                                            let mut combined = String::new();
578                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
579                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
580                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
581                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
582                                            tokens.push(PtxToken::Dot);
583                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
584                                    }
585                            }
586                    }
587            tokens.push(PtxToken::Comma);
588                    self.b.unparse_tokens(tokens);
589                    if let Some(bsel_14) = self.bsel.as_ref() {
590                            match bsel_14 {
591                                    Bsel::BNNNN(_, n1, n2, n3, n4) => {
592                                            let mut combined = String::new();
593                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
594                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
595                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
596                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
597                                            tokens.push(PtxToken::Dot);
598                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
599                                    }
600                            }
601                    }
602            tokens.push(PtxToken::Comma);
603                    self.c.unparse_tokens(tokens);
604            tokens.push(PtxToken::Semicolon);
605        }
606    }
607
608    impl PtxUnparser for Vmax4DtypeAtypeBtypeSat {
609        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
610            push_opcode(tokens, "vmax4");
611                    match &self.dtype {
612                            Dtype::U32 => {
613                                    push_directive(tokens, "u32");
614                            }
615                            Dtype::S32 => {
616                                    push_directive(tokens, "s32");
617                            }
618                    }
619                    match &self.atype {
620                            Atype::U32 => {
621                                    push_directive(tokens, "u32");
622                            }
623                            Atype::S32 => {
624                                    push_directive(tokens, "s32");
625                            }
626                    }
627                    match &self.btype {
628                            Btype::U32 => {
629                                    push_directive(tokens, "u32");
630                            }
631                            Btype::S32 => {
632                                    push_directive(tokens, "s32");
633                            }
634                    }
635                    if self.sat {
636                            push_directive(tokens, "sat");
637                    }
638                    self.d.unparse_tokens(tokens);
639                    if let Some(mask_15) = self.mask.as_ref() {
640                            match mask_15 {
641                                    Mask::B3210 => {
642                                            push_directive(tokens, "b3210");
643                                    }
644                                    Mask::B210 => {
645                                            push_directive(tokens, "b210");
646                                    }
647                                    Mask::B310 => {
648                                            push_directive(tokens, "b310");
649                                    }
650                                    Mask::B320 => {
651                                            push_directive(tokens, "b320");
652                                    }
653                                    Mask::B321 => {
654                                            push_directive(tokens, "b321");
655                                    }
656                                    Mask::B10 => {
657                                            push_directive(tokens, "b10");
658                                    }
659                                    Mask::B20 => {
660                                            push_directive(tokens, "b20");
661                                    }
662                                    Mask::B21 => {
663                                            push_directive(tokens, "b21");
664                                    }
665                                    Mask::B30 => {
666                                            push_directive(tokens, "b30");
667                                    }
668                                    Mask::B31 => {
669                                            push_directive(tokens, "b31");
670                                    }
671                                    Mask::B32 => {
672                                            push_directive(tokens, "b32");
673                                    }
674                                    Mask::B0 => {
675                                            push_directive(tokens, "b0");
676                                    }
677                                    Mask::B1 => {
678                                            push_directive(tokens, "b1");
679                                    }
680                                    Mask::B2 => {
681                                            push_directive(tokens, "b2");
682                                    }
683                                    Mask::B3 => {
684                                            push_directive(tokens, "b3");
685                                    }
686                            }
687                    }
688            tokens.push(PtxToken::Comma);
689                    self.a.unparse_tokens(tokens);
690                    if let Some(asel_16) = self.asel.as_ref() {
691                            match asel_16 {
692                                    Asel::BNNNN(_, n1, n2, n3, n4) => {
693                                            let mut combined = String::new();
694                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
695                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
696                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
697                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
698                                            tokens.push(PtxToken::Dot);
699                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
700                                    }
701                            }
702                    }
703            tokens.push(PtxToken::Comma);
704                    self.b.unparse_tokens(tokens);
705                    if let Some(bsel_17) = self.bsel.as_ref() {
706                            match bsel_17 {
707                                    Bsel::BNNNN(_, n1, n2, n3, n4) => {
708                                            let mut combined = String::new();
709                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
710                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
711                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
712                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
713                                            tokens.push(PtxToken::Dot);
714                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
715                                    }
716                            }
717                    }
718            tokens.push(PtxToken::Comma);
719                    self.c.unparse_tokens(tokens);
720            tokens.push(PtxToken::Semicolon);
721        }
722    }
723
724    impl PtxUnparser for Vadd4DtypeAtypeBtypeAdd {
725        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
726            push_opcode(tokens, "vadd4");
727                    match &self.dtype {
728                            Dtype::U32 => {
729                                    push_directive(tokens, "u32");
730                            }
731                            Dtype::S32 => {
732                                    push_directive(tokens, "s32");
733                            }
734                    }
735                    match &self.atype {
736                            Atype::U32 => {
737                                    push_directive(tokens, "u32");
738                            }
739                            Atype::S32 => {
740                                    push_directive(tokens, "s32");
741                            }
742                    }
743                    match &self.btype {
744                            Btype::U32 => {
745                                    push_directive(tokens, "u32");
746                            }
747                            Btype::S32 => {
748                                    push_directive(tokens, "s32");
749                            }
750                    }
751                    push_directive(tokens, "add");
752                    self.d.unparse_tokens(tokens);
753                    if let Some(mask_18) = self.mask.as_ref() {
754                            match mask_18 {
755                                    Mask::B3210 => {
756                                            push_directive(tokens, "b3210");
757                                    }
758                                    Mask::B210 => {
759                                            push_directive(tokens, "b210");
760                                    }
761                                    Mask::B310 => {
762                                            push_directive(tokens, "b310");
763                                    }
764                                    Mask::B320 => {
765                                            push_directive(tokens, "b320");
766                                    }
767                                    Mask::B321 => {
768                                            push_directive(tokens, "b321");
769                                    }
770                                    Mask::B10 => {
771                                            push_directive(tokens, "b10");
772                                    }
773                                    Mask::B20 => {
774                                            push_directive(tokens, "b20");
775                                    }
776                                    Mask::B21 => {
777                                            push_directive(tokens, "b21");
778                                    }
779                                    Mask::B30 => {
780                                            push_directive(tokens, "b30");
781                                    }
782                                    Mask::B31 => {
783                                            push_directive(tokens, "b31");
784                                    }
785                                    Mask::B32 => {
786                                            push_directive(tokens, "b32");
787                                    }
788                                    Mask::B0 => {
789                                            push_directive(tokens, "b0");
790                                    }
791                                    Mask::B1 => {
792                                            push_directive(tokens, "b1");
793                                    }
794                                    Mask::B2 => {
795                                            push_directive(tokens, "b2");
796                                    }
797                                    Mask::B3 => {
798                                            push_directive(tokens, "b3");
799                                    }
800                            }
801                    }
802            tokens.push(PtxToken::Comma);
803                    self.a.unparse_tokens(tokens);
804                    if let Some(asel_19) = self.asel.as_ref() {
805                            match asel_19 {
806                                    Asel::BNNNN(_, n1, n2, n3, n4) => {
807                                            let mut combined = String::new();
808                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
809                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
810                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
811                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
812                                            tokens.push(PtxToken::Dot);
813                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
814                                    }
815                            }
816                    }
817            tokens.push(PtxToken::Comma);
818                    self.b.unparse_tokens(tokens);
819                    if let Some(bsel_20) = self.bsel.as_ref() {
820                            match bsel_20 {
821                                    Bsel::BNNNN(_, n1, n2, n3, n4) => {
822                                            let mut combined = String::new();
823                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
824                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
825                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
826                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
827                                            tokens.push(PtxToken::Dot);
828                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
829                                    }
830                            }
831                    }
832            tokens.push(PtxToken::Comma);
833                    self.c.unparse_tokens(tokens);
834            tokens.push(PtxToken::Semicolon);
835        }
836    }
837
838    impl PtxUnparser for Vsub4DtypeAtypeBtypeAdd {
839        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
840            push_opcode(tokens, "vsub4");
841                    match &self.dtype {
842                            Dtype::U32 => {
843                                    push_directive(tokens, "u32");
844                            }
845                            Dtype::S32 => {
846                                    push_directive(tokens, "s32");
847                            }
848                    }
849                    match &self.atype {
850                            Atype::U32 => {
851                                    push_directive(tokens, "u32");
852                            }
853                            Atype::S32 => {
854                                    push_directive(tokens, "s32");
855                            }
856                    }
857                    match &self.btype {
858                            Btype::U32 => {
859                                    push_directive(tokens, "u32");
860                            }
861                            Btype::S32 => {
862                                    push_directive(tokens, "s32");
863                            }
864                    }
865                    push_directive(tokens, "add");
866                    self.d.unparse_tokens(tokens);
867                    if let Some(mask_21) = self.mask.as_ref() {
868                            match mask_21 {
869                                    Mask::B3210 => {
870                                            push_directive(tokens, "b3210");
871                                    }
872                                    Mask::B210 => {
873                                            push_directive(tokens, "b210");
874                                    }
875                                    Mask::B310 => {
876                                            push_directive(tokens, "b310");
877                                    }
878                                    Mask::B320 => {
879                                            push_directive(tokens, "b320");
880                                    }
881                                    Mask::B321 => {
882                                            push_directive(tokens, "b321");
883                                    }
884                                    Mask::B10 => {
885                                            push_directive(tokens, "b10");
886                                    }
887                                    Mask::B20 => {
888                                            push_directive(tokens, "b20");
889                                    }
890                                    Mask::B21 => {
891                                            push_directive(tokens, "b21");
892                                    }
893                                    Mask::B30 => {
894                                            push_directive(tokens, "b30");
895                                    }
896                                    Mask::B31 => {
897                                            push_directive(tokens, "b31");
898                                    }
899                                    Mask::B32 => {
900                                            push_directive(tokens, "b32");
901                                    }
902                                    Mask::B0 => {
903                                            push_directive(tokens, "b0");
904                                    }
905                                    Mask::B1 => {
906                                            push_directive(tokens, "b1");
907                                    }
908                                    Mask::B2 => {
909                                            push_directive(tokens, "b2");
910                                    }
911                                    Mask::B3 => {
912                                            push_directive(tokens, "b3");
913                                    }
914                            }
915                    }
916            tokens.push(PtxToken::Comma);
917                    self.a.unparse_tokens(tokens);
918                    if let Some(asel_22) = self.asel.as_ref() {
919                            match asel_22 {
920                                    Asel::BNNNN(_, n1, n2, n3, n4) => {
921                                            let mut combined = String::new();
922                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
923                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
924                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
925                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
926                                            tokens.push(PtxToken::Dot);
927                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
928                                    }
929                            }
930                    }
931            tokens.push(PtxToken::Comma);
932                    self.b.unparse_tokens(tokens);
933                    if let Some(bsel_23) = self.bsel.as_ref() {
934                            match bsel_23 {
935                                    Bsel::BNNNN(_, n1, n2, n3, n4) => {
936                                            let mut combined = String::new();
937                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
938                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
939                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
940                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
941                                            tokens.push(PtxToken::Dot);
942                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
943                                    }
944                            }
945                    }
946            tokens.push(PtxToken::Comma);
947                    self.c.unparse_tokens(tokens);
948            tokens.push(PtxToken::Semicolon);
949        }
950    }
951
952    impl PtxUnparser for Vavrg4DtypeAtypeBtypeAdd {
953        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
954            push_opcode(tokens, "vavrg4");
955                    match &self.dtype {
956                            Dtype::U32 => {
957                                    push_directive(tokens, "u32");
958                            }
959                            Dtype::S32 => {
960                                    push_directive(tokens, "s32");
961                            }
962                    }
963                    match &self.atype {
964                            Atype::U32 => {
965                                    push_directive(tokens, "u32");
966                            }
967                            Atype::S32 => {
968                                    push_directive(tokens, "s32");
969                            }
970                    }
971                    match &self.btype {
972                            Btype::U32 => {
973                                    push_directive(tokens, "u32");
974                            }
975                            Btype::S32 => {
976                                    push_directive(tokens, "s32");
977                            }
978                    }
979                    push_directive(tokens, "add");
980                    self.d.unparse_tokens(tokens);
981                    if let Some(mask_24) = self.mask.as_ref() {
982                            match mask_24 {
983                                    Mask::B3210 => {
984                                            push_directive(tokens, "b3210");
985                                    }
986                                    Mask::B210 => {
987                                            push_directive(tokens, "b210");
988                                    }
989                                    Mask::B310 => {
990                                            push_directive(tokens, "b310");
991                                    }
992                                    Mask::B320 => {
993                                            push_directive(tokens, "b320");
994                                    }
995                                    Mask::B321 => {
996                                            push_directive(tokens, "b321");
997                                    }
998                                    Mask::B10 => {
999                                            push_directive(tokens, "b10");
1000                                    }
1001                                    Mask::B20 => {
1002                                            push_directive(tokens, "b20");
1003                                    }
1004                                    Mask::B21 => {
1005                                            push_directive(tokens, "b21");
1006                                    }
1007                                    Mask::B30 => {
1008                                            push_directive(tokens, "b30");
1009                                    }
1010                                    Mask::B31 => {
1011                                            push_directive(tokens, "b31");
1012                                    }
1013                                    Mask::B32 => {
1014                                            push_directive(tokens, "b32");
1015                                    }
1016                                    Mask::B0 => {
1017                                            push_directive(tokens, "b0");
1018                                    }
1019                                    Mask::B1 => {
1020                                            push_directive(tokens, "b1");
1021                                    }
1022                                    Mask::B2 => {
1023                                            push_directive(tokens, "b2");
1024                                    }
1025                                    Mask::B3 => {
1026                                            push_directive(tokens, "b3");
1027                                    }
1028                            }
1029                    }
1030            tokens.push(PtxToken::Comma);
1031                    self.a.unparse_tokens(tokens);
1032                    if let Some(asel_25) = self.asel.as_ref() {
1033                            match asel_25 {
1034                                    Asel::BNNNN(_, n1, n2, n3, n4) => {
1035                                            let mut combined = String::new();
1036                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
1037                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
1038                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
1039                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
1040                                            tokens.push(PtxToken::Dot);
1041                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
1042                                    }
1043                            }
1044                    }
1045            tokens.push(PtxToken::Comma);
1046                    self.b.unparse_tokens(tokens);
1047                    if let Some(bsel_26) = self.bsel.as_ref() {
1048                            match bsel_26 {
1049                                    Bsel::BNNNN(_, n1, n2, n3, n4) => {
1050                                            let mut combined = String::new();
1051                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
1052                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
1053                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
1054                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
1055                                            tokens.push(PtxToken::Dot);
1056                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
1057                                    }
1058                            }
1059                    }
1060            tokens.push(PtxToken::Comma);
1061                    self.c.unparse_tokens(tokens);
1062            tokens.push(PtxToken::Semicolon);
1063        }
1064    }
1065
1066    impl PtxUnparser for Vabsdiff4DtypeAtypeBtypeAdd {
1067        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
1068            push_opcode(tokens, "vabsdiff4");
1069                    match &self.dtype {
1070                            Dtype::U32 => {
1071                                    push_directive(tokens, "u32");
1072                            }
1073                            Dtype::S32 => {
1074                                    push_directive(tokens, "s32");
1075                            }
1076                    }
1077                    match &self.atype {
1078                            Atype::U32 => {
1079                                    push_directive(tokens, "u32");
1080                            }
1081                            Atype::S32 => {
1082                                    push_directive(tokens, "s32");
1083                            }
1084                    }
1085                    match &self.btype {
1086                            Btype::U32 => {
1087                                    push_directive(tokens, "u32");
1088                            }
1089                            Btype::S32 => {
1090                                    push_directive(tokens, "s32");
1091                            }
1092                    }
1093                    push_directive(tokens, "add");
1094                    self.d.unparse_tokens(tokens);
1095                    if let Some(mask_27) = self.mask.as_ref() {
1096                            match mask_27 {
1097                                    Mask::B3210 => {
1098                                            push_directive(tokens, "b3210");
1099                                    }
1100                                    Mask::B210 => {
1101                                            push_directive(tokens, "b210");
1102                                    }
1103                                    Mask::B310 => {
1104                                            push_directive(tokens, "b310");
1105                                    }
1106                                    Mask::B320 => {
1107                                            push_directive(tokens, "b320");
1108                                    }
1109                                    Mask::B321 => {
1110                                            push_directive(tokens, "b321");
1111                                    }
1112                                    Mask::B10 => {
1113                                            push_directive(tokens, "b10");
1114                                    }
1115                                    Mask::B20 => {
1116                                            push_directive(tokens, "b20");
1117                                    }
1118                                    Mask::B21 => {
1119                                            push_directive(tokens, "b21");
1120                                    }
1121                                    Mask::B30 => {
1122                                            push_directive(tokens, "b30");
1123                                    }
1124                                    Mask::B31 => {
1125                                            push_directive(tokens, "b31");
1126                                    }
1127                                    Mask::B32 => {
1128                                            push_directive(tokens, "b32");
1129                                    }
1130                                    Mask::B0 => {
1131                                            push_directive(tokens, "b0");
1132                                    }
1133                                    Mask::B1 => {
1134                                            push_directive(tokens, "b1");
1135                                    }
1136                                    Mask::B2 => {
1137                                            push_directive(tokens, "b2");
1138                                    }
1139                                    Mask::B3 => {
1140                                            push_directive(tokens, "b3");
1141                                    }
1142                            }
1143                    }
1144            tokens.push(PtxToken::Comma);
1145                    self.a.unparse_tokens(tokens);
1146                    if let Some(asel_28) = self.asel.as_ref() {
1147                            match asel_28 {
1148                                    Asel::BNNNN(_, n1, n2, n3, n4) => {
1149                                            let mut combined = String::new();
1150                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
1151                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
1152                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
1153                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
1154                                            tokens.push(PtxToken::Dot);
1155                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
1156                                    }
1157                            }
1158                    }
1159            tokens.push(PtxToken::Comma);
1160                    self.b.unparse_tokens(tokens);
1161                    if let Some(bsel_29) = self.bsel.as_ref() {
1162                            match bsel_29 {
1163                                    Bsel::BNNNN(_, n1, n2, n3, n4) => {
1164                                            let mut combined = String::new();
1165                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
1166                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
1167                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
1168                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
1169                                            tokens.push(PtxToken::Dot);
1170                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
1171                                    }
1172                            }
1173                    }
1174            tokens.push(PtxToken::Comma);
1175                    self.c.unparse_tokens(tokens);
1176            tokens.push(PtxToken::Semicolon);
1177        }
1178    }
1179
1180    impl PtxUnparser for Vmin4DtypeAtypeBtypeAdd {
1181        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
1182            push_opcode(tokens, "vmin4");
1183                    match &self.dtype {
1184                            Dtype::U32 => {
1185                                    push_directive(tokens, "u32");
1186                            }
1187                            Dtype::S32 => {
1188                                    push_directive(tokens, "s32");
1189                            }
1190                    }
1191                    match &self.atype {
1192                            Atype::U32 => {
1193                                    push_directive(tokens, "u32");
1194                            }
1195                            Atype::S32 => {
1196                                    push_directive(tokens, "s32");
1197                            }
1198                    }
1199                    match &self.btype {
1200                            Btype::U32 => {
1201                                    push_directive(tokens, "u32");
1202                            }
1203                            Btype::S32 => {
1204                                    push_directive(tokens, "s32");
1205                            }
1206                    }
1207                    push_directive(tokens, "add");
1208                    self.d.unparse_tokens(tokens);
1209                    if let Some(mask_30) = self.mask.as_ref() {
1210                            match mask_30 {
1211                                    Mask::B3210 => {
1212                                            push_directive(tokens, "b3210");
1213                                    }
1214                                    Mask::B210 => {
1215                                            push_directive(tokens, "b210");
1216                                    }
1217                                    Mask::B310 => {
1218                                            push_directive(tokens, "b310");
1219                                    }
1220                                    Mask::B320 => {
1221                                            push_directive(tokens, "b320");
1222                                    }
1223                                    Mask::B321 => {
1224                                            push_directive(tokens, "b321");
1225                                    }
1226                                    Mask::B10 => {
1227                                            push_directive(tokens, "b10");
1228                                    }
1229                                    Mask::B20 => {
1230                                            push_directive(tokens, "b20");
1231                                    }
1232                                    Mask::B21 => {
1233                                            push_directive(tokens, "b21");
1234                                    }
1235                                    Mask::B30 => {
1236                                            push_directive(tokens, "b30");
1237                                    }
1238                                    Mask::B31 => {
1239                                            push_directive(tokens, "b31");
1240                                    }
1241                                    Mask::B32 => {
1242                                            push_directive(tokens, "b32");
1243                                    }
1244                                    Mask::B0 => {
1245                                            push_directive(tokens, "b0");
1246                                    }
1247                                    Mask::B1 => {
1248                                            push_directive(tokens, "b1");
1249                                    }
1250                                    Mask::B2 => {
1251                                            push_directive(tokens, "b2");
1252                                    }
1253                                    Mask::B3 => {
1254                                            push_directive(tokens, "b3");
1255                                    }
1256                            }
1257                    }
1258            tokens.push(PtxToken::Comma);
1259                    self.a.unparse_tokens(tokens);
1260                    if let Some(asel_31) = self.asel.as_ref() {
1261                            match asel_31 {
1262                                    Asel::BNNNN(_, n1, n2, n3, n4) => {
1263                                            let mut combined = String::new();
1264                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
1265                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
1266                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
1267                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
1268                                            tokens.push(PtxToken::Dot);
1269                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
1270                                    }
1271                            }
1272                    }
1273            tokens.push(PtxToken::Comma);
1274                    self.b.unparse_tokens(tokens);
1275                    if let Some(bsel_32) = self.bsel.as_ref() {
1276                            match bsel_32 {
1277                                    Bsel::BNNNN(_, n1, n2, n3, n4) => {
1278                                            let mut combined = String::new();
1279                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
1280                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
1281                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
1282                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
1283                                            tokens.push(PtxToken::Dot);
1284                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
1285                                    }
1286                            }
1287                    }
1288            tokens.push(PtxToken::Comma);
1289                    self.c.unparse_tokens(tokens);
1290            tokens.push(PtxToken::Semicolon);
1291        }
1292    }
1293
1294    impl PtxUnparser for Vmax4DtypeAtypeBtypeAdd {
1295        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
1296            push_opcode(tokens, "vmax4");
1297                    match &self.dtype {
1298                            Dtype::U32 => {
1299                                    push_directive(tokens, "u32");
1300                            }
1301                            Dtype::S32 => {
1302                                    push_directive(tokens, "s32");
1303                            }
1304                    }
1305                    match &self.atype {
1306                            Atype::U32 => {
1307                                    push_directive(tokens, "u32");
1308                            }
1309                            Atype::S32 => {
1310                                    push_directive(tokens, "s32");
1311                            }
1312                    }
1313                    match &self.btype {
1314                            Btype::U32 => {
1315                                    push_directive(tokens, "u32");
1316                            }
1317                            Btype::S32 => {
1318                                    push_directive(tokens, "s32");
1319                            }
1320                    }
1321                    push_directive(tokens, "add");
1322                    self.d.unparse_tokens(tokens);
1323                    if let Some(mask_33) = self.mask.as_ref() {
1324                            match mask_33 {
1325                                    Mask::B3210 => {
1326                                            push_directive(tokens, "b3210");
1327                                    }
1328                                    Mask::B210 => {
1329                                            push_directive(tokens, "b210");
1330                                    }
1331                                    Mask::B310 => {
1332                                            push_directive(tokens, "b310");
1333                                    }
1334                                    Mask::B320 => {
1335                                            push_directive(tokens, "b320");
1336                                    }
1337                                    Mask::B321 => {
1338                                            push_directive(tokens, "b321");
1339                                    }
1340                                    Mask::B10 => {
1341                                            push_directive(tokens, "b10");
1342                                    }
1343                                    Mask::B20 => {
1344                                            push_directive(tokens, "b20");
1345                                    }
1346                                    Mask::B21 => {
1347                                            push_directive(tokens, "b21");
1348                                    }
1349                                    Mask::B30 => {
1350                                            push_directive(tokens, "b30");
1351                                    }
1352                                    Mask::B31 => {
1353                                            push_directive(tokens, "b31");
1354                                    }
1355                                    Mask::B32 => {
1356                                            push_directive(tokens, "b32");
1357                                    }
1358                                    Mask::B0 => {
1359                                            push_directive(tokens, "b0");
1360                                    }
1361                                    Mask::B1 => {
1362                                            push_directive(tokens, "b1");
1363                                    }
1364                                    Mask::B2 => {
1365                                            push_directive(tokens, "b2");
1366                                    }
1367                                    Mask::B3 => {
1368                                            push_directive(tokens, "b3");
1369                                    }
1370                            }
1371                    }
1372            tokens.push(PtxToken::Comma);
1373                    self.a.unparse_tokens(tokens);
1374                    if let Some(asel_34) = self.asel.as_ref() {
1375                            match asel_34 {
1376                                    Asel::BNNNN(_, n1, n2, n3, n4) => {
1377                                            let mut combined = String::new();
1378                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
1379                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
1380                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
1381                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
1382                                            tokens.push(PtxToken::Dot);
1383                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
1384                                    }
1385                            }
1386                    }
1387            tokens.push(PtxToken::Comma);
1388                    self.b.unparse_tokens(tokens);
1389                    if let Some(bsel_35) = self.bsel.as_ref() {
1390                            match bsel_35 {
1391                                    Bsel::BNNNN(_, n1, n2, n3, n4) => {
1392                                            let mut combined = String::new();
1393                                            combined.push_str(format!("{:?}", n1).trim_start_matches('_'));
1394                                            combined.push_str(format!("{:?}", n2).trim_start_matches('_'));
1395                                            combined.push_str(format!("{:?}", n3).trim_start_matches('_'));
1396                                            combined.push_str(format!("{:?}", n4).trim_start_matches('_'));
1397                                            tokens.push(PtxToken::Dot);
1398                                            tokens.push(PtxToken::Identifier(format!("{}{}", "b", combined).into()));
1399                                    }
1400                            }
1401                    }
1402            tokens.push(PtxToken::Comma);
1403                    self.c.unparse_tokens(tokens);
1404            tokens.push(PtxToken::Semicolon);
1405        }
1406    }
1407
1408}
1409