1#![allow(unused)]
14
15use crate::parser::{
16 PtxParseError, PtxParser, PtxTokenStream, Span,
17 util::{
18 between, comma_p, directive_p, exclamation_p, lbracket_p, lparen_p, map, minus_p, optional,
19 pipe_p, rbracket_p, rparen_p, semicolon_p, sep_by, string_p, try_map,
20 },
21};
22use crate::r#type::common::*;
23use crate::{alt, ok, seq_n};
24
25pub mod section_0 {
26 use super::*;
27 use crate::r#type::instruction::div::section_0::*;
28
29 impl PtxParser for Rnd {
34 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
35 alt!(
36 map(string_p(".rn"), |_, _span| Rnd::Rn),
37 map(string_p(".rz"), |_, _span| Rnd::Rz),
38 map(string_p(".rm"), |_, _span| Rnd::Rm),
39 map(string_p(".rp"), |_, _span| Rnd::Rp)
40 )
41 }
42 }
43
44 impl PtxParser for Type {
45 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
46 alt!(
47 map(string_p(".u16"), |_, _span| Type::U16),
48 map(string_p(".u32"), |_, _span| Type::U32),
49 map(string_p(".u64"), |_, _span| Type::U64),
50 map(string_p(".s16"), |_, _span| Type::S16),
51 map(string_p(".s32"), |_, _span| Type::S32),
52 map(string_p(".s64"), |_, _span| Type::S64)
53 )
54 }
55 }
56
57 impl PtxParser for DivType {
58 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
59 try_map(
60 seq_n!(
61 string_p("div"),
62 Type::parse(),
63 GeneralOperand::parse(),
64 comma_p(),
65 GeneralOperand::parse(),
66 comma_p(),
67 GeneralOperand::parse(),
68 semicolon_p()
69 ),
70 |(_, type_, d, _, a, _, b, _), span| {
71 ok!(DivType {
72 type_ = type_,
73 d = d,
74 a = a,
75 b = b,
76
77 })
78 },
79 )
80 }
81 }
82
83 impl PtxParser for DivApproxFtzF32 {
84 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
85 try_map(
86 seq_n!(
87 string_p("div"),
88 string_p(".approx"),
89 map(optional(string_p(".ftz")), |value, _| value.is_some()),
90 string_p(".f32"),
91 GeneralOperand::parse(),
92 comma_p(),
93 GeneralOperand::parse(),
94 comma_p(),
95 GeneralOperand::parse(),
96 semicolon_p()
97 ),
98 |(_, approx, ftz, f32, d, _, a, _, b, _), span| {
99 ok!(DivApproxFtzF32 {
100 approx = approx,
101 ftz = ftz,
102 f32 = f32,
103 d = d,
104 a = a,
105 b = b,
106
107 })
108 },
109 )
110 }
111 }
112
113 impl PtxParser for DivFullFtzF32 {
114 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
115 try_map(
116 seq_n!(
117 string_p("div"),
118 string_p(".full"),
119 map(optional(string_p(".ftz")), |value, _| value.is_some()),
120 string_p(".f32"),
121 GeneralOperand::parse(),
122 comma_p(),
123 GeneralOperand::parse(),
124 comma_p(),
125 GeneralOperand::parse(),
126 semicolon_p()
127 ),
128 |(_, full, ftz, f32, d, _, a, _, b, _), span| {
129 ok!(DivFullFtzF32 {
130 full = full,
131 ftz = ftz,
132 f32 = f32,
133 d = d,
134 a = a,
135 b = b,
136
137 })
138 },
139 )
140 }
141 }
142
143 impl PtxParser for DivRndFtzF32 {
144 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
145 try_map(
146 seq_n!(
147 string_p("div"),
148 Rnd::parse(),
149 map(optional(string_p(".ftz")), |value, _| value.is_some()),
150 string_p(".f32"),
151 GeneralOperand::parse(),
152 comma_p(),
153 GeneralOperand::parse(),
154 comma_p(),
155 GeneralOperand::parse(),
156 semicolon_p()
157 ),
158 |(_, rnd, ftz, f32, d, _, a, _, b, _), span| {
159 ok!(DivRndFtzF32 {
160 rnd = rnd,
161 ftz = ftz,
162 f32 = f32,
163 d = d,
164 a = a,
165 b = b,
166
167 })
168 },
169 )
170 }
171 }
172
173 impl PtxParser for DivRndF64 {
174 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
175 try_map(
176 seq_n!(
177 string_p("div"),
178 Rnd::parse(),
179 string_p(".f64"),
180 GeneralOperand::parse(),
181 comma_p(),
182 GeneralOperand::parse(),
183 comma_p(),
184 GeneralOperand::parse(),
185 semicolon_p()
186 ),
187 |(_, rnd, f64, d, _, a, _, b, _), span| {
188 ok!(DivRndF64 {
189 rnd = rnd,
190 f64 = f64,
191 d = d,
192 a = a,
193 b = b,
194
195 })
196 },
197 )
198 }
199 }
200}