stationeers_mips/instructions/
variable.rs1use crate::types::{Register, RegisterOrNumber};
2
3pub enum VariableSelection {
5 SelectApproximatelyEqual {
9 register: Register,
10 a: RegisterOrNumber,
11 b: RegisterOrNumber,
12 c: RegisterOrNumber,
13 },
14 SelectApproximatelyZero {
18 register: Register,
19 a: RegisterOrNumber,
20 b: RegisterOrNumber,
21 },
22 SelectDeviceNotSet {
26 register: Register,
27 d: RegisterOrNumber,
28 },
29 SelectDeviceSet {
33 register: Register,
34 d: RegisterOrNumber,
35 },
36 Select {
40 register: Register,
41 a: RegisterOrNumber,
42 b: RegisterOrNumber,
43 c: RegisterOrNumber,
44 },
45 SelectEqual {
49 register: Register,
50 a: RegisterOrNumber,
51 b: RegisterOrNumber,
52 },
53 SelectEqualZero {
57 register: Register,
58 a: RegisterOrNumber,
59 },
60 SelectGreaterOrEqual {
64 register: Register,
65 a: RegisterOrNumber,
66 b: RegisterOrNumber,
67 },
68 SelectGreaterOrEqualZero {
72 register: Register,
73 a: RegisterOrNumber,
74 },
75 SelectGreaterThan {
79 register: Register,
80 a: RegisterOrNumber,
81 b: RegisterOrNumber,
82 },
83 SelectGreaterThanZero {
87 register: Register,
88 a: RegisterOrNumber,
89 },
90 SelectLessOrEqual {
94 register: Register,
95 a: RegisterOrNumber,
96 b: RegisterOrNumber,
97 },
98 SelectLessOrEqualZero {
102 register: Register,
103 a: RegisterOrNumber,
104 },
105 SelectLessThan {
109 register: Register,
110 a: RegisterOrNumber,
111 b: RegisterOrNumber,
112 },
113 SelectLessThanZero {
117 register: Register,
118 a: RegisterOrNumber,
119 },
120 SelectNotApproximatelyEqual {
124 register: Register,
125 a: RegisterOrNumber,
126 b: RegisterOrNumber,
127 c: RegisterOrNumber,
128 },
129 SelectNotApproximatelyZero {
133 register: Register,
134 a: RegisterOrNumber,
135 b: RegisterOrNumber,
136 },
137 SelectNotEqual {
141 register: Register,
142 a: RegisterOrNumber,
143 b: RegisterOrNumber,
144 },
145 SelectNotEqualZero {
149 register: Register,
150 a: RegisterOrNumber,
151 },
152}
153
154impl std::fmt::Display for VariableSelection {
155 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
156 match self {
157 VariableSelection::SelectApproximatelyEqual { register, a, b, c } => {
158 write!(f, "sap {register} {a} {b} {c}")
159 }
160 VariableSelection::SelectApproximatelyZero { register, a, b } => {
161 write!(f, "sapz {register} {a} {b}")
162 }
163 VariableSelection::SelectDeviceNotSet { register, d } => {
164 write!(f, "sdns {register} {d}")
165 }
166 VariableSelection::SelectDeviceSet { register, d } => {
167 write!(f, "sdse {register} {d}")
168 }
169 VariableSelection::Select { register, a, b, c } => {
170 write!(f, "select {register} {a} {b} {c}")
171 }
172 VariableSelection::SelectEqual { register, a, b } => {
173 write!(f, "seq {register} {a} {b}")
174 }
175 VariableSelection::SelectEqualZero { register, a } => {
176 write!(f, "seqz {register} {a}")
177 }
178 VariableSelection::SelectGreaterOrEqual { register, a, b } => {
179 write!(f, "sge {register} {a} {b}")
180 }
181 VariableSelection::SelectGreaterOrEqualZero { register, a } => {
182 write!(f, "sgez {register} {a}")
183 }
184 VariableSelection::SelectGreaterThan { register, a, b } => {
185 write!(f, "sgt {register} {a} {b}")
186 }
187 VariableSelection::SelectGreaterThanZero { register, a } => {
188 write!(f, "sgtz {register} {a}")
189 }
190 VariableSelection::SelectLessOrEqual { register, a, b } => {
191 write!(f, "sle {register} {a} {b}")
192 }
193 VariableSelection::SelectLessOrEqualZero { register, a } => {
194 write!(f, "slez {register} {a}")
195 }
196 VariableSelection::SelectLessThan { register, a, b } => {
197 write!(f, "slt {register} {a} {b}")
198 }
199 VariableSelection::SelectLessThanZero { register, a } => {
200 write!(f, "sltz {register} {a}")
201 }
202 VariableSelection::SelectNotApproximatelyEqual { register, a, b, c } => {
203 write!(f, "sna {register} {a} {b} {c}")
204 }
205 VariableSelection::SelectNotApproximatelyZero { register, a, b } => {
206 write!(f, "snaz {register} {a} {b}")
207 }
208 VariableSelection::SelectNotEqual { register, a, b } => {
209 write!(f, "sne {register} {a} {b}")
210 }
211 VariableSelection::SelectNotEqualZero { register, a } => {
212 write!(f, "snez {register} {a}")
213 }
214 }
215 }
216}