ptx_parser/parser/instruction/
st_bulk.rs

1//! Original PTX specification:
2//!
3//! st.bulk{.weak}{.shared::cta}  [a], size, initval; // initval must be zero
4
5#![allow(unused)]
6
7use crate::lexer::PtxToken;
8use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
9use crate::r#type::common::*;
10
11pub mod section_0 {
12    use super::*;
13    use crate::r#type::instruction::st_bulk::section_0::*;
14
15    impl PtxParser for StBulkWeakSharedCta {
16        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
17            stream.expect_string("st")?;
18            stream.expect_string(".bulk")?;
19            let bulk = ();
20            stream.expect_complete()?;
21            let saved_pos = stream.position();
22            let weak = stream.expect_string(".weak").is_ok();
23            if !weak {
24                stream.set_position(saved_pos);
25            }
26            stream.expect_complete()?;
27            let saved_pos = stream.position();
28            let shared_cta = stream.expect_string(".shared::cta").is_ok();
29            if !shared_cta {
30                stream.set_position(saved_pos);
31            }
32            stream.expect_complete()?;
33            let a = AddressOperand::parse(stream)?;
34            stream.expect_complete()?;
35            stream.expect(&PtxToken::Comma)?;
36            let size = GeneralOperand::parse(stream)?;
37            stream.expect_complete()?;
38            stream.expect(&PtxToken::Comma)?;
39            let initval = GeneralOperand::parse(stream)?;
40            stream.expect_complete()?;
41            stream.expect_complete()?;
42            stream.expect(&PtxToken::Semicolon)?;
43            Ok(StBulkWeakSharedCta {
44                bulk,
45                weak,
46                shared_cta,
47                a,
48                size,
49                initval,
50            })
51        }
52    }
53
54
55}
56