]> git.proxmox.com Git - rustc.git/blob - library/stdarch/crates/core_arch/src/x86/macros.rs
New upstream version 1.48.0~beta.8+dfsg1
[rustc.git] / library / stdarch / crates / core_arch / src / x86 / macros.rs
1 //! Utility macros.
2
3 macro_rules! constify_imm6 {
4 ($imm8:expr, $expand:ident) => {
5 #[allow(overflowing_literals)]
6 match ($imm8) & 0b1_1111 {
7 0 => $expand!(0),
8 1 => $expand!(1),
9 2 => $expand!(2),
10 3 => $expand!(3),
11 4 => $expand!(4),
12 5 => $expand!(5),
13 6 => $expand!(6),
14 7 => $expand!(7),
15 8 => $expand!(8),
16 9 => $expand!(9),
17 10 => $expand!(10),
18 11 => $expand!(11),
19 12 => $expand!(12),
20 13 => $expand!(13),
21 14 => $expand!(14),
22 15 => $expand!(15),
23 16 => $expand!(16),
24 17 => $expand!(17),
25 18 => $expand!(18),
26 19 => $expand!(19),
27 20 => $expand!(20),
28 21 => $expand!(21),
29 22 => $expand!(22),
30 23 => $expand!(23),
31 24 => $expand!(24),
32 25 => $expand!(25),
33 26 => $expand!(26),
34 27 => $expand!(27),
35 28 => $expand!(28),
36 29 => $expand!(29),
37 30 => $expand!(30),
38 _ => $expand!(31),
39 }
40 };
41 }
42
43 macro_rules! constify_imm4 {
44 ($imm8:expr, $expand:ident) => {
45 #[allow(overflowing_literals)]
46 match ($imm8) & 0b1111 {
47 0 => $expand!(0),
48 1 => $expand!(1),
49 2 => $expand!(2),
50 3 => $expand!(3),
51 4 => $expand!(4),
52 5 => $expand!(5),
53 6 => $expand!(6),
54 7 => $expand!(7),
55 8 => $expand!(8),
56 9 => $expand!(9),
57 10 => $expand!(10),
58 11 => $expand!(11),
59 12 => $expand!(12),
60 13 => $expand!(13),
61 14 => $expand!(14),
62 _ => $expand!(15),
63 }
64 };
65 }
66
67 macro_rules! constify_imm3 {
68 ($imm8:expr, $expand:ident) => {
69 #[allow(overflowing_literals)]
70 match ($imm8) & 0b111 {
71 0 => $expand!(0),
72 1 => $expand!(1),
73 2 => $expand!(2),
74 3 => $expand!(3),
75 4 => $expand!(4),
76 5 => $expand!(5),
77 6 => $expand!(6),
78 _ => $expand!(7),
79 }
80 };
81 }
82
83 macro_rules! constify_imm2 {
84 ($imm8:expr, $expand:ident) => {
85 #[allow(overflowing_literals)]
86 match ($imm8) & 0b11 {
87 0 => $expand!(0),
88 1 => $expand!(1),
89 2 => $expand!(2),
90 _ => $expand!(3),
91 }
92 };
93 }
94
95 // Constifies 5 bits along with an sae option without rounding control.
96 // See: https://github.com/llvm/llvm-project/blob/bd50cf905fa7c0c7caa134301c6ca0658c81eeb1/clang/lib/Sema/SemaChecking.cpp#L3497
97 #[allow(unused)]
98 macro_rules! constify_imm5_sae {
99 ($imm5:expr, $imm4:expr, $expand:ident) => {
100 #[allow(overflowing_literals)]
101 match ($imm5 & 0b1111_1, $imm4 & 0b1111) {
102 (0, 4) => $expand!(0, 4),
103 (0, 8) => $expand!(0, 8),
104 (0, 12) => $expand!(0, 12),
105 (1, 4) => $expand!(1, 4),
106 (1, 8) => $expand!(1, 8),
107 (1, 12) => $expand!(1, 12),
108 (2, 4) => $expand!(2, 4),
109 (2, 8) => $expand!(2, 8),
110 (2, 12) => $expand!(2, 12),
111 (3, 4) => $expand!(3, 4),
112 (3, 8) => $expand!(3, 8),
113 (3, 12) => $expand!(3, 12),
114 (4, 4) => $expand!(4, 4),
115 (4, 8) => $expand!(4, 8),
116 (4, 12) => $expand!(4, 12),
117 (5, 4) => $expand!(5, 4),
118 (5, 8) => $expand!(5, 8),
119 (5, 12) => $expand!(5, 12),
120 (6, 4) => $expand!(6, 4),
121 (6, 8) => $expand!(6, 8),
122 (6, 12) => $expand!(6, 12),
123 (7, 4) => $expand!(7, 4),
124 (7, 8) => $expand!(7, 8),
125 (7, 12) => $expand!(7, 12),
126 (8, 4) => $expand!(8, 4),
127 (8, 8) => $expand!(8, 8),
128 (8, 12) => $expand!(8, 12),
129 (9, 4) => $expand!(9, 4),
130 (9, 8) => $expand!(9, 8),
131 (9, 12) => $expand!(9, 12),
132 (10, 4) => $expand!(10, 4),
133 (10, 8) => $expand!(10, 8),
134 (10, 12) => $expand!(10, 12),
135 (11, 4) => $expand!(11, 4),
136 (11, 8) => $expand!(11, 8),
137 (11, 12) => $expand!(11, 12),
138 (12, 4) => $expand!(12, 4),
139 (12, 8) => $expand!(12, 8),
140 (12, 12) => $expand!(12, 12),
141 (13, 4) => $expand!(13, 4),
142 (13, 8) => $expand!(13, 8),
143 (13, 12) => $expand!(13, 12),
144 (14, 4) => $expand!(14, 4),
145 (14, 8) => $expand!(14, 8),
146 (14, 12) => $expand!(14, 12),
147 (15, 4) => $expand!(15, 4),
148 (15, 8) => $expand!(15, 8),
149 (15, 12) => $expand!(15, 12),
150 (16, 4) => $expand!(16, 4),
151 (16, 8) => $expand!(16, 8),
152 (16, 12) => $expand!(16, 12),
153 (17, 4) => $expand!(17, 4),
154 (17, 8) => $expand!(17, 8),
155 (17, 12) => $expand!(17, 12),
156 (18, 4) => $expand!(18, 4),
157 (18, 8) => $expand!(18, 8),
158 (18, 12) => $expand!(18, 12),
159 (19, 4) => $expand!(19, 4),
160 (19, 8) => $expand!(19, 8),
161 (19, 12) => $expand!(19, 12),
162 (20, 4) => $expand!(20, 4),
163 (20, 8) => $expand!(20, 8),
164 (20, 12) => $expand!(20, 12),
165 (21, 4) => $expand!(21, 4),
166 (21, 8) => $expand!(21, 8),
167 (21, 12) => $expand!(21, 12),
168 (22, 4) => $expand!(22, 4),
169 (22, 8) => $expand!(22, 8),
170 (22, 12) => $expand!(22, 12),
171 (23, 4) => $expand!(23, 4),
172 (23, 8) => $expand!(23, 8),
173 (23, 12) => $expand!(23, 12),
174 (24, 4) => $expand!(24, 4),
175 (24, 8) => $expand!(24, 8),
176 (24, 12) => $expand!(24, 12),
177 (25, 4) => $expand!(25, 4),
178 (25, 8) => $expand!(25, 8),
179 (25, 12) => $expand!(25, 12),
180 (26, 4) => $expand!(26, 4),
181 (26, 8) => $expand!(26, 8),
182 (26, 12) => $expand!(26, 12),
183 (27, 4) => $expand!(27, 4),
184 (27, 8) => $expand!(27, 8),
185 (27, 12) => $expand!(27, 12),
186 (28, 4) => $expand!(28, 4),
187 (28, 8) => $expand!(28, 8),
188 (28, 12) => $expand!(28, 12),
189 (29, 4) => $expand!(29, 4),
190 (29, 8) => $expand!(29, 8),
191 (29, 12) => $expand!(29, 12),
192 (30, 4) => $expand!(30, 4),
193 (30, 8) => $expand!(30, 8),
194 (30, 12) => $expand!(30, 12),
195 (31, 4) => $expand!(31, 4),
196 (31, 8) => $expand!(31, 8),
197 (31, 12) => $expand!(31, 12),
198 (_, _) => panic!("Invalid sae value"),
199 }
200 };
201 }
202
203 // For gather instructions, the only valid values for scale are 1, 2, 4 and 8.
204 // This macro enforces that.
205 #[allow(unused)]
206 macro_rules! constify_imm8_gather {
207 ($imm8:expr, $expand:ident) => {
208 #[allow(overflowing_literals)]
209 match ($imm8) {
210 1 => $expand!(1),
211 2 => $expand!(2),
212 4 => $expand!(4),
213 8 => $expand!(8),
214 _ => panic!("Only 1, 2, 4, and 8 are valid values"),
215 }
216 };
217 }
218
219 // For round instructions, the only valid values for rounding are 4, 8, 9, 10 and 11.
220 // This macro enforces that.
221 #[allow(unused)]
222 macro_rules! constify_imm4_round {
223 ($imm8:expr, $expand:ident) => {
224 #[allow(overflowing_literals)]
225 match ($imm8) & 0b1111 {
226 4 => $expand!(4),
227 8 => $expand!(8),
228 9 => $expand!(9),
229 10 => $expand!(10),
230 11 => $expand!(11),
231 _ => panic!("Invalid round value"),
232 }
233 };
234 }
235
236 // For sae instructions, the only valid values for sae are 4 and 8.
237 // This macro enforces that.
238 #[allow(unused)]
239 macro_rules! constify_imm4_sae {
240 ($imm8:expr, $expand:ident) => {
241 #[allow(overflowing_literals)]
242 match ($imm8) & 0b1111 {
243 4 => $expand!(4),
244 8 => $expand!(8),
245 _ => panic!("Invalid sae value"),
246 }
247 };
248 }
249
250 // Two mantissas parameters.
251 // This macro enforces that.
252 #[allow(unused)]
253 macro_rules! constify_imm4_mantissas {
254 ($imm4:expr, $imm2:expr, $expand:ident) => {
255 #[allow(overflowing_literals)]
256 match ($imm4, $imm2) {
257 (0, 0) => $expand!(0, 0),
258 (0, 1) => $expand!(0, 1),
259 (0, 2) => $expand!(0, 2),
260 (0, 3) => $expand!(0, 3),
261 (1, 0) => $expand!(1, 0),
262 (1, 1) => $expand!(1, 1),
263 (1, 2) => $expand!(1, 2),
264 (1, 3) => $expand!(1, 3),
265 (2, 0) => $expand!(2, 0),
266 (2, 1) => $expand!(2, 1),
267 (2, 2) => $expand!(2, 2),
268 (2, 3) => $expand!(2, 3),
269 (3, 0) => $expand!(3, 0),
270 (3, 1) => $expand!(3, 1),
271 (3, 2) => $expand!(3, 2),
272 (3, 3) => $expand!(3, 3),
273 (4, 0) => $expand!(4, 0),
274 (4, 1) => $expand!(4, 1),
275 (4, 2) => $expand!(4, 2),
276 (4, 3) => $expand!(4, 3),
277 (5, 0) => $expand!(5, 0),
278 (5, 1) => $expand!(5, 1),
279 (5, 2) => $expand!(5, 2),
280 (5, 3) => $expand!(5, 3),
281 (6, 0) => $expand!(6, 0),
282 (6, 1) => $expand!(6, 1),
283 (6, 2) => $expand!(6, 2),
284 (6, 3) => $expand!(6, 3),
285 (7, 0) => $expand!(7, 0),
286 (7, 1) => $expand!(7, 1),
287 (7, 2) => $expand!(7, 2),
288 (7, 3) => $expand!(7, 3),
289 (8, 0) => $expand!(8, 0),
290 (8, 1) => $expand!(8, 1),
291 (8, 2) => $expand!(8, 2),
292 (8, 3) => $expand!(8, 3),
293 (9, 0) => $expand!(9, 0),
294 (9, 1) => $expand!(9, 1),
295 (9, 2) => $expand!(9, 2),
296 (9, 3) => $expand!(9, 3),
297 (10, 0) => $expand!(10, 0),
298 (10, 1) => $expand!(10, 1),
299 (10, 2) => $expand!(10, 2),
300 (10, 3) => $expand!(10, 3),
301 (11, 0) => $expand!(11, 0),
302 (11, 1) => $expand!(11, 1),
303 (11, 2) => $expand!(11, 2),
304 (11, 3) => $expand!(11, 3),
305 (12, 0) => $expand!(12, 0),
306 (12, 1) => $expand!(12, 1),
307 (12, 2) => $expand!(12, 2),
308 (12, 3) => $expand!(12, 3),
309 (13, 0) => $expand!(13, 0),
310 (13, 1) => $expand!(13, 1),
311 (13, 2) => $expand!(13, 2),
312 (13, 3) => $expand!(13, 3),
313 (14, 0) => $expand!(14, 0),
314 (14, 1) => $expand!(14, 1),
315 (14, 2) => $expand!(14, 2),
316 (14, 3) => $expand!(14, 3),
317 (15, 0) => $expand!(15, 0),
318 (15, 1) => $expand!(15, 1),
319 (15, 2) => $expand!(15, 2),
320 (15, 3) => $expand!(15, 3),
321 (_, _) => panic!("Invalid sae value"),
322 }
323 };
324 }
325
326 // Include mantissas parameters.
327 // For sae instructions, the only valid values for sae are 4 and 8.
328 // This macro enforces that.
329 #[allow(unused)]
330 macro_rules! constify_imm4_mantissas_sae {
331 ($imm4_1:expr, $imm2:expr, $imm4_2:expr, $expand:ident) => {
332 #[allow(overflowing_literals)]
333 match ($imm4_1, $imm2, $imm4_2) {
334 (0, 0, 4) => $expand!(0, 0, 4),
335 (0, 0, 8) => $expand!(0, 0, 8),
336 (0, 1, 4) => $expand!(0, 1, 4),
337 (0, 1, 8) => $expand!(0, 1, 8),
338 (0, 2, 4) => $expand!(0, 2, 4),
339 (0, 2, 8) => $expand!(0, 2, 8),
340 (0, 3, 4) => $expand!(0, 3, 4),
341 (0, 3, 8) => $expand!(0, 3, 8),
342 (1, 0, 4) => $expand!(1, 0, 4),
343 (1, 0, 8) => $expand!(1, 0, 8),
344 (1, 1, 4) => $expand!(1, 1, 4),
345 (1, 1, 8) => $expand!(1, 1, 8),
346 (1, 2, 4) => $expand!(1, 2, 4),
347 (1, 2, 8) => $expand!(1, 2, 8),
348 (1, 3, 4) => $expand!(1, 3, 4),
349 (1, 3, 8) => $expand!(1, 3, 8),
350 (2, 0, 4) => $expand!(2, 0, 4),
351 (2, 0, 8) => $expand!(2, 0, 8),
352 (2, 1, 4) => $expand!(2, 1, 4),
353 (2, 1, 8) => $expand!(2, 1, 8),
354 (2, 2, 4) => $expand!(2, 2, 4),
355 (2, 2, 8) => $expand!(2, 2, 8),
356 (2, 3, 4) => $expand!(2, 3, 4),
357 (2, 3, 8) => $expand!(2, 3, 8),
358 (3, 0, 4) => $expand!(3, 0, 4),
359 (3, 0, 8) => $expand!(3, 0, 8),
360 (3, 1, 4) => $expand!(3, 1, 4),
361 (3, 1, 8) => $expand!(3, 1, 8),
362 (3, 2, 4) => $expand!(3, 2, 4),
363 (3, 2, 8) => $expand!(3, 2, 8),
364 (3, 3, 4) => $expand!(3, 3, 4),
365 (3, 3, 8) => $expand!(3, 3, 8),
366 (4, 0, 4) => $expand!(4, 0, 4),
367 (4, 0, 8) => $expand!(4, 0, 8),
368 (4, 1, 4) => $expand!(4, 1, 4),
369 (4, 1, 8) => $expand!(4, 1, 8),
370 (4, 2, 4) => $expand!(4, 2, 4),
371 (4, 2, 8) => $expand!(4, 2, 8),
372 (4, 3, 4) => $expand!(4, 3, 4),
373 (4, 3, 8) => $expand!(4, 3, 8),
374 (5, 0, 4) => $expand!(5, 0, 4),
375 (5, 0, 8) => $expand!(5, 0, 8),
376 (5, 1, 4) => $expand!(5, 1, 4),
377 (5, 1, 8) => $expand!(5, 1, 8),
378 (5, 2, 4) => $expand!(5, 2, 4),
379 (5, 2, 8) => $expand!(5, 2, 8),
380 (5, 3, 4) => $expand!(5, 3, 4),
381 (5, 3, 8) => $expand!(5, 3, 8),
382 (6, 0, 4) => $expand!(6, 0, 4),
383 (6, 0, 8) => $expand!(6, 0, 8),
384 (6, 1, 4) => $expand!(6, 1, 4),
385 (6, 1, 8) => $expand!(6, 1, 8),
386 (6, 2, 4) => $expand!(6, 2, 4),
387 (6, 2, 8) => $expand!(6, 2, 8),
388 (6, 3, 4) => $expand!(6, 3, 4),
389 (6, 3, 8) => $expand!(6, 3, 8),
390 (7, 0, 4) => $expand!(7, 0, 4),
391 (7, 0, 8) => $expand!(7, 0, 8),
392 (7, 1, 4) => $expand!(7, 1, 4),
393 (7, 1, 8) => $expand!(7, 1, 8),
394 (7, 2, 4) => $expand!(7, 2, 4),
395 (7, 2, 8) => $expand!(7, 2, 8),
396 (7, 3, 4) => $expand!(7, 3, 4),
397 (7, 3, 8) => $expand!(7, 3, 8),
398 (8, 0, 4) => $expand!(8, 0, 4),
399 (8, 0, 8) => $expand!(8, 0, 8),
400 (8, 1, 4) => $expand!(8, 1, 4),
401 (8, 1, 8) => $expand!(8, 1, 8),
402 (8, 2, 4) => $expand!(8, 2, 4),
403 (8, 2, 8) => $expand!(8, 2, 8),
404 (8, 3, 4) => $expand!(8, 3, 4),
405 (8, 3, 8) => $expand!(8, 3, 8),
406 (9, 0, 4) => $expand!(9, 0, 4),
407 (9, 0, 8) => $expand!(9, 0, 8),
408 (9, 1, 4) => $expand!(9, 1, 4),
409 (9, 1, 8) => $expand!(9, 1, 8),
410 (9, 2, 4) => $expand!(9, 2, 4),
411 (9, 2, 8) => $expand!(9, 2, 8),
412 (9, 3, 4) => $expand!(9, 3, 4),
413 (9, 3, 8) => $expand!(9, 3, 8),
414 (10, 0, 4) => $expand!(10, 0, 4),
415 (10, 0, 8) => $expand!(10, 0, 8),
416 (10, 1, 4) => $expand!(10, 1, 4),
417 (10, 1, 8) => $expand!(10, 1, 8),
418 (10, 2, 4) => $expand!(10, 2, 4),
419 (10, 2, 8) => $expand!(10, 2, 8),
420 (10, 3, 4) => $expand!(10, 3, 4),
421 (10, 3, 8) => $expand!(10, 3, 8),
422 (11, 0, 4) => $expand!(11, 0, 4),
423 (11, 0, 8) => $expand!(11, 0, 8),
424 (11, 1, 4) => $expand!(11, 1, 4),
425 (11, 1, 8) => $expand!(11, 1, 8),
426 (11, 2, 4) => $expand!(11, 2, 4),
427 (11, 2, 8) => $expand!(11, 2, 8),
428 (11, 3, 4) => $expand!(11, 3, 4),
429 (11, 3, 8) => $expand!(11, 3, 8),
430 (12, 0, 4) => $expand!(12, 0, 4),
431 (12, 0, 8) => $expand!(12, 0, 8),
432 (12, 1, 4) => $expand!(12, 1, 4),
433 (12, 1, 8) => $expand!(12, 1, 8),
434 (12, 2, 4) => $expand!(12, 2, 4),
435 (12, 2, 8) => $expand!(12, 2, 8),
436 (12, 3, 4) => $expand!(12, 3, 4),
437 (12, 3, 8) => $expand!(12, 3, 8),
438 (13, 0, 4) => $expand!(13, 0, 4),
439 (13, 0, 8) => $expand!(13, 0, 8),
440 (13, 1, 4) => $expand!(13, 1, 4),
441 (13, 1, 8) => $expand!(13, 1, 8),
442 (13, 2, 4) => $expand!(13, 2, 4),
443 (13, 2, 8) => $expand!(13, 2, 8),
444 (13, 3, 4) => $expand!(13, 3, 4),
445 (13, 3, 8) => $expand!(13, 3, 8),
446 (14, 0, 4) => $expand!(14, 0, 4),
447 (14, 0, 8) => $expand!(14, 0, 8),
448 (14, 1, 4) => $expand!(14, 1, 4),
449 (14, 1, 8) => $expand!(14, 1, 8),
450 (14, 2, 4) => $expand!(14, 2, 4),
451 (14, 2, 8) => $expand!(14, 2, 8),
452 (14, 3, 4) => $expand!(14, 3, 4),
453 (14, 3, 8) => $expand!(14, 3, 8),
454 (15, 0, 4) => $expand!(15, 0, 4),
455 (15, 0, 8) => $expand!(15, 0, 8),
456 (15, 1, 4) => $expand!(15, 1, 4),
457 (15, 1, 8) => $expand!(15, 1, 8),
458 (15, 2, 4) => $expand!(15, 2, 4),
459 (15, 2, 8) => $expand!(15, 2, 8),
460 (15, 3, 4) => $expand!(15, 3, 4),
461 (15, 3, 8) => $expand!(15, 3, 8),
462 (_, _, _) => panic!("Invalid sae value"),
463 }
464 };
465 }
466
467 // Constifies 8 bits along with an sae option without rounding control.
468 // The only valid values are 0 to 255.
469 // This macro enforces that.
470 #[allow(unused)]
471 macro_rules! constify_imm8_sae {
472 ($imm8:expr, $expand:ident) => {
473 #[allow(overflowing_literals)]
474 match ($imm8) & 0b1111_1111 {
475 0 => $expand!(0),
476 1 => $expand!(1),
477 2 => $expand!(2),
478 3 => $expand!(3),
479 4 => $expand!(4),
480 5 => $expand!(5),
481 6 => $expand!(6),
482 7 => $expand!(7),
483 8 => $expand!(8),
484 9 => $expand!(9),
485 10 => $expand!(10),
486 11 => $expand!(11),
487 12 => $expand!(12),
488 13 => $expand!(13),
489 14 => $expand!(14),
490 15 => $expand!(15),
491 16 => $expand!(16),
492 17 => $expand!(17),
493 18 => $expand!(18),
494 19 => $expand!(19),
495 20 => $expand!(20),
496 21 => $expand!(21),
497 22 => $expand!(22),
498 23 => $expand!(23),
499 24 => $expand!(24),
500 25 => $expand!(25),
501 26 => $expand!(26),
502 27 => $expand!(27),
503 28 => $expand!(28),
504 29 => $expand!(29),
505 30 => $expand!(30),
506 31 => $expand!(31),
507 32 => $expand!(32),
508 33 => $expand!(33),
509 34 => $expand!(34),
510 35 => $expand!(35),
511 36 => $expand!(36),
512 37 => $expand!(37),
513 38 => $expand!(38),
514 39 => $expand!(39),
515 40 => $expand!(40),
516 41 => $expand!(41),
517 42 => $expand!(42),
518 43 => $expand!(43),
519 44 => $expand!(44),
520 45 => $expand!(45),
521 46 => $expand!(46),
522 47 => $expand!(47),
523 48 => $expand!(48),
524 49 => $expand!(49),
525 50 => $expand!(50),
526 51 => $expand!(51),
527 52 => $expand!(52),
528 53 => $expand!(53),
529 54 => $expand!(54),
530 55 => $expand!(55),
531 56 => $expand!(56),
532 57 => $expand!(57),
533 58 => $expand!(58),
534 59 => $expand!(59),
535 60 => $expand!(60),
536 61 => $expand!(61),
537 62 => $expand!(62),
538 63 => $expand!(63),
539 64 => $expand!(64),
540 65 => $expand!(65),
541 66 => $expand!(66),
542 67 => $expand!(67),
543 68 => $expand!(68),
544 69 => $expand!(69),
545 70 => $expand!(70),
546 71 => $expand!(71),
547 72 => $expand!(72),
548 73 => $expand!(73),
549 74 => $expand!(74),
550 75 => $expand!(75),
551 76 => $expand!(76),
552 77 => $expand!(77),
553 78 => $expand!(78),
554 79 => $expand!(79),
555 80 => $expand!(80),
556 81 => $expand!(81),
557 82 => $expand!(82),
558 83 => $expand!(83),
559 84 => $expand!(84),
560 85 => $expand!(85),
561 86 => $expand!(86),
562 87 => $expand!(87),
563 88 => $expand!(88),
564 89 => $expand!(89),
565 90 => $expand!(90),
566 91 => $expand!(91),
567 92 => $expand!(92),
568 93 => $expand!(93),
569 94 => $expand!(94),
570 95 => $expand!(95),
571 96 => $expand!(96),
572 97 => $expand!(97),
573 98 => $expand!(98),
574 99 => $expand!(99),
575 100 => $expand!(100),
576 101 => $expand!(101),
577 102 => $expand!(102),
578 103 => $expand!(103),
579 104 => $expand!(104),
580 105 => $expand!(105),
581 106 => $expand!(106),
582 107 => $expand!(107),
583 108 => $expand!(108),
584 109 => $expand!(109),
585 110 => $expand!(110),
586 111 => $expand!(111),
587 112 => $expand!(112),
588 113 => $expand!(113),
589 114 => $expand!(114),
590 115 => $expand!(115),
591 116 => $expand!(116),
592 117 => $expand!(117),
593 118 => $expand!(118),
594 119 => $expand!(119),
595 120 => $expand!(120),
596 121 => $expand!(121),
597 122 => $expand!(122),
598 123 => $expand!(123),
599 124 => $expand!(124),
600 125 => $expand!(125),
601 126 => $expand!(126),
602 127 => $expand!(127),
603 128 => $expand!(128),
604 129 => $expand!(129),
605 130 => $expand!(130),
606 131 => $expand!(131),
607 132 => $expand!(132),
608 133 => $expand!(133),
609 134 => $expand!(134),
610 135 => $expand!(135),
611 136 => $expand!(136),
612 137 => $expand!(137),
613 138 => $expand!(138),
614 139 => $expand!(139),
615 140 => $expand!(140),
616 141 => $expand!(141),
617 142 => $expand!(142),
618 143 => $expand!(143),
619 144 => $expand!(144),
620 145 => $expand!(145),
621 146 => $expand!(146),
622 147 => $expand!(147),
623 148 => $expand!(148),
624 149 => $expand!(149),
625 150 => $expand!(150),
626 151 => $expand!(151),
627 152 => $expand!(152),
628 153 => $expand!(153),
629 154 => $expand!(154),
630 155 => $expand!(155),
631 156 => $expand!(156),
632 157 => $expand!(157),
633 158 => $expand!(158),
634 159 => $expand!(159),
635 160 => $expand!(160),
636 161 => $expand!(161),
637 162 => $expand!(162),
638 163 => $expand!(163),
639 164 => $expand!(164),
640 165 => $expand!(165),
641 166 => $expand!(166),
642 167 => $expand!(167),
643 168 => $expand!(168),
644 169 => $expand!(169),
645 170 => $expand!(170),
646 171 => $expand!(171),
647 172 => $expand!(172),
648 173 => $expand!(173),
649 174 => $expand!(174),
650 175 => $expand!(175),
651 176 => $expand!(176),
652 177 => $expand!(177),
653 178 => $expand!(178),
654 179 => $expand!(179),
655 180 => $expand!(180),
656 181 => $expand!(181),
657 182 => $expand!(182),
658 183 => $expand!(183),
659 184 => $expand!(184),
660 185 => $expand!(185),
661 186 => $expand!(186),
662 187 => $expand!(187),
663 188 => $expand!(188),
664 189 => $expand!(189),
665 190 => $expand!(190),
666 191 => $expand!(191),
667 192 => $expand!(192),
668 193 => $expand!(193),
669 194 => $expand!(194),
670 195 => $expand!(195),
671 196 => $expand!(196),
672 197 => $expand!(197),
673 198 => $expand!(198),
674 199 => $expand!(199),
675 200 => $expand!(200),
676 201 => $expand!(201),
677 202 => $expand!(202),
678 203 => $expand!(203),
679 204 => $expand!(204),
680 205 => $expand!(205),
681 206 => $expand!(206),
682 207 => $expand!(207),
683 208 => $expand!(208),
684 209 => $expand!(209),
685 210 => $expand!(210),
686 211 => $expand!(211),
687 212 => $expand!(212),
688 213 => $expand!(213),
689 214 => $expand!(214),
690 215 => $expand!(215),
691 216 => $expand!(216),
692 217 => $expand!(217),
693 218 => $expand!(218),
694 219 => $expand!(219),
695 220 => $expand!(220),
696 221 => $expand!(221),
697 222 => $expand!(222),
698 223 => $expand!(223),
699 224 => $expand!(224),
700 225 => $expand!(225),
701 226 => $expand!(226),
702 227 => $expand!(227),
703 228 => $expand!(228),
704 229 => $expand!(229),
705 230 => $expand!(230),
706 231 => $expand!(231),
707 232 => $expand!(232),
708 233 => $expand!(233),
709 234 => $expand!(234),
710 235 => $expand!(235),
711 236 => $expand!(236),
712 237 => $expand!(237),
713 238 => $expand!(238),
714 239 => $expand!(239),
715 240 => $expand!(240),
716 241 => $expand!(241),
717 242 => $expand!(242),
718 243 => $expand!(243),
719 244 => $expand!(244),
720 245 => $expand!(245),
721 246 => $expand!(246),
722 247 => $expand!(247),
723 248 => $expand!(248),
724 249 => $expand!(249),
725 250 => $expand!(250),
726 251 => $expand!(251),
727 252 => $expand!(252),
728 253 => $expand!(253),
729 254 => $expand!(254),
730 255 => $expand!(255),
731 _ => panic!("Invalid sae value"),
732 }
733 };
734 }
735
736 #[cfg(test)]
737 macro_rules! assert_approx_eq {
738 ($a:expr, $b:expr, $eps:expr) => {{
739 let (a, b) = (&$a, &$b);
740 assert!(
741 (*a - *b).abs() < $eps,
742 "assertion failed: `(left !== right)` \
743 (left: `{:?}`, right: `{:?}`, expect diff: `{:?}`, real diff: `{:?}`)",
744 *a,
745 *b,
746 $eps,
747 (*a - *b).abs()
748 );
749 }};
750 }