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