ptx_parser/parser/instruction/
min.rs1#![allow(unused)]
18
19use crate::lexer::PtxToken;
20use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
21use crate::r#type::common::*;
22
23pub mod section_0 {
24 use super::*;
25 use crate::r#type::instruction::min::section_0::*;
26
27 impl PtxParser for Atype {
32 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
33 {
35 let saved_pos = stream.position();
36 if stream.expect_string(".u16x2").is_ok() {
37 return Ok(Atype::U16x2);
38 }
39 stream.set_position(saved_pos);
40 }
41 let saved_pos = stream.position();
42 {
44 let saved_pos = stream.position();
45 if stream.expect_string(".u16").is_ok() {
46 return Ok(Atype::U16);
47 }
48 stream.set_position(saved_pos);
49 }
50 stream.set_position(saved_pos);
51 let saved_pos = stream.position();
52 {
54 let saved_pos = stream.position();
55 if stream.expect_string(".u32").is_ok() {
56 return Ok(Atype::U32);
57 }
58 stream.set_position(saved_pos);
59 }
60 stream.set_position(saved_pos);
61 let saved_pos = stream.position();
62 {
64 let saved_pos = stream.position();
65 if stream.expect_string(".u64").is_ok() {
66 return Ok(Atype::U64);
67 }
68 stream.set_position(saved_pos);
69 }
70 stream.set_position(saved_pos);
71 let saved_pos = stream.position();
72 {
74 let saved_pos = stream.position();
75 if stream.expect_string(".s16").is_ok() {
76 return Ok(Atype::S16);
77 }
78 stream.set_position(saved_pos);
79 }
80 stream.set_position(saved_pos);
81 let saved_pos = stream.position();
82 {
84 let saved_pos = stream.position();
85 if stream.expect_string(".s64").is_ok() {
86 return Ok(Atype::S64);
87 }
88 stream.set_position(saved_pos);
89 }
90 stream.set_position(saved_pos);
91 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
92 let expected = &[".u16x2", ".u16", ".u32", ".u64", ".s16", ".s64"];
93 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
94 Err(crate::parser::unexpected_value(span, expected, found))
95 }
96 }
97
98 impl PtxParser for Btype {
99 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
100 {
102 let saved_pos = stream.position();
103 if stream.expect_string(".s16x2").is_ok() {
104 return Ok(Btype::S16x2);
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(Btype::S32);
114 }
115 stream.set_position(saved_pos);
116 }
117 stream.set_position(saved_pos);
118 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
119 let expected = &[".s16x2", ".s32"];
120 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
121 Err(crate::parser::unexpected_value(span, expected, found))
122 }
123 }
124
125 impl PtxParser for MinAtype {
126 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
127 stream.expect_string("min")?;
128 let atype = Atype::parse(stream)?;
129 stream.expect_complete()?;
130 let d = GeneralOperand::parse(stream)?;
131 stream.expect_complete()?;
132 stream.expect(&PtxToken::Comma)?;
133 let a = GeneralOperand::parse(stream)?;
134 stream.expect_complete()?;
135 stream.expect(&PtxToken::Comma)?;
136 let b = GeneralOperand::parse(stream)?;
137 stream.expect_complete()?;
138 stream.expect_complete()?;
139 stream.expect(&PtxToken::Semicolon)?;
140 Ok(MinAtype {
141 atype,
142 d,
143 a,
144 b,
145 })
146 }
147 }
148
149
150 impl PtxParser for MinReluBtype {
151 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
152 stream.expect_string("min")?;
153 let saved_pos = stream.position();
154 let relu = stream.expect_string(".relu").is_ok();
155 if !relu {
156 stream.set_position(saved_pos);
157 }
158 stream.expect_complete()?;
159 let btype = Btype::parse(stream)?;
160 stream.expect_complete()?;
161 let d = GeneralOperand::parse(stream)?;
162 stream.expect_complete()?;
163 stream.expect(&PtxToken::Comma)?;
164 let a = GeneralOperand::parse(stream)?;
165 stream.expect_complete()?;
166 stream.expect(&PtxToken::Comma)?;
167 let b = GeneralOperand::parse(stream)?;
168 stream.expect_complete()?;
169 stream.expect_complete()?;
170 stream.expect(&PtxToken::Semicolon)?;
171 Ok(MinReluBtype {
172 relu,
173 btype,
174 d,
175 a,
176 b,
177 })
178 }
179 }
180
181
182 impl PtxParser for MinFtzNanXorsignAbsF32 {
183 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
184 stream.expect_string("min")?;
185 let saved_pos = stream.position();
186 let ftz = stream.expect_string(".ftz").is_ok();
187 if !ftz {
188 stream.set_position(saved_pos);
189 }
190 stream.expect_complete()?;
191 let saved_pos = stream.position();
192 let nan = stream.expect_string(".NaN").is_ok();
193 if !nan {
194 stream.set_position(saved_pos);
195 }
196 stream.expect_complete()?;
197 let saved_pos = stream.position();
198 let xorsign_abs = stream.expect_string(".xorsign.abs").is_ok();
199 if !xorsign_abs {
200 stream.set_position(saved_pos);
201 }
202 stream.expect_complete()?;
203 stream.expect_string(".f32")?;
204 let f32 = ();
205 stream.expect_complete()?;
206 let d = GeneralOperand::parse(stream)?;
207 stream.expect_complete()?;
208 stream.expect(&PtxToken::Comma)?;
209 let a = GeneralOperand::parse(stream)?;
210 stream.expect_complete()?;
211 stream.expect(&PtxToken::Comma)?;
212 let b = GeneralOperand::parse(stream)?;
213 stream.expect_complete()?;
214 stream.expect_complete()?;
215 stream.expect(&PtxToken::Semicolon)?;
216 Ok(MinFtzNanXorsignAbsF32 {
217 ftz,
218 nan,
219 xorsign_abs,
220 f32,
221 d,
222 a,
223 b,
224 })
225 }
226 }
227
228
229 impl PtxParser for MinFtzNanAbsF32 {
230 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
231 stream.expect_string("min")?;
232 let saved_pos = stream.position();
233 let ftz = stream.expect_string(".ftz").is_ok();
234 if !ftz {
235 stream.set_position(saved_pos);
236 }
237 stream.expect_complete()?;
238 let saved_pos = stream.position();
239 let nan = stream.expect_string(".NaN").is_ok();
240 if !nan {
241 stream.set_position(saved_pos);
242 }
243 stream.expect_complete()?;
244 let saved_pos = stream.position();
245 let abs = stream.expect_string(".abs").is_ok();
246 if !abs {
247 stream.set_position(saved_pos);
248 }
249 stream.expect_complete()?;
250 stream.expect_string(".f32")?;
251 let f32 = ();
252 stream.expect_complete()?;
253 let d = GeneralOperand::parse(stream)?;
254 stream.expect_complete()?;
255 stream.expect(&PtxToken::Comma)?;
256 let a = GeneralOperand::parse(stream)?;
257 stream.expect_complete()?;
258 stream.expect(&PtxToken::Comma)?;
259 let b = GeneralOperand::parse(stream)?;
260 stream.expect_complete()?;
261 stream.expect(&PtxToken::Comma)?;
262 let c = GeneralOperand::parse(stream)?;
263 stream.expect_complete()?;
264 stream.expect_complete()?;
265 stream.expect(&PtxToken::Semicolon)?;
266 Ok(MinFtzNanAbsF32 {
267 ftz,
268 nan,
269 abs,
270 f32,
271 d,
272 a,
273 b,
274 c,
275 })
276 }
277 }
278
279
280 impl PtxParser for MinF64 {
281 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
282 stream.expect_string("min")?;
283 stream.expect_string(".f64")?;
284 let f64 = ();
285 stream.expect_complete()?;
286 let d = GeneralOperand::parse(stream)?;
287 stream.expect_complete()?;
288 stream.expect(&PtxToken::Comma)?;
289 let a = GeneralOperand::parse(stream)?;
290 stream.expect_complete()?;
291 stream.expect(&PtxToken::Comma)?;
292 let b = GeneralOperand::parse(stream)?;
293 stream.expect_complete()?;
294 stream.expect_complete()?;
295 stream.expect(&PtxToken::Semicolon)?;
296 Ok(MinF64 {
297 f64,
298 d,
299 a,
300 b,
301 })
302 }
303 }
304
305
306 impl PtxParser for MinFtzNanXorsignAbsF16 {
307 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
308 stream.expect_string("min")?;
309 let saved_pos = stream.position();
310 let ftz = stream.expect_string(".ftz").is_ok();
311 if !ftz {
312 stream.set_position(saved_pos);
313 }
314 stream.expect_complete()?;
315 let saved_pos = stream.position();
316 let nan = stream.expect_string(".NaN").is_ok();
317 if !nan {
318 stream.set_position(saved_pos);
319 }
320 stream.expect_complete()?;
321 let saved_pos = stream.position();
322 let xorsign_abs = stream.expect_string(".xorsign.abs").is_ok();
323 if !xorsign_abs {
324 stream.set_position(saved_pos);
325 }
326 stream.expect_complete()?;
327 stream.expect_string(".f16")?;
328 let f16 = ();
329 stream.expect_complete()?;
330 let d = GeneralOperand::parse(stream)?;
331 stream.expect_complete()?;
332 stream.expect(&PtxToken::Comma)?;
333 let a = GeneralOperand::parse(stream)?;
334 stream.expect_complete()?;
335 stream.expect(&PtxToken::Comma)?;
336 let b = GeneralOperand::parse(stream)?;
337 stream.expect_complete()?;
338 stream.expect_complete()?;
339 stream.expect(&PtxToken::Semicolon)?;
340 Ok(MinFtzNanXorsignAbsF16 {
341 ftz,
342 nan,
343 xorsign_abs,
344 f16,
345 d,
346 a,
347 b,
348 })
349 }
350 }
351
352
353 impl PtxParser for MinFtzNanXorsignAbsF16x2 {
354 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
355 stream.expect_string("min")?;
356 let saved_pos = stream.position();
357 let ftz = stream.expect_string(".ftz").is_ok();
358 if !ftz {
359 stream.set_position(saved_pos);
360 }
361 stream.expect_complete()?;
362 let saved_pos = stream.position();
363 let nan = stream.expect_string(".NaN").is_ok();
364 if !nan {
365 stream.set_position(saved_pos);
366 }
367 stream.expect_complete()?;
368 let saved_pos = stream.position();
369 let xorsign_abs = stream.expect_string(".xorsign.abs").is_ok();
370 if !xorsign_abs {
371 stream.set_position(saved_pos);
372 }
373 stream.expect_complete()?;
374 stream.expect_string(".f16x2")?;
375 let f16x2 = ();
376 stream.expect_complete()?;
377 let d = GeneralOperand::parse(stream)?;
378 stream.expect_complete()?;
379 stream.expect(&PtxToken::Comma)?;
380 let a = GeneralOperand::parse(stream)?;
381 stream.expect_complete()?;
382 stream.expect(&PtxToken::Comma)?;
383 let b = GeneralOperand::parse(stream)?;
384 stream.expect_complete()?;
385 stream.expect_complete()?;
386 stream.expect(&PtxToken::Semicolon)?;
387 Ok(MinFtzNanXorsignAbsF16x2 {
388 ftz,
389 nan,
390 xorsign_abs,
391 f16x2,
392 d,
393 a,
394 b,
395 })
396 }
397 }
398
399
400 impl PtxParser for MinNanXorsignAbsBf16 {
401 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
402 stream.expect_string("min")?;
403 let saved_pos = stream.position();
404 let nan = stream.expect_string(".NaN").is_ok();
405 if !nan {
406 stream.set_position(saved_pos);
407 }
408 stream.expect_complete()?;
409 let saved_pos = stream.position();
410 let xorsign_abs = stream.expect_string(".xorsign.abs").is_ok();
411 if !xorsign_abs {
412 stream.set_position(saved_pos);
413 }
414 stream.expect_complete()?;
415 stream.expect_string(".bf16")?;
416 let bf16 = ();
417 stream.expect_complete()?;
418 let d = GeneralOperand::parse(stream)?;
419 stream.expect_complete()?;
420 stream.expect(&PtxToken::Comma)?;
421 let a = GeneralOperand::parse(stream)?;
422 stream.expect_complete()?;
423 stream.expect(&PtxToken::Comma)?;
424 let b = GeneralOperand::parse(stream)?;
425 stream.expect_complete()?;
426 stream.expect_complete()?;
427 stream.expect(&PtxToken::Semicolon)?;
428 Ok(MinNanXorsignAbsBf16 {
429 nan,
430 xorsign_abs,
431 bf16,
432 d,
433 a,
434 b,
435 })
436 }
437 }
438
439
440 impl PtxParser for MinNanXorsignAbsBf16x2 {
441 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
442 stream.expect_string("min")?;
443 let saved_pos = stream.position();
444 let nan = stream.expect_string(".NaN").is_ok();
445 if !nan {
446 stream.set_position(saved_pos);
447 }
448 stream.expect_complete()?;
449 let saved_pos = stream.position();
450 let xorsign_abs = stream.expect_string(".xorsign.abs").is_ok();
451 if !xorsign_abs {
452 stream.set_position(saved_pos);
453 }
454 stream.expect_complete()?;
455 stream.expect_string(".bf16x2")?;
456 let bf16x2 = ();
457 stream.expect_complete()?;
458 let d = GeneralOperand::parse(stream)?;
459 stream.expect_complete()?;
460 stream.expect(&PtxToken::Comma)?;
461 let a = GeneralOperand::parse(stream)?;
462 stream.expect_complete()?;
463 stream.expect(&PtxToken::Comma)?;
464 let b = GeneralOperand::parse(stream)?;
465 stream.expect_complete()?;
466 stream.expect_complete()?;
467 stream.expect(&PtxToken::Semicolon)?;
468 Ok(MinNanXorsignAbsBf16x2 {
469 nan,
470 xorsign_abs,
471 bf16x2,
472 d,
473 a,
474 b,
475 })
476 }
477 }
478
479
480}
481