ptx_parser/parser/instruction/
shf.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::shf::section_0::*;
16
17 impl PtxParser for Mode {
22 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
23 {
25 let saved_pos = stream.position();
26 if stream.expect_string(".clamp").is_ok() {
27 return Ok(Mode::Clamp);
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(".wrap").is_ok() {
36 return Ok(Mode::Wrap);
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 = &[".clamp", ".wrap"];
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 ShfLModeB32 {
55 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
56 stream.expect_string("shf")?;
57 stream.expect_string(".l")?;
58 let l = ();
59 stream.expect_complete()?;
60 let mode = Mode::parse(stream)?;
61 stream.expect_complete()?;
62 stream.expect_string(".b32")?;
63 let b32 = ();
64 stream.expect_complete()?;
65 let d = GeneralOperand::parse(stream)?;
66 stream.expect_complete()?;
67 stream.expect(&PtxToken::Comma)?;
68 let a = GeneralOperand::parse(stream)?;
69 stream.expect_complete()?;
70 stream.expect(&PtxToken::Comma)?;
71 let b = GeneralOperand::parse(stream)?;
72 stream.expect_complete()?;
73 stream.expect(&PtxToken::Comma)?;
74 let c = GeneralOperand::parse(stream)?;
75 stream.expect_complete()?;
76 stream.expect_complete()?;
77 stream.expect(&PtxToken::Semicolon)?;
78 Ok(ShfLModeB32 {
79 l,
80 mode,
81 b32,
82 d,
83 a,
84 b,
85 c,
86 })
87 }
88 }
89
90 impl PtxParser for ShfRModeB32 {
91 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
92 stream.expect_string("shf")?;
93 stream.expect_string(".r")?;
94 let r = ();
95 stream.expect_complete()?;
96 let mode = Mode::parse(stream)?;
97 stream.expect_complete()?;
98 stream.expect_string(".b32")?;
99 let b32 = ();
100 stream.expect_complete()?;
101 let d = GeneralOperand::parse(stream)?;
102 stream.expect_complete()?;
103 stream.expect(&PtxToken::Comma)?;
104 let a = GeneralOperand::parse(stream)?;
105 stream.expect_complete()?;
106 stream.expect(&PtxToken::Comma)?;
107 let b = GeneralOperand::parse(stream)?;
108 stream.expect_complete()?;
109 stream.expect(&PtxToken::Comma)?;
110 let c = GeneralOperand::parse(stream)?;
111 stream.expect_complete()?;
112 stream.expect_complete()?;
113 stream.expect(&PtxToken::Semicolon)?;
114 Ok(ShfRModeB32 {
115 r,
116 mode,
117 b32,
118 d,
119 a,
120 b,
121 c,
122 })
123 }
124 }
125}