ptx_parser/unparser/instruction/
fma.rs1#![allow(unused)]
22
23use crate::lexer::PtxToken;
24use crate::unparser::{PtxUnparser, common::*};
25
26pub mod section_0 {
27 use super::*;
28 use crate::r#type::instruction::fma::section_0::*;
29
30 impl PtxUnparser for FmaRndFtzSatF32 {
31 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
32 push_opcode(tokens, "fma");
33 match &self.rnd {
34 Rnd::Rn => {
35 push_directive(tokens, "rn");
36 }
37 Rnd::Rz => {
38 push_directive(tokens, "rz");
39 }
40 Rnd::Rm => {
41 push_directive(tokens, "rm");
42 }
43 Rnd::Rp => {
44 push_directive(tokens, "rp");
45 }
46 }
47 if self.ftz {
48 push_directive(tokens, "ftz");
49 }
50 if self.sat {
51 push_directive(tokens, "sat");
52 }
53 push_directive(tokens, "f32");
54 self.d.unparse_tokens(tokens);
55 tokens.push(PtxToken::Comma);
56 self.a.unparse_tokens(tokens);
57 tokens.push(PtxToken::Comma);
58 self.b.unparse_tokens(tokens);
59 tokens.push(PtxToken::Comma);
60 self.c.unparse_tokens(tokens);
61 tokens.push(PtxToken::Semicolon);
62 }
63 }
64
65 impl PtxUnparser for FmaRndFtzF32x2 {
66 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
67 push_opcode(tokens, "fma");
68 match &self.rnd {
69 Rnd::Rn => {
70 push_directive(tokens, "rn");
71 }
72 Rnd::Rz => {
73 push_directive(tokens, "rz");
74 }
75 Rnd::Rm => {
76 push_directive(tokens, "rm");
77 }
78 Rnd::Rp => {
79 push_directive(tokens, "rp");
80 }
81 }
82 if self.ftz {
83 push_directive(tokens, "ftz");
84 }
85 push_directive(tokens, "f32x2");
86 self.d.unparse_tokens(tokens);
87 tokens.push(PtxToken::Comma);
88 self.a.unparse_tokens(tokens);
89 tokens.push(PtxToken::Comma);
90 self.b.unparse_tokens(tokens);
91 tokens.push(PtxToken::Comma);
92 self.c.unparse_tokens(tokens);
93 tokens.push(PtxToken::Semicolon);
94 }
95 }
96
97 impl PtxUnparser for FmaRndF64 {
98 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
99 push_opcode(tokens, "fma");
100 match &self.rnd {
101 Rnd::Rn => {
102 push_directive(tokens, "rn");
103 }
104 Rnd::Rz => {
105 push_directive(tokens, "rz");
106 }
107 Rnd::Rm => {
108 push_directive(tokens, "rm");
109 }
110 Rnd::Rp => {
111 push_directive(tokens, "rp");
112 }
113 }
114 push_directive(tokens, "f64");
115 self.d.unparse_tokens(tokens);
116 tokens.push(PtxToken::Comma);
117 self.a.unparse_tokens(tokens);
118 tokens.push(PtxToken::Comma);
119 self.b.unparse_tokens(tokens);
120 tokens.push(PtxToken::Comma);
121 self.c.unparse_tokens(tokens);
122 tokens.push(PtxToken::Semicolon);
123 }
124 }
125
126}
127
128pub mod section_1 {
129 use super::*;
130 use crate::r#type::instruction::fma::section_1::*;
131
132 impl PtxUnparser for FmaRndFtzSatF16 {
133 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
134 push_opcode(tokens, "fma");
135 match &self.rnd {
136 Rnd::Rn => {
137 push_directive(tokens, "rn");
138 }
139 }
140 if self.ftz {
141 push_directive(tokens, "ftz");
142 }
143 if self.sat {
144 push_directive(tokens, "sat");
145 }
146 push_directive(tokens, "f16");
147 self.d.unparse_tokens(tokens);
148 tokens.push(PtxToken::Comma);
149 self.a.unparse_tokens(tokens);
150 tokens.push(PtxToken::Comma);
151 self.b.unparse_tokens(tokens);
152 tokens.push(PtxToken::Comma);
153 self.c.unparse_tokens(tokens);
154 tokens.push(PtxToken::Semicolon);
155 }
156 }
157
158 impl PtxUnparser for FmaRndFtzSatF16x2 {
159 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
160 push_opcode(tokens, "fma");
161 match &self.rnd {
162 Rnd::Rn => {
163 push_directive(tokens, "rn");
164 }
165 }
166 if self.ftz {
167 push_directive(tokens, "ftz");
168 }
169 if self.sat {
170 push_directive(tokens, "sat");
171 }
172 push_directive(tokens, "f16x2");
173 self.d.unparse_tokens(tokens);
174 tokens.push(PtxToken::Comma);
175 self.a.unparse_tokens(tokens);
176 tokens.push(PtxToken::Comma);
177 self.b.unparse_tokens(tokens);
178 tokens.push(PtxToken::Comma);
179 self.c.unparse_tokens(tokens);
180 tokens.push(PtxToken::Semicolon);
181 }
182 }
183
184 impl PtxUnparser for FmaRndFtzReluF16 {
185 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
186 push_opcode(tokens, "fma");
187 match &self.rnd {
188 Rnd::Rn => {
189 push_directive(tokens, "rn");
190 }
191 }
192 if self.ftz {
193 push_directive(tokens, "ftz");
194 }
195 push_directive(tokens, "relu");
196 push_directive(tokens, "f16");
197 self.d.unparse_tokens(tokens);
198 tokens.push(PtxToken::Comma);
199 self.a.unparse_tokens(tokens);
200 tokens.push(PtxToken::Comma);
201 self.b.unparse_tokens(tokens);
202 tokens.push(PtxToken::Comma);
203 self.c.unparse_tokens(tokens);
204 tokens.push(PtxToken::Semicolon);
205 }
206 }
207
208 impl PtxUnparser for FmaRndFtzReluF16x2 {
209 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
210 push_opcode(tokens, "fma");
211 match &self.rnd {
212 Rnd::Rn => {
213 push_directive(tokens, "rn");
214 }
215 }
216 if self.ftz {
217 push_directive(tokens, "ftz");
218 }
219 push_directive(tokens, "relu");
220 push_directive(tokens, "f16x2");
221 self.d.unparse_tokens(tokens);
222 tokens.push(PtxToken::Comma);
223 self.a.unparse_tokens(tokens);
224 tokens.push(PtxToken::Comma);
225 self.b.unparse_tokens(tokens);
226 tokens.push(PtxToken::Comma);
227 self.c.unparse_tokens(tokens);
228 tokens.push(PtxToken::Semicolon);
229 }
230 }
231
232 impl PtxUnparser for FmaRndReluBf16 {
233 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
234 push_opcode(tokens, "fma");
235 match &self.rnd {
236 Rnd::Rn => {
237 push_directive(tokens, "rn");
238 }
239 }
240 if self.relu {
241 push_directive(tokens, "relu");
242 }
243 push_directive(tokens, "bf16");
244 self.d.unparse_tokens(tokens);
245 tokens.push(PtxToken::Comma);
246 self.a.unparse_tokens(tokens);
247 tokens.push(PtxToken::Comma);
248 self.b.unparse_tokens(tokens);
249 tokens.push(PtxToken::Comma);
250 self.c.unparse_tokens(tokens);
251 tokens.push(PtxToken::Semicolon);
252 }
253 }
254
255 impl PtxUnparser for FmaRndReluBf16x2 {
256 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
257 push_opcode(tokens, "fma");
258 match &self.rnd {
259 Rnd::Rn => {
260 push_directive(tokens, "rn");
261 }
262 }
263 if self.relu {
264 push_directive(tokens, "relu");
265 }
266 push_directive(tokens, "bf16x2");
267 self.d.unparse_tokens(tokens);
268 tokens.push(PtxToken::Comma);
269 self.a.unparse_tokens(tokens);
270 tokens.push(PtxToken::Comma);
271 self.b.unparse_tokens(tokens);
272 tokens.push(PtxToken::Comma);
273 self.c.unparse_tokens(tokens);
274 tokens.push(PtxToken::Semicolon);
275 }
276 }
277
278 impl PtxUnparser for FmaRndOobReluType {
279 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
280 push_opcode(tokens, "fma");
281 match &self.rnd {
282 Rnd::Rn => {
283 push_directive(tokens, "rn");
284 }
285 }
286 push_directive(tokens, "oob");
287 if self.relu {
288 push_directive(tokens, "relu");
289 }
290 push_directive(tokens, "type");
291 self.d.unparse_tokens(tokens);
292 tokens.push(PtxToken::Comma);
293 self.a.unparse_tokens(tokens);
294 tokens.push(PtxToken::Comma);
295 self.b.unparse_tokens(tokens);
296 tokens.push(PtxToken::Comma);
297 self.c.unparse_tokens(tokens);
298 tokens.push(PtxToken::Semicolon);
299 }
300 }
301
302}
303
304pub mod section_2 {
305 use super::*;
306 use crate::r#type::instruction::fma::section_2::*;
307
308 impl PtxUnparser for FmaRndSatF32Abtype {
309 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
310 push_opcode(tokens, "fma");
311 match &self.rnd {
312 Rnd::Rn => {
313 push_directive(tokens, "rn");
314 }
315 Rnd::Rz => {
316 push_directive(tokens, "rz");
317 }
318 Rnd::Rm => {
319 push_directive(tokens, "rm");
320 }
321 Rnd::Rp => {
322 push_directive(tokens, "rp");
323 }
324 }
325 if self.sat {
326 push_directive(tokens, "sat");
327 }
328 push_directive(tokens, "f32");
329 match &self.abtype {
330 Abtype::Bf16 => {
331 push_directive(tokens, "bf16");
332 }
333 Abtype::F16 => {
334 push_directive(tokens, "f16");
335 }
336 }
337 self.d.unparse_tokens(tokens);
338 tokens.push(PtxToken::Comma);
339 self.a.unparse_tokens(tokens);
340 tokens.push(PtxToken::Comma);
341 self.b.unparse_tokens(tokens);
342 tokens.push(PtxToken::Comma);
343 self.c.unparse_tokens(tokens);
344 tokens.push(PtxToken::Semicolon);
345 }
346 }
347
348}
349