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