ptx_parser/parser/instruction/
mov.rs1#![allow(unused)]
21
22use crate::lexer::PtxToken;
23use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
24use crate::r#type::common::*;
25
26pub mod section_0 {
27 use super::*;
28 use crate::r#type::instruction::mov::section_0::*;
29
30 impl PtxParser for Type {
35 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
36 {
38 let saved_pos = stream.position();
39 if stream.expect_string(".pred").is_ok() {
40 return Ok(Type::Pred);
41 }
42 stream.set_position(saved_pos);
43 }
44 let saved_pos = stream.position();
45 {
47 let saved_pos = stream.position();
48 if stream.expect_string(".b16").is_ok() {
49 return Ok(Type::B16);
50 }
51 stream.set_position(saved_pos);
52 }
53 stream.set_position(saved_pos);
54 let saved_pos = stream.position();
55 {
57 let saved_pos = stream.position();
58 if stream.expect_string(".b32").is_ok() {
59 return Ok(Type::B32);
60 }
61 stream.set_position(saved_pos);
62 }
63 stream.set_position(saved_pos);
64 let saved_pos = stream.position();
65 {
67 let saved_pos = stream.position();
68 if stream.expect_string(".b64").is_ok() {
69 return Ok(Type::B64);
70 }
71 stream.set_position(saved_pos);
72 }
73 stream.set_position(saved_pos);
74 let saved_pos = stream.position();
75 {
77 let saved_pos = stream.position();
78 if stream.expect_string(".u16").is_ok() {
79 return Ok(Type::U16);
80 }
81 stream.set_position(saved_pos);
82 }
83 stream.set_position(saved_pos);
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 saved_pos = stream.position();
135 {
137 let saved_pos = stream.position();
138 if stream.expect_string(".f32").is_ok() {
139 return Ok(Type::F32);
140 }
141 stream.set_position(saved_pos);
142 }
143 stream.set_position(saved_pos);
144 let saved_pos = stream.position();
145 {
147 let saved_pos = stream.position();
148 if stream.expect_string(".f64").is_ok() {
149 return Ok(Type::F64);
150 }
151 stream.set_position(saved_pos);
152 }
153 stream.set_position(saved_pos);
154 let span = stream
155 .peek()
156 .map(|(_, s)| s.clone())
157 .unwrap_or(Span { start: 0, end: 0 });
158 let expected = &[
159 ".pred", ".b16", ".b32", ".b64", ".u16", ".u32", ".u64", ".s16", ".s32", ".s64",
160 ".f32", ".f64",
161 ];
162 let found = stream
163 .peek()
164 .map(|(t, _)| format!("{:?}", t))
165 .unwrap_or_else(|_| "<end of input>".to_string());
166 Err(crate::parser::unexpected_value(span, expected, found))
167 }
168 }
169
170 impl PtxParser for MovType {
171 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
172 stream.expect_string("mov")?;
173 let type_ = Type::parse(stream)?;
174 stream.expect_complete()?;
175 let d = GeneralOperand::parse(stream)?;
176 stream.expect_complete()?;
177 stream.expect(&PtxToken::Comma)?;
178 let a = GeneralOperand::parse(stream)?;
179 stream.expect_complete()?;
180 stream.expect_complete()?;
181 stream.expect(&PtxToken::Semicolon)?;
182 Ok(MovType { type_, d, a })
183 }
184 }
185
186 impl PtxParser for MovU32 {
187 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
188 stream.expect_string("mov")?;
189 stream.expect_string(".u32")?;
190 let u32 = ();
191 stream.expect_complete()?;
192 let d = GeneralOperand::parse(stream)?;
193 stream.expect_complete()?;
194 stream.expect(&PtxToken::Comma)?;
195 let fname = GeneralOperand::parse(stream)?;
196 stream.expect_complete()?;
197 stream.expect_complete()?;
198 stream.expect(&PtxToken::Semicolon)?;
199 Ok(MovU32 { u32, d, fname })
200 }
201 }
202
203 impl PtxParser for MovU64 {
204 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
205 stream.expect_string("mov")?;
206 stream.expect_string(".u64")?;
207 let u64 = ();
208 stream.expect_complete()?;
209 let d = GeneralOperand::parse(stream)?;
210 stream.expect_complete()?;
211 stream.expect(&PtxToken::Comma)?;
212 let fname = GeneralOperand::parse(stream)?;
213 stream.expect_complete()?;
214 stream.expect_complete()?;
215 stream.expect(&PtxToken::Semicolon)?;
216 Ok(MovU64 { u64, d, fname })
217 }
218 }
219
220 impl PtxParser for MovU321 {
221 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
222 stream.expect_string("mov")?;
223 stream.expect_string(".u32")?;
224 let u32 = ();
225 stream.expect_complete()?;
226 let d = GeneralOperand::parse(stream)?;
227 stream.expect_complete()?;
228 stream.expect(&PtxToken::Comma)?;
229 let kernel = GeneralOperand::parse(stream)?;
230 stream.expect_complete()?;
231 stream.expect_complete()?;
232 stream.expect(&PtxToken::Semicolon)?;
233 Ok(MovU321 { u32, d, kernel })
234 }
235 }
236
237 impl PtxParser for MovU641 {
238 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
239 stream.expect_string("mov")?;
240 stream.expect_string(".u64")?;
241 let u64 = ();
242 stream.expect_complete()?;
243 let d = GeneralOperand::parse(stream)?;
244 stream.expect_complete()?;
245 stream.expect(&PtxToken::Comma)?;
246 let kernel = GeneralOperand::parse(stream)?;
247 stream.expect_complete()?;
248 stream.expect_complete()?;
249 stream.expect(&PtxToken::Semicolon)?;
250 Ok(MovU641 { u64, d, kernel })
251 }
252 }
253}
254
255pub mod section_1 {
256 use super::*;
257 use crate::r#type::instruction::mov::section_1::*;
258
259 impl PtxParser for Type {
264 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
265 {
267 let saved_pos = stream.position();
268 if stream.expect_string(".b128").is_ok() {
269 return Ok(Type::B128);
270 }
271 stream.set_position(saved_pos);
272 }
273 let saved_pos = stream.position();
274 {
276 let saved_pos = stream.position();
277 if stream.expect_string(".b16").is_ok() {
278 return Ok(Type::B16);
279 }
280 stream.set_position(saved_pos);
281 }
282 stream.set_position(saved_pos);
283 let saved_pos = stream.position();
284 {
286 let saved_pos = stream.position();
287 if stream.expect_string(".b32").is_ok() {
288 return Ok(Type::B32);
289 }
290 stream.set_position(saved_pos);
291 }
292 stream.set_position(saved_pos);
293 let saved_pos = stream.position();
294 {
296 let saved_pos = stream.position();
297 if stream.expect_string(".b64").is_ok() {
298 return Ok(Type::B64);
299 }
300 stream.set_position(saved_pos);
301 }
302 stream.set_position(saved_pos);
303 let span = stream
304 .peek()
305 .map(|(_, s)| s.clone())
306 .unwrap_or(Span { start: 0, end: 0 });
307 let expected = &[".b128", ".b16", ".b32", ".b64"];
308 let found = stream
309 .peek()
310 .map(|(t, _)| format!("{:?}", t))
311 .unwrap_or_else(|_| "<end of input>".to_string());
312 Err(crate::parser::unexpected_value(span, expected, found))
313 }
314 }
315
316 impl PtxParser for MovType1 {
317 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
318 stream.expect_string("mov")?;
319 let type_ = Type::parse(stream)?;
320 stream.expect_complete()?;
321 let d = GeneralOperand::parse(stream)?;
322 stream.expect_complete()?;
323 stream.expect(&PtxToken::Comma)?;
324 let a = GeneralOperand::parse(stream)?;
325 stream.expect_complete()?;
326 stream.expect_complete()?;
327 stream.expect(&PtxToken::Semicolon)?;
328 Ok(MovType1 { type_, d, a })
329 }
330 }
331}