ptx_parser/parser/instruction/
div.rs1#![allow(unused)]
14
15use crate::lexer::PtxToken;
16use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
17use crate::r#type::common::*;
18
19pub mod section_0 {
20 use super::*;
21 use crate::r#type::instruction::div::section_0::*;
22
23 impl PtxParser for Rnd {
28 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
29 {
31 let saved_pos = stream.position();
32 if stream.expect_string(".rn").is_ok() {
33 return Ok(Rnd::Rn);
34 }
35 stream.set_position(saved_pos);
36 }
37 let saved_pos = stream.position();
38 {
40 let saved_pos = stream.position();
41 if stream.expect_string(".rz").is_ok() {
42 return Ok(Rnd::Rz);
43 }
44 stream.set_position(saved_pos);
45 }
46 stream.set_position(saved_pos);
47 let saved_pos = stream.position();
48 {
50 let saved_pos = stream.position();
51 if stream.expect_string(".rm").is_ok() {
52 return Ok(Rnd::Rm);
53 }
54 stream.set_position(saved_pos);
55 }
56 stream.set_position(saved_pos);
57 let saved_pos = stream.position();
58 {
60 let saved_pos = stream.position();
61 if stream.expect_string(".rp").is_ok() {
62 return Ok(Rnd::Rp);
63 }
64 stream.set_position(saved_pos);
65 }
66 stream.set_position(saved_pos);
67 let span = stream
68 .peek()
69 .map(|(_, s)| s.clone())
70 .unwrap_or(Span { start: 0, end: 0 });
71 let expected = &[".rn", ".rz", ".rm", ".rp"];
72 let found = stream
73 .peek()
74 .map(|(t, _)| format!("{:?}", t))
75 .unwrap_or_else(|_| "<end of input>".to_string());
76 Err(crate::parser::unexpected_value(span, expected, found))
77 }
78 }
79
80 impl PtxParser for Type {
81 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
82 {
84 let saved_pos = stream.position();
85 if stream.expect_string(".u16").is_ok() {
86 return Ok(Type::U16);
87 }
88 stream.set_position(saved_pos);
89 }
90 let saved_pos = stream.position();
91 {
93 let saved_pos = stream.position();
94 if stream.expect_string(".u32").is_ok() {
95 return Ok(Type::U32);
96 }
97 stream.set_position(saved_pos);
98 }
99 stream.set_position(saved_pos);
100 let saved_pos = stream.position();
101 {
103 let saved_pos = stream.position();
104 if stream.expect_string(".u64").is_ok() {
105 return Ok(Type::U64);
106 }
107 stream.set_position(saved_pos);
108 }
109 stream.set_position(saved_pos);
110 let saved_pos = stream.position();
111 {
113 let saved_pos = stream.position();
114 if stream.expect_string(".s16").is_ok() {
115 return Ok(Type::S16);
116 }
117 stream.set_position(saved_pos);
118 }
119 stream.set_position(saved_pos);
120 let saved_pos = stream.position();
121 {
123 let saved_pos = stream.position();
124 if stream.expect_string(".s32").is_ok() {
125 return Ok(Type::S32);
126 }
127 stream.set_position(saved_pos);
128 }
129 stream.set_position(saved_pos);
130 let saved_pos = stream.position();
131 {
133 let saved_pos = stream.position();
134 if stream.expect_string(".s64").is_ok() {
135 return Ok(Type::S64);
136 }
137 stream.set_position(saved_pos);
138 }
139 stream.set_position(saved_pos);
140 let span = stream
141 .peek()
142 .map(|(_, s)| s.clone())
143 .unwrap_or(Span { start: 0, end: 0 });
144 let expected = &[".u16", ".u32", ".u64", ".s16", ".s32", ".s64"];
145 let found = stream
146 .peek()
147 .map(|(t, _)| format!("{:?}", t))
148 .unwrap_or_else(|_| "<end of input>".to_string());
149 Err(crate::parser::unexpected_value(span, expected, found))
150 }
151 }
152
153 impl PtxParser for DivType {
154 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
155 stream.expect_string("div")?;
156 let type_ = Type::parse(stream)?;
157 stream.expect_complete()?;
158 let d = GeneralOperand::parse(stream)?;
159 stream.expect_complete()?;
160 stream.expect(&PtxToken::Comma)?;
161 let a = GeneralOperand::parse(stream)?;
162 stream.expect_complete()?;
163 stream.expect(&PtxToken::Comma)?;
164 let b = GeneralOperand::parse(stream)?;
165 stream.expect_complete()?;
166 stream.expect_complete()?;
167 stream.expect(&PtxToken::Semicolon)?;
168 Ok(DivType { type_, d, a, b })
169 }
170 }
171
172 impl PtxParser for DivApproxFtzF32 {
173 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
174 stream.expect_string("div")?;
175 stream.expect_string(".approx")?;
176 let approx = ();
177 stream.expect_complete()?;
178 let saved_pos = stream.position();
179 let ftz = stream.expect_string(".ftz").is_ok();
180 if !ftz {
181 stream.set_position(saved_pos);
182 }
183 stream.expect_complete()?;
184 stream.expect_string(".f32")?;
185 let f32 = ();
186 stream.expect_complete()?;
187 let d = GeneralOperand::parse(stream)?;
188 stream.expect_complete()?;
189 stream.expect(&PtxToken::Comma)?;
190 let a = GeneralOperand::parse(stream)?;
191 stream.expect_complete()?;
192 stream.expect(&PtxToken::Comma)?;
193 let b = GeneralOperand::parse(stream)?;
194 stream.expect_complete()?;
195 stream.expect_complete()?;
196 stream.expect(&PtxToken::Semicolon)?;
197 Ok(DivApproxFtzF32 {
198 approx,
199 ftz,
200 f32,
201 d,
202 a,
203 b,
204 })
205 }
206 }
207
208 impl PtxParser for DivFullFtzF32 {
209 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
210 stream.expect_string("div")?;
211 stream.expect_string(".full")?;
212 let full = ();
213 stream.expect_complete()?;
214 let saved_pos = stream.position();
215 let ftz = stream.expect_string(".ftz").is_ok();
216 if !ftz {
217 stream.set_position(saved_pos);
218 }
219 stream.expect_complete()?;
220 stream.expect_string(".f32")?;
221 let f32 = ();
222 stream.expect_complete()?;
223 let d = GeneralOperand::parse(stream)?;
224 stream.expect_complete()?;
225 stream.expect(&PtxToken::Comma)?;
226 let a = GeneralOperand::parse(stream)?;
227 stream.expect_complete()?;
228 stream.expect(&PtxToken::Comma)?;
229 let b = GeneralOperand::parse(stream)?;
230 stream.expect_complete()?;
231 stream.expect_complete()?;
232 stream.expect(&PtxToken::Semicolon)?;
233 Ok(DivFullFtzF32 {
234 full,
235 ftz,
236 f32,
237 d,
238 a,
239 b,
240 })
241 }
242 }
243
244 impl PtxParser for DivRndFtzF32 {
245 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
246 stream.expect_string("div")?;
247 let rnd = Rnd::parse(stream)?;
248 stream.expect_complete()?;
249 let saved_pos = stream.position();
250 let ftz = stream.expect_string(".ftz").is_ok();
251 if !ftz {
252 stream.set_position(saved_pos);
253 }
254 stream.expect_complete()?;
255 stream.expect_string(".f32")?;
256 let f32 = ();
257 stream.expect_complete()?;
258 let d = GeneralOperand::parse(stream)?;
259 stream.expect_complete()?;
260 stream.expect(&PtxToken::Comma)?;
261 let a = GeneralOperand::parse(stream)?;
262 stream.expect_complete()?;
263 stream.expect(&PtxToken::Comma)?;
264 let b = GeneralOperand::parse(stream)?;
265 stream.expect_complete()?;
266 stream.expect_complete()?;
267 stream.expect(&PtxToken::Semicolon)?;
268 Ok(DivRndFtzF32 {
269 rnd,
270 ftz,
271 f32,
272 d,
273 a,
274 b,
275 })
276 }
277 }
278
279 impl PtxParser for DivRndF64 {
280 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
281 stream.expect_string("div")?;
282 let rnd = Rnd::parse(stream)?;
283 stream.expect_complete()?;
284 stream.expect_string(".f64")?;
285 let f64 = ();
286 stream.expect_complete()?;
287 let d = GeneralOperand::parse(stream)?;
288 stream.expect_complete()?;
289 stream.expect(&PtxToken::Comma)?;
290 let a = GeneralOperand::parse(stream)?;
291 stream.expect_complete()?;
292 stream.expect(&PtxToken::Comma)?;
293 let b = GeneralOperand::parse(stream)?;
294 stream.expect_complete()?;
295 stream.expect_complete()?;
296 stream.expect(&PtxToken::Semicolon)?;
297 Ok(DivRndF64 { rnd, f64, d, a, b })
298 }
299 }
300}