ptx_parser/parser/instruction/
shr.rs1#![allow(unused)]
9
10use crate::lexer::PtxToken;
11use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
12use crate::r#type::common::*;
13
14pub mod section_0 {
15 use super::*;
16 use crate::r#type::instruction::shr::section_0::*;
17
18 impl PtxParser for Type {
23 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
24 {
26 let saved_pos = stream.position();
27 if stream.expect_string(".b16").is_ok() {
28 return Ok(Type::B16);
29 }
30 stream.set_position(saved_pos);
31 }
32 let saved_pos = stream.position();
33 {
35 let saved_pos = stream.position();
36 if stream.expect_string(".b32").is_ok() {
37 return Ok(Type::B32);
38 }
39 stream.set_position(saved_pos);
40 }
41 stream.set_position(saved_pos);
42 let saved_pos = stream.position();
43 {
45 let saved_pos = stream.position();
46 if stream.expect_string(".b64").is_ok() {
47 return Ok(Type::B64);
48 }
49 stream.set_position(saved_pos);
50 }
51 stream.set_position(saved_pos);
52 let saved_pos = stream.position();
53 {
55 let saved_pos = stream.position();
56 if stream.expect_string(".u16").is_ok() {
57 return Ok(Type::U16);
58 }
59 stream.set_position(saved_pos);
60 }
61 stream.set_position(saved_pos);
62 let saved_pos = stream.position();
63 {
65 let saved_pos = stream.position();
66 if stream.expect_string(".u32").is_ok() {
67 return Ok(Type::U32);
68 }
69 stream.set_position(saved_pos);
70 }
71 stream.set_position(saved_pos);
72 let saved_pos = stream.position();
73 {
75 let saved_pos = stream.position();
76 if stream.expect_string(".u64").is_ok() {
77 return Ok(Type::U64);
78 }
79 stream.set_position(saved_pos);
80 }
81 stream.set_position(saved_pos);
82 let saved_pos = stream.position();
83 {
85 let saved_pos = stream.position();
86 if stream.expect_string(".s16").is_ok() {
87 return Ok(Type::S16);
88 }
89 stream.set_position(saved_pos);
90 }
91 stream.set_position(saved_pos);
92 let saved_pos = stream.position();
93 {
95 let saved_pos = stream.position();
96 if stream.expect_string(".s32").is_ok() {
97 return Ok(Type::S32);
98 }
99 stream.set_position(saved_pos);
100 }
101 stream.set_position(saved_pos);
102 let saved_pos = stream.position();
103 {
105 let saved_pos = stream.position();
106 if stream.expect_string(".s64").is_ok() {
107 return Ok(Type::S64);
108 }
109 stream.set_position(saved_pos);
110 }
111 stream.set_position(saved_pos);
112 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
113 let expected = &[".b16", ".b32", ".b64", ".u16", ".u32", ".u64", ".s16", ".s32", ".s64"];
114 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
115 Err(crate::parser::unexpected_value(span, expected, found))
116 }
117 }
118
119 impl PtxParser for ShrType {
120 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
121 stream.expect_string("shr")?;
122 let type_ = Type::parse(stream)?;
123 stream.expect_complete()?;
124 let d = GeneralOperand::parse(stream)?;
125 stream.expect_complete()?;
126 stream.expect(&PtxToken::Comma)?;
127 let a = GeneralOperand::parse(stream)?;
128 stream.expect_complete()?;
129 stream.expect(&PtxToken::Comma)?;
130 let b = GeneralOperand::parse(stream)?;
131 stream.expect_complete()?;
132 stream.expect_complete()?;
133 stream.expect(&PtxToken::Semicolon)?;
134 Ok(ShrType {
135 type_,
136 d,
137 a,
138 b,
139 })
140 }
141 }
142
143
144}
145