ptx_parser/parser/instruction/
rsqrt.rs

1//! Original PTX specification:
2//!
3//! rsqrt.approx{.ftz}.f32  d, a;
4//! rsqrt.approx.f64        d, a;
5
6#![allow(unused)]
7
8use crate::lexer::PtxToken;
9use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
10use crate::r#type::common::*;
11
12pub mod section_0 {
13    use super::*;
14    use crate::r#type::instruction::rsqrt::section_0::*;
15
16    impl PtxParser for RsqrtApproxFtzF32 {
17        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
18            stream.expect_string("rsqrt")?;
19            stream.expect_string(".approx")?;
20            let approx = ();
21            stream.expect_complete()?;
22            let saved_pos = stream.position();
23            let ftz = stream.expect_string(".ftz").is_ok();
24            if !ftz {
25                stream.set_position(saved_pos);
26            }
27            stream.expect_complete()?;
28            stream.expect_string(".f32")?;
29            let f32 = ();
30            stream.expect_complete()?;
31            let d = GeneralOperand::parse(stream)?;
32            stream.expect_complete()?;
33            stream.expect(&PtxToken::Comma)?;
34            let a = GeneralOperand::parse(stream)?;
35            stream.expect_complete()?;
36            stream.expect_complete()?;
37            stream.expect(&PtxToken::Semicolon)?;
38            Ok(RsqrtApproxFtzF32 {
39                approx,
40                ftz,
41                f32,
42                d,
43                a,
44            })
45        }
46    }
47
48
49    impl PtxParser for RsqrtApproxF64 {
50        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
51            stream.expect_string("rsqrt")?;
52            stream.expect_string(".approx")?;
53            let approx = ();
54            stream.expect_complete()?;
55            stream.expect_string(".f64")?;
56            let f64 = ();
57            stream.expect_complete()?;
58            let d = GeneralOperand::parse(stream)?;
59            stream.expect_complete()?;
60            stream.expect(&PtxToken::Comma)?;
61            let a = GeneralOperand::parse(stream)?;
62            stream.expect_complete()?;
63            stream.expect_complete()?;
64            stream.expect(&PtxToken::Semicolon)?;
65            Ok(RsqrtApproxF64 {
66                approx,
67                f64,
68                d,
69                a,
70            })
71        }
72    }
73
74
75}
76