ptx_parser/unparser/instruction/
sured.rs

1//! Original PTX specification:
2//!
3//! sured.b.op.geom.ctype.mode [a,b],c; // byte addressing
4//! .op    = { .add, .min, .max, .and, .or };
5//! .geom  = { .1d, .2d, .3d };
6//! .ctype = { .u32, .u64, .s32, .b32, .s64 };  // for sured.b
7//! .mode  = { .trap, .clamp, .zero };
8//! ----------------------------------------------------
9//! sured.p.op.geom.ctype.mode [a,b],c; // sample addressing
10//! .op    = { .add, .min, .max, .and, .or };
11//! .geom  = { .1d, .2d, .3d };
12//! .ctype = { .b32, .b64 };                    // for sured.p
13//! .mode  = { .trap, .clamp, .zero };
14
15#![allow(unused)]
16
17use crate::lexer::PtxToken;
18use crate::unparser::{PtxUnparser, common::*};
19
20pub mod section_0 {
21    use super::*;
22    use crate::r#type::instruction::sured::section_0::*;
23
24    impl PtxUnparser for SuredBOpGeomCtypeMode {
25        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
26            push_opcode(tokens, "sured");
27            push_directive(tokens, "b");
28            match &self.op {
29                Op::Add => {
30                    push_directive(tokens, "add");
31                }
32                Op::Min => {
33                    push_directive(tokens, "min");
34                }
35                Op::Max => {
36                    push_directive(tokens, "max");
37                }
38                Op::And => {
39                    push_directive(tokens, "and");
40                }
41                Op::Or => {
42                    push_directive(tokens, "or");
43                }
44            }
45            match &self.geom {
46                Geom::_1d => {
47                    push_directive(tokens, "1d");
48                }
49                Geom::_2d => {
50                    push_directive(tokens, "2d");
51                }
52                Geom::_3d => {
53                    push_directive(tokens, "3d");
54                }
55            }
56            match &self.ctype {
57                Ctype::U32 => {
58                    push_directive(tokens, "u32");
59                }
60                Ctype::U64 => {
61                    push_directive(tokens, "u64");
62                }
63                Ctype::S32 => {
64                    push_directive(tokens, "s32");
65                }
66                Ctype::B32 => {
67                    push_directive(tokens, "b32");
68                }
69                Ctype::S64 => {
70                    push_directive(tokens, "s64");
71                }
72            }
73            match &self.mode {
74                Mode::Clamp => {
75                    push_directive(tokens, "clamp");
76                }
77                Mode::Trap => {
78                    push_directive(tokens, "trap");
79                }
80                Mode::Zero => {
81                    push_directive(tokens, "zero");
82                }
83            }
84            self.a.unparse_tokens(tokens);
85            tokens.push(PtxToken::Comma);
86            self.c.unparse_tokens(tokens);
87            tokens.push(PtxToken::Semicolon);
88        }
89    }
90}
91
92pub mod section_1 {
93    use super::*;
94    use crate::r#type::instruction::sured::section_1::*;
95
96    impl PtxUnparser for SuredPOpGeomCtypeMode {
97        fn unparse_tokens(&self, tokens: &mut ::std::vec::Vec<PtxToken>) {
98            push_opcode(tokens, "sured");
99            push_directive(tokens, "p");
100            match &self.op {
101                Op::Add => {
102                    push_directive(tokens, "add");
103                }
104                Op::Min => {
105                    push_directive(tokens, "min");
106                }
107                Op::Max => {
108                    push_directive(tokens, "max");
109                }
110                Op::And => {
111                    push_directive(tokens, "and");
112                }
113                Op::Or => {
114                    push_directive(tokens, "or");
115                }
116            }
117            match &self.geom {
118                Geom::_1d => {
119                    push_directive(tokens, "1d");
120                }
121                Geom::_2d => {
122                    push_directive(tokens, "2d");
123                }
124                Geom::_3d => {
125                    push_directive(tokens, "3d");
126                }
127            }
128            match &self.ctype {
129                Ctype::B32 => {
130                    push_directive(tokens, "b32");
131                }
132                Ctype::B64 => {
133                    push_directive(tokens, "b64");
134                }
135            }
136            match &self.mode {
137                Mode::Clamp => {
138                    push_directive(tokens, "clamp");
139                }
140                Mode::Trap => {
141                    push_directive(tokens, "trap");
142                }
143                Mode::Zero => {
144                    push_directive(tokens, "zero");
145                }
146            }
147            self.a.unparse_tokens(tokens);
148            tokens.push(PtxToken::Comma);
149            self.c.unparse_tokens(tokens);
150            tokens.push(PtxToken::Semicolon);
151        }
152    }
153}