1#![allow(unused)]
26
27use crate::lexer::PtxToken;
28use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
29use crate::r#type::common::*;
30
31pub mod section_0 {
32 use super::*;
33 use crate::r#type::instruction::cp_reduce_async_bulk::section_0::*;
34
35 impl PtxParser for CompletionMechanism {
40 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
41 {
43 let saved_pos = stream.position();
44 if stream.expect_string(".mbarrier::complete_tx::bytes").is_ok() {
45 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
46 }
47 stream.set_position(saved_pos);
48 }
49 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
50 let expected = &[".mbarrier::complete_tx::bytes"];
51 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
52 Err(crate::parser::unexpected_value(span, expected, found))
53 }
54 }
55
56 impl PtxParser for Dst {
57 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
58 {
60 let saved_pos = stream.position();
61 if stream.expect_string(".shared::cluster").is_ok() {
62 return Ok(Dst::SharedCluster);
63 }
64 stream.set_position(saved_pos);
65 }
66 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
67 let expected = &[".shared::cluster"];
68 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
69 Err(crate::parser::unexpected_value(span, expected, found))
70 }
71 }
72
73 impl PtxParser for Redop {
74 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
75 {
77 let saved_pos = stream.position();
78 if stream.expect_string(".and").is_ok() {
79 return Ok(Redop::And);
80 }
81 stream.set_position(saved_pos);
82 }
83 let saved_pos = stream.position();
84 {
86 let saved_pos = stream.position();
87 if stream.expect_string(".xor").is_ok() {
88 return Ok(Redop::Xor);
89 }
90 stream.set_position(saved_pos);
91 }
92 stream.set_position(saved_pos);
93 let saved_pos = stream.position();
94 {
96 let saved_pos = stream.position();
97 if stream.expect_string(".add").is_ok() {
98 return Ok(Redop::Add);
99 }
100 stream.set_position(saved_pos);
101 }
102 stream.set_position(saved_pos);
103 let saved_pos = stream.position();
104 {
106 let saved_pos = stream.position();
107 if stream.expect_string(".inc").is_ok() {
108 return Ok(Redop::Inc);
109 }
110 stream.set_position(saved_pos);
111 }
112 stream.set_position(saved_pos);
113 let saved_pos = stream.position();
114 {
116 let saved_pos = stream.position();
117 if stream.expect_string(".dec").is_ok() {
118 return Ok(Redop::Dec);
119 }
120 stream.set_position(saved_pos);
121 }
122 stream.set_position(saved_pos);
123 let saved_pos = stream.position();
124 {
126 let saved_pos = stream.position();
127 if stream.expect_string(".min").is_ok() {
128 return Ok(Redop::Min);
129 }
130 stream.set_position(saved_pos);
131 }
132 stream.set_position(saved_pos);
133 let saved_pos = stream.position();
134 {
136 let saved_pos = stream.position();
137 if stream.expect_string(".max").is_ok() {
138 return Ok(Redop::Max);
139 }
140 stream.set_position(saved_pos);
141 }
142 stream.set_position(saved_pos);
143 let saved_pos = stream.position();
144 {
146 let saved_pos = stream.position();
147 if stream.expect_string(".or").is_ok() {
148 return Ok(Redop::Or);
149 }
150 stream.set_position(saved_pos);
151 }
152 stream.set_position(saved_pos);
153 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
154 let expected = &[".and", ".xor", ".add", ".inc", ".dec", ".min", ".max", ".or"];
155 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
156 Err(crate::parser::unexpected_value(span, expected, found))
157 }
158 }
159
160 impl PtxParser for Src {
161 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
162 {
164 let saved_pos = stream.position();
165 if stream.expect_string(".shared::cta").is_ok() {
166 return Ok(Src::SharedCta);
167 }
168 stream.set_position(saved_pos);
169 }
170 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
171 let expected = &[".shared::cta"];
172 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
173 Err(crate::parser::unexpected_value(span, expected, found))
174 }
175 }
176
177 impl PtxParser for Type {
178 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
179 {
181 let saved_pos = stream.position();
182 if stream.expect_string(".b32").is_ok() {
183 return Ok(Type::B32);
184 }
185 stream.set_position(saved_pos);
186 }
187 let saved_pos = stream.position();
188 {
190 let saved_pos = stream.position();
191 if stream.expect_string(".u32").is_ok() {
192 return Ok(Type::U32);
193 }
194 stream.set_position(saved_pos);
195 }
196 stream.set_position(saved_pos);
197 let saved_pos = stream.position();
198 {
200 let saved_pos = stream.position();
201 if stream.expect_string(".s32").is_ok() {
202 return Ok(Type::S32);
203 }
204 stream.set_position(saved_pos);
205 }
206 stream.set_position(saved_pos);
207 let saved_pos = stream.position();
208 {
210 let saved_pos = stream.position();
211 if stream.expect_string(".b64").is_ok() {
212 return Ok(Type::B64);
213 }
214 stream.set_position(saved_pos);
215 }
216 stream.set_position(saved_pos);
217 let saved_pos = stream.position();
218 {
220 let saved_pos = stream.position();
221 if stream.expect_string(".u64").is_ok() {
222 return Ok(Type::U64);
223 }
224 stream.set_position(saved_pos);
225 }
226 stream.set_position(saved_pos);
227 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
228 let expected = &[".b32", ".u32", ".s32", ".b64", ".u64"];
229 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
230 Err(crate::parser::unexpected_value(span, expected, found))
231 }
232 }
233
234 impl PtxParser for CpReduceAsyncBulkDstSrcCompletionMechanismRedopType {
235 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
236 stream.expect_string("cp")?;
237 stream.expect_string(".reduce")?;
238 let reduce = ();
239 stream.expect_complete()?;
240 stream.expect_string(".async")?;
241 let async_ = ();
242 stream.expect_complete()?;
243 stream.expect_string(".bulk")?;
244 let bulk = ();
245 stream.expect_complete()?;
246 let dst = Dst::parse(stream)?;
247 stream.expect_complete()?;
248 let src = Src::parse(stream)?;
249 stream.expect_complete()?;
250 let completion_mechanism = CompletionMechanism::parse(stream)?;
251 stream.expect_complete()?;
252 let redop = Redop::parse(stream)?;
253 stream.expect_complete()?;
254 let type_ = Type::parse(stream)?;
255 stream.expect_complete()?;
256 let dstmem = AddressOperand::parse(stream)?;
257 stream.expect_complete()?;
258 stream.expect(&PtxToken::Comma)?;
259 let srcmem = AddressOperand::parse(stream)?;
260 stream.expect_complete()?;
261 stream.expect(&PtxToken::Comma)?;
262 let size = GeneralOperand::parse(stream)?;
263 stream.expect_complete()?;
264 stream.expect(&PtxToken::Comma)?;
265 let mbar = AddressOperand::parse(stream)?;
266 stream.expect_complete()?;
267 stream.expect_complete()?;
268 stream.expect(&PtxToken::Semicolon)?;
269 Ok(CpReduceAsyncBulkDstSrcCompletionMechanismRedopType {
270 reduce,
271 async_,
272 bulk,
273 dst,
274 src,
275 completion_mechanism,
276 redop,
277 type_,
278 dstmem,
279 srcmem,
280 size,
281 mbar,
282 })
283 }
284 }
285
286
287}
288
289pub mod section_1 {
290 use super::*;
291 use crate::r#type::instruction::cp_reduce_async_bulk::section_1::*;
292
293 impl PtxParser for CompletionMechanism {
298 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
299 {
301 let saved_pos = stream.position();
302 if stream.expect_string(".mbarrier::complete_tx::bytes").is_ok() {
303 return Ok(CompletionMechanism::MbarrierCompleteTxBytes);
304 }
305 stream.set_position(saved_pos);
306 }
307 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
308 let expected = &[".mbarrier::complete_tx::bytes"];
309 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
310 Err(crate::parser::unexpected_value(span, expected, found))
311 }
312 }
313
314 impl PtxParser for Dst {
315 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
316 {
318 let saved_pos = stream.position();
319 if stream.expect_string(".global").is_ok() {
320 return Ok(Dst::Global);
321 }
322 stream.set_position(saved_pos);
323 }
324 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
325 let expected = &[".global"];
326 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
327 Err(crate::parser::unexpected_value(span, expected, found))
328 }
329 }
330
331 impl PtxParser for Redop {
332 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
333 {
335 let saved_pos = stream.position();
336 if stream.expect_string(".and").is_ok() {
337 return Ok(Redop::And);
338 }
339 stream.set_position(saved_pos);
340 }
341 let saved_pos = stream.position();
342 {
344 let saved_pos = stream.position();
345 if stream.expect_string(".xor").is_ok() {
346 return Ok(Redop::Xor);
347 }
348 stream.set_position(saved_pos);
349 }
350 stream.set_position(saved_pos);
351 let saved_pos = stream.position();
352 {
354 let saved_pos = stream.position();
355 if stream.expect_string(".add").is_ok() {
356 return Ok(Redop::Add);
357 }
358 stream.set_position(saved_pos);
359 }
360 stream.set_position(saved_pos);
361 let saved_pos = stream.position();
362 {
364 let saved_pos = stream.position();
365 if stream.expect_string(".inc").is_ok() {
366 return Ok(Redop::Inc);
367 }
368 stream.set_position(saved_pos);
369 }
370 stream.set_position(saved_pos);
371 let saved_pos = stream.position();
372 {
374 let saved_pos = stream.position();
375 if stream.expect_string(".dec").is_ok() {
376 return Ok(Redop::Dec);
377 }
378 stream.set_position(saved_pos);
379 }
380 stream.set_position(saved_pos);
381 let saved_pos = stream.position();
382 {
384 let saved_pos = stream.position();
385 if stream.expect_string(".min").is_ok() {
386 return Ok(Redop::Min);
387 }
388 stream.set_position(saved_pos);
389 }
390 stream.set_position(saved_pos);
391 let saved_pos = stream.position();
392 {
394 let saved_pos = stream.position();
395 if stream.expect_string(".max").is_ok() {
396 return Ok(Redop::Max);
397 }
398 stream.set_position(saved_pos);
399 }
400 stream.set_position(saved_pos);
401 let saved_pos = stream.position();
402 {
404 let saved_pos = stream.position();
405 if stream.expect_string(".or").is_ok() {
406 return Ok(Redop::Or);
407 }
408 stream.set_position(saved_pos);
409 }
410 stream.set_position(saved_pos);
411 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
412 let expected = &[".and", ".xor", ".add", ".inc", ".dec", ".min", ".max", ".or"];
413 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
414 Err(crate::parser::unexpected_value(span, expected, found))
415 }
416 }
417
418 impl PtxParser for Src {
419 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
420 {
422 let saved_pos = stream.position();
423 if stream.expect_string(".shared::cta").is_ok() {
424 return Ok(Src::SharedCta);
425 }
426 stream.set_position(saved_pos);
427 }
428 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
429 let expected = &[".shared::cta"];
430 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
431 Err(crate::parser::unexpected_value(span, expected, found))
432 }
433 }
434
435 impl PtxParser for Type {
436 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
437 {
439 let saved_pos = stream.position();
440 if stream.expect_string(".b32").is_ok() {
441 return Ok(Type::B32);
442 }
443 stream.set_position(saved_pos);
444 }
445 let saved_pos = stream.position();
446 {
448 let saved_pos = stream.position();
449 if stream.expect_string(".u32").is_ok() {
450 return Ok(Type::U32);
451 }
452 stream.set_position(saved_pos);
453 }
454 stream.set_position(saved_pos);
455 let saved_pos = stream.position();
456 {
458 let saved_pos = stream.position();
459 if stream.expect_string(".s32").is_ok() {
460 return Ok(Type::S32);
461 }
462 stream.set_position(saved_pos);
463 }
464 stream.set_position(saved_pos);
465 let saved_pos = stream.position();
466 {
468 let saved_pos = stream.position();
469 if stream.expect_string(".b64").is_ok() {
470 return Ok(Type::B64);
471 }
472 stream.set_position(saved_pos);
473 }
474 stream.set_position(saved_pos);
475 let saved_pos = stream.position();
476 {
478 let saved_pos = stream.position();
479 if stream.expect_string(".u64").is_ok() {
480 return Ok(Type::U64);
481 }
482 stream.set_position(saved_pos);
483 }
484 stream.set_position(saved_pos);
485 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
486 let expected = &[".b32", ".u32", ".s32", ".b64", ".u64"];
487 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
488 Err(crate::parser::unexpected_value(span, expected, found))
489 }
490 }
491
492 impl PtxParser for CpReduceAsyncBulkDstSrcCompletionMechanismLevelCacheHintRedopType {
493 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
494 stream.expect_string("cp")?;
495 stream.expect_string(".reduce")?;
496 let reduce = ();
497 stream.expect_complete()?;
498 stream.expect_string(".async")?;
499 let async_ = ();
500 stream.expect_complete()?;
501 stream.expect_string(".bulk")?;
502 let bulk = ();
503 stream.expect_complete()?;
504 let dst = Dst::parse(stream)?;
505 stream.expect_complete()?;
506 let src = Src::parse(stream)?;
507 stream.expect_complete()?;
508 let completion_mechanism = CompletionMechanism::parse(stream)?;
509 stream.expect_complete()?;
510 let saved_pos = stream.position();
511 let level_cache_hint = stream.expect_string(".level::cache_hint").is_ok();
512 if !level_cache_hint {
513 stream.set_position(saved_pos);
514 }
515 stream.expect_complete()?;
516 let redop = Redop::parse(stream)?;
517 stream.expect_complete()?;
518 let type_ = Type::parse(stream)?;
519 stream.expect_complete()?;
520 let dstmem = AddressOperand::parse(stream)?;
521 stream.expect_complete()?;
522 stream.expect(&PtxToken::Comma)?;
523 let srcmem = AddressOperand::parse(stream)?;
524 stream.expect_complete()?;
525 stream.expect(&PtxToken::Comma)?;
526 let size = GeneralOperand::parse(stream)?;
527 stream.expect_complete()?;
528 let saved_pos = stream.position();
529 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
530 if !has_comma {
531 stream.set_position(saved_pos);
532 }
533 let saved_pos = stream.position();
534 let cache_policy = match GeneralOperand::parse(stream) {
535 Ok(val) => Some(val),
536 Err(_) => {
537 stream.set_position(saved_pos);
538 None
539 }
540 };
541 stream.expect_complete()?;
542 stream.expect_complete()?;
543 stream.expect(&PtxToken::Semicolon)?;
544 Ok(CpReduceAsyncBulkDstSrcCompletionMechanismLevelCacheHintRedopType {
545 reduce,
546 async_,
547 bulk,
548 dst,
549 src,
550 completion_mechanism,
551 level_cache_hint,
552 redop,
553 type_,
554 dstmem,
555 srcmem,
556 size,
557 cache_policy,
558 })
559 }
560 }
561
562
563}
564
565pub mod section_2 {
566 use super::*;
567 use crate::r#type::instruction::cp_reduce_async_bulk::section_2::*;
568
569 impl PtxParser for CompletionMechanism {
574 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
575 {
577 let saved_pos = stream.position();
578 if stream.expect_string(".bulk_group").is_ok() {
579 return Ok(CompletionMechanism::BulkGroup);
580 }
581 stream.set_position(saved_pos);
582 }
583 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
584 let expected = &[".bulk_group"];
585 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
586 Err(crate::parser::unexpected_value(span, expected, found))
587 }
588 }
589
590 impl PtxParser for Dst {
591 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
592 {
594 let saved_pos = stream.position();
595 if stream.expect_string(".global").is_ok() {
596 return Ok(Dst::Global);
597 }
598 stream.set_position(saved_pos);
599 }
600 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
601 let expected = &[".global"];
602 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
603 Err(crate::parser::unexpected_value(span, expected, found))
604 }
605 }
606
607 impl PtxParser for LevelCacheHint {
608 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
609 {
611 let saved_pos = stream.position();
612 if stream.expect_string(".L2::cache_hint").is_ok() {
613 return Ok(LevelCacheHint::L2CacheHint);
614 }
615 stream.set_position(saved_pos);
616 }
617 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
618 let expected = &[".L2::cache_hint"];
619 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
620 Err(crate::parser::unexpected_value(span, expected, found))
621 }
622 }
623
624 impl PtxParser for Src {
625 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
626 {
628 let saved_pos = stream.position();
629 if stream.expect_string(".shared::cta").is_ok() {
630 return Ok(Src::SharedCta);
631 }
632 stream.set_position(saved_pos);
633 }
634 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
635 let expected = &[".shared::cta"];
636 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
637 Err(crate::parser::unexpected_value(span, expected, found))
638 }
639 }
640
641 impl PtxParser for Type {
642 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
643 {
645 let saved_pos = stream.position();
646 if stream.expect_string(".bf16").is_ok() {
647 return Ok(Type::Bf16);
648 }
649 stream.set_position(saved_pos);
650 }
651 let saved_pos = stream.position();
652 {
654 let saved_pos = stream.position();
655 if stream.expect_string(".f16").is_ok() {
656 return Ok(Type::F16);
657 }
658 stream.set_position(saved_pos);
659 }
660 stream.set_position(saved_pos);
661 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
662 let expected = &[".bf16", ".f16"];
663 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
664 Err(crate::parser::unexpected_value(span, expected, found))
665 }
666 }
667
668 impl PtxParser for CpReduceAsyncBulkDstSrcCompletionMechanismLevelCacheHintAddNoftzType {
669 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
670 stream.expect_string("cp")?;
671 stream.expect_string(".reduce")?;
672 let reduce = ();
673 stream.expect_complete()?;
674 stream.expect_string(".async")?;
675 let async_ = ();
676 stream.expect_complete()?;
677 stream.expect_string(".bulk")?;
678 let bulk = ();
679 stream.expect_complete()?;
680 let dst = Dst::parse(stream)?;
681 stream.expect_complete()?;
682 let src = Src::parse(stream)?;
683 stream.expect_complete()?;
684 let completion_mechanism = CompletionMechanism::parse(stream)?;
685 stream.expect_complete()?;
686 let saved_pos = stream.position();
687 let level_cache_hint = match LevelCacheHint::parse(stream) {
688 Ok(val) => Some(val),
689 Err(_) => {
690 stream.set_position(saved_pos);
691 None
692 }
693 };
694 stream.expect_complete()?;
695 stream.expect_string(".add")?;
696 let add = ();
697 stream.expect_complete()?;
698 stream.expect_string(".noftz")?;
699 let noftz = ();
700 stream.expect_complete()?;
701 let type_ = Type::parse(stream)?;
702 stream.expect_complete()?;
703 let dstmem = AddressOperand::parse(stream)?;
704 stream.expect_complete()?;
705 stream.expect(&PtxToken::Comma)?;
706 let srcmem = AddressOperand::parse(stream)?;
707 stream.expect_complete()?;
708 stream.expect(&PtxToken::Comma)?;
709 let size = GeneralOperand::parse(stream)?;
710 stream.expect_complete()?;
711 let saved_pos = stream.position();
712 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
713 if !has_comma {
714 stream.set_position(saved_pos);
715 }
716 let saved_pos = stream.position();
717 let cache_policy = match GeneralOperand::parse(stream) {
718 Ok(val) => Some(val),
719 Err(_) => {
720 stream.set_position(saved_pos);
721 None
722 }
723 };
724 stream.expect_complete()?;
725 stream.expect_complete()?;
726 stream.expect(&PtxToken::Semicolon)?;
727 Ok(CpReduceAsyncBulkDstSrcCompletionMechanismLevelCacheHintAddNoftzType {
728 reduce,
729 async_,
730 bulk,
731 dst,
732 src,
733 completion_mechanism,
734 level_cache_hint,
735 add,
736 noftz,
737 type_,
738 dstmem,
739 srcmem,
740 size,
741 cache_policy,
742 })
743 }
744 }
745
746
747}
748