ptx_parser/parser/instruction/
redux_sync.rs1#![allow(unused)]
16
17use crate::lexer::PtxToken;
18use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
19use crate::r#type::common::*;
20
21pub mod section_0 {
22 use super::*;
23 use crate::r#type::instruction::redux_sync::section_0::*;
24
25 impl PtxParser for Op {
30 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
31 {
33 let saved_pos = stream.position();
34 if stream.expect_string(".add").is_ok() {
35 return Ok(Op::Add);
36 }
37 stream.set_position(saved_pos);
38 }
39 let saved_pos = stream.position();
40 {
42 let saved_pos = stream.position();
43 if stream.expect_string(".min").is_ok() {
44 return Ok(Op::Min);
45 }
46 stream.set_position(saved_pos);
47 }
48 stream.set_position(saved_pos);
49 let saved_pos = stream.position();
50 {
52 let saved_pos = stream.position();
53 if stream.expect_string(".max").is_ok() {
54 return Ok(Op::Max);
55 }
56 stream.set_position(saved_pos);
57 }
58 stream.set_position(saved_pos);
59 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
60 let expected = &[".add", ".min", ".max"];
61 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
62 Err(crate::parser::unexpected_value(span, expected, found))
63 }
64 }
65
66 impl PtxParser for Type {
67 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
68 {
70 let saved_pos = stream.position();
71 if stream.expect_string(".u32").is_ok() {
72 return Ok(Type::U32);
73 }
74 stream.set_position(saved_pos);
75 }
76 let saved_pos = stream.position();
77 {
79 let saved_pos = stream.position();
80 if stream.expect_string(".s32").is_ok() {
81 return Ok(Type::S32);
82 }
83 stream.set_position(saved_pos);
84 }
85 stream.set_position(saved_pos);
86 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
87 let expected = &[".u32", ".s32"];
88 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
89 Err(crate::parser::unexpected_value(span, expected, found))
90 }
91 }
92
93 impl PtxParser for ReduxSyncOpType {
94 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
95 stream.expect_string("redux")?;
96 stream.expect_string(".sync")?;
97 let sync = ();
98 stream.expect_complete()?;
99 let op = Op::parse(stream)?;
100 stream.expect_complete()?;
101 let type_ = Type::parse(stream)?;
102 stream.expect_complete()?;
103 let dst = GeneralOperand::parse(stream)?;
104 stream.expect_complete()?;
105 stream.expect(&PtxToken::Comma)?;
106 let src = GeneralOperand::parse(stream)?;
107 stream.expect_complete()?;
108 stream.expect(&PtxToken::Comma)?;
109 let membermask = GeneralOperand::parse(stream)?;
110 stream.expect_complete()?;
111 stream.expect_complete()?;
112 stream.expect(&PtxToken::Semicolon)?;
113 Ok(ReduxSyncOpType {
114 sync,
115 op,
116 type_,
117 dst,
118 src,
119 membermask,
120 })
121 }
122 }
123
124
125}
126
127pub mod section_1 {
128 use super::*;
129 use crate::r#type::instruction::redux_sync::section_1::*;
130
131 impl PtxParser for Op {
136 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
137 {
139 let saved_pos = stream.position();
140 if stream.expect_string(".and").is_ok() {
141 return Ok(Op::And);
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(".xor").is_ok() {
150 return Ok(Op::Xor);
151 }
152 stream.set_position(saved_pos);
153 }
154 stream.set_position(saved_pos);
155 let saved_pos = stream.position();
156 {
158 let saved_pos = stream.position();
159 if stream.expect_string(".or").is_ok() {
160 return Ok(Op::Or);
161 }
162 stream.set_position(saved_pos);
163 }
164 stream.set_position(saved_pos);
165 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
166 let expected = &[".and", ".xor", ".or"];
167 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
168 Err(crate::parser::unexpected_value(span, expected, found))
169 }
170 }
171
172 impl PtxParser for ReduxSyncOpB32 {
173 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
174 stream.expect_string("redux")?;
175 stream.expect_string(".sync")?;
176 let sync = ();
177 stream.expect_complete()?;
178 let op = Op::parse(stream)?;
179 stream.expect_complete()?;
180 stream.expect_string(".b32")?;
181 let b32 = ();
182 stream.expect_complete()?;
183 let dst = GeneralOperand::parse(stream)?;
184 stream.expect_complete()?;
185 stream.expect(&PtxToken::Comma)?;
186 let src = GeneralOperand::parse(stream)?;
187 stream.expect_complete()?;
188 stream.expect(&PtxToken::Comma)?;
189 let membermask = GeneralOperand::parse(stream)?;
190 stream.expect_complete()?;
191 stream.expect_complete()?;
192 stream.expect(&PtxToken::Semicolon)?;
193 Ok(ReduxSyncOpB32 {
194 sync,
195 op,
196 b32,
197 dst,
198 src,
199 membermask,
200 })
201 }
202 }
203
204
205}
206
207pub mod section_2 {
208 use super::*;
209 use crate::r#type::instruction::redux_sync::section_2::*;
210
211 impl PtxParser for Op {
216 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
217 {
219 let saved_pos = stream.position();
220 if stream.expect_string(".min").is_ok() {
221 return Ok(Op::Min);
222 }
223 stream.set_position(saved_pos);
224 }
225 let saved_pos = stream.position();
226 {
228 let saved_pos = stream.position();
229 if stream.expect_string(".max").is_ok() {
230 return Ok(Op::Max);
231 }
232 stream.set_position(saved_pos);
233 }
234 stream.set_position(saved_pos);
235 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
236 let expected = &[".min", ".max"];
237 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
238 Err(crate::parser::unexpected_value(span, expected, found))
239 }
240 }
241
242 impl PtxParser for ReduxSyncOpAbsNanF32 {
243 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
244 stream.expect_string("redux")?;
245 stream.expect_string(".sync")?;
246 let sync = ();
247 stream.expect_complete()?;
248 let op = Op::parse(stream)?;
249 stream.expect_complete()?;
250 let saved_pos = stream.position();
251 let abs = stream.expect_string(".abs").is_ok();
252 if !abs {
253 stream.set_position(saved_pos);
254 }
255 stream.expect_complete()?;
256 let saved_pos = stream.position();
257 let nan = stream.expect_string(".NaN").is_ok();
258 if !nan {
259 stream.set_position(saved_pos);
260 }
261 stream.expect_complete()?;
262 stream.expect_string(".f32")?;
263 let f32 = ();
264 stream.expect_complete()?;
265 let dst = GeneralOperand::parse(stream)?;
266 stream.expect_complete()?;
267 stream.expect(&PtxToken::Comma)?;
268 let src = GeneralOperand::parse(stream)?;
269 stream.expect_complete()?;
270 stream.expect(&PtxToken::Comma)?;
271 let membermask = GeneralOperand::parse(stream)?;
272 stream.expect_complete()?;
273 stream.expect_complete()?;
274 stream.expect(&PtxToken::Semicolon)?;
275 Ok(ReduxSyncOpAbsNanF32 {
276 sync,
277 op,
278 abs,
279 nan,
280 f32,
281 dst,
282 src,
283 membermask,
284 })
285 }
286 }
287
288
289}
290