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.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
37 let expected = &[".bulk_group"];
38 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
39 Err(crate::parser::unexpected_value(span, expected, found))
40 }
41 }
42
43 impl PtxParser for Dim {
44 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
45 {
47 let saved_pos = stream.position();
48 if stream.expect_string(".1d").is_ok() {
49 return Ok(Dim::_1d);
50 }
51 stream.set_position(saved_pos);
52 }
53 let saved_pos = stream.position();
54 {
56 let saved_pos = stream.position();
57 if stream.expect_string(".2d").is_ok() {
58 return Ok(Dim::_2d);
59 }
60 stream.set_position(saved_pos);
61 }
62 stream.set_position(saved_pos);
63 let saved_pos = stream.position();
64 {
66 let saved_pos = stream.position();
67 if stream.expect_string(".3d").is_ok() {
68 return Ok(Dim::_3d);
69 }
70 stream.set_position(saved_pos);
71 }
72 stream.set_position(saved_pos);
73 let saved_pos = stream.position();
74 {
76 let saved_pos = stream.position();
77 if stream.expect_string(".4d").is_ok() {
78 return Ok(Dim::_4d);
79 }
80 stream.set_position(saved_pos);
81 }
82 stream.set_position(saved_pos);
83 let saved_pos = stream.position();
84 {
86 let saved_pos = stream.position();
87 if stream.expect_string(".5d").is_ok() {
88 return Ok(Dim::_5d);
89 }
90 stream.set_position(saved_pos);
91 }
92 stream.set_position(saved_pos);
93 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
94 let expected = &[".1d", ".2d", ".3d", ".4d", ".5d"];
95 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
96 Err(crate::parser::unexpected_value(span, expected, found))
97 }
98 }
99
100 impl PtxParser for Dst {
101 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
102 {
104 let saved_pos = stream.position();
105 if stream.expect_string(".global").is_ok() {
106 return Ok(Dst::Global);
107 }
108 stream.set_position(saved_pos);
109 }
110 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
111 let expected = &[".global"];
112 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
113 Err(crate::parser::unexpected_value(span, expected, found))
114 }
115 }
116
117 impl PtxParser for LoadMode {
118 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
119 {
121 let saved_pos = stream.position();
122 if stream.expect_string(".im2col_no_offs").is_ok() {
123 return Ok(LoadMode::Im2colNoOffs);
124 }
125 stream.set_position(saved_pos);
126 }
127 let saved_pos = stream.position();
128 {
130 let saved_pos = stream.position();
131 if stream.expect_string(".tile").is_ok() {
132 return Ok(LoadMode::Tile);
133 }
134 stream.set_position(saved_pos);
135 }
136 stream.set_position(saved_pos);
137 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
138 let expected = &[".im2col_no_offs", ".tile"];
139 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
140 Err(crate::parser::unexpected_value(span, expected, found))
141 }
142 }
143
144 impl PtxParser for Redop {
145 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
146 {
148 let saved_pos = stream.position();
149 if stream.expect_string(".add").is_ok() {
150 return Ok(Redop::Add);
151 }
152 stream.set_position(saved_pos);
153 }
154 let saved_pos = stream.position();
155 {
157 let saved_pos = stream.position();
158 if stream.expect_string(".min").is_ok() {
159 return Ok(Redop::Min);
160 }
161 stream.set_position(saved_pos);
162 }
163 stream.set_position(saved_pos);
164 let saved_pos = stream.position();
165 {
167 let saved_pos = stream.position();
168 if stream.expect_string(".max").is_ok() {
169 return Ok(Redop::Max);
170 }
171 stream.set_position(saved_pos);
172 }
173 stream.set_position(saved_pos);
174 let saved_pos = stream.position();
175 {
177 let saved_pos = stream.position();
178 if stream.expect_string(".inc").is_ok() {
179 return Ok(Redop::Inc);
180 }
181 stream.set_position(saved_pos);
182 }
183 stream.set_position(saved_pos);
184 let saved_pos = stream.position();
185 {
187 let saved_pos = stream.position();
188 if stream.expect_string(".dec").is_ok() {
189 return Ok(Redop::Dec);
190 }
191 stream.set_position(saved_pos);
192 }
193 stream.set_position(saved_pos);
194 let saved_pos = stream.position();
195 {
197 let saved_pos = stream.position();
198 if stream.expect_string(".and").is_ok() {
199 return Ok(Redop::And);
200 }
201 stream.set_position(saved_pos);
202 }
203 stream.set_position(saved_pos);
204 let saved_pos = stream.position();
205 {
207 let saved_pos = stream.position();
208 if stream.expect_string(".xor").is_ok() {
209 return Ok(Redop::Xor);
210 }
211 stream.set_position(saved_pos);
212 }
213 stream.set_position(saved_pos);
214 let saved_pos = stream.position();
215 {
217 let saved_pos = stream.position();
218 if stream.expect_string(".or").is_ok() {
219 return Ok(Redop::Or);
220 }
221 stream.set_position(saved_pos);
222 }
223 stream.set_position(saved_pos);
224 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
225 let expected = &[".add", ".min", ".max", ".inc", ".dec", ".and", ".xor", ".or"];
226 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
227 Err(crate::parser::unexpected_value(span, expected, found))
228 }
229 }
230
231 impl PtxParser for Src {
232 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
233 {
235 let saved_pos = stream.position();
236 if stream.expect_string(".shared::cta").is_ok() {
237 return Ok(Src::SharedCta);
238 }
239 stream.set_position(saved_pos);
240 }
241 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
242 let expected = &[".shared::cta"];
243 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
244 Err(crate::parser::unexpected_value(span, expected, found))
245 }
246 }
247
248 impl PtxParser for CpReduceAsyncBulkTensorDimDstSrcRedopLoadModeCompletionMechanismLevelCacheHint {
249 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
250 stream.expect_string("cp")?;
251 stream.expect_string(".reduce")?;
252 let reduce = ();
253 stream.expect_complete()?;
254 stream.expect_string(".async")?;
255 let async_ = ();
256 stream.expect_complete()?;
257 stream.expect_string(".bulk")?;
258 let bulk = ();
259 stream.expect_complete()?;
260 stream.expect_string(".tensor")?;
261 let tensor = ();
262 stream.expect_complete()?;
263 let dim = Dim::parse(stream)?;
264 stream.expect_complete()?;
265 let dst = Dst::parse(stream)?;
266 stream.expect_complete()?;
267 let src = Src::parse(stream)?;
268 stream.expect_complete()?;
269 let redop = Redop::parse(stream)?;
270 stream.expect_complete()?;
271 let saved_pos = stream.position();
272 let load_mode = match LoadMode::parse(stream) {
273 Ok(val) => Some(val),
274 Err(_) => {
275 stream.set_position(saved_pos);
276 None
277 }
278 };
279 stream.expect_complete()?;
280 let completion_mechanism = CompletionMechanism::parse(stream)?;
281 stream.expect_complete()?;
282 let saved_pos = stream.position();
283 let level_cache_hint = stream.expect_string(".level::cache_hint").is_ok();
284 if !level_cache_hint {
285 stream.set_position(saved_pos);
286 }
287 stream.expect_complete()?;
288 let tensormap = TexHandler2::parse(stream)?;
289 stream.expect_complete()?;
290 stream.expect(&PtxToken::Comma)?;
291 let srcmem = AddressOperand::parse(stream)?;
292 stream.expect_complete()?;
293 let saved_pos = stream.position();
294 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
295 if !has_comma {
296 stream.set_position(saved_pos);
297 }
298 let saved_pos = stream.position();
299 let cache_policy = match GeneralOperand::parse(stream) {
300 Ok(val) => Some(val),
301 Err(_) => {
302 stream.set_position(saved_pos);
303 None
304 }
305 };
306 stream.expect_complete()?;
307 stream.expect_complete()?;
308 stream.expect(&PtxToken::Semicolon)?;
309 Ok(CpReduceAsyncBulkTensorDimDstSrcRedopLoadModeCompletionMechanismLevelCacheHint {
310 reduce,
311 async_,
312 bulk,
313 tensor,
314 dim,
315 dst,
316 src,
317 redop,
318 load_mode,
319 completion_mechanism,
320 level_cache_hint,
321 tensormap,
322 srcmem,
323 cache_policy,
324 })
325 }
326 }
327
328
329}
330