Skip to main content

ptx_parser/type/instruction/
sust.rs

1//! Original PTX specification:
2//!
3//! sust.b.dim{.cop}.vec.ctype{.mode} [a, b], c;  // unformatted
4//! sust.p.dim.vec.b32{.mode}       [a, b], c;  // formatted
5//! sust.b.adim{.cop}.vec.ctype{.mode}   [a, b], c;  // unformatted
6//! .cop   = { .wb, .cg, .cs, .wt };                     // cache operation
7//! .vec   = { none, .v2, .v4 };
8//! .ctype = { .b8 , .b16, .b32, .b64 };
9//! .mode  = { .trap, .clamp, .zero };
10//! .dim   = { .1d, .2d, .3d };
11//! .adim  = { .a1d, .a2d };
12
13#![allow(unused)]
14use crate::r#type::common::*;
15
16pub mod section_0 {
17    use crate::Spanned;
18    use crate::parser::Span;
19    use crate::r#type::common::*;
20
21    use serde::Serialize;
22
23    #[derive(Debug, Clone, PartialEq, Serialize)]
24    pub enum Dim {
25        _1d, // .1d
26        _2d, // .2d
27        _3d, // .3d
28    }
29
30    #[derive(Debug, Clone, PartialEq, Serialize)]
31    pub enum Cop {
32        Wb, // .wb
33        Cg, // .cg
34        Cs, // .cs
35        Wt, // .wt
36    }
37
38    #[derive(Debug, Clone, PartialEq, Serialize)]
39    pub enum Vec {
40        None, // none
41        V2,   // .v2
42        V4,   // .v4
43    }
44
45    #[derive(Debug, Clone, PartialEq, Serialize)]
46    pub enum Ctype {
47        B16, // .b16
48        B32, // .b32
49        B64, // .b64
50        B8,  // .b8
51    }
52
53    #[derive(Debug, Clone, PartialEq, Serialize)]
54    pub enum Mode {
55        Clamp, // .clamp
56        Trap,  // .trap
57        Zero,  // .zero
58    }
59
60    #[derive(Debug, Clone, PartialEq, Serialize)]
61    pub enum Adim {
62        A1d, // .a1d
63        A2d, // .a2d
64    }
65
66    #[derive(Debug, Clone, PartialEq, Spanned, Serialize)]
67    pub struct SustBDimCopVecCtypeMode {
68        pub b: (),              // .b
69        pub dim: Dim,           // .dim
70        pub cop: Option<Cop>,   // {.cop}
71        pub vec: Vec,           // .vec
72        pub ctype: Ctype,       // .ctype
73        pub mode: Option<Mode>, // {.mode}
74        pub a: TexHandler2,     // [a, b]
75        pub c: GeneralOperand,  // c
76        pub span: Span,
77    }
78
79    #[derive(Debug, Clone, PartialEq, Spanned, Serialize)]
80    pub struct SustPDimVecB32Mode {
81        pub p: (),              // .p
82        pub dim: Dim,           // .dim
83        pub vec: Vec,           // .vec
84        pub b32: (),            // .b32
85        pub mode: Option<Mode>, // {.mode}
86        pub a: TexHandler2,     // [a, b]
87        pub c: GeneralOperand,  // c
88        pub span: Span,
89    }
90
91    #[derive(Debug, Clone, PartialEq, Spanned, Serialize)]
92    pub struct SustBAdimCopVecCtypeMode {
93        pub b: (),              // .b
94        pub adim: Adim,         // .adim
95        pub cop: Option<Cop>,   // {.cop}
96        pub vec: Vec,           // .vec
97        pub ctype: Ctype,       // .ctype
98        pub mode: Option<Mode>, // {.mode}
99        pub a: TexHandler2,     // [a, b]
100        pub c: GeneralOperand,  // c
101        pub span: Span,
102    }
103}
104
105// Re-export types with section suffixes to avoid naming conflicts
106// e.g., Type0 for section_0::Type, Type1 for section_1::Type
107pub use section_0::Adim as Adim0;
108pub use section_0::Cop as Cop0;
109pub use section_0::Ctype as Ctype0;
110pub use section_0::Dim as Dim0;
111pub use section_0::Mode as Mode0;
112pub use section_0::SustBAdimCopVecCtypeMode;
113pub use section_0::SustBDimCopVecCtypeMode;
114pub use section_0::SustPDimVecB32Mode;
115pub use section_0::Vec as Vec0;