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.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
42 let expected = &[".clamp", ".wrap"];
43 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
44 Err(crate::parser::unexpected_value(span, expected, found))
45 }
46 }
47
48 impl PtxParser for ShfLModeB32 {
49 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
50 stream.expect_string("shf")?;
51 stream.expect_string(".l")?;
52 let l = ();
53 stream.expect_complete()?;
54 let mode = Mode::parse(stream)?;
55 stream.expect_complete()?;
56 stream.expect_string(".b32")?;
57 let b32 = ();
58 stream.expect_complete()?;
59 let d = GeneralOperand::parse(stream)?;
60 stream.expect_complete()?;
61 stream.expect(&PtxToken::Comma)?;
62 let a = GeneralOperand::parse(stream)?;
63 stream.expect_complete()?;
64 stream.expect(&PtxToken::Comma)?;
65 let b = GeneralOperand::parse(stream)?;
66 stream.expect_complete()?;
67 stream.expect(&PtxToken::Comma)?;
68 let c = GeneralOperand::parse(stream)?;
69 stream.expect_complete()?;
70 stream.expect_complete()?;
71 stream.expect(&PtxToken::Semicolon)?;
72 Ok(ShfLModeB32 {
73 l,
74 mode,
75 b32,
76 d,
77 a,
78 b,
79 c,
80 })
81 }
82 }
83
84
85 impl PtxParser for ShfRModeB32 {
86 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
87 stream.expect_string("shf")?;
88 stream.expect_string(".r")?;
89 let r = ();
90 stream.expect_complete()?;
91 let mode = Mode::parse(stream)?;
92 stream.expect_complete()?;
93 stream.expect_string(".b32")?;
94 let b32 = ();
95 stream.expect_complete()?;
96 let d = GeneralOperand::parse(stream)?;
97 stream.expect_complete()?;
98 stream.expect(&PtxToken::Comma)?;
99 let a = GeneralOperand::parse(stream)?;
100 stream.expect_complete()?;
101 stream.expect(&PtxToken::Comma)?;
102 let b = GeneralOperand::parse(stream)?;
103 stream.expect_complete()?;
104 stream.expect(&PtxToken::Comma)?;
105 let c = GeneralOperand::parse(stream)?;
106 stream.expect_complete()?;
107 stream.expect_complete()?;
108 stream.expect(&PtxToken::Semicolon)?;
109 Ok(ShfRModeB32 {
110 r,
111 mode,
112 b32,
113 d,
114 a,
115 b,
116 c,
117 })
118 }
119 }
120
121
122}
123