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
86 .peek()
87 .map(|(_, s)| s.clone())
88 .unwrap_or(Span { start: 0, end: 0 });
89 let expected = &[".b0", ".b1", ".b2", ".b3", ".h0", ".h1"];
90 let found = stream
91 .peek()
92 .map(|(t, _)| format!("{:?}", t))
93 .unwrap_or_else(|_| "<end of input>".to_string());
94 Err(crate::parser::unexpected_value(span, expected, found))
95 }
96 }
97
98 impl PtxParser for Atype {
99 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
100 {
102 let saved_pos = stream.position();
103 if stream.expect_string(".u32").is_ok() {
104 return Ok(Atype::U32);
105 }
106 stream.set_position(saved_pos);
107 }
108 let saved_pos = stream.position();
109 {
111 let saved_pos = stream.position();
112 if stream.expect_string(".s32").is_ok() {
113 return Ok(Atype::S32);
114 }
115 stream.set_position(saved_pos);
116 }
117 stream.set_position(saved_pos);
118 let span = stream
119 .peek()
120 .map(|(_, s)| s.clone())
121 .unwrap_or(Span { start: 0, end: 0 });
122 let expected = &[".u32", ".s32"];
123 let found = stream
124 .peek()
125 .map(|(t, _)| format!("{:?}", t))
126 .unwrap_or_else(|_| "<end of input>".to_string());
127 Err(crate::parser::unexpected_value(span, expected, found))
128 }
129 }
130
131 impl PtxParser for Bsel {
132 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
133 {
135 let saved_pos = stream.position();
136 if stream.expect_string(".b0").is_ok() {
137 return Ok(Bsel::B0);
138 }
139 stream.set_position(saved_pos);
140 }
141 let saved_pos = stream.position();
142 {
144 let saved_pos = stream.position();
145 if stream.expect_string(".b1").is_ok() {
146 return Ok(Bsel::B1);
147 }
148 stream.set_position(saved_pos);
149 }
150 stream.set_position(saved_pos);
151 let saved_pos = stream.position();
152 {
154 let saved_pos = stream.position();
155 if stream.expect_string(".b2").is_ok() {
156 return Ok(Bsel::B2);
157 }
158 stream.set_position(saved_pos);
159 }
160 stream.set_position(saved_pos);
161 let saved_pos = stream.position();
162 {
164 let saved_pos = stream.position();
165 if stream.expect_string(".b3").is_ok() {
166 return Ok(Bsel::B3);
167 }
168 stream.set_position(saved_pos);
169 }
170 stream.set_position(saved_pos);
171 let saved_pos = stream.position();
172 {
174 let saved_pos = stream.position();
175 if stream.expect_string(".h0").is_ok() {
176 return Ok(Bsel::H0);
177 }
178 stream.set_position(saved_pos);
179 }
180 stream.set_position(saved_pos);
181 let saved_pos = stream.position();
182 {
184 let saved_pos = stream.position();
185 if stream.expect_string(".h1").is_ok() {
186 return Ok(Bsel::H1);
187 }
188 stream.set_position(saved_pos);
189 }
190 stream.set_position(saved_pos);
191 let span = stream
192 .peek()
193 .map(|(_, s)| s.clone())
194 .unwrap_or(Span { start: 0, end: 0 });
195 let expected = &[".b0", ".b1", ".b2", ".b3", ".h0", ".h1"];
196 let found = stream
197 .peek()
198 .map(|(t, _)| format!("{:?}", t))
199 .unwrap_or_else(|_| "<end of input>".to_string());
200 Err(crate::parser::unexpected_value(span, expected, found))
201 }
202 }
203
204 impl PtxParser for Btype {
205 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
206 {
208 let saved_pos = stream.position();
209 if stream.expect_string(".u32").is_ok() {
210 return Ok(Btype::U32);
211 }
212 stream.set_position(saved_pos);
213 }
214 let saved_pos = stream.position();
215 {
217 let saved_pos = stream.position();
218 if stream.expect_string(".s32").is_ok() {
219 return Ok(Btype::S32);
220 }
221 stream.set_position(saved_pos);
222 }
223 stream.set_position(saved_pos);
224 let span = stream
225 .peek()
226 .map(|(_, s)| s.clone())
227 .unwrap_or(Span { start: 0, end: 0 });
228 let expected = &[".u32", ".s32"];
229 let found = stream
230 .peek()
231 .map(|(t, _)| format!("{:?}", t))
232 .unwrap_or_else(|_| "<end of input>".to_string());
233 Err(crate::parser::unexpected_value(span, expected, found))
234 }
235 }
236
237 impl PtxParser for Dtype {
238 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
239 {
241 let saved_pos = stream.position();
242 if stream.expect_string(".u32").is_ok() {
243 return Ok(Dtype::U32);
244 }
245 stream.set_position(saved_pos);
246 }
247 let saved_pos = stream.position();
248 {
250 let saved_pos = stream.position();
251 if stream.expect_string(".s32").is_ok() {
252 return Ok(Dtype::S32);
253 }
254 stream.set_position(saved_pos);
255 }
256 stream.set_position(saved_pos);
257 let span = stream
258 .peek()
259 .map(|(_, s)| s.clone())
260 .unwrap_or(Span { start: 0, end: 0 });
261 let expected = &[".u32", ".s32"];
262 let found = stream
263 .peek()
264 .map(|(t, _)| format!("{:?}", t))
265 .unwrap_or_else(|_| "<end of input>".to_string());
266 Err(crate::parser::unexpected_value(span, expected, found))
267 }
268 }
269
270 impl PtxParser for Scale {
271 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
272 {
274 let saved_pos = stream.position();
275 if stream.expect_string(".shr15").is_ok() {
276 return Ok(Scale::Shr15);
277 }
278 stream.set_position(saved_pos);
279 }
280 let saved_pos = stream.position();
281 {
283 let saved_pos = stream.position();
284 if stream.expect_string(".shr7").is_ok() {
285 return Ok(Scale::Shr7);
286 }
287 stream.set_position(saved_pos);
288 }
289 stream.set_position(saved_pos);
290 let span = stream
291 .peek()
292 .map(|(_, s)| s.clone())
293 .unwrap_or(Span { start: 0, end: 0 });
294 let expected = &[".shr15", ".shr7"];
295 let found = stream
296 .peek()
297 .map(|(t, _)| format!("{:?}", t))
298 .unwrap_or_else(|_| "<end of input>".to_string());
299 Err(crate::parser::unexpected_value(span, expected, found))
300 }
301 }
302
303 impl PtxParser for VmadDtypeAtypeBtypeSatScale {
304 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
305 stream.expect_string("vmad")?;
306 let dtype = Dtype::parse(stream)?;
307 stream.expect_complete()?;
308 let atype = Atype::parse(stream)?;
309 stream.expect_complete()?;
310 let btype = Btype::parse(stream)?;
311 stream.expect_complete()?;
312 let saved_pos = stream.position();
313 let sat = stream.expect_string(".sat").is_ok();
314 if !sat {
315 stream.set_position(saved_pos);
316 }
317 stream.expect_complete()?;
318 let saved_pos = stream.position();
319 let scale = match Scale::parse(stream) {
320 Ok(val) => Some(val),
321 Err(_) => {
322 stream.set_position(saved_pos);
323 None
324 }
325 };
326 stream.expect_complete()?;
327 let d = GeneralOperand::parse(stream)?;
328 stream.expect_complete()?;
329 stream.expect(&PtxToken::Comma)?;
330 let a_op = stream
331 .consume_if(|t| matches!(t, PtxToken::Minus))
332 .is_some();
333 let a = GeneralOperand::parse(stream)?;
334 let saved_pos = stream.position();
335 let asel = match Asel::parse(stream) {
336 Ok(val) => Some(val),
337 Err(_) => {
338 stream.set_position(saved_pos);
339 None
340 }
341 };
342 stream.expect_complete()?;
343 stream.expect(&PtxToken::Comma)?;
344 let b_op = stream
345 .consume_if(|t| matches!(t, PtxToken::Minus))
346 .is_some();
347 let b = GeneralOperand::parse(stream)?;
348 let saved_pos = stream.position();
349 let bsel = match Bsel::parse(stream) {
350 Ok(val) => Some(val),
351 Err(_) => {
352 stream.set_position(saved_pos);
353 None
354 }
355 };
356 stream.expect_complete()?;
357 stream.expect(&PtxToken::Comma)?;
358 let c_op = stream
359 .consume_if(|t| matches!(t, PtxToken::Minus))
360 .is_some();
361 let c = GeneralOperand::parse(stream)?;
362 stream.expect_complete()?;
363 stream.expect_complete()?;
364 stream.expect(&PtxToken::Semicolon)?;
365 Ok(VmadDtypeAtypeBtypeSatScale {
366 dtype,
367 atype,
368 btype,
369 sat,
370 scale,
371 d,
372 a_op,
373 a,
374 asel,
375 b_op,
376 b,
377 bsel,
378 c_op,
379 c,
380 })
381 }
382 }
383
384 impl PtxParser for VmadDtypeAtypeBtypePoSatScale {
385 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
386 stream.expect_string("vmad")?;
387 let dtype = Dtype::parse(stream)?;
388 stream.expect_complete()?;
389 let atype = Atype::parse(stream)?;
390 stream.expect_complete()?;
391 let btype = Btype::parse(stream)?;
392 stream.expect_complete()?;
393 stream.expect_string(".po")?;
394 let po = ();
395 stream.expect_complete()?;
396 let saved_pos = stream.position();
397 let sat = stream.expect_string(".sat").is_ok();
398 if !sat {
399 stream.set_position(saved_pos);
400 }
401 stream.expect_complete()?;
402 let saved_pos = stream.position();
403 let scale = match Scale::parse(stream) {
404 Ok(val) => Some(val),
405 Err(_) => {
406 stream.set_position(saved_pos);
407 None
408 }
409 };
410 stream.expect_complete()?;
411 let d = GeneralOperand::parse(stream)?;
412 stream.expect_complete()?;
413 stream.expect(&PtxToken::Comma)?;
414 let a = GeneralOperand::parse(stream)?;
415 let saved_pos = stream.position();
416 let asel = match Asel::parse(stream) {
417 Ok(val) => Some(val),
418 Err(_) => {
419 stream.set_position(saved_pos);
420 None
421 }
422 };
423 stream.expect_complete()?;
424 stream.expect(&PtxToken::Comma)?;
425 let b = GeneralOperand::parse(stream)?;
426 let saved_pos = stream.position();
427 let bsel = match Bsel::parse(stream) {
428 Ok(val) => Some(val),
429 Err(_) => {
430 stream.set_position(saved_pos);
431 None
432 }
433 };
434 stream.expect_complete()?;
435 stream.expect(&PtxToken::Comma)?;
436 let c = GeneralOperand::parse(stream)?;
437 stream.expect_complete()?;
438 stream.expect_complete()?;
439 stream.expect(&PtxToken::Semicolon)?;
440 Ok(VmadDtypeAtypeBtypePoSatScale {
441 dtype,
442 atype,
443 btype,
444 po,
445 sat,
446 scale,
447 d,
448 a,
449 asel,
450 b,
451 bsel,
452 c,
453 })
454 }
455 }
456}