ptx_parser/parser/instruction/
cp_reduce_async_bulk_tensor.rs1#![allow(unused)]
13
14use crate::lexer::PtxToken;
15use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
16use crate::r#type::common::*;
17
18pub mod section_0 {
19 use super::*;
20 use crate::r#type::instruction::cp_reduce_async_bulk_tensor::section_0::*;
21
22 impl PtxParser for CompletionMechanism {
27 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
28 {
30 let saved_pos = stream.position();
31 if stream.expect_string(".bulk_group").is_ok() {
32 return Ok(CompletionMechanism::BulkGroup);
33 }
34 stream.set_position(saved_pos);
35 }
36 let span = stream
37 .peek()
38 .map(|(_, s)| s.clone())
39 .unwrap_or(Span { start: 0, end: 0 });
40 let expected = &[".bulk_group"];
41 let found = stream
42 .peek()
43 .map(|(t, _)| format!("{:?}", t))
44 .unwrap_or_else(|_| "<end of input>".to_string());
45 Err(crate::parser::unexpected_value(span, expected, found))
46 }
47 }
48
49 impl PtxParser for Dim {
50 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
51 {
53 let saved_pos = stream.position();
54 if stream.expect_string(".1d").is_ok() {
55 return Ok(Dim::_1d);
56 }
57 stream.set_position(saved_pos);
58 }
59 let saved_pos = stream.position();
60 {
62 let saved_pos = stream.position();
63 if stream.expect_string(".2d").is_ok() {
64 return Ok(Dim::_2d);
65 }
66 stream.set_position(saved_pos);
67 }
68 stream.set_position(saved_pos);
69 let saved_pos = stream.position();
70 {
72 let saved_pos = stream.position();
73 if stream.expect_string(".3d").is_ok() {
74 return Ok(Dim::_3d);
75 }
76 stream.set_position(saved_pos);
77 }
78 stream.set_position(saved_pos);
79 let saved_pos = stream.position();
80 {
82 let saved_pos = stream.position();
83 if stream.expect_string(".4d").is_ok() {
84 return Ok(Dim::_4d);
85 }
86 stream.set_position(saved_pos);
87 }
88 stream.set_position(saved_pos);
89 let saved_pos = stream.position();
90 {
92 let saved_pos = stream.position();
93 if stream.expect_string(".5d").is_ok() {
94 return Ok(Dim::_5d);
95 }
96 stream.set_position(saved_pos);
97 }
98 stream.set_position(saved_pos);
99 let span = stream
100 .peek()
101 .map(|(_, s)| s.clone())
102 .unwrap_or(Span { start: 0, end: 0 });
103 let expected = &[".1d", ".2d", ".3d", ".4d", ".5d"];
104 let found = stream
105 .peek()
106 .map(|(t, _)| format!("{:?}", t))
107 .unwrap_or_else(|_| "<end of input>".to_string());
108 Err(crate::parser::unexpected_value(span, expected, found))
109 }
110 }
111
112 impl PtxParser for Dst {
113 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
114 {
116 let saved_pos = stream.position();
117 if stream.expect_string(".global").is_ok() {
118 return Ok(Dst::Global);
119 }
120 stream.set_position(saved_pos);
121 }
122 let span = stream
123 .peek()
124 .map(|(_, s)| s.clone())
125 .unwrap_or(Span { start: 0, end: 0 });
126 let expected = &[".global"];
127 let found = stream
128 .peek()
129 .map(|(t, _)| format!("{:?}", t))
130 .unwrap_or_else(|_| "<end of input>".to_string());
131 Err(crate::parser::unexpected_value(span, expected, found))
132 }
133 }
134
135 impl PtxParser for LoadMode {
136 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
137 {
139 let saved_pos = stream.position();
140 if stream.expect_string(".im2col_no_offs").is_ok() {
141 return Ok(LoadMode::Im2colNoOffs);
142 }
143 stream.set_position(saved_pos);
144 }
145 let saved_pos = stream.position();
146 {
148 let saved_pos = stream.position();
149 if stream.expect_string(".tile").is_ok() {
150 return Ok(LoadMode::Tile);
151 }
152 stream.set_position(saved_pos);
153 }
154 stream.set_position(saved_pos);
155 let span = stream
156 .peek()
157 .map(|(_, s)| s.clone())
158 .unwrap_or(Span { start: 0, end: 0 });
159 let expected = &[".im2col_no_offs", ".tile"];
160 let found = stream
161 .peek()
162 .map(|(t, _)| format!("{:?}", t))
163 .unwrap_or_else(|_| "<end of input>".to_string());
164 Err(crate::parser::unexpected_value(span, expected, found))
165 }
166 }
167
168 impl PtxParser for Redop {
169 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
170 {
172 let saved_pos = stream.position();
173 if stream.expect_string(".add").is_ok() {
174 return Ok(Redop::Add);
175 }
176 stream.set_position(saved_pos);
177 }
178 let saved_pos = stream.position();
179 {
181 let saved_pos = stream.position();
182 if stream.expect_string(".min").is_ok() {
183 return Ok(Redop::Min);
184 }
185 stream.set_position(saved_pos);
186 }
187 stream.set_position(saved_pos);
188 let saved_pos = stream.position();
189 {
191 let saved_pos = stream.position();
192 if stream.expect_string(".max").is_ok() {
193 return Ok(Redop::Max);
194 }
195 stream.set_position(saved_pos);
196 }
197 stream.set_position(saved_pos);
198 let saved_pos = stream.position();
199 {
201 let saved_pos = stream.position();
202 if stream.expect_string(".inc").is_ok() {
203 return Ok(Redop::Inc);
204 }
205 stream.set_position(saved_pos);
206 }
207 stream.set_position(saved_pos);
208 let saved_pos = stream.position();
209 {
211 let saved_pos = stream.position();
212 if stream.expect_string(".dec").is_ok() {
213 return Ok(Redop::Dec);
214 }
215 stream.set_position(saved_pos);
216 }
217 stream.set_position(saved_pos);
218 let saved_pos = stream.position();
219 {
221 let saved_pos = stream.position();
222 if stream.expect_string(".and").is_ok() {
223 return Ok(Redop::And);
224 }
225 stream.set_position(saved_pos);
226 }
227 stream.set_position(saved_pos);
228 let saved_pos = stream.position();
229 {
231 let saved_pos = stream.position();
232 if stream.expect_string(".xor").is_ok() {
233 return Ok(Redop::Xor);
234 }
235 stream.set_position(saved_pos);
236 }
237 stream.set_position(saved_pos);
238 let saved_pos = stream.position();
239 {
241 let saved_pos = stream.position();
242 if stream.expect_string(".or").is_ok() {
243 return Ok(Redop::Or);
244 }
245 stream.set_position(saved_pos);
246 }
247 stream.set_position(saved_pos);
248 let span = stream
249 .peek()
250 .map(|(_, s)| s.clone())
251 .unwrap_or(Span { start: 0, end: 0 });
252 let expected = &[
253 ".add", ".min", ".max", ".inc", ".dec", ".and", ".xor", ".or",
254 ];
255 let found = stream
256 .peek()
257 .map(|(t, _)| format!("{:?}", t))
258 .unwrap_or_else(|_| "<end of input>".to_string());
259 Err(crate::parser::unexpected_value(span, expected, found))
260 }
261 }
262
263 impl PtxParser for Src {
264 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
265 {
267 let saved_pos = stream.position();
268 if stream.expect_string(".shared::cta").is_ok() {
269 return Ok(Src::SharedCta);
270 }
271 stream.set_position(saved_pos);
272 }
273 let span = stream
274 .peek()
275 .map(|(_, s)| s.clone())
276 .unwrap_or(Span { start: 0, end: 0 });
277 let expected = &[".shared::cta"];
278 let found = stream
279 .peek()
280 .map(|(t, _)| format!("{:?}", t))
281 .unwrap_or_else(|_| "<end of input>".to_string());
282 Err(crate::parser::unexpected_value(span, expected, found))
283 }
284 }
285
286 impl PtxParser for CpReduceAsyncBulkTensorDimDstSrcRedopLoadModeCompletionMechanismLevelCacheHint {
287 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
288 stream.expect_string("cp")?;
289 stream.expect_string(".reduce")?;
290 let reduce = ();
291 stream.expect_complete()?;
292 stream.expect_string(".async")?;
293 let async_ = ();
294 stream.expect_complete()?;
295 stream.expect_string(".bulk")?;
296 let bulk = ();
297 stream.expect_complete()?;
298 stream.expect_string(".tensor")?;
299 let tensor = ();
300 stream.expect_complete()?;
301 let dim = Dim::parse(stream)?;
302 stream.expect_complete()?;
303 let dst = Dst::parse(stream)?;
304 stream.expect_complete()?;
305 let src = Src::parse(stream)?;
306 stream.expect_complete()?;
307 let redop = Redop::parse(stream)?;
308 stream.expect_complete()?;
309 let saved_pos = stream.position();
310 let load_mode = match LoadMode::parse(stream) {
311 Ok(val) => Some(val),
312 Err(_) => {
313 stream.set_position(saved_pos);
314 None
315 }
316 };
317 stream.expect_complete()?;
318 let completion_mechanism = CompletionMechanism::parse(stream)?;
319 stream.expect_complete()?;
320 let saved_pos = stream.position();
321 let level_cache_hint = stream.expect_string(".level::cache_hint").is_ok();
322 if !level_cache_hint {
323 stream.set_position(saved_pos);
324 }
325 stream.expect_complete()?;
326 let tensormap = TexHandler2::parse(stream)?;
327 stream.expect_complete()?;
328 stream.expect(&PtxToken::Comma)?;
329 let srcmem = AddressOperand::parse(stream)?;
330 stream.expect_complete()?;
331 let saved_pos = stream.position();
332 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
333 if !has_comma {
334 stream.set_position(saved_pos);
335 }
336 let saved_pos = stream.position();
337 let cache_policy = match GeneralOperand::parse(stream) {
338 Ok(val) => Some(val),
339 Err(_) => {
340 stream.set_position(saved_pos);
341 None
342 }
343 };
344 stream.expect_complete()?;
345 stream.expect_complete()?;
346 stream.expect(&PtxToken::Semicolon)?;
347 Ok(
348 CpReduceAsyncBulkTensorDimDstSrcRedopLoadModeCompletionMechanismLevelCacheHint {
349 reduce,
350 async_,
351 bulk,
352 tensor,
353 dim,
354 dst,
355 src,
356 redop,
357 load_mode,
358 completion_mechanism,
359 level_cache_hint,
360 tensormap,
361 srcmem,
362 cache_policy,
363 },
364 )
365 }
366 }
367}