Skip to main content

ptx_parser/parser/instruction/
tensormap_replace.rs

1//! Original PTX specification:
2//!
3//! tensormap.replace.mode.field1{.ss}.b1024.type  [addr], new_val;
4//! tensormap.replace.mode.field2{.ss}.b1024.type  [addr], ord, new_val;
5//! tensormap.replace.mode.field3{.ss}.b1024.type  [addr], new_val;
6//! .mode    = { .tile };
7//! .field1  = { .global_address, .rank };
8//! .field2  = { .box_dim, .global_dim, .global_stride, .element_stride  };
9//! .field3  = { .elemtype,  .interleave_layout, .swizzle_mode, .swizzle_atomicity, .fill_mode };
10//! .ss      = { .global, .shared::cta };
11//! .type    = { .b32, .b64 };
12
13#![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    // ============================================================================
30    // Generated enum parsers
31    // ============================================================================
32
33    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}