1#![allow(unused)]
34
35use crate::parser::{
36 PtxParseError, PtxParser, PtxTokenStream, Span,
37 util::{
38 between, comma_p, directive_p, exclamation_p, lbracket_p, lparen_p, map, minus_p, optional,
39 pipe_p, rbracket_p, rparen_p, semicolon_p, sep_by, string_p, try_map,
40 },
41};
42use crate::r#type::common::*;
43use crate::{alt, ok, seq_n};
44
45pub mod section_0 {
46 use super::*;
47 use crate::r#type::instruction::cp_async_bulk_tensor::section_0::*;
48
49 impl PtxParser for CompletionMechanism {
54 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
55 alt!(map(
56 string_p(".mbarrier::complete_tx::bytes"),
57 |_, _span| CompletionMechanism::MbarrierCompleteTxBytes
58 ))
59 }
60 }
61
62 impl PtxParser for CtaGroup {
63 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
64 alt!(
65 map(string_p(".cta_group::1"), |_, _span| CtaGroup::CtaGroup1),
66 map(string_p(".cta_group::2"), |_, _span| CtaGroup::CtaGroup2)
67 )
68 }
69 }
70
71 impl PtxParser for Dim {
72 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
73 alt!(
74 map(string_p(".1d"), |_, _span| Dim::_1d),
75 map(string_p(".2d"), |_, _span| Dim::_2d),
76 map(string_p(".3d"), |_, _span| Dim::_3d),
77 map(string_p(".4d"), |_, _span| Dim::_4d),
78 map(string_p(".5d"), |_, _span| Dim::_5d)
79 )
80 }
81 }
82
83 impl PtxParser for Dst {
84 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
85 alt!(map(string_p(".shared::cta"), |_, _span| Dst::SharedCta))
86 }
87 }
88
89 impl PtxParser for LevelCacheHint {
90 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
91 alt!(map(string_p(".L2::cache_hint"), |_, _span| {
92 LevelCacheHint::L2CacheHint
93 }))
94 }
95 }
96
97 impl PtxParser for LoadMode {
98 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
99 alt!(
100 map(string_p(".im2col::w::128"), |_, _span| LoadMode::Im2colW128),
101 map(string_p(".tile::gather4"), |_, _span| LoadMode::TileGather4),
102 map(string_p(".im2col::w"), |_, _span| LoadMode::Im2colW),
103 map(string_p(".im2col"), |_, _span| LoadMode::Im2col),
104 map(string_p(".tile"), |_, _span| LoadMode::Tile)
105 )
106 }
107 }
108
109 impl PtxParser for Src {
110 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
111 alt!(map(string_p(".global"), |_, _span| Src::Global))
112 }
113 }
114
115 impl PtxParser for CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismCtaGroupLevelCacheHint {
116 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
117 try_map(
118 seq_n!(
119 string_p("cp"),
120 string_p(".async"),
121 string_p(".bulk"),
122 string_p(".tensor"),
123 Dim::parse(),
124 Dst::parse(),
125 Src::parse(),
126 optional(LoadMode::parse()),
127 CompletionMechanism::parse(),
128 optional(CtaGroup::parse()),
129 optional(LevelCacheHint::parse()),
130 AddressOperand::parse(),
131 comma_p(),
132 TexHandler2::parse(),
133 comma_p(),
134 AddressOperand::parse(),
135 map(
136 optional(seq_n!(comma_p(), GeneralOperand::parse())),
137 |value, _| value.map(|(_, operand)| operand)
138 ),
139 map(
140 optional(seq_n!(comma_p(), GeneralOperand::parse())),
141 |value, _| value.map(|(_, operand)| operand)
142 ),
143 semicolon_p()
144 ),
145 |(
146 _,
147 async_,
148 bulk,
149 tensor,
150 dim,
151 dst,
152 src,
153 load_mode,
154 completion_mechanism,
155 cta_group,
156 level_cache_hint,
157 dstmem,
158 _,
159 tensormap,
160 _,
161 mbar,
162 im2colinfo,
163 cache_policy,
164 _,
165 ),
166 span| {
167 ok!(CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismCtaGroupLevelCacheHint {
168 async_ = async_,
169 bulk = bulk,
170 tensor = tensor,
171 dim = dim,
172 dst = dst,
173 src = src,
174 load_mode = load_mode,
175 completion_mechanism = completion_mechanism,
176 cta_group = cta_group,
177 level_cache_hint = level_cache_hint,
178 dstmem = dstmem,
179 tensormap = tensormap,
180 mbar = mbar,
181 im2colinfo = im2colinfo,
182 cache_policy = cache_policy,
183
184 })
185 },
186 )
187 }
188 }
189}
190
191pub mod section_1 {
192 use super::*;
193 use crate::r#type::instruction::cp_async_bulk_tensor::section_1::*;
194
195 impl PtxParser for CompletionMechanism {
200 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
201 alt!(map(
202 string_p(".mbarrier::complete_tx::bytes"),
203 |_, _span| CompletionMechanism::MbarrierCompleteTxBytes
204 ))
205 }
206 }
207
208 impl PtxParser for CtaGroup {
209 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
210 alt!(
211 map(string_p(".cta_group::1"), |_, _span| CtaGroup::CtaGroup1),
212 map(string_p(".cta_group::2"), |_, _span| CtaGroup::CtaGroup2)
213 )
214 }
215 }
216
217 impl PtxParser for Dim {
218 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
219 alt!(
220 map(string_p(".1d"), |_, _span| Dim::_1d),
221 map(string_p(".2d"), |_, _span| Dim::_2d),
222 map(string_p(".3d"), |_, _span| Dim::_3d),
223 map(string_p(".4d"), |_, _span| Dim::_4d),
224 map(string_p(".5d"), |_, _span| Dim::_5d)
225 )
226 }
227 }
228
229 impl PtxParser for Dst {
230 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
231 alt!(map(string_p(".shared::cluster"), |_, _span| {
232 Dst::SharedCluster
233 }))
234 }
235 }
236
237 impl PtxParser for LevelCacheHint {
238 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
239 alt!(map(string_p(".L2::cache_hint"), |_, _span| {
240 LevelCacheHint::L2CacheHint
241 }))
242 }
243 }
244
245 impl PtxParser for LoadMode {
246 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
247 alt!(
248 map(string_p(".im2col::w::128"), |_, _span| LoadMode::Im2colW128),
249 map(string_p(".tile::gather4"), |_, _span| LoadMode::TileGather4),
250 map(string_p(".im2col::w"), |_, _span| LoadMode::Im2colW),
251 map(string_p(".im2col"), |_, _span| LoadMode::Im2col),
252 map(string_p(".tile"), |_, _span| LoadMode::Tile)
253 )
254 }
255 }
256
257 impl PtxParser for Multicast {
258 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
259 alt!(map(string_p(".multicast::cluster"), |_, _span| {
260 Multicast::MulticastCluster
261 }))
262 }
263 }
264
265 impl PtxParser for Src {
266 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
267 alt!(map(string_p(".global"), |_, _span| Src::Global))
268 }
269 }
270
271 impl PtxParser
272 for CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismMulticastCtaGroupLevelCacheHint
273 {
274 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
275 try_map(
276 seq_n!(
277 string_p("cp"),
278 string_p(".async"),
279 string_p(".bulk"),
280 string_p(".tensor"),
281 Dim::parse(),
282 Dst::parse(),
283 Src::parse(),
284 optional(LoadMode::parse()),
285 CompletionMechanism::parse(),
286 optional(Multicast::parse()),
287 optional(CtaGroup::parse()),
288 optional(LevelCacheHint::parse()),
289 AddressOperand::parse(),
290 comma_p(),
291 TexHandler2::parse(),
292 comma_p(),
293 AddressOperand::parse(),
294 map(
295 optional(seq_n!(comma_p(), GeneralOperand::parse())),
296 |value, _| value.map(|(_, operand)| operand)
297 ),
298 map(
299 optional(seq_n!(comma_p(), GeneralOperand::parse())),
300 |value, _| value.map(|(_, operand)| operand)
301 ),
302 map(
303 optional(seq_n!(comma_p(), GeneralOperand::parse())),
304 |value, _| value.map(|(_, operand)| operand)
305 ),
306 semicolon_p()
307 ),
308 |(
309 _,
310 async_,
311 bulk,
312 tensor,
313 dim,
314 dst,
315 src,
316 load_mode,
317 completion_mechanism,
318 multicast,
319 cta_group,
320 level_cache_hint,
321 dstmem,
322 _,
323 tensormap,
324 _,
325 mbar,
326 im2colinfo,
327 ctamask,
328 cache_policy,
329 _,
330 ),
331 span| {
332 ok!(CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismMulticastCtaGroupLevelCacheHint {
333 async_ = async_,
334 bulk = bulk,
335 tensor = tensor,
336 dim = dim,
337 dst = dst,
338 src = src,
339 load_mode = load_mode,
340 completion_mechanism = completion_mechanism,
341 multicast = multicast,
342 cta_group = cta_group,
343 level_cache_hint = level_cache_hint,
344 dstmem = dstmem,
345 tensormap = tensormap,
346 mbar = mbar,
347 im2colinfo = im2colinfo,
348 ctamask = ctamask,
349 cache_policy = cache_policy,
350
351 })
352 },
353 )
354 }
355 }
356}
357
358pub mod section_2 {
359 use super::*;
360 use crate::r#type::instruction::cp_async_bulk_tensor::section_2::*;
361
362 impl PtxParser for CompletionMechanism {
367 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
368 alt!(map(string_p(".bulk_group"), |_, _span| {
369 CompletionMechanism::BulkGroup
370 }))
371 }
372 }
373
374 impl PtxParser for Dim {
375 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
376 alt!(
377 map(string_p(".1d"), |_, _span| Dim::_1d),
378 map(string_p(".2d"), |_, _span| Dim::_2d),
379 map(string_p(".3d"), |_, _span| Dim::_3d),
380 map(string_p(".4d"), |_, _span| Dim::_4d),
381 map(string_p(".5d"), |_, _span| Dim::_5d)
382 )
383 }
384 }
385
386 impl PtxParser for Dst {
387 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
388 alt!(map(string_p(".global"), |_, _span| Dst::Global))
389 }
390 }
391
392 impl PtxParser for LevelCacheHint {
393 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
394 alt!(map(string_p(".L2::cache_hint"), |_, _span| {
395 LevelCacheHint::L2CacheHint
396 }))
397 }
398 }
399
400 impl PtxParser for LoadMode {
401 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
402 alt!(
403 map(string_p(".tile::scatter4"), |_, _span| {
404 LoadMode::TileScatter4
405 }),
406 map(string_p(".im2col_no_offs"), |_, _span| {
407 LoadMode::Im2colNoOffs
408 }),
409 map(string_p(".tile"), |_, _span| LoadMode::Tile)
410 )
411 }
412 }
413
414 impl PtxParser for Src {
415 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
416 alt!(map(string_p(".shared::cta"), |_, _span| Src::SharedCta))
417 }
418 }
419
420 impl PtxParser for CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismLevelCacheHint {
421 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
422 try_map(
423 seq_n!(
424 string_p("cp"),
425 string_p(".async"),
426 string_p(".bulk"),
427 string_p(".tensor"),
428 Dim::parse(),
429 Dst::parse(),
430 Src::parse(),
431 optional(LoadMode::parse()),
432 CompletionMechanism::parse(),
433 optional(LevelCacheHint::parse()),
434 TexHandler2::parse(),
435 comma_p(),
436 AddressOperand::parse(),
437 map(
438 optional(seq_n!(comma_p(), GeneralOperand::parse())),
439 |value, _| value.map(|(_, operand)| operand)
440 ),
441 semicolon_p()
442 ),
443 |(
444 _,
445 async_,
446 bulk,
447 tensor,
448 dim,
449 dst,
450 src,
451 load_mode,
452 completion_mechanism,
453 level_cache_hint,
454 tensormap,
455 _,
456 srcmem,
457 cache_policy,
458 _,
459 ),
460 span| {
461 ok!(CpAsyncBulkTensorDimDstSrcLoadModeCompletionMechanismLevelCacheHint {
462 async_ = async_,
463 bulk = bulk,
464 tensor = tensor,
465 dim = dim,
466 dst = dst,
467 src = src,
468 load_mode = load_mode,
469 completion_mechanism = completion_mechanism,
470 level_cache_hint = level_cache_hint,
471 tensormap = tensormap,
472 srcmem = srcmem,
473 cache_policy = cache_policy,
474
475 })
476 },
477 )
478 }
479 }
480}