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::ldmatrix::section_0::*;
28
29 impl PtxParser for DstFmt {
34 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
35 alt!(map(string_p(".b8x16"), |_, _span| DstFmt::B8x16))
36 }
37 }
38
39 impl PtxParser for Num {
40 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
41 alt!(
42 map(string_p(".x1"), |_, _span| Num::X1),
43 map(string_p(".x2"), |_, _span| Num::X2),
44 map(string_p(".x4"), |_, _span| Num::X4)
45 )
46 }
47 }
48
49 impl PtxParser for Shape {
50 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
51 alt!(
52 map(string_p(".m16n16"), |_, _span| Shape::M16n16),
53 map(string_p(".m8n8"), |_, _span| Shape::M8n8)
54 )
55 }
56 }
57
58 impl PtxParser for SrcFmt {
59 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
60 alt!(
61 map(string_p(".b6x16_p32"), |_, _span| SrcFmt::B6x16P32),
62 map(string_p(".b4x16_p64"), |_, _span| SrcFmt::B4x16P64)
63 )
64 }
65 }
66
67 impl PtxParser for Ss {
68 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
69 alt!(
70 map(string_p(".shared::cta"), |_, _span| Ss::SharedCta),
71 map(string_p(".shared"), |_, _span| Ss::Shared)
72 )
73 }
74 }
75
76 impl PtxParser for Type {
77 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
78 alt!(
79 map(string_p(".b16"), |_, _span| Type::B16),
80 map(string_p(".b8"), |_, _span| Type::B8)
81 )
82 }
83 }
84
85 impl PtxParser for LdmatrixSyncAlignedShapeNumTransSsType {
86 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
87 try_map(
88 seq_n!(
89 string_p("ldmatrix"),
90 string_p(".sync"),
91 string_p(".aligned"),
92 Shape::parse(),
93 Num::parse(),
94 map(optional(string_p(".trans")), |value, _| value.is_some()),
95 optional(Ss::parse()),
96 Type::parse(),
97 GeneralOperand::parse(),
98 comma_p(),
99 AddressOperand::parse(),
100 semicolon_p()
101 ),
102 |(_, sync, aligned, shape, num, trans, ss, type_, r, _, p, _), span| {
103 ok!(LdmatrixSyncAlignedShapeNumTransSsType {
104 sync = sync,
105 aligned = aligned,
106 shape = shape,
107 num = num,
108 trans = trans,
109 ss = ss,
110 type_ = type_,
111 r = r,
112 p = p,
113
114 })
115 },
116 )
117 }
118 }
119
120 impl PtxParser for LdmatrixSyncAlignedM8n16NumSsDstFmtSrcFmt {
121 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
122 try_map(
123 seq_n!(
124 string_p("ldmatrix"),
125 string_p(".sync"),
126 string_p(".aligned"),
127 string_p(".m8n16"),
128 Num::parse(),
129 optional(Ss::parse()),
130 DstFmt::parse(),
131 SrcFmt::parse(),
132 GeneralOperand::parse(),
133 comma_p(),
134 AddressOperand::parse(),
135 semicolon_p()
136 ),
137 |(_, sync, aligned, m8n16, num, ss, dst_fmt, src_fmt, r, _, p, _), span| {
138 ok!(LdmatrixSyncAlignedM8n16NumSsDstFmtSrcFmt {
139 sync = sync,
140 aligned = aligned,
141 m8n16 = m8n16,
142 num = num,
143 ss = ss,
144 dst_fmt = dst_fmt,
145 src_fmt = src_fmt,
146 r = r,
147 p = p,
148
149 })
150 },
151 )
152 }
153 }
154
155 impl PtxParser for LdmatrixSyncAlignedM16n16NumTransSsDstFmtSrcFmt {
156 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
157 try_map(
158 seq_n!(
159 string_p("ldmatrix"),
160 string_p(".sync"),
161 string_p(".aligned"),
162 string_p(".m16n16"),
163 Num::parse(),
164 string_p(".trans"),
165 optional(Ss::parse()),
166 DstFmt::parse(),
167 SrcFmt::parse(),
168 GeneralOperand::parse(),
169 comma_p(),
170 AddressOperand::parse(),
171 semicolon_p()
172 ),
173 |(_, sync, aligned, m16n16, num, trans, ss, dst_fmt, src_fmt, r, _, p, _), span| {
174 ok!(LdmatrixSyncAlignedM16n16NumTransSsDstFmtSrcFmt {
175 sync = sync,
176 aligned = aligned,
177 m16n16 = m16n16,
178 num = num,
179 trans = trans,
180 ss = ss,
181 dst_fmt = dst_fmt,
182 src_fmt = src_fmt,
183 r = r,
184 p = p,
185
186 })
187 },
188 )
189 }
190 }
191}