ptx_parser/unparser/instruction/vset4.rs
1//! Original PTX specification:
2//!
3//! // SIMD instruction with secondary SIMD merge operation
4//! vset4.atype.btype.cmp d{.mask}, a{.asel}, b{.bsel}, c;
5//! // SIMD instruction with secondary accumulate operation
6//! vset4.atype.btype.cmp.add d{.mask}, a{.asel}, b{.bsel}, c;
7//! .atype = .btype = { .u32, .s32 };
8//! .cmp = { .eq, .ne, .lt, .le, .gt, .ge };
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 = { .b00, .b01, .b02, .b03, .b04, .b05, .b06, .b07,
15//! .b10, .b11, .b12, .b13, .b14, .b15, .b16, .b17,
16//! .b20, .b21, .b22, .b23, .b24, .b25, .b26, .b27,
17//! .b30, .b31, .b32, .b33, .b34, .b35, .b36, .b37,
18//! .b40, .b41, .b42, .b43, .b44, .b45, .b46, .b47,
19//! .b50, .b51, .b52, .b53, .b54, .b55, .b56, .b57,
20//! .b60, .b61, .b62, .b63, .b64, .b65, .b66, .b67,
21//! .b70, .b71, .b72, .b73, .b74, .b75, .b76, .b77
22//! } //.bxyzw, where x,y,z,w are from { 0, ..., 7 };
23//! // .asel defaults to .b3210
24//! // .bsel defaults to .b7654
25
26#![allow(unused)]
27
28use crate::lexer::PtxToken;
29use crate::unparser::{PtxUnparser, common::*};
30
31pub mod section_0 {
32 use super::*;
33 use crate::r#type::instruction::vset4::section_0::*;
34
35 impl PtxUnparser for Vset4AtypeBtypeCmp {
36 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
37 push_opcode(tokens, "vset4");
38 match &self.atype {
39 Atype::U32 => {
40 push_directive(tokens, "u32");
41 }
42 Atype::S32 => {
43 push_directive(tokens, "s32");
44 }
45 }
46 match &self.btype {
47 Btype::U32 => {
48 push_directive(tokens, "u32");
49 }
50 Btype::S32 => {
51 push_directive(tokens, "s32");
52 }
53 }
54 match &self.cmp {
55 Cmp::Eq => {
56 push_directive(tokens, "eq");
57 }
58 Cmp::Ne => {
59 push_directive(tokens, "ne");
60 }
61 Cmp::Lt => {
62 push_directive(tokens, "lt");
63 }
64 Cmp::Le => {
65 push_directive(tokens, "le");
66 }
67 Cmp::Gt => {
68 push_directive(tokens, "gt");
69 }
70 Cmp::Ge => {
71 push_directive(tokens, "ge");
72 }
73 }
74 self.d.unparse_tokens(tokens);
75 if let Some(mask_0) = self.mask.as_ref() {
76 match mask_0 {
77 Mask::B10B2 => {
78 push_directive(tokens, "b10.b2");
79 }
80 Mask::B3210 => {
81 push_directive(tokens, "b3210");
82 }
83 Mask::B210 => {
84 push_directive(tokens, "b210");
85 }
86 Mask::B310 => {
87 push_directive(tokens, "b310");
88 }
89 Mask::B320 => {
90 push_directive(tokens, "b320");
91 }
92 Mask::B321 => {
93 push_directive(tokens, "b321");
94 }
95 Mask::B20 => {
96 push_directive(tokens, "b20");
97 }
98 Mask::B21 => {
99 push_directive(tokens, "b21");
100 }
101 Mask::B30 => {
102 push_directive(tokens, "b30");
103 }
104 Mask::B31 => {
105 push_directive(tokens, "b31");
106 }
107 Mask::B32 => {
108 push_directive(tokens, "b32");
109 }
110 Mask::B0 => {
111 push_directive(tokens, "b0");
112 }
113 Mask::B1 => {
114 push_directive(tokens, "b1");
115 }
116 Mask::B3 => {
117 push_directive(tokens, "b3");
118 }
119 }
120 }
121 tokens.push(PtxToken::Comma);
122 self.a.unparse_tokens(tokens);
123 if self.asel {
124 push_directive(tokens, "asel");
125 }
126 tokens.push(PtxToken::Comma);
127 self.b.unparse_tokens(tokens);
128 if let Some(bsel_1) = self.bsel.as_ref() {
129 match bsel_1 {
130 Bsel::B00 => {
131 push_directive(tokens, "b00");
132 }
133 Bsel::B01 => {
134 push_directive(tokens, "b01");
135 }
136 Bsel::B02 => {
137 push_directive(tokens, "b02");
138 }
139 Bsel::B03 => {
140 push_directive(tokens, "b03");
141 }
142 Bsel::B04 => {
143 push_directive(tokens, "b04");
144 }
145 Bsel::B05 => {
146 push_directive(tokens, "b05");
147 }
148 Bsel::B06 => {
149 push_directive(tokens, "b06");
150 }
151 Bsel::B07 => {
152 push_directive(tokens, "b07");
153 }
154 Bsel::B10 => {
155 push_directive(tokens, "b10");
156 }
157 Bsel::B11 => {
158 push_directive(tokens, "b11");
159 }
160 Bsel::B12 => {
161 push_directive(tokens, "b12");
162 }
163 Bsel::B13 => {
164 push_directive(tokens, "b13");
165 }
166 Bsel::B14 => {
167 push_directive(tokens, "b14");
168 }
169 Bsel::B15 => {
170 push_directive(tokens, "b15");
171 }
172 Bsel::B16 => {
173 push_directive(tokens, "b16");
174 }
175 Bsel::B17 => {
176 push_directive(tokens, "b17");
177 }
178 Bsel::B20 => {
179 push_directive(tokens, "b20");
180 }
181 Bsel::B21 => {
182 push_directive(tokens, "b21");
183 }
184 Bsel::B22 => {
185 push_directive(tokens, "b22");
186 }
187 Bsel::B23 => {
188 push_directive(tokens, "b23");
189 }
190 Bsel::B24 => {
191 push_directive(tokens, "b24");
192 }
193 Bsel::B25 => {
194 push_directive(tokens, "b25");
195 }
196 Bsel::B26 => {
197 push_directive(tokens, "b26");
198 }
199 Bsel::B27 => {
200 push_directive(tokens, "b27");
201 }
202 Bsel::B30 => {
203 push_directive(tokens, "b30");
204 }
205 Bsel::B31 => {
206 push_directive(tokens, "b31");
207 }
208 Bsel::B32 => {
209 push_directive(tokens, "b32");
210 }
211 Bsel::B33 => {
212 push_directive(tokens, "b33");
213 }
214 Bsel::B34 => {
215 push_directive(tokens, "b34");
216 }
217 Bsel::B35 => {
218 push_directive(tokens, "b35");
219 }
220 Bsel::B36 => {
221 push_directive(tokens, "b36");
222 }
223 Bsel::B37 => {
224 push_directive(tokens, "b37");
225 }
226 Bsel::B40 => {
227 push_directive(tokens, "b40");
228 }
229 Bsel::B41 => {
230 push_directive(tokens, "b41");
231 }
232 Bsel::B42 => {
233 push_directive(tokens, "b42");
234 }
235 Bsel::B43 => {
236 push_directive(tokens, "b43");
237 }
238 Bsel::B44 => {
239 push_directive(tokens, "b44");
240 }
241 Bsel::B45 => {
242 push_directive(tokens, "b45");
243 }
244 Bsel::B46 => {
245 push_directive(tokens, "b46");
246 }
247 Bsel::B47 => {
248 push_directive(tokens, "b47");
249 }
250 Bsel::B50 => {
251 push_directive(tokens, "b50");
252 }
253 Bsel::B51 => {
254 push_directive(tokens, "b51");
255 }
256 Bsel::B52 => {
257 push_directive(tokens, "b52");
258 }
259 Bsel::B53 => {
260 push_directive(tokens, "b53");
261 }
262 Bsel::B54 => {
263 push_directive(tokens, "b54");
264 }
265 Bsel::B55 => {
266 push_directive(tokens, "b55");
267 }
268 Bsel::B56 => {
269 push_directive(tokens, "b56");
270 }
271 Bsel::B57 => {
272 push_directive(tokens, "b57");
273 }
274 Bsel::B60 => {
275 push_directive(tokens, "b60");
276 }
277 Bsel::B61 => {
278 push_directive(tokens, "b61");
279 }
280 Bsel::B62 => {
281 push_directive(tokens, "b62");
282 }
283 Bsel::B63 => {
284 push_directive(tokens, "b63");
285 }
286 Bsel::B64 => {
287 push_directive(tokens, "b64");
288 }
289 Bsel::B65 => {
290 push_directive(tokens, "b65");
291 }
292 Bsel::B66 => {
293 push_directive(tokens, "b66");
294 }
295 Bsel::B67 => {
296 push_directive(tokens, "b67");
297 }
298 Bsel::B70 => {
299 push_directive(tokens, "b70");
300 }
301 Bsel::B71 => {
302 push_directive(tokens, "b71");
303 }
304 Bsel::B72 => {
305 push_directive(tokens, "b72");
306 }
307 Bsel::B73 => {
308 push_directive(tokens, "b73");
309 }
310 Bsel::B74 => {
311 push_directive(tokens, "b74");
312 }
313 Bsel::B75 => {
314 push_directive(tokens, "b75");
315 }
316 Bsel::B76 => {
317 push_directive(tokens, "b76");
318 }
319 Bsel::B77 => {
320 push_directive(tokens, "b77");
321 }
322 }
323 }
324 tokens.push(PtxToken::Comma);
325 self.c.unparse_tokens(tokens);
326 tokens.push(PtxToken::Semicolon);
327 }
328 }
329
330 impl PtxUnparser for Vset4AtypeBtypeCmpAdd {
331 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
332 push_opcode(tokens, "vset4");
333 match &self.atype {
334 Atype::U32 => {
335 push_directive(tokens, "u32");
336 }
337 Atype::S32 => {
338 push_directive(tokens, "s32");
339 }
340 }
341 match &self.btype {
342 Btype::U32 => {
343 push_directive(tokens, "u32");
344 }
345 Btype::S32 => {
346 push_directive(tokens, "s32");
347 }
348 }
349 match &self.cmp {
350 Cmp::Eq => {
351 push_directive(tokens, "eq");
352 }
353 Cmp::Ne => {
354 push_directive(tokens, "ne");
355 }
356 Cmp::Lt => {
357 push_directive(tokens, "lt");
358 }
359 Cmp::Le => {
360 push_directive(tokens, "le");
361 }
362 Cmp::Gt => {
363 push_directive(tokens, "gt");
364 }
365 Cmp::Ge => {
366 push_directive(tokens, "ge");
367 }
368 }
369 push_directive(tokens, "add");
370 self.d.unparse_tokens(tokens);
371 if let Some(mask_2) = self.mask.as_ref() {
372 match mask_2 {
373 Mask::B10B2 => {
374 push_directive(tokens, "b10.b2");
375 }
376 Mask::B3210 => {
377 push_directive(tokens, "b3210");
378 }
379 Mask::B210 => {
380 push_directive(tokens, "b210");
381 }
382 Mask::B310 => {
383 push_directive(tokens, "b310");
384 }
385 Mask::B320 => {
386 push_directive(tokens, "b320");
387 }
388 Mask::B321 => {
389 push_directive(tokens, "b321");
390 }
391 Mask::B20 => {
392 push_directive(tokens, "b20");
393 }
394 Mask::B21 => {
395 push_directive(tokens, "b21");
396 }
397 Mask::B30 => {
398 push_directive(tokens, "b30");
399 }
400 Mask::B31 => {
401 push_directive(tokens, "b31");
402 }
403 Mask::B32 => {
404 push_directive(tokens, "b32");
405 }
406 Mask::B0 => {
407 push_directive(tokens, "b0");
408 }
409 Mask::B1 => {
410 push_directive(tokens, "b1");
411 }
412 Mask::B3 => {
413 push_directive(tokens, "b3");
414 }
415 }
416 }
417 tokens.push(PtxToken::Comma);
418 self.a.unparse_tokens(tokens);
419 if self.asel {
420 push_directive(tokens, "asel");
421 }
422 tokens.push(PtxToken::Comma);
423 self.b.unparse_tokens(tokens);
424 if let Some(bsel_3) = self.bsel.as_ref() {
425 match bsel_3 {
426 Bsel::B00 => {
427 push_directive(tokens, "b00");
428 }
429 Bsel::B01 => {
430 push_directive(tokens, "b01");
431 }
432 Bsel::B02 => {
433 push_directive(tokens, "b02");
434 }
435 Bsel::B03 => {
436 push_directive(tokens, "b03");
437 }
438 Bsel::B04 => {
439 push_directive(tokens, "b04");
440 }
441 Bsel::B05 => {
442 push_directive(tokens, "b05");
443 }
444 Bsel::B06 => {
445 push_directive(tokens, "b06");
446 }
447 Bsel::B07 => {
448 push_directive(tokens, "b07");
449 }
450 Bsel::B10 => {
451 push_directive(tokens, "b10");
452 }
453 Bsel::B11 => {
454 push_directive(tokens, "b11");
455 }
456 Bsel::B12 => {
457 push_directive(tokens, "b12");
458 }
459 Bsel::B13 => {
460 push_directive(tokens, "b13");
461 }
462 Bsel::B14 => {
463 push_directive(tokens, "b14");
464 }
465 Bsel::B15 => {
466 push_directive(tokens, "b15");
467 }
468 Bsel::B16 => {
469 push_directive(tokens, "b16");
470 }
471 Bsel::B17 => {
472 push_directive(tokens, "b17");
473 }
474 Bsel::B20 => {
475 push_directive(tokens, "b20");
476 }
477 Bsel::B21 => {
478 push_directive(tokens, "b21");
479 }
480 Bsel::B22 => {
481 push_directive(tokens, "b22");
482 }
483 Bsel::B23 => {
484 push_directive(tokens, "b23");
485 }
486 Bsel::B24 => {
487 push_directive(tokens, "b24");
488 }
489 Bsel::B25 => {
490 push_directive(tokens, "b25");
491 }
492 Bsel::B26 => {
493 push_directive(tokens, "b26");
494 }
495 Bsel::B27 => {
496 push_directive(tokens, "b27");
497 }
498 Bsel::B30 => {
499 push_directive(tokens, "b30");
500 }
501 Bsel::B31 => {
502 push_directive(tokens, "b31");
503 }
504 Bsel::B32 => {
505 push_directive(tokens, "b32");
506 }
507 Bsel::B33 => {
508 push_directive(tokens, "b33");
509 }
510 Bsel::B34 => {
511 push_directive(tokens, "b34");
512 }
513 Bsel::B35 => {
514 push_directive(tokens, "b35");
515 }
516 Bsel::B36 => {
517 push_directive(tokens, "b36");
518 }
519 Bsel::B37 => {
520 push_directive(tokens, "b37");
521 }
522 Bsel::B40 => {
523 push_directive(tokens, "b40");
524 }
525 Bsel::B41 => {
526 push_directive(tokens, "b41");
527 }
528 Bsel::B42 => {
529 push_directive(tokens, "b42");
530 }
531 Bsel::B43 => {
532 push_directive(tokens, "b43");
533 }
534 Bsel::B44 => {
535 push_directive(tokens, "b44");
536 }
537 Bsel::B45 => {
538 push_directive(tokens, "b45");
539 }
540 Bsel::B46 => {
541 push_directive(tokens, "b46");
542 }
543 Bsel::B47 => {
544 push_directive(tokens, "b47");
545 }
546 Bsel::B50 => {
547 push_directive(tokens, "b50");
548 }
549 Bsel::B51 => {
550 push_directive(tokens, "b51");
551 }
552 Bsel::B52 => {
553 push_directive(tokens, "b52");
554 }
555 Bsel::B53 => {
556 push_directive(tokens, "b53");
557 }
558 Bsel::B54 => {
559 push_directive(tokens, "b54");
560 }
561 Bsel::B55 => {
562 push_directive(tokens, "b55");
563 }
564 Bsel::B56 => {
565 push_directive(tokens, "b56");
566 }
567 Bsel::B57 => {
568 push_directive(tokens, "b57");
569 }
570 Bsel::B60 => {
571 push_directive(tokens, "b60");
572 }
573 Bsel::B61 => {
574 push_directive(tokens, "b61");
575 }
576 Bsel::B62 => {
577 push_directive(tokens, "b62");
578 }
579 Bsel::B63 => {
580 push_directive(tokens, "b63");
581 }
582 Bsel::B64 => {
583 push_directive(tokens, "b64");
584 }
585 Bsel::B65 => {
586 push_directive(tokens, "b65");
587 }
588 Bsel::B66 => {
589 push_directive(tokens, "b66");
590 }
591 Bsel::B67 => {
592 push_directive(tokens, "b67");
593 }
594 Bsel::B70 => {
595 push_directive(tokens, "b70");
596 }
597 Bsel::B71 => {
598 push_directive(tokens, "b71");
599 }
600 Bsel::B72 => {
601 push_directive(tokens, "b72");
602 }
603 Bsel::B73 => {
604 push_directive(tokens, "b73");
605 }
606 Bsel::B74 => {
607 push_directive(tokens, "b74");
608 }
609 Bsel::B75 => {
610 push_directive(tokens, "b75");
611 }
612 Bsel::B76 => {
613 push_directive(tokens, "b76");
614 }
615 Bsel::B77 => {
616 push_directive(tokens, "b77");
617 }
618 }
619 }
620 tokens.push(PtxToken::Comma);
621 self.c.unparse_tokens(tokens);
622 tokens.push(PtxToken::Semicolon);
623 }
624 }
625}