ptx_parser/unparser/instruction/
cvt.rs

1//! Original PTX specification:
2//!
3//! cvt{.irnd}{.ftz}{.sat}.dtype.atype         d, a;  // integer rounding
4//! cvt{.frnd}{.ftz}{.sat}.dtype.atype         d, a;  // fp rounding
5//! cvt.frnd2{.relu}{.satfinite}.f16.f32       d, a;
6//! cvt.frnd2{.relu}{.satfinite}.f16x2.f32     d, a, b;
7//! cvt.rs{.relu}{.satfinite}.f16x2.f32        d, a, b, rbits;
8//! cvt.frnd2{.relu}{.satfinite}.bf16.f32      d, a;
9//! cvt.frnd2{.relu}{.satfinite}.bf16x2.f32    d, a, b;
10//! cvt.rs{.relu}{.satfinite}.bf16x2.f32       d, a, b, rbits;
11//! cvt.rna{.satfinite}.tf32.f32               d, a;
12//! cvt.frnd2{.satfinite}{.relu}.tf32.f32      d, a;
13//! cvt.rn.satfinite{.relu}.f8x2type.f32       d, a, b;
14//! cvt.rn.satfinite{.relu}.f8x2type.f16x2     d, a;
15//! cvt.rn{.relu}.f16x2.f8x2type              d, a;
16//! cvt.rs{.relu}.satfinite.f8x4type.f32       d, {a, b, e, f}, rbits;
17//! cvt.rn.satfinite{.relu}.f4x2type.f32       d, a, b;
18//! cvt.rn{.relu}.f16x2.f4x2type               d, a;
19//! cvt.rs{.relu}.satfinite.f4x4type.f32       d, {a, b, e, f}, rbits;
20//! cvt.rn.satfinite{.relu}.f6x2type.f32       d, a, b;
21//! cvt.rn{.relu}.f16x2.f6x2type               d, a;
22//! cvt.rs{.relu}.satfinite.f6x4type.f32       d, {a, b, e, f}, rbits;
23//! cvt.frnd3{.satfinite}.ue8m0x2.f32          d, a, b;
24//! cvt.frnd3{.satfinite}.ue8m0x2.bf16x2       d, a;
25//! cvt.rn.bf16x2.ue8m0x2                      d, a;
26//! .irnd   = { .rni, .rzi, .rmi, .rpi };
27//! .frnd   = { .rn,  .rz,  .rm,  .rp  };
28//! .frnd2  = { .rn,  .rz };
29//! .frnd3  = { .rz,  .rp };
30//! .dtype = .atype = { .u8,   .u16, .u32, .u64,
31//! .s8,   .s16, .s32, .s64,
32//! .bf16, .f16, .f32, .f64 };
33//! .f8x2type = { .e4m3x2, .e5m2x2 };
34//! .f4x2type = { .e2m1x2 };
35//! .f6x2type = { .e2m3x2, .e3m2x2 };
36//! .f4x4type = { .e2m1x4 };
37//! .f8x4type = { .e4m3x4, .e5m2x4 };
38//! .f6x4type = { .e2m3x4, .e3m2x4 };
39
40#![allow(unused)]
41
42use crate::lexer::PtxToken;
43use crate::unparser::{PtxUnparser, common::*};
44
45pub mod section_0 {
46    use super::*;
47    use crate::r#type::instruction::cvt::section_0::*;
48
49    impl PtxUnparser for CvtIrndFtzSatDtypeAtype {
50        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
51            push_opcode(tokens, "cvt");
52                    if let Some(irnd_0) = self.irnd.as_ref() {
53                            match irnd_0 {
54                                    Irnd::Rni => {
55                                            push_directive(tokens, "rni");
56                                    }
57                                    Irnd::Rzi => {
58                                            push_directive(tokens, "rzi");
59                                    }
60                                    Irnd::Rmi => {
61                                            push_directive(tokens, "rmi");
62                                    }
63                                    Irnd::Rpi => {
64                                            push_directive(tokens, "rpi");
65                                    }
66                            }
67                    }
68                    if self.ftz {
69                            push_directive(tokens, "ftz");
70                    }
71                    if self.sat {
72                            push_directive(tokens, "sat");
73                    }
74                    match &self.dtype {
75                            Dtype::Bf16 => {
76                                    push_directive(tokens, "bf16");
77                            }
78                            Dtype::U16 => {
79                                    push_directive(tokens, "u16");
80                            }
81                            Dtype::U32 => {
82                                    push_directive(tokens, "u32");
83                            }
84                            Dtype::U64 => {
85                                    push_directive(tokens, "u64");
86                            }
87                            Dtype::S16 => {
88                                    push_directive(tokens, "s16");
89                            }
90                            Dtype::S32 => {
91                                    push_directive(tokens, "s32");
92                            }
93                            Dtype::S64 => {
94                                    push_directive(tokens, "s64");
95                            }
96                            Dtype::F16 => {
97                                    push_directive(tokens, "f16");
98                            }
99                            Dtype::F32 => {
100                                    push_directive(tokens, "f32");
101                            }
102                            Dtype::F64 => {
103                                    push_directive(tokens, "f64");
104                            }
105                            Dtype::U8 => {
106                                    push_directive(tokens, "u8");
107                            }
108                            Dtype::S8 => {
109                                    push_directive(tokens, "s8");
110                            }
111                    }
112                    match &self.atype {
113                            Atype::Bf16 => {
114                                    push_directive(tokens, "bf16");
115                            }
116                            Atype::U16 => {
117                                    push_directive(tokens, "u16");
118                            }
119                            Atype::U32 => {
120                                    push_directive(tokens, "u32");
121                            }
122                            Atype::U64 => {
123                                    push_directive(tokens, "u64");
124                            }
125                            Atype::S16 => {
126                                    push_directive(tokens, "s16");
127                            }
128                            Atype::S32 => {
129                                    push_directive(tokens, "s32");
130                            }
131                            Atype::S64 => {
132                                    push_directive(tokens, "s64");
133                            }
134                            Atype::F16 => {
135                                    push_directive(tokens, "f16");
136                            }
137                            Atype::F32 => {
138                                    push_directive(tokens, "f32");
139                            }
140                            Atype::F64 => {
141                                    push_directive(tokens, "f64");
142                            }
143                            Atype::U8 => {
144                                    push_directive(tokens, "u8");
145                            }
146                            Atype::S8 => {
147                                    push_directive(tokens, "s8");
148                            }
149                    }
150                    self.d.unparse_tokens(tokens);
151            tokens.push(PtxToken::Comma);
152                    self.a.unparse_tokens(tokens);
153            tokens.push(PtxToken::Semicolon);
154        }
155    }
156
157    impl PtxUnparser for CvtFrndFtzSatDtypeAtype {
158        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
159            push_opcode(tokens, "cvt");
160                    if let Some(frnd_1) = self.frnd.as_ref() {
161                            match frnd_1 {
162                                    Frnd::Rn => {
163                                            push_directive(tokens, "rn");
164                                    }
165                                    Frnd::Rz => {
166                                            push_directive(tokens, "rz");
167                                    }
168                                    Frnd::Rm => {
169                                            push_directive(tokens, "rm");
170                                    }
171                                    Frnd::Rp => {
172                                            push_directive(tokens, "rp");
173                                    }
174                            }
175                    }
176                    if self.ftz {
177                            push_directive(tokens, "ftz");
178                    }
179                    if self.sat {
180                            push_directive(tokens, "sat");
181                    }
182                    match &self.dtype {
183                            Dtype::Bf16 => {
184                                    push_directive(tokens, "bf16");
185                            }
186                            Dtype::U16 => {
187                                    push_directive(tokens, "u16");
188                            }
189                            Dtype::U32 => {
190                                    push_directive(tokens, "u32");
191                            }
192                            Dtype::U64 => {
193                                    push_directive(tokens, "u64");
194                            }
195                            Dtype::S16 => {
196                                    push_directive(tokens, "s16");
197                            }
198                            Dtype::S32 => {
199                                    push_directive(tokens, "s32");
200                            }
201                            Dtype::S64 => {
202                                    push_directive(tokens, "s64");
203                            }
204                            Dtype::F16 => {
205                                    push_directive(tokens, "f16");
206                            }
207                            Dtype::F32 => {
208                                    push_directive(tokens, "f32");
209                            }
210                            Dtype::F64 => {
211                                    push_directive(tokens, "f64");
212                            }
213                            Dtype::U8 => {
214                                    push_directive(tokens, "u8");
215                            }
216                            Dtype::S8 => {
217                                    push_directive(tokens, "s8");
218                            }
219                    }
220                    match &self.atype {
221                            Atype::Bf16 => {
222                                    push_directive(tokens, "bf16");
223                            }
224                            Atype::U16 => {
225                                    push_directive(tokens, "u16");
226                            }
227                            Atype::U32 => {
228                                    push_directive(tokens, "u32");
229                            }
230                            Atype::U64 => {
231                                    push_directive(tokens, "u64");
232                            }
233                            Atype::S16 => {
234                                    push_directive(tokens, "s16");
235                            }
236                            Atype::S32 => {
237                                    push_directive(tokens, "s32");
238                            }
239                            Atype::S64 => {
240                                    push_directive(tokens, "s64");
241                            }
242                            Atype::F16 => {
243                                    push_directive(tokens, "f16");
244                            }
245                            Atype::F32 => {
246                                    push_directive(tokens, "f32");
247                            }
248                            Atype::F64 => {
249                                    push_directive(tokens, "f64");
250                            }
251                            Atype::U8 => {
252                                    push_directive(tokens, "u8");
253                            }
254                            Atype::S8 => {
255                                    push_directive(tokens, "s8");
256                            }
257                    }
258                    self.d.unparse_tokens(tokens);
259            tokens.push(PtxToken::Comma);
260                    self.a.unparse_tokens(tokens);
261            tokens.push(PtxToken::Semicolon);
262        }
263    }
264
265    impl PtxUnparser for CvtFrnd2ReluSatfiniteF16F32 {
266        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
267            push_opcode(tokens, "cvt");
268                    match &self.frnd2 {
269                            Frnd2::Rn => {
270                                    push_directive(tokens, "rn");
271                            }
272                            Frnd2::Rz => {
273                                    push_directive(tokens, "rz");
274                            }
275                    }
276                    if self.relu {
277                            push_directive(tokens, "relu");
278                    }
279                    if self.satfinite {
280                            push_directive(tokens, "satfinite");
281                    }
282                    push_directive(tokens, "f16");
283                    push_directive(tokens, "f32");
284                    self.d.unparse_tokens(tokens);
285            tokens.push(PtxToken::Comma);
286                    self.a.unparse_tokens(tokens);
287            tokens.push(PtxToken::Semicolon);
288        }
289    }
290
291    impl PtxUnparser for CvtFrnd2ReluSatfiniteF16x2F32 {
292        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
293            push_opcode(tokens, "cvt");
294                    match &self.frnd2 {
295                            Frnd2::Rn => {
296                                    push_directive(tokens, "rn");
297                            }
298                            Frnd2::Rz => {
299                                    push_directive(tokens, "rz");
300                            }
301                    }
302                    if self.relu {
303                            push_directive(tokens, "relu");
304                    }
305                    if self.satfinite {
306                            push_directive(tokens, "satfinite");
307                    }
308                    push_directive(tokens, "f16x2");
309                    push_directive(tokens, "f32");
310                    self.d.unparse_tokens(tokens);
311            tokens.push(PtxToken::Comma);
312                    self.a.unparse_tokens(tokens);
313            tokens.push(PtxToken::Comma);
314                    self.b.unparse_tokens(tokens);
315            tokens.push(PtxToken::Semicolon);
316        }
317    }
318
319    impl PtxUnparser for CvtRsReluSatfiniteF16x2F32 {
320        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
321            push_opcode(tokens, "cvt");
322                    push_directive(tokens, "rs");
323                    if self.relu {
324                            push_directive(tokens, "relu");
325                    }
326                    if self.satfinite {
327                            push_directive(tokens, "satfinite");
328                    }
329                    push_directive(tokens, "f16x2");
330                    push_directive(tokens, "f32");
331                    self.d.unparse_tokens(tokens);
332            tokens.push(PtxToken::Comma);
333                    self.a.unparse_tokens(tokens);
334            tokens.push(PtxToken::Comma);
335                    self.b.unparse_tokens(tokens);
336            tokens.push(PtxToken::Comma);
337                    self.rbits.unparse_tokens(tokens);
338            tokens.push(PtxToken::Semicolon);
339        }
340    }
341
342    impl PtxUnparser for CvtFrnd2ReluSatfiniteBf16F32 {
343        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
344            push_opcode(tokens, "cvt");
345                    match &self.frnd2 {
346                            Frnd2::Rn => {
347                                    push_directive(tokens, "rn");
348                            }
349                            Frnd2::Rz => {
350                                    push_directive(tokens, "rz");
351                            }
352                    }
353                    if self.relu {
354                            push_directive(tokens, "relu");
355                    }
356                    if self.satfinite {
357                            push_directive(tokens, "satfinite");
358                    }
359                    push_directive(tokens, "bf16");
360                    push_directive(tokens, "f32");
361                    self.d.unparse_tokens(tokens);
362            tokens.push(PtxToken::Comma);
363                    self.a.unparse_tokens(tokens);
364            tokens.push(PtxToken::Semicolon);
365        }
366    }
367
368    impl PtxUnparser for CvtFrnd2ReluSatfiniteBf16x2F32 {
369        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
370            push_opcode(tokens, "cvt");
371                    match &self.frnd2 {
372                            Frnd2::Rn => {
373                                    push_directive(tokens, "rn");
374                            }
375                            Frnd2::Rz => {
376                                    push_directive(tokens, "rz");
377                            }
378                    }
379                    if self.relu {
380                            push_directive(tokens, "relu");
381                    }
382                    if self.satfinite {
383                            push_directive(tokens, "satfinite");
384                    }
385                    push_directive(tokens, "bf16x2");
386                    push_directive(tokens, "f32");
387                    self.d.unparse_tokens(tokens);
388            tokens.push(PtxToken::Comma);
389                    self.a.unparse_tokens(tokens);
390            tokens.push(PtxToken::Comma);
391                    self.b.unparse_tokens(tokens);
392            tokens.push(PtxToken::Semicolon);
393        }
394    }
395
396    impl PtxUnparser for CvtRsReluSatfiniteBf16x2F32 {
397        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
398            push_opcode(tokens, "cvt");
399                    push_directive(tokens, "rs");
400                    if self.relu {
401                            push_directive(tokens, "relu");
402                    }
403                    if self.satfinite {
404                            push_directive(tokens, "satfinite");
405                    }
406                    push_directive(tokens, "bf16x2");
407                    push_directive(tokens, "f32");
408                    self.d.unparse_tokens(tokens);
409            tokens.push(PtxToken::Comma);
410                    self.a.unparse_tokens(tokens);
411            tokens.push(PtxToken::Comma);
412                    self.b.unparse_tokens(tokens);
413            tokens.push(PtxToken::Comma);
414                    self.rbits.unparse_tokens(tokens);
415            tokens.push(PtxToken::Semicolon);
416        }
417    }
418
419    impl PtxUnparser for CvtRnaSatfiniteTf32F32 {
420        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
421            push_opcode(tokens, "cvt");
422                    push_directive(tokens, "rna");
423                    if self.satfinite {
424                            push_directive(tokens, "satfinite");
425                    }
426                    push_directive(tokens, "tf32");
427                    push_directive(tokens, "f32");
428                    self.d.unparse_tokens(tokens);
429            tokens.push(PtxToken::Comma);
430                    self.a.unparse_tokens(tokens);
431            tokens.push(PtxToken::Semicolon);
432        }
433    }
434
435    impl PtxUnparser for CvtFrnd2SatfiniteReluTf32F32 {
436        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
437            push_opcode(tokens, "cvt");
438                    match &self.frnd2 {
439                            Frnd2::Rn => {
440                                    push_directive(tokens, "rn");
441                            }
442                            Frnd2::Rz => {
443                                    push_directive(tokens, "rz");
444                            }
445                    }
446                    if self.satfinite {
447                            push_directive(tokens, "satfinite");
448                    }
449                    if self.relu {
450                            push_directive(tokens, "relu");
451                    }
452                    push_directive(tokens, "tf32");
453                    push_directive(tokens, "f32");
454                    self.d.unparse_tokens(tokens);
455            tokens.push(PtxToken::Comma);
456                    self.a.unparse_tokens(tokens);
457            tokens.push(PtxToken::Semicolon);
458        }
459    }
460
461    impl PtxUnparser for CvtRnSatfiniteReluF8x2typeF32 {
462        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
463            push_opcode(tokens, "cvt");
464                    push_directive(tokens, "rn");
465                    push_directive(tokens, "satfinite");
466                    if self.relu {
467                            push_directive(tokens, "relu");
468                    }
469                    match &self.f8x2type {
470                            F8x2type::E4m3x2 => {
471                                    push_directive(tokens, "e4m3x2");
472                            }
473                            F8x2type::E5m2x2 => {
474                                    push_directive(tokens, "e5m2x2");
475                            }
476                    }
477                    push_directive(tokens, "f32");
478                    self.d.unparse_tokens(tokens);
479            tokens.push(PtxToken::Comma);
480                    self.a.unparse_tokens(tokens);
481            tokens.push(PtxToken::Comma);
482                    self.b.unparse_tokens(tokens);
483            tokens.push(PtxToken::Semicolon);
484        }
485    }
486
487    impl PtxUnparser for CvtRnSatfiniteReluF8x2typeF16x2 {
488        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
489            push_opcode(tokens, "cvt");
490                    push_directive(tokens, "rn");
491                    push_directive(tokens, "satfinite");
492                    if self.relu {
493                            push_directive(tokens, "relu");
494                    }
495                    match &self.f8x2type {
496                            F8x2type::E4m3x2 => {
497                                    push_directive(tokens, "e4m3x2");
498                            }
499                            F8x2type::E5m2x2 => {
500                                    push_directive(tokens, "e5m2x2");
501                            }
502                    }
503                    push_directive(tokens, "f16x2");
504                    self.d.unparse_tokens(tokens);
505            tokens.push(PtxToken::Comma);
506                    self.a.unparse_tokens(tokens);
507            tokens.push(PtxToken::Semicolon);
508        }
509    }
510
511    impl PtxUnparser for CvtRnReluF16x2F8x2type {
512        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
513            push_opcode(tokens, "cvt");
514                    push_directive(tokens, "rn");
515                    if self.relu {
516                            push_directive(tokens, "relu");
517                    }
518                    push_directive(tokens, "f16x2");
519                    match &self.f8x2type {
520                            F8x2type::E4m3x2 => {
521                                    push_directive(tokens, "e4m3x2");
522                            }
523                            F8x2type::E5m2x2 => {
524                                    push_directive(tokens, "e5m2x2");
525                            }
526                    }
527                    self.d.unparse_tokens(tokens);
528            tokens.push(PtxToken::Comma);
529                    self.a.unparse_tokens(tokens);
530            tokens.push(PtxToken::Semicolon);
531        }
532    }
533
534    impl PtxUnparser for CvtRsReluSatfiniteF8x4typeF32 {
535        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
536            push_opcode(tokens, "cvt");
537                    push_directive(tokens, "rs");
538                    if self.relu {
539                            push_directive(tokens, "relu");
540                    }
541                    push_directive(tokens, "satfinite");
542                    match &self.f8x4type {
543                            F8x4type::E4m3x4 => {
544                                    push_directive(tokens, "e4m3x4");
545                            }
546                            F8x4type::E5m2x4 => {
547                                    push_directive(tokens, "e5m2x4");
548                            }
549                    }
550                    push_directive(tokens, "f32");
551                    self.d.unparse_tokens(tokens);
552            tokens.push(PtxToken::Comma);
553                    self.a.unparse_tokens(tokens);
554            tokens.push(PtxToken::Comma);
555                    self.rbits.unparse_tokens(tokens);
556            tokens.push(PtxToken::Semicolon);
557        }
558    }
559
560    impl PtxUnparser for CvtRnSatfiniteReluF4x2typeF32 {
561        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
562            push_opcode(tokens, "cvt");
563                    push_directive(tokens, "rn");
564                    push_directive(tokens, "satfinite");
565                    if self.relu {
566                            push_directive(tokens, "relu");
567                    }
568                    match &self.f4x2type {
569                            F4x2type::E2m1x2 => {
570                                    push_directive(tokens, "e2m1x2");
571                            }
572                    }
573                    push_directive(tokens, "f32");
574                    self.d.unparse_tokens(tokens);
575            tokens.push(PtxToken::Comma);
576                    self.a.unparse_tokens(tokens);
577            tokens.push(PtxToken::Comma);
578                    self.b.unparse_tokens(tokens);
579            tokens.push(PtxToken::Semicolon);
580        }
581    }
582
583    impl PtxUnparser for CvtRnReluF16x2F4x2type {
584        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
585            push_opcode(tokens, "cvt");
586                    push_directive(tokens, "rn");
587                    if self.relu {
588                            push_directive(tokens, "relu");
589                    }
590                    push_directive(tokens, "f16x2");
591                    match &self.f4x2type {
592                            F4x2type::E2m1x2 => {
593                                    push_directive(tokens, "e2m1x2");
594                            }
595                    }
596                    self.d.unparse_tokens(tokens);
597            tokens.push(PtxToken::Comma);
598                    self.a.unparse_tokens(tokens);
599            tokens.push(PtxToken::Semicolon);
600        }
601    }
602
603    impl PtxUnparser for CvtRsReluSatfiniteF4x4typeF32 {
604        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
605            push_opcode(tokens, "cvt");
606                    push_directive(tokens, "rs");
607                    if self.relu {
608                            push_directive(tokens, "relu");
609                    }
610                    push_directive(tokens, "satfinite");
611                    match &self.f4x4type {
612                            F4x4type::E2m1x4 => {
613                                    push_directive(tokens, "e2m1x4");
614                            }
615                    }
616                    push_directive(tokens, "f32");
617                    self.d.unparse_tokens(tokens);
618            tokens.push(PtxToken::Comma);
619                    self.a.unparse_tokens(tokens);
620            tokens.push(PtxToken::Comma);
621                    self.rbits.unparse_tokens(tokens);
622            tokens.push(PtxToken::Semicolon);
623        }
624    }
625
626    impl PtxUnparser for CvtRnSatfiniteReluF6x2typeF32 {
627        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
628            push_opcode(tokens, "cvt");
629                    push_directive(tokens, "rn");
630                    push_directive(tokens, "satfinite");
631                    if self.relu {
632                            push_directive(tokens, "relu");
633                    }
634                    match &self.f6x2type {
635                            F6x2type::E2m3x2 => {
636                                    push_directive(tokens, "e2m3x2");
637                            }
638                            F6x2type::E3m2x2 => {
639                                    push_directive(tokens, "e3m2x2");
640                            }
641                    }
642                    push_directive(tokens, "f32");
643                    self.d.unparse_tokens(tokens);
644            tokens.push(PtxToken::Comma);
645                    self.a.unparse_tokens(tokens);
646            tokens.push(PtxToken::Comma);
647                    self.b.unparse_tokens(tokens);
648            tokens.push(PtxToken::Semicolon);
649        }
650    }
651
652    impl PtxUnparser for CvtRnReluF16x2F6x2type {
653        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
654            push_opcode(tokens, "cvt");
655                    push_directive(tokens, "rn");
656                    if self.relu {
657                            push_directive(tokens, "relu");
658                    }
659                    push_directive(tokens, "f16x2");
660                    match &self.f6x2type {
661                            F6x2type::E2m3x2 => {
662                                    push_directive(tokens, "e2m3x2");
663                            }
664                            F6x2type::E3m2x2 => {
665                                    push_directive(tokens, "e3m2x2");
666                            }
667                    }
668                    self.d.unparse_tokens(tokens);
669            tokens.push(PtxToken::Comma);
670                    self.a.unparse_tokens(tokens);
671            tokens.push(PtxToken::Semicolon);
672        }
673    }
674
675    impl PtxUnparser for CvtRsReluSatfiniteF6x4typeF32 {
676        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
677            push_opcode(tokens, "cvt");
678                    push_directive(tokens, "rs");
679                    if self.relu {
680                            push_directive(tokens, "relu");
681                    }
682                    push_directive(tokens, "satfinite");
683                    match &self.f6x4type {
684                            F6x4type::E2m3x4 => {
685                                    push_directive(tokens, "e2m3x4");
686                            }
687                            F6x4type::E3m2x4 => {
688                                    push_directive(tokens, "e3m2x4");
689                            }
690                    }
691                    push_directive(tokens, "f32");
692                    self.d.unparse_tokens(tokens);
693            tokens.push(PtxToken::Comma);
694                    self.a.unparse_tokens(tokens);
695            tokens.push(PtxToken::Comma);
696                    self.rbits.unparse_tokens(tokens);
697            tokens.push(PtxToken::Semicolon);
698        }
699    }
700
701    impl PtxUnparser for CvtFrnd3SatfiniteUe8m0x2F32 {
702        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
703            push_opcode(tokens, "cvt");
704                    match &self.frnd3 {
705                            Frnd3::Rz => {
706                                    push_directive(tokens, "rz");
707                            }
708                            Frnd3::Rp => {
709                                    push_directive(tokens, "rp");
710                            }
711                    }
712                    if self.satfinite {
713                            push_directive(tokens, "satfinite");
714                    }
715                    push_directive(tokens, "ue8m0x2");
716                    push_directive(tokens, "f32");
717                    self.d.unparse_tokens(tokens);
718            tokens.push(PtxToken::Comma);
719                    self.a.unparse_tokens(tokens);
720            tokens.push(PtxToken::Comma);
721                    self.b.unparse_tokens(tokens);
722            tokens.push(PtxToken::Semicolon);
723        }
724    }
725
726    impl PtxUnparser for CvtFrnd3SatfiniteUe8m0x2Bf16x2 {
727        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
728            push_opcode(tokens, "cvt");
729                    match &self.frnd3 {
730                            Frnd3::Rz => {
731                                    push_directive(tokens, "rz");
732                            }
733                            Frnd3::Rp => {
734                                    push_directive(tokens, "rp");
735                            }
736                    }
737                    if self.satfinite {
738                            push_directive(tokens, "satfinite");
739                    }
740                    push_directive(tokens, "ue8m0x2");
741                    push_directive(tokens, "bf16x2");
742                    self.d.unparse_tokens(tokens);
743            tokens.push(PtxToken::Comma);
744                    self.a.unparse_tokens(tokens);
745            tokens.push(PtxToken::Semicolon);
746        }
747    }
748
749    impl PtxUnparser for CvtRnBf16x2Ue8m0x2 {
750        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
751            push_opcode(tokens, "cvt");
752                    push_directive(tokens, "rn");
753                    push_directive(tokens, "bf16x2");
754                    push_directive(tokens, "ue8m0x2");
755                    self.d.unparse_tokens(tokens);
756            tokens.push(PtxToken::Comma);
757                    self.a.unparse_tokens(tokens);
758            tokens.push(PtxToken::Semicolon);
759        }
760    }
761
762}
763