ptx_parser/parser/instruction/
selp.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::selp::section_0::*;
18
19 impl PtxParser for Type {
24 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
25 {
27 let saved_pos = stream.position();
28 if stream.expect_string(".b16").is_ok() {
29 return Ok(Type::B16);
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(".b32").is_ok() {
38 return Ok(Type::B32);
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(".b64").is_ok() {
48 return Ok(Type::B64);
49 }
50 stream.set_position(saved_pos);
51 }
52 stream.set_position(saved_pos);
53 let saved_pos = stream.position();
54 {
56 let saved_pos = stream.position();
57 if stream.expect_string(".u16").is_ok() {
58 return Ok(Type::U16);
59 }
60 stream.set_position(saved_pos);
61 }
62 stream.set_position(saved_pos);
63 let saved_pos = stream.position();
64 {
66 let saved_pos = stream.position();
67 if stream.expect_string(".u32").is_ok() {
68 return Ok(Type::U32);
69 }
70 stream.set_position(saved_pos);
71 }
72 stream.set_position(saved_pos);
73 let saved_pos = stream.position();
74 {
76 let saved_pos = stream.position();
77 if stream.expect_string(".u64").is_ok() {
78 return Ok(Type::U64);
79 }
80 stream.set_position(saved_pos);
81 }
82 stream.set_position(saved_pos);
83 let saved_pos = stream.position();
84 {
86 let saved_pos = stream.position();
87 if stream.expect_string(".s16").is_ok() {
88 return Ok(Type::S16);
89 }
90 stream.set_position(saved_pos);
91 }
92 stream.set_position(saved_pos);
93 let saved_pos = stream.position();
94 {
96 let saved_pos = stream.position();
97 if stream.expect_string(".s32").is_ok() {
98 return Ok(Type::S32);
99 }
100 stream.set_position(saved_pos);
101 }
102 stream.set_position(saved_pos);
103 let saved_pos = stream.position();
104 {
106 let saved_pos = stream.position();
107 if stream.expect_string(".s64").is_ok() {
108 return Ok(Type::S64);
109 }
110 stream.set_position(saved_pos);
111 }
112 stream.set_position(saved_pos);
113 let saved_pos = stream.position();
114 {
116 let saved_pos = stream.position();
117 if stream.expect_string(".f32").is_ok() {
118 return Ok(Type::F32);
119 }
120 stream.set_position(saved_pos);
121 }
122 stream.set_position(saved_pos);
123 let saved_pos = stream.position();
124 {
126 let saved_pos = stream.position();
127 if stream.expect_string(".f64").is_ok() {
128 return Ok(Type::F64);
129 }
130 stream.set_position(saved_pos);
131 }
132 stream.set_position(saved_pos);
133 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
134 let expected = &[".b16", ".b32", ".b64", ".u16", ".u32", ".u64", ".s16", ".s32", ".s64", ".f32", ".f64"];
135 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
136 Err(crate::parser::unexpected_value(span, expected, found))
137 }
138 }
139
140 impl PtxParser for SelpType {
141 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
142 stream.expect_string("selp")?;
143 let type_ = Type::parse(stream)?;
144 stream.expect_complete()?;
145 let d = GeneralOperand::parse(stream)?;
146 stream.expect_complete()?;
147 stream.expect(&PtxToken::Comma)?;
148 let a = GeneralOperand::parse(stream)?;
149 stream.expect_complete()?;
150 stream.expect(&PtxToken::Comma)?;
151 let b = GeneralOperand::parse(stream)?;
152 stream.expect_complete()?;
153 stream.expect(&PtxToken::Comma)?;
154 let c = GeneralOperand::parse(stream)?;
155 stream.expect_complete()?;
156 stream.expect_complete()?;
157 stream.expect(&PtxToken::Semicolon)?;
158 Ok(SelpType {
159 type_,
160 d,
161 a,
162 b,
163 c,
164 })
165 }
166 }
167
168
169}
170