ptx_parser/parser/instruction/
rcp.rs1#![allow(unused)]
9
10use crate::parser::{
11 PtxParseError, PtxParser, PtxTokenStream, Span,
12 util::{
13 between, comma_p, directive_p, exclamation_p, lbracket_p, lparen_p, map, minus_p, optional,
14 pipe_p, rbracket_p, rparen_p, semicolon_p, sep_by, string_p, try_map,
15 },
16};
17use crate::r#type::common::*;
18use crate::{alt, ok, seq_n};
19
20pub mod section_0 {
21 use super::*;
22 use crate::r#type::instruction::rcp::section_0::*;
23
24 impl PtxParser for Rnd {
29 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
30 alt!(
31 map(string_p(".rn"), |_, _span| Rnd::Rn),
32 map(string_p(".rz"), |_, _span| Rnd::Rz),
33 map(string_p(".rm"), |_, _span| Rnd::Rm),
34 map(string_p(".rp"), |_, _span| Rnd::Rp)
35 )
36 }
37 }
38
39 impl PtxParser for RcpApproxFtzF32 {
40 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
41 try_map(
42 seq_n!(
43 string_p("rcp"),
44 string_p(".approx"),
45 map(optional(string_p(".ftz")), |value, _| value.is_some()),
46 string_p(".f32"),
47 GeneralOperand::parse(),
48 comma_p(),
49 GeneralOperand::parse(),
50 semicolon_p()
51 ),
52 |(_, approx, ftz, f32, d, _, a, _), span| {
53 ok!(RcpApproxFtzF32 {
54 approx = approx,
55 ftz = ftz,
56 f32 = f32,
57 d = d,
58 a = a,
59
60 })
61 },
62 )
63 }
64 }
65
66 impl PtxParser for RcpRndFtzF32 {
67 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
68 try_map(
69 seq_n!(
70 string_p("rcp"),
71 Rnd::parse(),
72 map(optional(string_p(".ftz")), |value, _| value.is_some()),
73 string_p(".f32"),
74 GeneralOperand::parse(),
75 comma_p(),
76 GeneralOperand::parse(),
77 semicolon_p()
78 ),
79 |(_, rnd, ftz, f32, d, _, a, _), span| {
80 ok!(RcpRndFtzF32 {
81 rnd = rnd,
82 ftz = ftz,
83 f32 = f32,
84 d = d,
85 a = a,
86
87 })
88 },
89 )
90 }
91 }
92
93 impl PtxParser for RcpRndF64 {
94 fn parse() -> impl Fn(&mut PtxTokenStream) -> Result<(Self, Span), PtxParseError> {
95 try_map(
96 seq_n!(
97 string_p("rcp"),
98 Rnd::parse(),
99 string_p(".f64"),
100 GeneralOperand::parse(),
101 comma_p(),
102 GeneralOperand::parse(),
103 semicolon_p()
104 ),
105 |(_, rnd, f64, d, _, a, _), span| {
106 ok!(RcpRndF64 {
107 rnd = rnd,
108 f64 = f64,
109 d = d,
110 a = a,
111
112 })
113 },
114 )
115 }
116 }
117}