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
127pub mod section_1 {
128 use super::*;
129 use crate::r#type::instruction::fma::section_1::*;
130
131 impl PtxUnparser for FmaRndFtzSatF16 {
132 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
133 push_opcode(tokens, "fma");
134 match &self.rnd {
135 Rnd::Rn => {
136 push_directive(tokens, "rn");
137 }
138 }
139 if self.ftz {
140 push_directive(tokens, "ftz");
141 }
142 if self.sat {
143 push_directive(tokens, "sat");
144 }
145 push_directive(tokens, "f16");
146 self.d.unparse_tokens(tokens);
147 tokens.push(PtxToken::Comma);
148 self.a.unparse_tokens(tokens);
149 tokens.push(PtxToken::Comma);
150 self.b.unparse_tokens(tokens);
151 tokens.push(PtxToken::Comma);
152 self.c.unparse_tokens(tokens);
153 tokens.push(PtxToken::Semicolon);
154 }
155 }
156
157 impl PtxUnparser for FmaRndFtzSatF16x2 {
158 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
159 push_opcode(tokens, "fma");
160 match &self.rnd {
161 Rnd::Rn => {
162 push_directive(tokens, "rn");
163 }
164 }
165 if self.ftz {
166 push_directive(tokens, "ftz");
167 }
168 if self.sat {
169 push_directive(tokens, "sat");
170 }
171 push_directive(tokens, "f16x2");
172 self.d.unparse_tokens(tokens);
173 tokens.push(PtxToken::Comma);
174 self.a.unparse_tokens(tokens);
175 tokens.push(PtxToken::Comma);
176 self.b.unparse_tokens(tokens);
177 tokens.push(PtxToken::Comma);
178 self.c.unparse_tokens(tokens);
179 tokens.push(PtxToken::Semicolon);
180 }
181 }
182
183 impl PtxUnparser for FmaRndFtzReluF16 {
184 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
185 push_opcode(tokens, "fma");
186 match &self.rnd {
187 Rnd::Rn => {
188 push_directive(tokens, "rn");
189 }
190 }
191 if self.ftz {
192 push_directive(tokens, "ftz");
193 }
194 push_directive(tokens, "relu");
195 push_directive(tokens, "f16");
196 self.d.unparse_tokens(tokens);
197 tokens.push(PtxToken::Comma);
198 self.a.unparse_tokens(tokens);
199 tokens.push(PtxToken::Comma);
200 self.b.unparse_tokens(tokens);
201 tokens.push(PtxToken::Comma);
202 self.c.unparse_tokens(tokens);
203 tokens.push(PtxToken::Semicolon);
204 }
205 }
206
207 impl PtxUnparser for FmaRndFtzReluF16x2 {
208 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
209 push_opcode(tokens, "fma");
210 match &self.rnd {
211 Rnd::Rn => {
212 push_directive(tokens, "rn");
213 }
214 }
215 if self.ftz {
216 push_directive(tokens, "ftz");
217 }
218 push_directive(tokens, "relu");
219 push_directive(tokens, "f16x2");
220 self.d.unparse_tokens(tokens);
221 tokens.push(PtxToken::Comma);
222 self.a.unparse_tokens(tokens);
223 tokens.push(PtxToken::Comma);
224 self.b.unparse_tokens(tokens);
225 tokens.push(PtxToken::Comma);
226 self.c.unparse_tokens(tokens);
227 tokens.push(PtxToken::Semicolon);
228 }
229 }
230
231 impl PtxUnparser for FmaRndReluBf16 {
232 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
233 push_opcode(tokens, "fma");
234 match &self.rnd {
235 Rnd::Rn => {
236 push_directive(tokens, "rn");
237 }
238 }
239 if self.relu {
240 push_directive(tokens, "relu");
241 }
242 push_directive(tokens, "bf16");
243 self.d.unparse_tokens(tokens);
244 tokens.push(PtxToken::Comma);
245 self.a.unparse_tokens(tokens);
246 tokens.push(PtxToken::Comma);
247 self.b.unparse_tokens(tokens);
248 tokens.push(PtxToken::Comma);
249 self.c.unparse_tokens(tokens);
250 tokens.push(PtxToken::Semicolon);
251 }
252 }
253
254 impl PtxUnparser for FmaRndReluBf16x2 {
255 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
256 push_opcode(tokens, "fma");
257 match &self.rnd {
258 Rnd::Rn => {
259 push_directive(tokens, "rn");
260 }
261 }
262 if self.relu {
263 push_directive(tokens, "relu");
264 }
265 push_directive(tokens, "bf16x2");
266 self.d.unparse_tokens(tokens);
267 tokens.push(PtxToken::Comma);
268 self.a.unparse_tokens(tokens);
269 tokens.push(PtxToken::Comma);
270 self.b.unparse_tokens(tokens);
271 tokens.push(PtxToken::Comma);
272 self.c.unparse_tokens(tokens);
273 tokens.push(PtxToken::Semicolon);
274 }
275 }
276
277 impl PtxUnparser for FmaRndOobReluType {
278 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
279 push_opcode(tokens, "fma");
280 match &self.rnd {
281 Rnd::Rn => {
282 push_directive(tokens, "rn");
283 }
284 }
285 push_directive(tokens, "oob");
286 if self.relu {
287 push_directive(tokens, "relu");
288 }
289 push_directive(tokens, "type");
290 self.d.unparse_tokens(tokens);
291 tokens.push(PtxToken::Comma);
292 self.a.unparse_tokens(tokens);
293 tokens.push(PtxToken::Comma);
294 self.b.unparse_tokens(tokens);
295 tokens.push(PtxToken::Comma);
296 self.c.unparse_tokens(tokens);
297 tokens.push(PtxToken::Semicolon);
298 }
299 }
300}
301
302pub mod section_2 {
303 use super::*;
304 use crate::r#type::instruction::fma::section_2::*;
305
306 impl PtxUnparser for FmaRndSatF32Abtype {
307 fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
308 push_opcode(tokens, "fma");
309 match &self.rnd {
310 Rnd::Rn => {
311 push_directive(tokens, "rn");
312 }
313 Rnd::Rz => {
314 push_directive(tokens, "rz");
315 }
316 Rnd::Rm => {
317 push_directive(tokens, "rm");
318 }
319 Rnd::Rp => {
320 push_directive(tokens, "rp");
321 }
322 }
323 if self.sat {
324 push_directive(tokens, "sat");
325 }
326 push_directive(tokens, "f32");
327 match &self.abtype {
328 Abtype::Bf16 => {
329 push_directive(tokens, "bf16");
330 }
331 Abtype::F16 => {
332 push_directive(tokens, "f16");
333 }
334 }
335 self.d.unparse_tokens(tokens);
336 tokens.push(PtxToken::Comma);
337 self.a.unparse_tokens(tokens);
338 tokens.push(PtxToken::Comma);
339 self.b.unparse_tokens(tokens);
340 tokens.push(PtxToken::Comma);
341 self.c.unparse_tokens(tokens);
342 tokens.push(PtxToken::Semicolon);
343 }
344 }
345}