ptx_parser/parser/instruction/
tcgen05_commit.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::tcgen05_commit::section_0::*;
18
19 impl PtxParser for CompletionMechanism {
24 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
25 {
27 let saved_pos = stream.position();
28 if stream.expect_string(".mbarrier::arrive::one").is_ok() {
29 return Ok(CompletionMechanism::MbarrierArriveOne);
30 }
31 stream.set_position(saved_pos);
32 }
33 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
34 let expected = &[".mbarrier::arrive::one"];
35 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
36 Err(crate::parser::unexpected_value(span, expected, found))
37 }
38 }
39
40 impl PtxParser for CtaGroup {
41 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
42 {
44 let saved_pos = stream.position();
45 if stream.expect_string(".cta_group::1").is_ok() {
46 return Ok(CtaGroup::CtaGroup1);
47 }
48 stream.set_position(saved_pos);
49 }
50 let saved_pos = stream.position();
51 {
53 let saved_pos = stream.position();
54 if stream.expect_string(".cta_group::2").is_ok() {
55 return Ok(CtaGroup::CtaGroup2);
56 }
57 stream.set_position(saved_pos);
58 }
59 stream.set_position(saved_pos);
60 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
61 let expected = &[".cta_group::1", ".cta_group::2"];
62 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
63 Err(crate::parser::unexpected_value(span, expected, found))
64 }
65 }
66
67 impl PtxParser for Multicast {
68 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
69 {
71 let saved_pos = stream.position();
72 if stream.expect_string(".multicast::cluster").is_ok() {
73 return Ok(Multicast::MulticastCluster);
74 }
75 stream.set_position(saved_pos);
76 }
77 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
78 let expected = &[".multicast::cluster"];
79 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
80 Err(crate::parser::unexpected_value(span, expected, found))
81 }
82 }
83
84 impl PtxParser for Tcgen05CommitCtaGroupCompletionMechanismSharedClusterMulticastB64 {
85 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
86 stream.expect_string("tcgen05")?;
87 stream.expect_string(".commit")?;
88 let commit = ();
89 stream.expect_complete()?;
90 let cta_group = CtaGroup::parse(stream)?;
91 stream.expect_complete()?;
92 let completion_mechanism = CompletionMechanism::parse(stream)?;
93 stream.expect_complete()?;
94 let saved_pos = stream.position();
95 let shared_cluster = stream.expect_string(".shared::cluster").is_ok();
96 if !shared_cluster {
97 stream.set_position(saved_pos);
98 }
99 stream.expect_complete()?;
100 let saved_pos = stream.position();
101 let multicast = match Multicast::parse(stream) {
102 Ok(val) => Some(val),
103 Err(_) => {
104 stream.set_position(saved_pos);
105 None
106 }
107 };
108 stream.expect_complete()?;
109 stream.expect_string(".b64")?;
110 let b64 = ();
111 stream.expect_complete()?;
112 let mbar = AddressOperand::parse(stream)?;
113 stream.expect_complete()?;
114 let saved_pos = stream.position();
115 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
116 if !has_comma {
117 stream.set_position(saved_pos);
118 }
119 let saved_pos = stream.position();
120 let ctamask = match GeneralOperand::parse(stream) {
121 Ok(val) => Some(val),
122 Err(_) => {
123 stream.set_position(saved_pos);
124 None
125 }
126 };
127 stream.expect_complete()?;
128 stream.expect_complete()?;
129 stream.expect(&PtxToken::Semicolon)?;
130 Ok(Tcgen05CommitCtaGroupCompletionMechanismSharedClusterMulticastB64 {
131 commit,
132 cta_group,
133 completion_mechanism,
134 shared_cluster,
135 multicast,
136 b64,
137 mbar,
138 ctamask,
139 })
140 }
141 }
142
143
144}
145