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}