ptx_parser/unparser/instruction/
vset2.rs

1//! Original PTX specification:
2//!
3//! // SIMD instruction with secondary SIMD merge operation
4//! vset2.atype.btype.cmp  d{.mask}, a{.asel}, b{.bsel}, c;
5//! // SIMD instruction with secondary accumulate operation
6//! vset2.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  = { .h0, .h1, .h10 };  // defaults to .h10
10//! .asel  = .bsel  = { .h00, .h01, .h02, .h03, .h10, .h11, .h12, .h13, .h20, .h21, .h22, .h23, .h30, .h31, .h32, .h33 }; // { .hxy, where x,y are from { 0, 1, 2, 3 } };
11//! // .asel defaults to .h10
12//! // .bsel defaults to .h32
13
14#![allow(unused)]
15
16use crate::lexer::PtxToken;
17use crate::unparser::{PtxUnparser, common::*};
18
19pub mod section_0 {
20    use super::*;
21    use crate::r#type::instruction::vset2::section_0::*;
22
23    impl PtxUnparser for Vset2AtypeBtypeCmp {
24        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
25            push_opcode(tokens, "vset2");
26                    match &self.atype {
27                            Atype::U32 => {
28                                    push_directive(tokens, "u32");
29                            }
30                            Atype::S32 => {
31                                    push_directive(tokens, "s32");
32                            }
33                    }
34                    match &self.btype {
35                            Btype::U32 => {
36                                    push_directive(tokens, "u32");
37                            }
38                            Btype::S32 => {
39                                    push_directive(tokens, "s32");
40                            }
41                    }
42                    match &self.cmp {
43                            Cmp::Eq => {
44                                    push_directive(tokens, "eq");
45                            }
46                            Cmp::Ne => {
47                                    push_directive(tokens, "ne");
48                            }
49                            Cmp::Lt => {
50                                    push_directive(tokens, "lt");
51                            }
52                            Cmp::Le => {
53                                    push_directive(tokens, "le");
54                            }
55                            Cmp::Gt => {
56                                    push_directive(tokens, "gt");
57                            }
58                            Cmp::Ge => {
59                                    push_directive(tokens, "ge");
60                            }
61                    }
62                    self.d.unparse_tokens(tokens);
63                    if let Some(mask_0) = self.mask.as_ref() {
64                            match mask_0 {
65                                    Mask::H10 => {
66                                            push_directive(tokens, "h10");
67                                    }
68                                    Mask::H0 => {
69                                            push_directive(tokens, "h0");
70                                    }
71                                    Mask::H1 => {
72                                            push_directive(tokens, "h1");
73                                    }
74                            }
75                    }
76            tokens.push(PtxToken::Comma);
77                    self.a.unparse_tokens(tokens);
78                    if let Some(asel_1) = self.asel.as_ref() {
79                            match asel_1 {
80                                    Asel::H00 => {
81                                            push_directive(tokens, "h00");
82                                    }
83                                    Asel::H01 => {
84                                            push_directive(tokens, "h01");
85                                    }
86                                    Asel::H02 => {
87                                            push_directive(tokens, "h02");
88                                    }
89                                    Asel::H03 => {
90                                            push_directive(tokens, "h03");
91                                    }
92                                    Asel::H10 => {
93                                            push_directive(tokens, "h10");
94                                    }
95                                    Asel::H11 => {
96                                            push_directive(tokens, "h11");
97                                    }
98                                    Asel::H12 => {
99                                            push_directive(tokens, "h12");
100                                    }
101                                    Asel::H13 => {
102                                            push_directive(tokens, "h13");
103                                    }
104                                    Asel::H20 => {
105                                            push_directive(tokens, "h20");
106                                    }
107                                    Asel::H21 => {
108                                            push_directive(tokens, "h21");
109                                    }
110                                    Asel::H22 => {
111                                            push_directive(tokens, "h22");
112                                    }
113                                    Asel::H23 => {
114                                            push_directive(tokens, "h23");
115                                    }
116                                    Asel::H30 => {
117                                            push_directive(tokens, "h30");
118                                    }
119                                    Asel::H31 => {
120                                            push_directive(tokens, "h31");
121                                    }
122                                    Asel::H32 => {
123                                            push_directive(tokens, "h32");
124                                    }
125                                    Asel::H33 => {
126                                            push_directive(tokens, "h33");
127                                    }
128                            }
129                    }
130            tokens.push(PtxToken::Comma);
131                    self.b.unparse_tokens(tokens);
132                    if let Some(bsel_2) = self.bsel.as_ref() {
133                            match bsel_2 {
134                                    Bsel::H00 => {
135                                            push_directive(tokens, "h00");
136                                    }
137                                    Bsel::H01 => {
138                                            push_directive(tokens, "h01");
139                                    }
140                                    Bsel::H02 => {
141                                            push_directive(tokens, "h02");
142                                    }
143                                    Bsel::H03 => {
144                                            push_directive(tokens, "h03");
145                                    }
146                                    Bsel::H10 => {
147                                            push_directive(tokens, "h10");
148                                    }
149                                    Bsel::H11 => {
150                                            push_directive(tokens, "h11");
151                                    }
152                                    Bsel::H12 => {
153                                            push_directive(tokens, "h12");
154                                    }
155                                    Bsel::H13 => {
156                                            push_directive(tokens, "h13");
157                                    }
158                                    Bsel::H20 => {
159                                            push_directive(tokens, "h20");
160                                    }
161                                    Bsel::H21 => {
162                                            push_directive(tokens, "h21");
163                                    }
164                                    Bsel::H22 => {
165                                            push_directive(tokens, "h22");
166                                    }
167                                    Bsel::H23 => {
168                                            push_directive(tokens, "h23");
169                                    }
170                                    Bsel::H30 => {
171                                            push_directive(tokens, "h30");
172                                    }
173                                    Bsel::H31 => {
174                                            push_directive(tokens, "h31");
175                                    }
176                                    Bsel::H32 => {
177                                            push_directive(tokens, "h32");
178                                    }
179                                    Bsel::H33 => {
180                                            push_directive(tokens, "h33");
181                                    }
182                            }
183                    }
184            tokens.push(PtxToken::Comma);
185                    self.c.unparse_tokens(tokens);
186            tokens.push(PtxToken::Semicolon);
187        }
188    }
189
190    impl PtxUnparser for Vset2AtypeBtypeCmpAdd {
191        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
192            push_opcode(tokens, "vset2");
193                    match &self.atype {
194                            Atype::U32 => {
195                                    push_directive(tokens, "u32");
196                            }
197                            Atype::S32 => {
198                                    push_directive(tokens, "s32");
199                            }
200                    }
201                    match &self.btype {
202                            Btype::U32 => {
203                                    push_directive(tokens, "u32");
204                            }
205                            Btype::S32 => {
206                                    push_directive(tokens, "s32");
207                            }
208                    }
209                    match &self.cmp {
210                            Cmp::Eq => {
211                                    push_directive(tokens, "eq");
212                            }
213                            Cmp::Ne => {
214                                    push_directive(tokens, "ne");
215                            }
216                            Cmp::Lt => {
217                                    push_directive(tokens, "lt");
218                            }
219                            Cmp::Le => {
220                                    push_directive(tokens, "le");
221                            }
222                            Cmp::Gt => {
223                                    push_directive(tokens, "gt");
224                            }
225                            Cmp::Ge => {
226                                    push_directive(tokens, "ge");
227                            }
228                    }
229                    push_directive(tokens, "add");
230                    self.d.unparse_tokens(tokens);
231                    if let Some(mask_3) = self.mask.as_ref() {
232                            match mask_3 {
233                                    Mask::H10 => {
234                                            push_directive(tokens, "h10");
235                                    }
236                                    Mask::H0 => {
237                                            push_directive(tokens, "h0");
238                                    }
239                                    Mask::H1 => {
240                                            push_directive(tokens, "h1");
241                                    }
242                            }
243                    }
244            tokens.push(PtxToken::Comma);
245                    self.a.unparse_tokens(tokens);
246                    if let Some(asel_4) = self.asel.as_ref() {
247                            match asel_4 {
248                                    Asel::H00 => {
249                                            push_directive(tokens, "h00");
250                                    }
251                                    Asel::H01 => {
252                                            push_directive(tokens, "h01");
253                                    }
254                                    Asel::H02 => {
255                                            push_directive(tokens, "h02");
256                                    }
257                                    Asel::H03 => {
258                                            push_directive(tokens, "h03");
259                                    }
260                                    Asel::H10 => {
261                                            push_directive(tokens, "h10");
262                                    }
263                                    Asel::H11 => {
264                                            push_directive(tokens, "h11");
265                                    }
266                                    Asel::H12 => {
267                                            push_directive(tokens, "h12");
268                                    }
269                                    Asel::H13 => {
270                                            push_directive(tokens, "h13");
271                                    }
272                                    Asel::H20 => {
273                                            push_directive(tokens, "h20");
274                                    }
275                                    Asel::H21 => {
276                                            push_directive(tokens, "h21");
277                                    }
278                                    Asel::H22 => {
279                                            push_directive(tokens, "h22");
280                                    }
281                                    Asel::H23 => {
282                                            push_directive(tokens, "h23");
283                                    }
284                                    Asel::H30 => {
285                                            push_directive(tokens, "h30");
286                                    }
287                                    Asel::H31 => {
288                                            push_directive(tokens, "h31");
289                                    }
290                                    Asel::H32 => {
291                                            push_directive(tokens, "h32");
292                                    }
293                                    Asel::H33 => {
294                                            push_directive(tokens, "h33");
295                                    }
296                            }
297                    }
298            tokens.push(PtxToken::Comma);
299                    self.b.unparse_tokens(tokens);
300                    if let Some(bsel_5) = self.bsel.as_ref() {
301                            match bsel_5 {
302                                    Bsel::H00 => {
303                                            push_directive(tokens, "h00");
304                                    }
305                                    Bsel::H01 => {
306                                            push_directive(tokens, "h01");
307                                    }
308                                    Bsel::H02 => {
309                                            push_directive(tokens, "h02");
310                                    }
311                                    Bsel::H03 => {
312                                            push_directive(tokens, "h03");
313                                    }
314                                    Bsel::H10 => {
315                                            push_directive(tokens, "h10");
316                                    }
317                                    Bsel::H11 => {
318                                            push_directive(tokens, "h11");
319                                    }
320                                    Bsel::H12 => {
321                                            push_directive(tokens, "h12");
322                                    }
323                                    Bsel::H13 => {
324                                            push_directive(tokens, "h13");
325                                    }
326                                    Bsel::H20 => {
327                                            push_directive(tokens, "h20");
328                                    }
329                                    Bsel::H21 => {
330                                            push_directive(tokens, "h21");
331                                    }
332                                    Bsel::H22 => {
333                                            push_directive(tokens, "h22");
334                                    }
335                                    Bsel::H23 => {
336                                            push_directive(tokens, "h23");
337                                    }
338                                    Bsel::H30 => {
339                                            push_directive(tokens, "h30");
340                                    }
341                                    Bsel::H31 => {
342                                            push_directive(tokens, "h31");
343                                    }
344                                    Bsel::H32 => {
345                                            push_directive(tokens, "h32");
346                                    }
347                                    Bsel::H33 => {
348                                            push_directive(tokens, "h33");
349                                    }
350                            }
351                    }
352            tokens.push(PtxToken::Comma);
353                    self.c.unparse_tokens(tokens);
354            tokens.push(PtxToken::Semicolon);
355        }
356    }
357
358}
359