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.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
68 let expected = &[".rn", ".rz", ".rm", ".rp"];
69 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
70 Err(crate::parser::unexpected_value(span, expected, found))
71 }
72 }
73
74 impl PtxParser for Type {
75 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
76 {
78 let saved_pos = stream.position();
79 if stream.expect_string(".u16").is_ok() {
80 return Ok(Type::U16);
81 }
82 stream.set_position(saved_pos);
83 }
84 let saved_pos = stream.position();
85 {
87 let saved_pos = stream.position();
88 if stream.expect_string(".u32").is_ok() {
89 return Ok(Type::U32);
90 }
91 stream.set_position(saved_pos);
92 }
93 stream.set_position(saved_pos);
94 let saved_pos = stream.position();
95 {
97 let saved_pos = stream.position();
98 if stream.expect_string(".u64").is_ok() {
99 return Ok(Type::U64);
100 }
101 stream.set_position(saved_pos);
102 }
103 stream.set_position(saved_pos);
104 let saved_pos = stream.position();
105 {
107 let saved_pos = stream.position();
108 if stream.expect_string(".s16").is_ok() {
109 return Ok(Type::S16);
110 }
111 stream.set_position(saved_pos);
112 }
113 stream.set_position(saved_pos);
114 let saved_pos = stream.position();
115 {
117 let saved_pos = stream.position();
118 if stream.expect_string(".s32").is_ok() {
119 return Ok(Type::S32);
120 }
121 stream.set_position(saved_pos);
122 }
123 stream.set_position(saved_pos);
124 let saved_pos = stream.position();
125 {
127 let saved_pos = stream.position();
128 if stream.expect_string(".s64").is_ok() {
129 return Ok(Type::S64);
130 }
131 stream.set_position(saved_pos);
132 }
133 stream.set_position(saved_pos);
134 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
135 let expected = &[".u16", ".u32", ".u64", ".s16", ".s32", ".s64"];
136 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
137 Err(crate::parser::unexpected_value(span, expected, found))
138 }
139 }
140
141 impl PtxParser for DivType {
142 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
143 stream.expect_string("div")?;
144 let type_ = Type::parse(stream)?;
145 stream.expect_complete()?;
146 let d = GeneralOperand::parse(stream)?;
147 stream.expect_complete()?;
148 stream.expect(&PtxToken::Comma)?;
149 let a = GeneralOperand::parse(stream)?;
150 stream.expect_complete()?;
151 stream.expect(&PtxToken::Comma)?;
152 let b = GeneralOperand::parse(stream)?;
153 stream.expect_complete()?;
154 stream.expect_complete()?;
155 stream.expect(&PtxToken::Semicolon)?;
156 Ok(DivType {
157 type_,
158 d,
159 a,
160 b,
161 })
162 }
163 }
164
165
166 impl PtxParser for DivApproxFtzF32 {
167 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
168 stream.expect_string("div")?;
169 stream.expect_string(".approx")?;
170 let approx = ();
171 stream.expect_complete()?;
172 let saved_pos = stream.position();
173 let ftz = stream.expect_string(".ftz").is_ok();
174 if !ftz {
175 stream.set_position(saved_pos);
176 }
177 stream.expect_complete()?;
178 stream.expect_string(".f32")?;
179 let f32 = ();
180 stream.expect_complete()?;
181 let d = GeneralOperand::parse(stream)?;
182 stream.expect_complete()?;
183 stream.expect(&PtxToken::Comma)?;
184 let a = GeneralOperand::parse(stream)?;
185 stream.expect_complete()?;
186 stream.expect(&PtxToken::Comma)?;
187 let b = GeneralOperand::parse(stream)?;
188 stream.expect_complete()?;
189 stream.expect_complete()?;
190 stream.expect(&PtxToken::Semicolon)?;
191 Ok(DivApproxFtzF32 {
192 approx,
193 ftz,
194 f32,
195 d,
196 a,
197 b,
198 })
199 }
200 }
201
202
203 impl PtxParser for DivFullFtzF32 {
204 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
205 stream.expect_string("div")?;
206 stream.expect_string(".full")?;
207 let full = ();
208 stream.expect_complete()?;
209 let saved_pos = stream.position();
210 let ftz = stream.expect_string(".ftz").is_ok();
211 if !ftz {
212 stream.set_position(saved_pos);
213 }
214 stream.expect_complete()?;
215 stream.expect_string(".f32")?;
216 let f32 = ();
217 stream.expect_complete()?;
218 let d = GeneralOperand::parse(stream)?;
219 stream.expect_complete()?;
220 stream.expect(&PtxToken::Comma)?;
221 let a = GeneralOperand::parse(stream)?;
222 stream.expect_complete()?;
223 stream.expect(&PtxToken::Comma)?;
224 let b = GeneralOperand::parse(stream)?;
225 stream.expect_complete()?;
226 stream.expect_complete()?;
227 stream.expect(&PtxToken::Semicolon)?;
228 Ok(DivFullFtzF32 {
229 full,
230 ftz,
231 f32,
232 d,
233 a,
234 b,
235 })
236 }
237 }
238
239
240 impl PtxParser for DivRndFtzF32 {
241 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
242 stream.expect_string("div")?;
243 let rnd = Rnd::parse(stream)?;
244 stream.expect_complete()?;
245 let saved_pos = stream.position();
246 let ftz = stream.expect_string(".ftz").is_ok();
247 if !ftz {
248 stream.set_position(saved_pos);
249 }
250 stream.expect_complete()?;
251 stream.expect_string(".f32")?;
252 let f32 = ();
253 stream.expect_complete()?;
254 let d = GeneralOperand::parse(stream)?;
255 stream.expect_complete()?;
256 stream.expect(&PtxToken::Comma)?;
257 let a = GeneralOperand::parse(stream)?;
258 stream.expect_complete()?;
259 stream.expect(&PtxToken::Comma)?;
260 let b = GeneralOperand::parse(stream)?;
261 stream.expect_complete()?;
262 stream.expect_complete()?;
263 stream.expect(&PtxToken::Semicolon)?;
264 Ok(DivRndFtzF32 {
265 rnd,
266 ftz,
267 f32,
268 d,
269 a,
270 b,
271 })
272 }
273 }
274
275
276 impl PtxParser for DivRndF64 {
277 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
278 stream.expect_string("div")?;
279 let rnd = Rnd::parse(stream)?;
280 stream.expect_complete()?;
281 stream.expect_string(".f64")?;
282 let f64 = ();
283 stream.expect_complete()?;
284 let d = GeneralOperand::parse(stream)?;
285 stream.expect_complete()?;
286 stream.expect(&PtxToken::Comma)?;
287 let a = GeneralOperand::parse(stream)?;
288 stream.expect_complete()?;
289 stream.expect(&PtxToken::Comma)?;
290 let b = GeneralOperand::parse(stream)?;
291 stream.expect_complete()?;
292 stream.expect_complete()?;
293 stream.expect(&PtxToken::Semicolon)?;
294 Ok(DivRndF64 {
295 rnd,
296 f64,
297 d,
298 a,
299 b,
300 })
301 }
302 }
303
304
305}
306