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
134 .peek()
135 .map(|(_, s)| s.clone())
136 .unwrap_or(Span { start: 0, end: 0 });
137 let expected = &[
138 ".b16", ".b32", ".b64", ".u16", ".u32", ".u64", ".s16", ".s32", ".s64", ".f32",
139 ".f64",
140 ];
141 let found = stream
142 .peek()
143 .map(|(t, _)| format!("{:?}", t))
144 .unwrap_or_else(|_| "<end of input>".to_string());
145 Err(crate::parser::unexpected_value(span, expected, found))
146 }
147 }
148
149 impl PtxParser for SelpType {
150 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
151 stream.expect_string("selp")?;
152 let type_ = Type::parse(stream)?;
153 stream.expect_complete()?;
154 let d = GeneralOperand::parse(stream)?;
155 stream.expect_complete()?;
156 stream.expect(&PtxToken::Comma)?;
157 let a = GeneralOperand::parse(stream)?;
158 stream.expect_complete()?;
159 stream.expect(&PtxToken::Comma)?;
160 let b = GeneralOperand::parse(stream)?;
161 stream.expect_complete()?;
162 stream.expect(&PtxToken::Comma)?;
163 let c = GeneralOperand::parse(stream)?;
164 stream.expect_complete()?;
165 stream.expect_complete()?;
166 stream.expect(&PtxToken::Semicolon)?;
167 Ok(SelpType { type_, d, a, b, c })
168 }
169 }
170}