ptx_parser/parser/instruction/
cp_async_bulk_prefetch.rs1#![allow(unused)]
8
9use crate::lexer::PtxToken;
10use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
11use crate::r#type::common::*;
12
13pub mod section_0 {
14 use super::*;
15 use crate::r#type::instruction::cp_async_bulk_prefetch::section_0::*;
16
17 impl PtxParser for LevelCacheHint {
22 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
23 {
25 let saved_pos = stream.position();
26 if stream.expect_string(".L2::cache_hint").is_ok() {
27 return Ok(LevelCacheHint::L2CacheHint);
28 }
29 stream.set_position(saved_pos);
30 }
31 let span = stream
32 .peek()
33 .map(|(_, s)| s.clone())
34 .unwrap_or(Span { start: 0, end: 0 });
35 let expected = &[".L2::cache_hint"];
36 let found = stream
37 .peek()
38 .map(|(t, _)| format!("{:?}", t))
39 .unwrap_or_else(|_| "<end of input>".to_string());
40 Err(crate::parser::unexpected_value(span, expected, found))
41 }
42 }
43
44 impl PtxParser for Src {
45 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
46 {
48 let saved_pos = stream.position();
49 if stream.expect_string(".global").is_ok() {
50 return Ok(Src::Global);
51 }
52 stream.set_position(saved_pos);
53 }
54 let span = stream
55 .peek()
56 .map(|(_, s)| s.clone())
57 .unwrap_or(Span { start: 0, end: 0 });
58 let expected = &[".global"];
59 let found = stream
60 .peek()
61 .map(|(t, _)| format!("{:?}", t))
62 .unwrap_or_else(|_| "<end of input>".to_string());
63 Err(crate::parser::unexpected_value(span, expected, found))
64 }
65 }
66
67 impl PtxParser for CpAsyncBulkPrefetchL2SrcLevelCacheHint {
68 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
69 stream.expect_string("cp")?;
70 stream.expect_string(".async")?;
71 let async_ = ();
72 stream.expect_complete()?;
73 stream.expect_string(".bulk")?;
74 let bulk = ();
75 stream.expect_complete()?;
76 stream.expect_string(".prefetch")?;
77 let prefetch = ();
78 stream.expect_complete()?;
79 stream.expect_string(".L2")?;
80 let l2 = ();
81 stream.expect_complete()?;
82 let src = Src::parse(stream)?;
83 stream.expect_complete()?;
84 let saved_pos = stream.position();
85 let level_cache_hint = match LevelCacheHint::parse(stream) {
86 Ok(val) => Some(val),
87 Err(_) => {
88 stream.set_position(saved_pos);
89 None
90 }
91 };
92 stream.expect_complete()?;
93 let srcmem = AddressOperand::parse(stream)?;
94 stream.expect_complete()?;
95 stream.expect(&PtxToken::Comma)?;
96 let size = GeneralOperand::parse(stream)?;
97 stream.expect_complete()?;
98 let saved_pos = stream.position();
99 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
100 if !has_comma {
101 stream.set_position(saved_pos);
102 }
103 let saved_pos = stream.position();
104 let cache_policy = match GeneralOperand::parse(stream) {
105 Ok(val) => Some(val),
106 Err(_) => {
107 stream.set_position(saved_pos);
108 None
109 }
110 };
111 stream.expect_complete()?;
112 stream.expect_complete()?;
113 stream.expect(&PtxToken::Semicolon)?;
114 Ok(CpAsyncBulkPrefetchL2SrcLevelCacheHint {
115 async_,
116 bulk,
117 prefetch,
118 l2,
119 src,
120 level_cache_hint,
121 srcmem,
122 size,
123 cache_policy,
124 })
125 }
126 }
127}