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