ptx_parser/parser/instruction/
ldu.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::ldu::section_0::*;
21
22 impl PtxParser for Ss {
27 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
28 {
30 let saved_pos = stream.position();
31 if stream.expect_string(".global").is_ok() {
32 return Ok(Ss::Global);
33 }
34 stream.set_position(saved_pos);
35 }
36 let span = stream
37 .peek()
38 .map(|(_, s)| s.clone())
39 .unwrap_or(Span { start: 0, end: 0 });
40 let expected = &[".global"];
41 let found = stream
42 .peek()
43 .map(|(t, _)| format!("{:?}", t))
44 .unwrap_or_else(|_| "<end of input>".to_string());
45 Err(crate::parser::unexpected_value(span, expected, found))
46 }
47 }
48
49 impl PtxParser for Type {
50 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
51 {
53 let saved_pos = stream.position();
54 if stream.expect_string(".b128").is_ok() {
55 return Ok(Type::B128);
56 }
57 stream.set_position(saved_pos);
58 }
59 let saved_pos = stream.position();
60 {
62 let saved_pos = stream.position();
63 if stream.expect_string(".b16").is_ok() {
64 return Ok(Type::B16);
65 }
66 stream.set_position(saved_pos);
67 }
68 stream.set_position(saved_pos);
69 let saved_pos = stream.position();
70 {
72 let saved_pos = stream.position();
73 if stream.expect_string(".b32").is_ok() {
74 return Ok(Type::B32);
75 }
76 stream.set_position(saved_pos);
77 }
78 stream.set_position(saved_pos);
79 let saved_pos = stream.position();
80 {
82 let saved_pos = stream.position();
83 if stream.expect_string(".b64").is_ok() {
84 return Ok(Type::B64);
85 }
86 stream.set_position(saved_pos);
87 }
88 stream.set_position(saved_pos);
89 let saved_pos = stream.position();
90 {
92 let saved_pos = stream.position();
93 if stream.expect_string(".u16").is_ok() {
94 return Ok(Type::U16);
95 }
96 stream.set_position(saved_pos);
97 }
98 stream.set_position(saved_pos);
99 let saved_pos = stream.position();
100 {
102 let saved_pos = stream.position();
103 if stream.expect_string(".u32").is_ok() {
104 return Ok(Type::U32);
105 }
106 stream.set_position(saved_pos);
107 }
108 stream.set_position(saved_pos);
109 let saved_pos = stream.position();
110 {
112 let saved_pos = stream.position();
113 if stream.expect_string(".u64").is_ok() {
114 return Ok(Type::U64);
115 }
116 stream.set_position(saved_pos);
117 }
118 stream.set_position(saved_pos);
119 let saved_pos = stream.position();
120 {
122 let saved_pos = stream.position();
123 if stream.expect_string(".s16").is_ok() {
124 return Ok(Type::S16);
125 }
126 stream.set_position(saved_pos);
127 }
128 stream.set_position(saved_pos);
129 let saved_pos = stream.position();
130 {
132 let saved_pos = stream.position();
133 if stream.expect_string(".s32").is_ok() {
134 return Ok(Type::S32);
135 }
136 stream.set_position(saved_pos);
137 }
138 stream.set_position(saved_pos);
139 let saved_pos = stream.position();
140 {
142 let saved_pos = stream.position();
143 if stream.expect_string(".s64").is_ok() {
144 return Ok(Type::S64);
145 }
146 stream.set_position(saved_pos);
147 }
148 stream.set_position(saved_pos);
149 let saved_pos = stream.position();
150 {
152 let saved_pos = stream.position();
153 if stream.expect_string(".f32").is_ok() {
154 return Ok(Type::F32);
155 }
156 stream.set_position(saved_pos);
157 }
158 stream.set_position(saved_pos);
159 let saved_pos = stream.position();
160 {
162 let saved_pos = stream.position();
163 if stream.expect_string(".f64").is_ok() {
164 return Ok(Type::F64);
165 }
166 stream.set_position(saved_pos);
167 }
168 stream.set_position(saved_pos);
169 let saved_pos = stream.position();
170 {
172 let saved_pos = stream.position();
173 if stream.expect_string(".b8").is_ok() {
174 return Ok(Type::B8);
175 }
176 stream.set_position(saved_pos);
177 }
178 stream.set_position(saved_pos);
179 let saved_pos = stream.position();
180 {
182 let saved_pos = stream.position();
183 if stream.expect_string(".u8").is_ok() {
184 return Ok(Type::U8);
185 }
186 stream.set_position(saved_pos);
187 }
188 stream.set_position(saved_pos);
189 let saved_pos = stream.position();
190 {
192 let saved_pos = stream.position();
193 if stream.expect_string(".s8").is_ok() {
194 return Ok(Type::S8);
195 }
196 stream.set_position(saved_pos);
197 }
198 stream.set_position(saved_pos);
199 let span = stream
200 .peek()
201 .map(|(_, s)| s.clone())
202 .unwrap_or(Span { start: 0, end: 0 });
203 let expected = &[
204 ".b128", ".b16", ".b32", ".b64", ".u16", ".u32", ".u64", ".s16", ".s32", ".s64",
205 ".f32", ".f64", ".b8", ".u8", ".s8",
206 ];
207 let found = stream
208 .peek()
209 .map(|(t, _)| format!("{:?}", t))
210 .unwrap_or_else(|_| "<end of input>".to_string());
211 Err(crate::parser::unexpected_value(span, expected, found))
212 }
213 }
214
215 impl PtxParser for Vec {
216 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
217 {
219 let saved_pos = stream.position();
220 if stream.expect_string(".v2").is_ok() {
221 return Ok(Vec::V2);
222 }
223 stream.set_position(saved_pos);
224 }
225 let saved_pos = stream.position();
226 {
228 let saved_pos = stream.position();
229 if stream.expect_string(".v4").is_ok() {
230 return Ok(Vec::V4);
231 }
232 stream.set_position(saved_pos);
233 }
234 stream.set_position(saved_pos);
235 let span = stream
236 .peek()
237 .map(|(_, s)| s.clone())
238 .unwrap_or(Span { start: 0, end: 0 });
239 let expected = &[".v2", ".v4"];
240 let found = stream
241 .peek()
242 .map(|(t, _)| format!("{:?}", t))
243 .unwrap_or_else(|_| "<end of input>".to_string());
244 Err(crate::parser::unexpected_value(span, expected, found))
245 }
246 }
247
248 impl PtxParser for LduSsType {
249 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
250 stream.expect_string("ldu")?;
251 let saved_pos = stream.position();
252 let ss = match Ss::parse(stream) {
253 Ok(val) => Some(val),
254 Err(_) => {
255 stream.set_position(saved_pos);
256 None
257 }
258 };
259 stream.expect_complete()?;
260 let type_ = Type::parse(stream)?;
261 stream.expect_complete()?;
262 let d = GeneralOperand::parse(stream)?;
263 stream.expect_complete()?;
264 stream.expect(&PtxToken::Comma)?;
265 let a = AddressOperand::parse(stream)?;
266 stream.expect_complete()?;
267 stream.expect_complete()?;
268 stream.expect(&PtxToken::Semicolon)?;
269 Ok(LduSsType { ss, type_, d, a })
270 }
271 }
272
273 impl PtxParser for LduSsVecType {
274 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
275 stream.expect_string("ldu")?;
276 let saved_pos = stream.position();
277 let ss = match Ss::parse(stream) {
278 Ok(val) => Some(val),
279 Err(_) => {
280 stream.set_position(saved_pos);
281 None
282 }
283 };
284 stream.expect_complete()?;
285 let vec = Vec::parse(stream)?;
286 stream.expect_complete()?;
287 let type_ = Type::parse(stream)?;
288 stream.expect_complete()?;
289 let d = GeneralOperand::parse(stream)?;
290 stream.expect_complete()?;
291 stream.expect(&PtxToken::Comma)?;
292 let a = AddressOperand::parse(stream)?;
293 stream.expect_complete()?;
294 stream.expect_complete()?;
295 stream.expect(&PtxToken::Semicolon)?;
296 Ok(LduSsVecType {
297 ss,
298 vec,
299 type_,
300 d,
301 a,
302 })
303 }
304 }
305}