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