1#![allow(unused)]
14
15use crate::parser::{
16 PtxParseError, PtxParser, PtxTokenStream, Span,
17 util::{
18 between, comma_p, directive_p, exclamation_p, lbracket_p, lparen_p, map, minus_p, optional,
19 pipe_p, rbracket_p, rparen_p, semicolon_p, sep_by, string_p, try_map,
20 },
21};
22use crate::r#type::common::*;
23use crate::{alt, ok, seq_n};
24
25pub mod section_0 {
26 use super::*;
27 use crate::r#type::instruction::bar::section_0::*;
28
29 impl PtxParser for Op {
34 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
35 alt!(
36 map(string_p(".and"), |_, _span| Op::And),
37 map(string_p(".or"), |_, _span| Op::Or)
38 )
39 }
40 }
41
42 impl PtxParser for BarrierCtaSyncAligned {
43 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
44 try_map(
45 seq_n!(
46 string_p("barrier"),
47 map(optional(string_p(".cta")), |value, _| value.is_some()),
48 string_p(".sync"),
49 map(optional(string_p(".aligned")), |value, _| value.is_some()),
50 GeneralOperand::parse(),
51 map(
52 optional(seq_n!(comma_p(), GeneralOperand::parse())),
53 |value, _| value.map(|(_, operand)| operand)
54 ),
55 semicolon_p()
56 ),
57 |(_, cta, sync, aligned, a, b, _), span| {
58 ok!(BarrierCtaSyncAligned {
59 cta = cta,
60 sync = sync,
61 aligned = aligned,
62 a = a,
63 b = b,
64
65 })
66 },
67 )
68 }
69 }
70
71 impl PtxParser for BarrierCtaArriveAligned {
72 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
73 try_map(
74 seq_n!(
75 string_p("barrier"),
76 map(optional(string_p(".cta")), |value, _| value.is_some()),
77 string_p(".arrive"),
78 map(optional(string_p(".aligned")), |value, _| value.is_some()),
79 GeneralOperand::parse(),
80 comma_p(),
81 GeneralOperand::parse(),
82 semicolon_p()
83 ),
84 |(_, cta, arrive, aligned, a, _, b, _), span| {
85 ok!(BarrierCtaArriveAligned {
86 cta = cta,
87 arrive = arrive,
88 aligned = aligned,
89 a = a,
90 b = b,
91
92 })
93 },
94 )
95 }
96 }
97
98 impl PtxParser for BarrierCtaRedPopcAlignedU32 {
99 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
100 try_map(
101 seq_n!(
102 string_p("barrier"),
103 map(optional(string_p(".cta")), |value, _| value.is_some()),
104 string_p(".red"),
105 string_p(".popc"),
106 map(optional(string_p(".aligned")), |value, _| value.is_some()),
107 string_p(".u32"),
108 GeneralOperand::parse(),
109 comma_p(),
110 GeneralOperand::parse(),
111 map(
112 optional(seq_n!(comma_p(), GeneralOperand::parse())),
113 |value, _| value.map(|(_, operand)| operand)
114 ),
115 comma_p(),
116 map(optional(exclamation_p()), |value, _| value.is_some()),
117 GeneralOperand::parse(),
118 semicolon_p()
119 ),
120 |(_, cta, red, popc, aligned, u32, d, _, a, b, _, c_op, c, _), span| {
121 ok!(BarrierCtaRedPopcAlignedU32 {
122 cta = cta,
123 red = red,
124 popc = popc,
125 aligned = aligned,
126 u32 = u32,
127 d = d,
128 a = a,
129 b = b,
130 c_op = c_op,
131 c = c,
132
133 })
134 },
135 )
136 }
137 }
138
139 impl PtxParser for BarrierCtaRedOpAlignedPred {
140 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
141 try_map(
142 seq_n!(
143 string_p("barrier"),
144 map(optional(string_p(".cta")), |value, _| value.is_some()),
145 string_p(".red"),
146 Op::parse(),
147 map(optional(string_p(".aligned")), |value, _| value.is_some()),
148 string_p(".pred"),
149 GeneralOperand::parse(),
150 comma_p(),
151 GeneralOperand::parse(),
152 map(
153 optional(seq_n!(comma_p(), GeneralOperand::parse())),
154 |value, _| value.map(|(_, operand)| operand)
155 ),
156 comma_p(),
157 map(optional(exclamation_p()), |value, _| value.is_some()),
158 GeneralOperand::parse(),
159 semicolon_p()
160 ),
161 |(_, cta, red, op, aligned, pred, p, _, a, b, _, c_op, c, _), span| {
162 ok!(BarrierCtaRedOpAlignedPred {
163 cta = cta,
164 red = red,
165 op = op,
166 aligned = aligned,
167 pred = pred,
168 p = p,
169 a = a,
170 b = b,
171 c_op = c_op,
172 c = c,
173
174 })
175 },
176 )
177 }
178 }
179
180 impl PtxParser for BarCtaSync {
181 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
182 try_map(
183 seq_n!(
184 string_p("bar"),
185 map(optional(string_p(".cta")), |value, _| value.is_some()),
186 string_p(".sync"),
187 GeneralOperand::parse(),
188 map(
189 optional(seq_n!(comma_p(), GeneralOperand::parse())),
190 |value, _| value.map(|(_, operand)| operand)
191 ),
192 semicolon_p()
193 ),
194 |(_, cta, sync, a, b, _), span| {
195 ok!(BarCtaSync {
196 cta = cta,
197 sync = sync,
198 a = a,
199 b = b,
200
201 })
202 },
203 )
204 }
205 }
206
207 impl PtxParser for BarCtaArrive {
208 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
209 try_map(
210 seq_n!(
211 string_p("bar"),
212 map(optional(string_p(".cta")), |value, _| value.is_some()),
213 string_p(".arrive"),
214 GeneralOperand::parse(),
215 comma_p(),
216 GeneralOperand::parse(),
217 semicolon_p()
218 ),
219 |(_, cta, arrive, a, _, b, _), span| {
220 ok!(BarCtaArrive {
221 cta = cta,
222 arrive = arrive,
223 a = a,
224 b = b,
225
226 })
227 },
228 )
229 }
230 }
231
232 impl PtxParser for BarCtaRedPopcU32 {
233 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
234 try_map(
235 seq_n!(
236 string_p("bar"),
237 map(optional(string_p(".cta")), |value, _| value.is_some()),
238 string_p(".red"),
239 string_p(".popc"),
240 string_p(".u32"),
241 GeneralOperand::parse(),
242 comma_p(),
243 GeneralOperand::parse(),
244 map(
245 optional(seq_n!(comma_p(), GeneralOperand::parse())),
246 |value, _| value.map(|(_, operand)| operand)
247 ),
248 comma_p(),
249 map(optional(exclamation_p()), |value, _| value.is_some()),
250 GeneralOperand::parse(),
251 semicolon_p()
252 ),
253 |(_, cta, red, popc, u32, d, _, a, b, _, c_op, c, _), span| {
254 ok!(BarCtaRedPopcU32 {
255 cta = cta,
256 red = red,
257 popc = popc,
258 u32 = u32,
259 d = d,
260 a = a,
261 b = b,
262 c_op = c_op,
263 c = c,
264
265 })
266 },
267 )
268 }
269 }
270
271 impl PtxParser for BarCtaRedOpPred {
272 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
273 try_map(
274 seq_n!(
275 string_p("bar"),
276 map(optional(string_p(".cta")), |value, _| value.is_some()),
277 string_p(".red"),
278 Op::parse(),
279 string_p(".pred"),
280 GeneralOperand::parse(),
281 comma_p(),
282 GeneralOperand::parse(),
283 map(
284 optional(seq_n!(comma_p(), GeneralOperand::parse())),
285 |value, _| value.map(|(_, operand)| operand)
286 ),
287 comma_p(),
288 map(optional(exclamation_p()), |value, _| value.is_some()),
289 GeneralOperand::parse(),
290 semicolon_p()
291 ),
292 |(_, cta, red, op, pred, p, _, a, b, _, c_op, c, _), span| {
293 ok!(BarCtaRedOpPred {
294 cta = cta,
295 red = red,
296 op = op,
297 pred = pred,
298 p = p,
299 a = a,
300 b = b,
301 c_op = c_op,
302 c = c,
303
304 })
305 },
306 )
307 }
308 }
309}