ptx_parser/parser/instruction/
tensormap_replace.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::tensormap_replace::section_0::*;
22
23 impl PtxParser for Field1 {
28 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
29 {
31 let saved_pos = stream.position();
32 if stream.expect_string(".global_address").is_ok() {
33 return Ok(Field1::GlobalAddress);
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(".rank").is_ok() {
42 return Ok(Field1::Rank);
43 }
44 stream.set_position(saved_pos);
45 }
46 stream.set_position(saved_pos);
47 let span = stream
48 .peek()
49 .map(|(_, s)| s.clone())
50 .unwrap_or(Span { start: 0, end: 0 });
51 let expected = &[".global_address", ".rank"];
52 let found = stream
53 .peek()
54 .map(|(t, _)| format!("{:?}", t))
55 .unwrap_or_else(|_| "<end of input>".to_string());
56 Err(crate::parser::unexpected_value(span, expected, found))
57 }
58 }
59
60 impl PtxParser for Field2 {
61 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
62 {
64 let saved_pos = stream.position();
65 if stream.expect_string(".element_stride").is_ok() {
66 return Ok(Field2::ElementStride);
67 }
68 stream.set_position(saved_pos);
69 }
70 let saved_pos = stream.position();
71 {
73 let saved_pos = stream.position();
74 if stream.expect_string(".global_stride").is_ok() {
75 return Ok(Field2::GlobalStride);
76 }
77 stream.set_position(saved_pos);
78 }
79 stream.set_position(saved_pos);
80 let saved_pos = stream.position();
81 {
83 let saved_pos = stream.position();
84 if stream.expect_string(".global_dim").is_ok() {
85 return Ok(Field2::GlobalDim);
86 }
87 stream.set_position(saved_pos);
88 }
89 stream.set_position(saved_pos);
90 let saved_pos = stream.position();
91 {
93 let saved_pos = stream.position();
94 if stream.expect_string(".box_dim").is_ok() {
95 return Ok(Field2::BoxDim);
96 }
97 stream.set_position(saved_pos);
98 }
99 stream.set_position(saved_pos);
100 let span = stream
101 .peek()
102 .map(|(_, s)| s.clone())
103 .unwrap_or(Span { start: 0, end: 0 });
104 let expected = &[
105 ".element_stride",
106 ".global_stride",
107 ".global_dim",
108 ".box_dim",
109 ];
110 let found = stream
111 .peek()
112 .map(|(t, _)| format!("{:?}", t))
113 .unwrap_or_else(|_| "<end of input>".to_string());
114 Err(crate::parser::unexpected_value(span, expected, found))
115 }
116 }
117
118 impl PtxParser for Field3 {
119 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
120 {
122 let saved_pos = stream.position();
123 if stream.expect_string(".interleave_layout").is_ok() {
124 return Ok(Field3::InterleaveLayout);
125 }
126 stream.set_position(saved_pos);
127 }
128 let saved_pos = stream.position();
129 {
131 let saved_pos = stream.position();
132 if stream.expect_string(".swizzle_atomicity").is_ok() {
133 return Ok(Field3::SwizzleAtomicity);
134 }
135 stream.set_position(saved_pos);
136 }
137 stream.set_position(saved_pos);
138 let saved_pos = stream.position();
139 {
141 let saved_pos = stream.position();
142 if stream.expect_string(".swizzle_mode").is_ok() {
143 return Ok(Field3::SwizzleMode);
144 }
145 stream.set_position(saved_pos);
146 }
147 stream.set_position(saved_pos);
148 let saved_pos = stream.position();
149 {
151 let saved_pos = stream.position();
152 if stream.expect_string(".fill_mode").is_ok() {
153 return Ok(Field3::FillMode);
154 }
155 stream.set_position(saved_pos);
156 }
157 stream.set_position(saved_pos);
158 let saved_pos = stream.position();
159 {
161 let saved_pos = stream.position();
162 if stream.expect_string(".elemtype").is_ok() {
163 return Ok(Field3::Elemtype);
164 }
165 stream.set_position(saved_pos);
166 }
167 stream.set_position(saved_pos);
168 let span = stream
169 .peek()
170 .map(|(_, s)| s.clone())
171 .unwrap_or(Span { start: 0, end: 0 });
172 let expected = &[
173 ".interleave_layout",
174 ".swizzle_atomicity",
175 ".swizzle_mode",
176 ".fill_mode",
177 ".elemtype",
178 ];
179 let found = stream
180 .peek()
181 .map(|(t, _)| format!("{:?}", t))
182 .unwrap_or_else(|_| "<end of input>".to_string());
183 Err(crate::parser::unexpected_value(span, expected, found))
184 }
185 }
186
187 impl PtxParser for Mode {
188 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
189 {
191 let saved_pos = stream.position();
192 if stream.expect_string(".tile").is_ok() {
193 return Ok(Mode::Tile);
194 }
195 stream.set_position(saved_pos);
196 }
197 let span = stream
198 .peek()
199 .map(|(_, s)| s.clone())
200 .unwrap_or(Span { start: 0, end: 0 });
201 let expected = &[".tile"];
202 let found = stream
203 .peek()
204 .map(|(t, _)| format!("{:?}", t))
205 .unwrap_or_else(|_| "<end of input>".to_string());
206 Err(crate::parser::unexpected_value(span, expected, found))
207 }
208 }
209
210 impl PtxParser for Ss {
211 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
212 {
214 let saved_pos = stream.position();
215 if stream.expect_string(".shared::cta").is_ok() {
216 return Ok(Ss::SharedCta);
217 }
218 stream.set_position(saved_pos);
219 }
220 let saved_pos = stream.position();
221 {
223 let saved_pos = stream.position();
224 if stream.expect_string(".global").is_ok() {
225 return Ok(Ss::Global);
226 }
227 stream.set_position(saved_pos);
228 }
229 stream.set_position(saved_pos);
230 let span = stream
231 .peek()
232 .map(|(_, s)| s.clone())
233 .unwrap_or(Span { start: 0, end: 0 });
234 let expected = &[".shared::cta", ".global"];
235 let found = stream
236 .peek()
237 .map(|(t, _)| format!("{:?}", t))
238 .unwrap_or_else(|_| "<end of input>".to_string());
239 Err(crate::parser::unexpected_value(span, expected, found))
240 }
241 }
242
243 impl PtxParser for Type {
244 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
245 {
247 let saved_pos = stream.position();
248 if stream.expect_string(".b32").is_ok() {
249 return Ok(Type::B32);
250 }
251 stream.set_position(saved_pos);
252 }
253 let saved_pos = stream.position();
254 {
256 let saved_pos = stream.position();
257 if stream.expect_string(".b64").is_ok() {
258 return Ok(Type::B64);
259 }
260 stream.set_position(saved_pos);
261 }
262 stream.set_position(saved_pos);
263 let span = stream
264 .peek()
265 .map(|(_, s)| s.clone())
266 .unwrap_or(Span { start: 0, end: 0 });
267 let expected = &[".b32", ".b64"];
268 let found = stream
269 .peek()
270 .map(|(t, _)| format!("{:?}", t))
271 .unwrap_or_else(|_| "<end of input>".to_string());
272 Err(crate::parser::unexpected_value(span, expected, found))
273 }
274 }
275
276 impl PtxParser for TensormapReplaceModeField1SsB1024Type {
277 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
278 stream.expect_string("tensormap")?;
279 stream.expect_string(".replace")?;
280 let replace = ();
281 stream.expect_complete()?;
282 let mode = Mode::parse(stream)?;
283 stream.expect_complete()?;
284 let field1 = Field1::parse(stream)?;
285 stream.expect_complete()?;
286 let saved_pos = stream.position();
287 let ss = match Ss::parse(stream) {
288 Ok(val) => Some(val),
289 Err(_) => {
290 stream.set_position(saved_pos);
291 None
292 }
293 };
294 stream.expect_complete()?;
295 stream.expect_string(".b1024")?;
296 let b1024 = ();
297 stream.expect_complete()?;
298 let type_ = Type::parse(stream)?;
299 stream.expect_complete()?;
300 let addr = AddressOperand::parse(stream)?;
301 stream.expect_complete()?;
302 stream.expect(&PtxToken::Comma)?;
303 let new_val = GeneralOperand::parse(stream)?;
304 stream.expect_complete()?;
305 stream.expect_complete()?;
306 stream.expect(&PtxToken::Semicolon)?;
307 Ok(TensormapReplaceModeField1SsB1024Type {
308 replace,
309 mode,
310 field1,
311 ss,
312 b1024,
313 type_,
314 addr,
315 new_val,
316 })
317 }
318 }
319
320 impl PtxParser for TensormapReplaceModeField2SsB1024Type {
321 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
322 stream.expect_string("tensormap")?;
323 stream.expect_string(".replace")?;
324 let replace = ();
325 stream.expect_complete()?;
326 let mode = Mode::parse(stream)?;
327 stream.expect_complete()?;
328 let field2 = Field2::parse(stream)?;
329 stream.expect_complete()?;
330 let saved_pos = stream.position();
331 let ss = match Ss::parse(stream) {
332 Ok(val) => Some(val),
333 Err(_) => {
334 stream.set_position(saved_pos);
335 None
336 }
337 };
338 stream.expect_complete()?;
339 stream.expect_string(".b1024")?;
340 let b1024 = ();
341 stream.expect_complete()?;
342 let type_ = Type::parse(stream)?;
343 stream.expect_complete()?;
344 let addr = AddressOperand::parse(stream)?;
345 stream.expect_complete()?;
346 stream.expect(&PtxToken::Comma)?;
347 let ord = GeneralOperand::parse(stream)?;
348 stream.expect_complete()?;
349 stream.expect(&PtxToken::Comma)?;
350 let new_val = GeneralOperand::parse(stream)?;
351 stream.expect_complete()?;
352 stream.expect_complete()?;
353 stream.expect(&PtxToken::Semicolon)?;
354 Ok(TensormapReplaceModeField2SsB1024Type {
355 replace,
356 mode,
357 field2,
358 ss,
359 b1024,
360 type_,
361 addr,
362 ord,
363 new_val,
364 })
365 }
366 }
367
368 impl PtxParser for TensormapReplaceModeField3SsB1024Type {
369 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
370 stream.expect_string("tensormap")?;
371 stream.expect_string(".replace")?;
372 let replace = ();
373 stream.expect_complete()?;
374 let mode = Mode::parse(stream)?;
375 stream.expect_complete()?;
376 let field3 = Field3::parse(stream)?;
377 stream.expect_complete()?;
378 let saved_pos = stream.position();
379 let ss = match Ss::parse(stream) {
380 Ok(val) => Some(val),
381 Err(_) => {
382 stream.set_position(saved_pos);
383 None
384 }
385 };
386 stream.expect_complete()?;
387 stream.expect_string(".b1024")?;
388 let b1024 = ();
389 stream.expect_complete()?;
390 let type_ = Type::parse(stream)?;
391 stream.expect_complete()?;
392 let addr = AddressOperand::parse(stream)?;
393 stream.expect_complete()?;
394 stream.expect(&PtxToken::Comma)?;
395 let new_val = GeneralOperand::parse(stream)?;
396 stream.expect_complete()?;
397 stream.expect_complete()?;
398 stream.expect(&PtxToken::Semicolon)?;
399 Ok(TensormapReplaceModeField3SsB1024Type {
400 replace,
401 mode,
402 field3,
403 ss,
404 b1024,
405 type_,
406 addr,
407 new_val,
408 })
409 }
410 }
411}