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::tensormap_replace::section_0::*;
28
29 impl PtxParser for Field1 {
34 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
35 alt!(
36 map(string_p(".global_address"), |_, _span| {
37 Field1::GlobalAddress
38 }),
39 map(string_p(".rank"), |_, _span| Field1::Rank)
40 )
41 }
42 }
43
44 impl PtxParser for Field2 {
45 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
46 alt!(
47 map(string_p(".element_stride"), |_, _span| {
48 Field2::ElementStride
49 }),
50 map(string_p(".global_stride"), |_, _span| Field2::GlobalStride),
51 map(string_p(".global_dim"), |_, _span| Field2::GlobalDim),
52 map(string_p(".box_dim"), |_, _span| Field2::BoxDim)
53 )
54 }
55 }
56
57 impl PtxParser for Field3 {
58 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
59 alt!(
60 map(string_p(".interleave_layout"), |_, _span| {
61 Field3::InterleaveLayout
62 }),
63 map(string_p(".swizzle_atomicity"), |_, _span| {
64 Field3::SwizzleAtomicity
65 }),
66 map(string_p(".swizzle_mode"), |_, _span| Field3::SwizzleMode),
67 map(string_p(".fill_mode"), |_, _span| Field3::FillMode),
68 map(string_p(".elemtype"), |_, _span| Field3::Elemtype)
69 )
70 }
71 }
72
73 impl PtxParser for Mode {
74 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
75 alt!(map(string_p(".tile"), |_, _span| Mode::Tile))
76 }
77 }
78
79 impl PtxParser for Ss {
80 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
81 alt!(
82 map(string_p(".shared::cta"), |_, _span| Ss::SharedCta),
83 map(string_p(".global"), |_, _span| Ss::Global)
84 )
85 }
86 }
87
88 impl PtxParser for Type {
89 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
90 alt!(
91 map(string_p(".b32"), |_, _span| Type::B32),
92 map(string_p(".b64"), |_, _span| Type::B64)
93 )
94 }
95 }
96
97 impl PtxParser for TensormapReplaceModeField1SsB1024Type {
98 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
99 try_map(
100 seq_n!(
101 string_p("tensormap"),
102 string_p(".replace"),
103 Mode::parse(),
104 Field1::parse(),
105 optional(Ss::parse()),
106 string_p(".b1024"),
107 Type::parse(),
108 AddressOperand::parse(),
109 comma_p(),
110 GeneralOperand::parse(),
111 semicolon_p()
112 ),
113 |(_, replace, mode, field1, ss, b1024, type_, addr, _, new_val, _), span| {
114 ok!(TensormapReplaceModeField1SsB1024Type {
115 replace = replace,
116 mode = mode,
117 field1 = field1,
118 ss = ss,
119 b1024 = b1024,
120 type_ = type_,
121 addr = addr,
122 new_val = new_val,
123
124 })
125 },
126 )
127 }
128 }
129
130 impl PtxParser for TensormapReplaceModeField2SsB1024Type {
131 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
132 try_map(
133 seq_n!(
134 string_p("tensormap"),
135 string_p(".replace"),
136 Mode::parse(),
137 Field2::parse(),
138 optional(Ss::parse()),
139 string_p(".b1024"),
140 Type::parse(),
141 AddressOperand::parse(),
142 comma_p(),
143 GeneralOperand::parse(),
144 comma_p(),
145 GeneralOperand::parse(),
146 semicolon_p()
147 ),
148 |(_, replace, mode, field2, ss, b1024, type_, addr, _, ord, _, new_val, _),
149 span| {
150 ok!(TensormapReplaceModeField2SsB1024Type {
151 replace = replace,
152 mode = mode,
153 field2 = field2,
154 ss = ss,
155 b1024 = b1024,
156 type_ = type_,
157 addr = addr,
158 ord = ord,
159 new_val = new_val,
160
161 })
162 },
163 )
164 }
165 }
166
167 impl PtxParser for TensormapReplaceModeField3SsB1024Type {
168 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
169 try_map(
170 seq_n!(
171 string_p("tensormap"),
172 string_p(".replace"),
173 Mode::parse(),
174 Field3::parse(),
175 optional(Ss::parse()),
176 string_p(".b1024"),
177 Type::parse(),
178 AddressOperand::parse(),
179 comma_p(),
180 GeneralOperand::parse(),
181 semicolon_p()
182 ),
183 |(_, replace, mode, field3, ss, b1024, type_, addr, _, new_val, _), span| {
184 ok!(TensormapReplaceModeField3SsB1024Type {
185 replace = replace,
186 mode = mode,
187 field3 = field3,
188 ss = ss,
189 b1024 = b1024,
190 type_ = type_,
191 addr = addr,
192 new_val = new_val,
193
194 })
195 },
196 )
197 }
198 }
199}