ptx_parser/parser/instruction/
stmatrix.rs1#![allow(unused)]
10
11use crate::lexer::PtxToken;
12use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
13use crate::r#type::common::*;
14
15pub mod section_0 {
16 use super::*;
17 use crate::r#type::instruction::stmatrix::section_0::*;
18
19 impl PtxParser for Num {
24 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
25 {
27 let saved_pos = stream.position();
28 if stream.expect_string(".x1").is_ok() {
29 return Ok(Num::X1);
30 }
31 stream.set_position(saved_pos);
32 }
33 let saved_pos = stream.position();
34 {
36 let saved_pos = stream.position();
37 if stream.expect_string(".x2").is_ok() {
38 return Ok(Num::X2);
39 }
40 stream.set_position(saved_pos);
41 }
42 stream.set_position(saved_pos);
43 let saved_pos = stream.position();
44 {
46 let saved_pos = stream.position();
47 if stream.expect_string(".x4").is_ok() {
48 return Ok(Num::X4);
49 }
50 stream.set_position(saved_pos);
51 }
52 stream.set_position(saved_pos);
53 let span = stream
54 .peek()
55 .map(|(_, s)| s.clone())
56 .unwrap_or(Span { start: 0, end: 0 });
57 let expected = &[".x1", ".x2", ".x4"];
58 let found = stream
59 .peek()
60 .map(|(t, _)| format!("{:?}", t))
61 .unwrap_or_else(|_| "<end of input>".to_string());
62 Err(crate::parser::unexpected_value(span, expected, found))
63 }
64 }
65
66 impl PtxParser for Shape {
67 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
68 {
70 let saved_pos = stream.position();
71 if stream.expect_string(".m16n8").is_ok() {
72 return Ok(Shape::M16n8);
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(".m8n8").is_ok() {
81 return Ok(Shape::M8n8);
82 }
83 stream.set_position(saved_pos);
84 }
85 stream.set_position(saved_pos);
86 let span = stream
87 .peek()
88 .map(|(_, s)| s.clone())
89 .unwrap_or(Span { start: 0, end: 0 });
90 let expected = &[".m16n8", ".m8n8"];
91 let found = stream
92 .peek()
93 .map(|(t, _)| format!("{:?}", t))
94 .unwrap_or_else(|_| "<end of input>".to_string());
95 Err(crate::parser::unexpected_value(span, expected, found))
96 }
97 }
98
99 impl PtxParser for Ss {
100 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
101 {
103 let saved_pos = stream.position();
104 if stream.expect_string(".shared::cta").is_ok() {
105 return Ok(Ss::SharedCta);
106 }
107 stream.set_position(saved_pos);
108 }
109 let saved_pos = stream.position();
110 {
112 let saved_pos = stream.position();
113 if stream.expect_string(".shared").is_ok() {
114 return Ok(Ss::Shared);
115 }
116 stream.set_position(saved_pos);
117 }
118 stream.set_position(saved_pos);
119 let span = stream
120 .peek()
121 .map(|(_, s)| s.clone())
122 .unwrap_or(Span { start: 0, end: 0 });
123 let expected = &[".shared::cta", ".shared"];
124 let found = stream
125 .peek()
126 .map(|(t, _)| format!("{:?}", t))
127 .unwrap_or_else(|_| "<end of input>".to_string());
128 Err(crate::parser::unexpected_value(span, expected, found))
129 }
130 }
131
132 impl PtxParser for Type {
133 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
134 {
136 let saved_pos = stream.position();
137 if stream.expect_string(".b16").is_ok() {
138 return Ok(Type::B16);
139 }
140 stream.set_position(saved_pos);
141 }
142 let saved_pos = stream.position();
143 {
145 let saved_pos = stream.position();
146 if stream.expect_string(".b8").is_ok() {
147 return Ok(Type::B8);
148 }
149 stream.set_position(saved_pos);
150 }
151 stream.set_position(saved_pos);
152 let span = stream
153 .peek()
154 .map(|(_, s)| s.clone())
155 .unwrap_or(Span { start: 0, end: 0 });
156 let expected = &[".b16", ".b8"];
157 let found = stream
158 .peek()
159 .map(|(t, _)| format!("{:?}", t))
160 .unwrap_or_else(|_| "<end of input>".to_string());
161 Err(crate::parser::unexpected_value(span, expected, found))
162 }
163 }
164
165 impl PtxParser for StmatrixSyncAlignedShapeNumTransSsType {
166 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
167 stream.expect_string("stmatrix")?;
168 stream.expect_string(".sync")?;
169 let sync = ();
170 stream.expect_complete()?;
171 stream.expect_string(".aligned")?;
172 let aligned = ();
173 stream.expect_complete()?;
174 let shape = Shape::parse(stream)?;
175 stream.expect_complete()?;
176 let num = Num::parse(stream)?;
177 stream.expect_complete()?;
178 let saved_pos = stream.position();
179 let trans = stream.expect_string(".trans").is_ok();
180 if !trans {
181 stream.set_position(saved_pos);
182 }
183 stream.expect_complete()?;
184 let saved_pos = stream.position();
185 let ss = match Ss::parse(stream) {
186 Ok(val) => Some(val),
187 Err(_) => {
188 stream.set_position(saved_pos);
189 None
190 }
191 };
192 stream.expect_complete()?;
193 let type_ = Type::parse(stream)?;
194 stream.expect_complete()?;
195 let p = AddressOperand::parse(stream)?;
196 stream.expect_complete()?;
197 stream.expect(&PtxToken::Comma)?;
198 let r = GeneralOperand::parse(stream)?;
199 stream.expect_complete()?;
200 stream.expect_complete()?;
201 stream.expect(&PtxToken::Semicolon)?;
202 Ok(StmatrixSyncAlignedShapeNumTransSsType {
203 sync,
204 aligned,
205 shape,
206 num,
207 trans,
208 ss,
209 type_,
210 p,
211 r,
212 })
213 }
214 }
215}