ptx_parser/parser/instruction/
vmad.rs1#![allow(unused)]
12
13use crate::lexer::PtxToken;
14use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
15use crate::r#type::common::*;
16
17pub mod section_0 {
18 use super::*;
19 use crate::r#type::instruction::vmad::section_0::*;
20
21 impl PtxParser for Asel {
26 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
27 {
29 let saved_pos = stream.position();
30 if stream.expect_string(".b0").is_ok() {
31 return Ok(Asel::B0);
32 }
33 stream.set_position(saved_pos);
34 }
35 let saved_pos = stream.position();
36 {
38 let saved_pos = stream.position();
39 if stream.expect_string(".b1").is_ok() {
40 return Ok(Asel::B1);
41 }
42 stream.set_position(saved_pos);
43 }
44 stream.set_position(saved_pos);
45 let saved_pos = stream.position();
46 {
48 let saved_pos = stream.position();
49 if stream.expect_string(".b2").is_ok() {
50 return Ok(Asel::B2);
51 }
52 stream.set_position(saved_pos);
53 }
54 stream.set_position(saved_pos);
55 let saved_pos = stream.position();
56 {
58 let saved_pos = stream.position();
59 if stream.expect_string(".b3").is_ok() {
60 return Ok(Asel::B3);
61 }
62 stream.set_position(saved_pos);
63 }
64 stream.set_position(saved_pos);
65 let saved_pos = stream.position();
66 {
68 let saved_pos = stream.position();
69 if stream.expect_string(".h0").is_ok() {
70 return Ok(Asel::H0);
71 }
72 stream.set_position(saved_pos);
73 }
74 stream.set_position(saved_pos);
75 let saved_pos = stream.position();
76 {
78 let saved_pos = stream.position();
79 if stream.expect_string(".h1").is_ok() {
80 return Ok(Asel::H1);
81 }
82 stream.set_position(saved_pos);
83 }
84 stream.set_position(saved_pos);
85 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
86 let expected = &[".b0", ".b1", ".b2", ".b3", ".h0", ".h1"];
87 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
88 Err(crate::parser::unexpected_value(span, expected, found))
89 }
90 }
91
92 impl PtxParser for Atype {
93 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
94 {
96 let saved_pos = stream.position();
97 if stream.expect_string(".u32").is_ok() {
98 return Ok(Atype::U32);
99 }
100 stream.set_position(saved_pos);
101 }
102 let saved_pos = stream.position();
103 {
105 let saved_pos = stream.position();
106 if stream.expect_string(".s32").is_ok() {
107 return Ok(Atype::S32);
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 = &[".u32", ".s32"];
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 Bsel {
120 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
121 {
123 let saved_pos = stream.position();
124 if stream.expect_string(".b0").is_ok() {
125 return Ok(Bsel::B0);
126 }
127 stream.set_position(saved_pos);
128 }
129 let saved_pos = stream.position();
130 {
132 let saved_pos = stream.position();
133 if stream.expect_string(".b1").is_ok() {
134 return Ok(Bsel::B1);
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(".b2").is_ok() {
144 return Ok(Bsel::B2);
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(".b3").is_ok() {
154 return Ok(Bsel::B3);
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(".h0").is_ok() {
164 return Ok(Bsel::H0);
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(".h1").is_ok() {
174 return Ok(Bsel::H1);
175 }
176 stream.set_position(saved_pos);
177 }
178 stream.set_position(saved_pos);
179 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
180 let expected = &[".b0", ".b1", ".b2", ".b3", ".h0", ".h1"];
181 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
182 Err(crate::parser::unexpected_value(span, expected, found))
183 }
184 }
185
186 impl PtxParser for Btype {
187 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
188 {
190 let saved_pos = stream.position();
191 if stream.expect_string(".u32").is_ok() {
192 return Ok(Btype::U32);
193 }
194 stream.set_position(saved_pos);
195 }
196 let saved_pos = stream.position();
197 {
199 let saved_pos = stream.position();
200 if stream.expect_string(".s32").is_ok() {
201 return Ok(Btype::S32);
202 }
203 stream.set_position(saved_pos);
204 }
205 stream.set_position(saved_pos);
206 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
207 let expected = &[".u32", ".s32"];
208 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
209 Err(crate::parser::unexpected_value(span, expected, found))
210 }
211 }
212
213 impl PtxParser for Dtype {
214 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
215 {
217 let saved_pos = stream.position();
218 if stream.expect_string(".u32").is_ok() {
219 return Ok(Dtype::U32);
220 }
221 stream.set_position(saved_pos);
222 }
223 let saved_pos = stream.position();
224 {
226 let saved_pos = stream.position();
227 if stream.expect_string(".s32").is_ok() {
228 return Ok(Dtype::S32);
229 }
230 stream.set_position(saved_pos);
231 }
232 stream.set_position(saved_pos);
233 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
234 let expected = &[".u32", ".s32"];
235 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
236 Err(crate::parser::unexpected_value(span, expected, found))
237 }
238 }
239
240 impl PtxParser for Scale {
241 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
242 {
244 let saved_pos = stream.position();
245 if stream.expect_string(".shr15").is_ok() {
246 return Ok(Scale::Shr15);
247 }
248 stream.set_position(saved_pos);
249 }
250 let saved_pos = stream.position();
251 {
253 let saved_pos = stream.position();
254 if stream.expect_string(".shr7").is_ok() {
255 return Ok(Scale::Shr7);
256 }
257 stream.set_position(saved_pos);
258 }
259 stream.set_position(saved_pos);
260 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
261 let expected = &[".shr15", ".shr7"];
262 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
263 Err(crate::parser::unexpected_value(span, expected, found))
264 }
265 }
266
267 impl PtxParser for VmadDtypeAtypeBtypeSatScale {
268 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
269 stream.expect_string("vmad")?;
270 let dtype = Dtype::parse(stream)?;
271 stream.expect_complete()?;
272 let atype = Atype::parse(stream)?;
273 stream.expect_complete()?;
274 let btype = Btype::parse(stream)?;
275 stream.expect_complete()?;
276 let saved_pos = stream.position();
277 let sat = stream.expect_string(".sat").is_ok();
278 if !sat {
279 stream.set_position(saved_pos);
280 }
281 stream.expect_complete()?;
282 let saved_pos = stream.position();
283 let scale = match Scale::parse(stream) {
284 Ok(val) => Some(val),
285 Err(_) => {
286 stream.set_position(saved_pos);
287 None
288 }
289 };
290 stream.expect_complete()?;
291 let d = GeneralOperand::parse(stream)?;
292 stream.expect_complete()?;
293 stream.expect(&PtxToken::Comma)?;
294 let a_op = stream.consume_if(|t| matches!(t, PtxToken::Minus)).is_some();
295 let a = GeneralOperand::parse(stream)?;
296 let saved_pos = stream.position();
297 let asel = match Asel::parse(stream) {
298 Ok(val) => Some(val),
299 Err(_) => {
300 stream.set_position(saved_pos);
301 None
302 }
303 };
304 stream.expect_complete()?;
305 stream.expect(&PtxToken::Comma)?;
306 let b_op = stream.consume_if(|t| matches!(t, PtxToken::Minus)).is_some();
307 let b = GeneralOperand::parse(stream)?;
308 let saved_pos = stream.position();
309 let bsel = match Bsel::parse(stream) {
310 Ok(val) => Some(val),
311 Err(_) => {
312 stream.set_position(saved_pos);
313 None
314 }
315 };
316 stream.expect_complete()?;
317 stream.expect(&PtxToken::Comma)?;
318 let c_op = stream.consume_if(|t| matches!(t, PtxToken::Minus)).is_some();
319 let c = GeneralOperand::parse(stream)?;
320 stream.expect_complete()?;
321 stream.expect_complete()?;
322 stream.expect(&PtxToken::Semicolon)?;
323 Ok(VmadDtypeAtypeBtypeSatScale {
324 dtype,
325 atype,
326 btype,
327 sat,
328 scale,
329 d,
330 a_op,
331 a,
332 asel,
333 b_op,
334 b,
335 bsel,
336 c_op,
337 c,
338 })
339 }
340 }
341
342
343 impl PtxParser for VmadDtypeAtypeBtypePoSatScale {
344 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
345 stream.expect_string("vmad")?;
346 let dtype = Dtype::parse(stream)?;
347 stream.expect_complete()?;
348 let atype = Atype::parse(stream)?;
349 stream.expect_complete()?;
350 let btype = Btype::parse(stream)?;
351 stream.expect_complete()?;
352 stream.expect_string(".po")?;
353 let po = ();
354 stream.expect_complete()?;
355 let saved_pos = stream.position();
356 let sat = stream.expect_string(".sat").is_ok();
357 if !sat {
358 stream.set_position(saved_pos);
359 }
360 stream.expect_complete()?;
361 let saved_pos = stream.position();
362 let scale = match Scale::parse(stream) {
363 Ok(val) => Some(val),
364 Err(_) => {
365 stream.set_position(saved_pos);
366 None
367 }
368 };
369 stream.expect_complete()?;
370 let d = GeneralOperand::parse(stream)?;
371 stream.expect_complete()?;
372 stream.expect(&PtxToken::Comma)?;
373 let a = GeneralOperand::parse(stream)?;
374 let saved_pos = stream.position();
375 let asel = match Asel::parse(stream) {
376 Ok(val) => Some(val),
377 Err(_) => {
378 stream.set_position(saved_pos);
379 None
380 }
381 };
382 stream.expect_complete()?;
383 stream.expect(&PtxToken::Comma)?;
384 let b = GeneralOperand::parse(stream)?;
385 let saved_pos = stream.position();
386 let bsel = match Bsel::parse(stream) {
387 Ok(val) => Some(val),
388 Err(_) => {
389 stream.set_position(saved_pos);
390 None
391 }
392 };
393 stream.expect_complete()?;
394 stream.expect(&PtxToken::Comma)?;
395 let c = GeneralOperand::parse(stream)?;
396 stream.expect_complete()?;
397 stream.expect_complete()?;
398 stream.expect(&PtxToken::Semicolon)?;
399 Ok(VmadDtypeAtypeBtypePoSatScale {
400 dtype,
401 atype,
402 btype,
403 po,
404 sat,
405 scale,
406 d,
407 a,
408 asel,
409 b,
410 bsel,
411 c,
412 })
413 }
414 }
415
416
417}
418