ptx_parser/parser/instruction/
cvta.rs1#![allow(unused)]
13
14use crate::lexer::PtxToken;
15use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
16use crate::r#type::common::*;
17
18pub mod section_0 {
19 use super::*;
20 use crate::r#type::instruction::cvta::section_0::*;
21
22 impl PtxParser for Size {
27 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
28 {
30 let saved_pos = stream.position();
31 if stream.expect_string(".u32").is_ok() {
32 return Ok(Size::U32);
33 }
34 stream.set_position(saved_pos);
35 }
36 let saved_pos = stream.position();
37 {
39 let saved_pos = stream.position();
40 if stream.expect_string(".u64").is_ok() {
41 return Ok(Size::U64);
42 }
43 stream.set_position(saved_pos);
44 }
45 stream.set_position(saved_pos);
46 let span = stream
47 .peek()
48 .map(|(_, s)| s.clone())
49 .unwrap_or(Span { start: 0, end: 0 });
50 let expected = &[".u32", ".u64"];
51 let found = stream
52 .peek()
53 .map(|(t, _)| format!("{:?}", t))
54 .unwrap_or_else(|_| "<end of input>".to_string());
55 Err(crate::parser::unexpected_value(span, expected, found))
56 }
57 }
58
59 impl PtxParser for Space {
60 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
61 {
63 let saved_pos = stream.position();
64 if stream.expect_string(".shared::cluster").is_ok() {
65 return Ok(Space::SharedCluster);
66 }
67 stream.set_position(saved_pos);
68 }
69 let saved_pos = stream.position();
70 {
72 let saved_pos = stream.position();
73 if stream.expect_string(".param::entry").is_ok() {
74 return Ok(Space::ParamEntry);
75 }
76 stream.set_position(saved_pos);
77 }
78 stream.set_position(saved_pos);
79 let saved_pos = stream.position();
80 {
82 let saved_pos = stream.position();
83 if stream.expect_string(".shared::cta").is_ok() {
84 return Ok(Space::SharedCta);
85 }
86 stream.set_position(saved_pos);
87 }
88 stream.set_position(saved_pos);
89 let saved_pos = stream.position();
90 {
92 let saved_pos = stream.position();
93 if stream.expect_string(".global").is_ok() {
94 return Ok(Space::Global);
95 }
96 stream.set_position(saved_pos);
97 }
98 stream.set_position(saved_pos);
99 let saved_pos = stream.position();
100 {
102 let saved_pos = stream.position();
103 if stream.expect_string(".shared").is_ok() {
104 return Ok(Space::Shared);
105 }
106 stream.set_position(saved_pos);
107 }
108 stream.set_position(saved_pos);
109 let saved_pos = stream.position();
110 {
112 let saved_pos = stream.position();
113 if stream.expect_string(".const").is_ok() {
114 return Ok(Space::Const);
115 }
116 stream.set_position(saved_pos);
117 }
118 stream.set_position(saved_pos);
119 let saved_pos = stream.position();
120 {
122 let saved_pos = stream.position();
123 if stream.expect_string(".local").is_ok() {
124 return Ok(Space::Local);
125 }
126 stream.set_position(saved_pos);
127 }
128 stream.set_position(saved_pos);
129 let saved_pos = stream.position();
130 {
132 let saved_pos = stream.position();
133 if stream.expect_string(".param").is_ok() {
134 return Ok(Space::Param);
135 }
136 stream.set_position(saved_pos);
137 }
138 stream.set_position(saved_pos);
139 let span = stream
140 .peek()
141 .map(|(_, s)| s.clone())
142 .unwrap_or(Span { start: 0, end: 0 });
143 let expected = &[
144 ".shared::cluster",
145 ".param::entry",
146 ".shared::cta",
147 ".global",
148 ".shared",
149 ".const",
150 ".local",
151 ".param",
152 ];
153 let found = stream
154 .peek()
155 .map(|(t, _)| format!("{:?}", t))
156 .unwrap_or_else(|_| "<end of input>".to_string());
157 Err(crate::parser::unexpected_value(span, expected, found))
158 }
159 }
160
161 impl PtxParser for CvtaSpaceSize {
162 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
163 stream.expect_string("cvta")?;
164 let space = Space::parse(stream)?;
165 stream.expect_complete()?;
166 let size = Size::parse(stream)?;
167 stream.expect_complete()?;
168 let p = GeneralOperand::parse(stream)?;
169 stream.expect_complete()?;
170 stream.expect(&PtxToken::Comma)?;
171 let a = GeneralOperand::parse(stream)?;
172 stream.expect_complete()?;
173 stream.expect_complete()?;
174 stream.expect(&PtxToken::Semicolon)?;
175 Ok(CvtaSpaceSize { space, size, p, a })
176 }
177 }
178
179 impl PtxParser for CvtaToSpaceSize {
180 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
181 stream.expect_string("cvta")?;
182 stream.expect_string(".to")?;
183 let to = ();
184 stream.expect_complete()?;
185 let space = Space::parse(stream)?;
186 stream.expect_complete()?;
187 let size = Size::parse(stream)?;
188 stream.expect_complete()?;
189 let p = GeneralOperand::parse(stream)?;
190 stream.expect_complete()?;
191 stream.expect(&PtxToken::Comma)?;
192 let a = GeneralOperand::parse(stream)?;
193 stream.expect_complete()?;
194 stream.expect_complete()?;
195 stream.expect(&PtxToken::Semicolon)?;
196 Ok(CvtaToSpaceSize {
197 to,
198 space,
199 size,
200 p,
201 a,
202 })
203 }
204 }
205}