ptx_parser/parser/instruction/
createpolicy.rs1#![allow(unused)]
16
17use crate::lexer::PtxToken;
18use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
19use crate::r#type::common::*;
20
21pub mod section_0 {
22 use super::*;
23 use crate::r#type::instruction::createpolicy::section_0::*;
24
25 impl PtxParser for LevelPrimaryPriority {
30 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
31 {
33 let saved_pos = stream.position();
34 if stream.expect_string(".L2::evict_unchanged").is_ok() {
35 return Ok(LevelPrimaryPriority::L2EvictUnchanged);
36 }
37 stream.set_position(saved_pos);
38 }
39 let saved_pos = stream.position();
40 {
42 let saved_pos = stream.position();
43 if stream.expect_string(".L2::evict_normal").is_ok() {
44 return Ok(LevelPrimaryPriority::L2EvictNormal);
45 }
46 stream.set_position(saved_pos);
47 }
48 stream.set_position(saved_pos);
49 let saved_pos = stream.position();
50 {
52 let saved_pos = stream.position();
53 if stream.expect_string(".L2::evict_first").is_ok() {
54 return Ok(LevelPrimaryPriority::L2EvictFirst);
55 }
56 stream.set_position(saved_pos);
57 }
58 stream.set_position(saved_pos);
59 let saved_pos = stream.position();
60 {
62 let saved_pos = stream.position();
63 if stream.expect_string(".L2::evict_last").is_ok() {
64 return Ok(LevelPrimaryPriority::L2EvictLast);
65 }
66 stream.set_position(saved_pos);
67 }
68 stream.set_position(saved_pos);
69 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
70 let expected = &[".L2::evict_unchanged", ".L2::evict_normal", ".L2::evict_first", ".L2::evict_last"];
71 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
72 Err(crate::parser::unexpected_value(span, expected, found))
73 }
74 }
75
76 impl PtxParser for LevelSecondaryPriority {
77 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
78 {
80 let saved_pos = stream.position();
81 if stream.expect_string(".L2::evict_unchanged").is_ok() {
82 return Ok(LevelSecondaryPriority::L2EvictUnchanged);
83 }
84 stream.set_position(saved_pos);
85 }
86 let saved_pos = stream.position();
87 {
89 let saved_pos = stream.position();
90 if stream.expect_string(".L2::evict_first").is_ok() {
91 return Ok(LevelSecondaryPriority::L2EvictFirst);
92 }
93 stream.set_position(saved_pos);
94 }
95 stream.set_position(saved_pos);
96 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
97 let expected = &[".L2::evict_unchanged", ".L2::evict_first"];
98 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
99 Err(crate::parser::unexpected_value(span, expected, found))
100 }
101 }
102
103 impl PtxParser for CreatepolicyRangeGlobalLevelPrimaryPriorityLevelSecondaryPriorityB64 {
104 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
105 stream.expect_string("createpolicy")?;
106 stream.expect_string(".range")?;
107 let range = ();
108 stream.expect_complete()?;
109 let saved_pos = stream.position();
110 let global = stream.expect_string(".global").is_ok();
111 if !global {
112 stream.set_position(saved_pos);
113 }
114 stream.expect_complete()?;
115 let level_primary_priority = LevelPrimaryPriority::parse(stream)?;
116 stream.expect_complete()?;
117 let saved_pos = stream.position();
118 let level_secondary_priority = match LevelSecondaryPriority::parse(stream) {
119 Ok(val) => Some(val),
120 Err(_) => {
121 stream.set_position(saved_pos);
122 None
123 }
124 };
125 stream.expect_complete()?;
126 stream.expect_string(".b64")?;
127 let b64 = ();
128 stream.expect_complete()?;
129 let cache_policy = GeneralOperand::parse(stream)?;
130 stream.expect_complete()?;
131 stream.expect(&PtxToken::Comma)?;
132 let a = AddressOperand::parse(stream)?;
133 stream.expect_complete()?;
134 stream.expect(&PtxToken::Comma)?;
135 let primary_size = GeneralOperand::parse(stream)?;
136 stream.expect_complete()?;
137 stream.expect(&PtxToken::Comma)?;
138 let total_size = GeneralOperand::parse(stream)?;
139 stream.expect_complete()?;
140 stream.expect_complete()?;
141 stream.expect(&PtxToken::Semicolon)?;
142 Ok(CreatepolicyRangeGlobalLevelPrimaryPriorityLevelSecondaryPriorityB64 {
143 range,
144 global,
145 level_primary_priority,
146 level_secondary_priority,
147 b64,
148 cache_policy,
149 a,
150 primary_size,
151 total_size,
152 })
153 }
154 }
155
156
157 impl PtxParser for CreatepolicyFractionalLevelPrimaryPriorityLevelSecondaryPriorityB64 {
158 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
159 stream.expect_string("createpolicy")?;
160 stream.expect_string(".fractional")?;
161 let fractional = ();
162 stream.expect_complete()?;
163 let level_primary_priority = LevelPrimaryPriority::parse(stream)?;
164 stream.expect_complete()?;
165 let saved_pos = stream.position();
166 let level_secondary_priority = match LevelSecondaryPriority::parse(stream) {
167 Ok(val) => Some(val),
168 Err(_) => {
169 stream.set_position(saved_pos);
170 None
171 }
172 };
173 stream.expect_complete()?;
174 stream.expect_string(".b64")?;
175 let b64 = ();
176 stream.expect_complete()?;
177 let cache_policy = GeneralOperand::parse(stream)?;
178 stream.expect_complete()?;
179 let saved_pos = stream.position();
180 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
181 if !has_comma {
182 stream.set_position(saved_pos);
183 }
184 let saved_pos = stream.position();
185 let fraction = match GeneralOperand::parse(stream) {
186 Ok(val) => Some(val),
187 Err(_) => {
188 stream.set_position(saved_pos);
189 None
190 }
191 };
192 stream.expect_complete()?;
193 stream.expect_complete()?;
194 stream.expect(&PtxToken::Semicolon)?;
195 Ok(CreatepolicyFractionalLevelPrimaryPriorityLevelSecondaryPriorityB64 {
196 fractional,
197 level_primary_priority,
198 level_secondary_priority,
199 b64,
200 cache_policy,
201 fraction,
202 })
203 }
204 }
205
206
207 impl PtxParser for CreatepolicyCvtL2B64 {
208 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
209 stream.expect_string("createpolicy")?;
210 stream.expect_string(".cvt")?;
211 let cvt = ();
212 stream.expect_complete()?;
213 stream.expect_string(".L2")?;
214 let l2 = ();
215 stream.expect_complete()?;
216 stream.expect_string(".b64")?;
217 let b64 = ();
218 stream.expect_complete()?;
219 let cache_policy = GeneralOperand::parse(stream)?;
220 stream.expect_complete()?;
221 stream.expect(&PtxToken::Comma)?;
222 let access_property = GeneralOperand::parse(stream)?;
223 stream.expect_complete()?;
224 stream.expect_complete()?;
225 stream.expect(&PtxToken::Semicolon)?;
226 Ok(CreatepolicyCvtL2B64 {
227 cvt,
228 l2,
229 b64,
230 cache_policy,
231 access_property,
232 })
233 }
234 }
235
236
237}
238