1#![allow(unused)]
25
26use crate::parser::{
27 PtxParseError, PtxParser, PtxTokenStream, Span,
28 util::{
29 between, comma_p, directive_p, exclamation_p, lbracket_p, lparen_p, map, minus_p, optional,
30 pipe_p, rbracket_p, rparen_p, semicolon_p, sep_by, string_p, try_map,
31 },
32};
33use crate::r#type::common::*;
34use crate::{alt, ok, seq_n};
35
36pub mod section_0 {
37 use super::*;
38 use crate::r#type::instruction::add::section_0::*;
39
40 impl PtxParser for Type {
45 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
46 alt!(
47 map(string_p(".u16x2"), |_, _span| Type::U16x2),
48 map(string_p(".s16x2"), |_, _span| Type::S16x2),
49 map(string_p(".u16"), |_, _span| Type::U16),
50 map(string_p(".u32"), |_, _span| Type::U32),
51 map(string_p(".u64"), |_, _span| Type::U64),
52 map(string_p(".s16"), |_, _span| Type::S16),
53 map(string_p(".s32"), |_, _span| Type::S32),
54 map(string_p(".s64"), |_, _span| Type::S64)
55 )
56 }
57 }
58
59 impl PtxParser for AddType {
60 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
61 try_map(
62 seq_n!(
63 string_p("add"),
64 Type::parse(),
65 GeneralOperand::parse(),
66 comma_p(),
67 GeneralOperand::parse(),
68 comma_p(),
69 GeneralOperand::parse(),
70 semicolon_p()
71 ),
72 |(_, type_, d, _, a, _, b, _), span| {
73 ok!(AddType {
74 type_ = type_,
75 d = d,
76 a = a,
77 b = b,
78
79 })
80 },
81 )
82 }
83 }
84
85 impl PtxParser for AddSatS32 {
86 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
87 try_map(
88 seq_n!(
89 string_p("add"),
90 map(optional(string_p(".sat")), |value, _| value.is_some()),
91 string_p(".s32"),
92 GeneralOperand::parse(),
93 comma_p(),
94 GeneralOperand::parse(),
95 comma_p(),
96 GeneralOperand::parse(),
97 semicolon_p()
98 ),
99 |(_, sat, s32, d, _, a, _, b, _), span| {
100 ok!(AddSatS32 {
101 sat = sat,
102 s32 = s32,
103 d = d,
104 a = a,
105 b = b,
106
107 })
108 },
109 )
110 }
111 }
112}
113
114pub mod section_1 {
115 use super::*;
116 use crate::r#type::instruction::add::section_1::*;
117
118 impl PtxParser for Rnd {
123 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
124 alt!(
125 map(string_p(".rn"), |_, _span| Rnd::Rn),
126 map(string_p(".rz"), |_, _span| Rnd::Rz),
127 map(string_p(".rm"), |_, _span| Rnd::Rm),
128 map(string_p(".rp"), |_, _span| Rnd::Rp)
129 )
130 }
131 }
132
133 impl PtxParser for AddRndFtzSatF32 {
134 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
135 try_map(
136 seq_n!(
137 string_p("add"),
138 optional(Rnd::parse()),
139 map(optional(string_p(".ftz")), |value, _| value.is_some()),
140 map(optional(string_p(".sat")), |value, _| value.is_some()),
141 string_p(".f32"),
142 GeneralOperand::parse(),
143 comma_p(),
144 GeneralOperand::parse(),
145 comma_p(),
146 GeneralOperand::parse(),
147 semicolon_p()
148 ),
149 |(_, rnd, ftz, sat, f32, d, _, a, _, b, _), span| {
150 ok!(AddRndFtzSatF32 {
151 rnd = rnd,
152 ftz = ftz,
153 sat = sat,
154 f32 = f32,
155 d = d,
156 a = a,
157 b = b,
158
159 })
160 },
161 )
162 }
163 }
164
165 impl PtxParser for AddRndFtzF32x2 {
166 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
167 try_map(
168 seq_n!(
169 string_p("add"),
170 optional(Rnd::parse()),
171 map(optional(string_p(".ftz")), |value, _| value.is_some()),
172 string_p(".f32x2"),
173 GeneralOperand::parse(),
174 comma_p(),
175 GeneralOperand::parse(),
176 comma_p(),
177 GeneralOperand::parse(),
178 semicolon_p()
179 ),
180 |(_, rnd, ftz, f32x2, d, _, a, _, b, _), span| {
181 ok!(AddRndFtzF32x2 {
182 rnd = rnd,
183 ftz = ftz,
184 f32x2 = f32x2,
185 d = d,
186 a = a,
187 b = b,
188
189 })
190 },
191 )
192 }
193 }
194
195 impl PtxParser for AddRndF64 {
196 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
197 try_map(
198 seq_n!(
199 string_p("add"),
200 optional(Rnd::parse()),
201 string_p(".f64"),
202 GeneralOperand::parse(),
203 comma_p(),
204 GeneralOperand::parse(),
205 comma_p(),
206 GeneralOperand::parse(),
207 semicolon_p()
208 ),
209 |(_, rnd, f64, d, _, a, _, b, _), span| {
210 ok!(AddRndF64 {
211 rnd = rnd,
212 f64 = f64,
213 d = d,
214 a = a,
215 b = b,
216
217 })
218 },
219 )
220 }
221 }
222}
223
224pub mod section_2 {
225 use super::*;
226 use crate::r#type::instruction::add::section_2::*;
227
228 impl PtxParser for Rnd {
233 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
234 alt!(map(string_p(".rn"), |_, _span| Rnd::Rn))
235 }
236 }
237
238 impl PtxParser for AddRndFtzSatF16 {
239 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
240 try_map(
241 seq_n!(
242 string_p("add"),
243 optional(Rnd::parse()),
244 map(optional(string_p(".ftz")), |value, _| value.is_some()),
245 map(optional(string_p(".sat")), |value, _| value.is_some()),
246 string_p(".f16"),
247 GeneralOperand::parse(),
248 comma_p(),
249 GeneralOperand::parse(),
250 comma_p(),
251 GeneralOperand::parse(),
252 semicolon_p()
253 ),
254 |(_, rnd, ftz, sat, f16, d, _, a, _, b, _), span| {
255 ok!(AddRndFtzSatF16 {
256 rnd = rnd,
257 ftz = ftz,
258 sat = sat,
259 f16 = f16,
260 d = d,
261 a = a,
262 b = b,
263
264 })
265 },
266 )
267 }
268 }
269
270 impl PtxParser for AddRndFtzSatF16x2 {
271 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
272 try_map(
273 seq_n!(
274 string_p("add"),
275 optional(Rnd::parse()),
276 map(optional(string_p(".ftz")), |value, _| value.is_some()),
277 map(optional(string_p(".sat")), |value, _| value.is_some()),
278 string_p(".f16x2"),
279 GeneralOperand::parse(),
280 comma_p(),
281 GeneralOperand::parse(),
282 comma_p(),
283 GeneralOperand::parse(),
284 semicolon_p()
285 ),
286 |(_, rnd, ftz, sat, f16x2, d, _, a, _, b, _), span| {
287 ok!(AddRndFtzSatF16x2 {
288 rnd = rnd,
289 ftz = ftz,
290 sat = sat,
291 f16x2 = f16x2,
292 d = d,
293 a = a,
294 b = b,
295
296 })
297 },
298 )
299 }
300 }
301
302 impl PtxParser for AddRndBf16 {
303 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
304 try_map(
305 seq_n!(
306 string_p("add"),
307 optional(Rnd::parse()),
308 string_p(".bf16"),
309 GeneralOperand::parse(),
310 comma_p(),
311 GeneralOperand::parse(),
312 comma_p(),
313 GeneralOperand::parse(),
314 semicolon_p()
315 ),
316 |(_, rnd, bf16, d, _, a, _, b, _), span| {
317 ok!(AddRndBf16 {
318 rnd = rnd,
319 bf16 = bf16,
320 d = d,
321 a = a,
322 b = b,
323
324 })
325 },
326 )
327 }
328 }
329
330 impl PtxParser for AddRndBf16x2 {
331 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
332 try_map(
333 seq_n!(
334 string_p("add"),
335 optional(Rnd::parse()),
336 string_p(".bf16x2"),
337 GeneralOperand::parse(),
338 comma_p(),
339 GeneralOperand::parse(),
340 comma_p(),
341 GeneralOperand::parse(),
342 semicolon_p()
343 ),
344 |(_, rnd, bf16x2, d, _, a, _, b, _), span| {
345 ok!(AddRndBf16x2 {
346 rnd = rnd,
347 bf16x2 = bf16x2,
348 d = d,
349 a = a,
350 b = b,
351
352 })
353 },
354 )
355 }
356 }
357}
358
359pub mod section_3 {
360 use super::*;
361 use crate::r#type::instruction::add::section_3::*;
362
363 impl PtxParser for Atype {
368 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
369 alt!(
370 map(string_p(".bf16"), |_, _span| Atype::Bf16),
371 map(string_p(".f16"), |_, _span| Atype::F16)
372 )
373 }
374 }
375
376 impl PtxParser for Rnd {
377 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
378 alt!(
379 map(string_p(".rn"), |_, _span| Rnd::Rn),
380 map(string_p(".rz"), |_, _span| Rnd::Rz),
381 map(string_p(".rm"), |_, _span| Rnd::Rm),
382 map(string_p(".rp"), |_, _span| Rnd::Rp)
383 )
384 }
385 }
386
387 impl PtxParser for AddRndSatF32Atype {
388 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
389 try_map(
390 seq_n!(
391 string_p("add"),
392 optional(Rnd::parse()),
393 map(optional(string_p(".sat")), |value, _| value.is_some()),
394 string_p(".f32"),
395 Atype::parse(),
396 GeneralOperand::parse(),
397 comma_p(),
398 GeneralOperand::parse(),
399 comma_p(),
400 GeneralOperand::parse(),
401 semicolon_p()
402 ),
403 |(_, rnd, sat, f32, atype, d, _, a, _, c, _), span| {
404 ok!(AddRndSatF32Atype {
405 rnd = rnd,
406 sat = sat,
407 f32 = f32,
408 atype = atype,
409 d = d,
410 a = a,
411 c = c,
412
413 })
414 },
415 )
416 }
417 }
418}