ptx_parser/parser/instruction/
dp2a.rs1#![allow(unused)]
8
9use crate::lexer::PtxToken;
10use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
11use crate::r#type::common::*;
12
13pub mod section_0 {
14 use super::*;
15 use crate::r#type::instruction::dp2a::section_0::*;
16
17 impl PtxParser for Atype {
22 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
23 {
25 let saved_pos = stream.position();
26 if stream.expect_string(".u32").is_ok() {
27 return Ok(Atype::U32);
28 }
29 stream.set_position(saved_pos);
30 }
31 let saved_pos = stream.position();
32 {
34 let saved_pos = stream.position();
35 if stream.expect_string(".s32").is_ok() {
36 return Ok(Atype::S32);
37 }
38 stream.set_position(saved_pos);
39 }
40 stream.set_position(saved_pos);
41 let span = stream
42 .peek()
43 .map(|(_, s)| s.clone())
44 .unwrap_or(Span { start: 0, end: 0 });
45 let expected = &[".u32", ".s32"];
46 let found = stream
47 .peek()
48 .map(|(t, _)| format!("{:?}", t))
49 .unwrap_or_else(|_| "<end of input>".to_string());
50 Err(crate::parser::unexpected_value(span, expected, found))
51 }
52 }
53
54 impl PtxParser for Btype {
55 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
56 {
58 let saved_pos = stream.position();
59 if stream.expect_string(".u32").is_ok() {
60 return Ok(Btype::U32);
61 }
62 stream.set_position(saved_pos);
63 }
64 let saved_pos = stream.position();
65 {
67 let saved_pos = stream.position();
68 if stream.expect_string(".s32").is_ok() {
69 return Ok(Btype::S32);
70 }
71 stream.set_position(saved_pos);
72 }
73 stream.set_position(saved_pos);
74 let span = stream
75 .peek()
76 .map(|(_, s)| s.clone())
77 .unwrap_or(Span { start: 0, end: 0 });
78 let expected = &[".u32", ".s32"];
79 let found = stream
80 .peek()
81 .map(|(t, _)| format!("{:?}", t))
82 .unwrap_or_else(|_| "<end of input>".to_string());
83 Err(crate::parser::unexpected_value(span, expected, found))
84 }
85 }
86
87 impl PtxParser for Mode {
88 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
89 {
91 let saved_pos = stream.position();
92 if stream.expect_string(".lo").is_ok() {
93 return Ok(Mode::Lo);
94 }
95 stream.set_position(saved_pos);
96 }
97 let saved_pos = stream.position();
98 {
100 let saved_pos = stream.position();
101 if stream.expect_string(".hi").is_ok() {
102 return Ok(Mode::Hi);
103 }
104 stream.set_position(saved_pos);
105 }
106 stream.set_position(saved_pos);
107 let span = stream
108 .peek()
109 .map(|(_, s)| s.clone())
110 .unwrap_or(Span { start: 0, end: 0 });
111 let expected = &[".lo", ".hi"];
112 let found = stream
113 .peek()
114 .map(|(t, _)| format!("{:?}", t))
115 .unwrap_or_else(|_| "<end of input>".to_string());
116 Err(crate::parser::unexpected_value(span, expected, found))
117 }
118 }
119
120 impl PtxParser for Dp2aModeAtypeBtype {
121 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
122 stream.expect_string("dp2a")?;
123 let mode = Mode::parse(stream)?;
124 stream.expect_complete()?;
125 let atype = Atype::parse(stream)?;
126 stream.expect_complete()?;
127 let btype = Btype::parse(stream)?;
128 stream.expect_complete()?;
129 let d = GeneralOperand::parse(stream)?;
130 stream.expect_complete()?;
131 stream.expect(&PtxToken::Comma)?;
132 let a = GeneralOperand::parse(stream)?;
133 stream.expect_complete()?;
134 stream.expect(&PtxToken::Comma)?;
135 let b = GeneralOperand::parse(stream)?;
136 stream.expect_complete()?;
137 stream.expect(&PtxToken::Comma)?;
138 let c = GeneralOperand::parse(stream)?;
139 stream.expect_complete()?;
140 stream.expect_complete()?;
141 stream.expect(&PtxToken::Semicolon)?;
142 Ok(Dp2aModeAtypeBtype {
143 mode,
144 atype,
145 btype,
146 d,
147 a,
148 b,
149 c,
150 })
151 }
152 }
153}