ptx_parser/parser/instruction/
cp_async.rs1#![allow(unused)]
13
14use crate::lexer::PtxToken;
15use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
16use crate::r#type::common::*;
17
18pub mod section_0 {
19 use super::*;
20 use crate::r#type::instruction::cp_async::section_0::*;
21
22 impl PtxParser for CpSize {
27 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
28 {
30 let saved_pos = stream.position();
31 if stream.expect_string("16").is_ok() {
32 return Ok(CpSize::_16);
33 }
34 stream.set_position(saved_pos);
35 }
36 let saved_pos = stream.position();
37 {
39 let saved_pos = stream.position();
40 if stream.expect_string("4").is_ok() {
41 return Ok(CpSize::_4);
42 }
43 stream.set_position(saved_pos);
44 }
45 stream.set_position(saved_pos);
46 let saved_pos = stream.position();
47 {
49 let saved_pos = stream.position();
50 if stream.expect_string("8").is_ok() {
51 return Ok(CpSize::_8);
52 }
53 stream.set_position(saved_pos);
54 }
55 stream.set_position(saved_pos);
56 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
57 let expected = &["16", "4", "8"];
58 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
59 Err(crate::parser::unexpected_value(span, expected, found))
60 }
61 }
62
63 impl PtxParser for LevelCacheHint {
64 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
65 {
67 let saved_pos = stream.position();
68 if stream.expect_string(".L2::cache_hint").is_ok() {
69 return Ok(LevelCacheHint::L2CacheHint);
70 }
71 stream.set_position(saved_pos);
72 }
73 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
74 let expected = &[".L2::cache_hint"];
75 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
76 Err(crate::parser::unexpected_value(span, expected, found))
77 }
78 }
79
80 impl PtxParser for LevelPrefetchSize {
81 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
82 {
84 let saved_pos = stream.position();
85 if stream.expect_string(".L2::128B").is_ok() {
86 return Ok(LevelPrefetchSize::L2128b);
87 }
88 stream.set_position(saved_pos);
89 }
90 let saved_pos = stream.position();
91 {
93 let saved_pos = stream.position();
94 if stream.expect_string(".L2::256B").is_ok() {
95 return Ok(LevelPrefetchSize::L2256b);
96 }
97 stream.set_position(saved_pos);
98 }
99 stream.set_position(saved_pos);
100 let saved_pos = stream.position();
101 {
103 let saved_pos = stream.position();
104 if stream.expect_string(".L2::64B").is_ok() {
105 return Ok(LevelPrefetchSize::L264b);
106 }
107 stream.set_position(saved_pos);
108 }
109 stream.set_position(saved_pos);
110 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
111 let expected = &[".L2::128B", ".L2::256B", ".L2::64B"];
112 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
113 Err(crate::parser::unexpected_value(span, expected, found))
114 }
115 }
116
117 impl PtxParser for State {
118 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
119 {
121 let saved_pos = stream.position();
122 if stream.expect_string(".shared::cta").is_ok() {
123 return Ok(State::SharedCta);
124 }
125 stream.set_position(saved_pos);
126 }
127 let saved_pos = stream.position();
128 {
130 let saved_pos = stream.position();
131 if stream.expect_string(".shared").is_ok() {
132 return Ok(State::Shared);
133 }
134 stream.set_position(saved_pos);
135 }
136 stream.set_position(saved_pos);
137 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
138 let expected = &[".shared::cta", ".shared"];
139 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
140 Err(crate::parser::unexpected_value(span, expected, found))
141 }
142 }
143
144 impl PtxParser for CpAsyncCaStateGlobalLevelCacheHintLevelPrefetchSize {
145 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
146 stream.expect_string("cp")?;
147 stream.expect_string(".async")?;
148 let async_ = ();
149 stream.expect_complete()?;
150 stream.expect_string(".ca")?;
151 let ca = ();
152 stream.expect_complete()?;
153 let state = State::parse(stream)?;
154 stream.expect_complete()?;
155 stream.expect_string(".global")?;
156 let global = ();
157 stream.expect_complete()?;
158 let saved_pos = stream.position();
159 let level_cache_hint = match LevelCacheHint::parse(stream) {
160 Ok(val) => Some(val),
161 Err(_) => {
162 stream.set_position(saved_pos);
163 None
164 }
165 };
166 stream.expect_complete()?;
167 let saved_pos = stream.position();
168 let level_prefetch_size = match LevelPrefetchSize::parse(stream) {
169 Ok(val) => Some(val),
170 Err(_) => {
171 stream.set_position(saved_pos);
172 None
173 }
174 };
175 stream.expect_complete()?;
176 let dst = AddressOperand::parse(stream)?;
177 stream.expect_complete()?;
178 stream.expect(&PtxToken::Comma)?;
179 let src = AddressOperand::parse(stream)?;
180 stream.expect_complete()?;
181 stream.expect(&PtxToken::Comma)?;
182 let cp_size = CpSize::parse(stream)?;
183 stream.expect_complete()?;
184 let saved_pos = stream.position();
185 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
186 if !has_comma {
187 stream.set_position(saved_pos);
188 }
189 let saved_pos = stream.position();
190 let src_size = match GeneralOperand::parse(stream) {
191 Ok(val) => Some(val),
192 Err(_) => {
193 stream.set_position(saved_pos);
194 None
195 }
196 };
197 stream.expect_complete()?;
198 let saved_pos = stream.position();
199 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
200 if !has_comma {
201 stream.set_position(saved_pos);
202 }
203 let saved_pos = stream.position();
204 let cache_policy = match GeneralOperand::parse(stream) {
205 Ok(val) => Some(val),
206 Err(_) => {
207 stream.set_position(saved_pos);
208 None
209 }
210 };
211 stream.expect_complete()?;
212 stream.expect_complete()?;
213 stream.expect(&PtxToken::Semicolon)?;
214 Ok(CpAsyncCaStateGlobalLevelCacheHintLevelPrefetchSize {
215 async_,
216 ca,
217 state,
218 global,
219 level_cache_hint,
220 level_prefetch_size,
221 dst,
222 src,
223 cp_size,
224 src_size,
225 cache_policy,
226 })
227 }
228 }
229
230
231 impl PtxParser for CpAsyncCgStateGlobalLevelCacheHintLevelPrefetchSize {
232 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
233 stream.expect_string("cp")?;
234 stream.expect_string(".async")?;
235 let async_ = ();
236 stream.expect_complete()?;
237 stream.expect_string(".cg")?;
238 let cg = ();
239 stream.expect_complete()?;
240 let state = State::parse(stream)?;
241 stream.expect_complete()?;
242 stream.expect_string(".global")?;
243 let global = ();
244 stream.expect_complete()?;
245 let saved_pos = stream.position();
246 let level_cache_hint = match LevelCacheHint::parse(stream) {
247 Ok(val) => Some(val),
248 Err(_) => {
249 stream.set_position(saved_pos);
250 None
251 }
252 };
253 stream.expect_complete()?;
254 let saved_pos = stream.position();
255 let level_prefetch_size = match LevelPrefetchSize::parse(stream) {
256 Ok(val) => Some(val),
257 Err(_) => {
258 stream.set_position(saved_pos);
259 None
260 }
261 };
262 stream.expect_complete()?;
263 let dst = AddressOperand::parse(stream)?;
264 stream.expect_complete()?;
265 stream.expect(&PtxToken::Comma)?;
266 let src = AddressOperand::parse(stream)?;
267 stream.expect_complete()?;
268 stream.expect(&PtxToken::Comma)?;
269 stream.expect_string("16")?;
270 let imm_16 = ();
271 stream.expect_complete()?;
272 let saved_pos = stream.position();
273 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
274 if !has_comma {
275 stream.set_position(saved_pos);
276 }
277 let saved_pos = stream.position();
278 let src_size = match GeneralOperand::parse(stream) {
279 Ok(val) => Some(val),
280 Err(_) => {
281 stream.set_position(saved_pos);
282 None
283 }
284 };
285 stream.expect_complete()?;
286 let saved_pos = stream.position();
287 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
288 if !has_comma {
289 stream.set_position(saved_pos);
290 }
291 let saved_pos = stream.position();
292 let cache_policy = match GeneralOperand::parse(stream) {
293 Ok(val) => Some(val),
294 Err(_) => {
295 stream.set_position(saved_pos);
296 None
297 }
298 };
299 stream.expect_complete()?;
300 stream.expect_complete()?;
301 stream.expect(&PtxToken::Semicolon)?;
302 Ok(CpAsyncCgStateGlobalLevelCacheHintLevelPrefetchSize {
303 async_,
304 cg,
305 state,
306 global,
307 level_cache_hint,
308 level_prefetch_size,
309 dst,
310 src,
311 imm_16,
312 src_size,
313 cache_policy,
314 })
315 }
316 }
317
318
319 impl PtxParser for CpAsyncCaStateGlobalLevelCacheHintLevelPrefetchSize1 {
320 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
321 stream.expect_string("cp")?;
322 stream.expect_string(".async")?;
323 let async_ = ();
324 stream.expect_complete()?;
325 stream.expect_string(".ca")?;
326 let ca = ();
327 stream.expect_complete()?;
328 let state = State::parse(stream)?;
329 stream.expect_complete()?;
330 stream.expect_string(".global")?;
331 let global = ();
332 stream.expect_complete()?;
333 let saved_pos = stream.position();
334 let level_cache_hint = match LevelCacheHint::parse(stream) {
335 Ok(val) => Some(val),
336 Err(_) => {
337 stream.set_position(saved_pos);
338 None
339 }
340 };
341 stream.expect_complete()?;
342 let saved_pos = stream.position();
343 let level_prefetch_size = match LevelPrefetchSize::parse(stream) {
344 Ok(val) => Some(val),
345 Err(_) => {
346 stream.set_position(saved_pos);
347 None
348 }
349 };
350 stream.expect_complete()?;
351 let dst = AddressOperand::parse(stream)?;
352 stream.expect_complete()?;
353 stream.expect(&PtxToken::Comma)?;
354 let src = AddressOperand::parse(stream)?;
355 stream.expect_complete()?;
356 stream.expect(&PtxToken::Comma)?;
357 let cp_size = CpSize::parse(stream)?;
358 stream.expect_complete()?;
359 let saved_pos = stream.position();
360 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
361 if !has_comma {
362 stream.set_position(saved_pos);
363 }
364 let saved_pos = stream.position();
365 let ignore_src = match GeneralOperand::parse(stream) {
366 Ok(val) => Some(val),
367 Err(_) => {
368 stream.set_position(saved_pos);
369 None
370 }
371 };
372 stream.expect_complete()?;
373 let saved_pos = stream.position();
374 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
375 if !has_comma {
376 stream.set_position(saved_pos);
377 }
378 let saved_pos = stream.position();
379 let cache_policy = match GeneralOperand::parse(stream) {
380 Ok(val) => Some(val),
381 Err(_) => {
382 stream.set_position(saved_pos);
383 None
384 }
385 };
386 stream.expect_complete()?;
387 stream.expect_complete()?;
388 stream.expect(&PtxToken::Semicolon)?;
389 Ok(CpAsyncCaStateGlobalLevelCacheHintLevelPrefetchSize1 {
390 async_,
391 ca,
392 state,
393 global,
394 level_cache_hint,
395 level_prefetch_size,
396 dst,
397 src,
398 cp_size,
399 ignore_src,
400 cache_policy,
401 })
402 }
403 }
404
405
406 impl PtxParser for CpAsyncCgStateGlobalLevelCacheHintLevelPrefetchSize1 {
407 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
408 stream.expect_string("cp")?;
409 stream.expect_string(".async")?;
410 let async_ = ();
411 stream.expect_complete()?;
412 stream.expect_string(".cg")?;
413 let cg = ();
414 stream.expect_complete()?;
415 let state = State::parse(stream)?;
416 stream.expect_complete()?;
417 stream.expect_string(".global")?;
418 let global = ();
419 stream.expect_complete()?;
420 let saved_pos = stream.position();
421 let level_cache_hint = match LevelCacheHint::parse(stream) {
422 Ok(val) => Some(val),
423 Err(_) => {
424 stream.set_position(saved_pos);
425 None
426 }
427 };
428 stream.expect_complete()?;
429 let saved_pos = stream.position();
430 let level_prefetch_size = match LevelPrefetchSize::parse(stream) {
431 Ok(val) => Some(val),
432 Err(_) => {
433 stream.set_position(saved_pos);
434 None
435 }
436 };
437 stream.expect_complete()?;
438 let dst = AddressOperand::parse(stream)?;
439 stream.expect_complete()?;
440 stream.expect(&PtxToken::Comma)?;
441 let src = AddressOperand::parse(stream)?;
442 stream.expect_complete()?;
443 stream.expect(&PtxToken::Comma)?;
444 stream.expect_string("16")?;
445 let imm_16 = ();
446 stream.expect_complete()?;
447 let saved_pos = stream.position();
448 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
449 if !has_comma {
450 stream.set_position(saved_pos);
451 }
452 let saved_pos = stream.position();
453 let ignore_src = match GeneralOperand::parse(stream) {
454 Ok(val) => Some(val),
455 Err(_) => {
456 stream.set_position(saved_pos);
457 None
458 }
459 };
460 stream.expect_complete()?;
461 let saved_pos = stream.position();
462 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
463 if !has_comma {
464 stream.set_position(saved_pos);
465 }
466 let saved_pos = stream.position();
467 let cache_policy = match GeneralOperand::parse(stream) {
468 Ok(val) => Some(val),
469 Err(_) => {
470 stream.set_position(saved_pos);
471 None
472 }
473 };
474 stream.expect_complete()?;
475 stream.expect_complete()?;
476 stream.expect(&PtxToken::Semicolon)?;
477 Ok(CpAsyncCgStateGlobalLevelCacheHintLevelPrefetchSize1 {
478 async_,
479 cg,
480 state,
481 global,
482 level_cache_hint,
483 level_prefetch_size,
484 dst,
485 src,
486 imm_16,
487 ignore_src,
488 cache_policy,
489 })
490 }
491 }
492
493
494}
495