| 1 | use crate::common::Register; |
| 2 | |
| 3 | macro_rules! registers { |
| 4 | ($struct_name:ident, { $($name:ident = ($val:expr, $disp:expr)),+ $(,)? } |
| 5 | $(, aliases { $($alias_name:ident = ($alias_val:expr, $alias_disp:expr)),+ $(,)? })?) => { |
| 6 | #[allow(missing_docs)] |
| 7 | impl $struct_name { |
| 8 | $( |
| 9 | pub const $name: Register = Register($val); |
| 10 | )+ |
| 11 | $( |
| 12 | $(pub const $alias_name: Register = Register($alias_val);)+ |
| 13 | )* |
| 14 | } |
| 15 | |
| 16 | impl $struct_name { |
| 17 | /// The name of a register, or `None` if the register number is unknown. |
| 18 | /// |
| 19 | /// Only returns the primary name for registers that alias with others. |
| 20 | pub fn register_name(register: Register) -> Option<&'static str> { |
| 21 | match register { |
| 22 | $( |
| 23 | Self::$name => Some($disp), |
| 24 | )+ |
| 25 | _ => return None, |
| 26 | } |
| 27 | } |
| 28 | |
| 29 | /// Converts a register name into a register number. |
| 30 | pub fn name_to_register(value: &str) -> Option<Register> { |
| 31 | match value { |
| 32 | $( |
| 33 | $disp => Some(Self::$name), |
| 34 | )+ |
| 35 | $( |
| 36 | $($alias_disp => Some(Self::$alias_name),)+ |
| 37 | )* |
| 38 | _ => return None, |
| 39 | } |
| 40 | } |
| 41 | } |
| 42 | }; |
| 43 | } |
| 44 | |
| 45 | /// ARM architecture specific definitions. |
| 46 | /// |
| 47 | /// See [DWARF for the ARM Architecture]( |
| 48 | /// https://github.com/ARM-software/abi-aa/blob/main/aadwarf32/aadwarf32.rst). |
| 49 | #[derive (Debug, Clone, Copy)] |
| 50 | pub struct Arm; |
| 51 | |
| 52 | registers!(Arm, { |
| 53 | R0 = (0, "R0" ), |
| 54 | R1 = (1, "R1" ), |
| 55 | R2 = (2, "R2" ), |
| 56 | R3 = (3, "R3" ), |
| 57 | R4 = (4, "R4" ), |
| 58 | R5 = (5, "R5" ), |
| 59 | R6 = (6, "R6" ), |
| 60 | R7 = (7, "R7" ), |
| 61 | R8 = (8, "R8" ), |
| 62 | R9 = (9, "R9" ), |
| 63 | R10 = (10, "R10" ), |
| 64 | R11 = (11, "R11" ), |
| 65 | R12 = (12, "R12" ), |
| 66 | R13 = (13, "R13" ), |
| 67 | R14 = (14, "R14" ), |
| 68 | R15 = (15, "R15" ), |
| 69 | |
| 70 | WCGR0 = (104, "wCGR0" ), |
| 71 | WCGR1 = (105, "wCGR1" ), |
| 72 | WCGR2 = (106, "wCGR2" ), |
| 73 | WCGR3 = (107, "wCGR3" ), |
| 74 | WCGR4 = (108, "wCGR4" ), |
| 75 | WCGR5 = (109, "wCGR5" ), |
| 76 | WCGR6 = (110, "wCGR6" ), |
| 77 | WCGR7 = (111, "wCGR7" ), |
| 78 | |
| 79 | WR0 = (112, "wR0" ), |
| 80 | WR1 = (113, "wR1" ), |
| 81 | WR2 = (114, "wR2" ), |
| 82 | WR3 = (115, "wR3" ), |
| 83 | WR4 = (116, "wR4" ), |
| 84 | WR5 = (117, "wR5" ), |
| 85 | WR6 = (118, "wR6" ), |
| 86 | WR7 = (119, "wR7" ), |
| 87 | WR8 = (120, "wR8" ), |
| 88 | WR9 = (121, "wR9" ), |
| 89 | WR10 = (122, "wR10" ), |
| 90 | WR11 = (123, "wR11" ), |
| 91 | WR12 = (124, "wR12" ), |
| 92 | WR13 = (125, "wR13" ), |
| 93 | WR14 = (126, "wR14" ), |
| 94 | WR15 = (127, "wR15" ), |
| 95 | |
| 96 | SPSR = (128, "SPSR" ), |
| 97 | SPSR_FIQ = (129, "SPSR_FIQ" ), |
| 98 | SPSR_IRQ = (130, "SPSR_IRQ" ), |
| 99 | SPSR_ABT = (131, "SPSR_ABT" ), |
| 100 | SPSR_UND = (132, "SPSR_UND" ), |
| 101 | SPSR_SVC = (133, "SPSR_SVC" ), |
| 102 | |
| 103 | RA_AUTH_CODE = (143, "RA_AUTH_CODE" ), |
| 104 | |
| 105 | R8_USR = (144, "R8_USR" ), |
| 106 | R9_USR = (145, "R9_USR" ), |
| 107 | R10_USR = (146, "R10_USR" ), |
| 108 | R11_USR = (147, "R11_USR" ), |
| 109 | R12_USR = (148, "R12_USR" ), |
| 110 | R13_USR = (149, "R13_USR" ), |
| 111 | R14_USR = (150, "R14_USR" ), |
| 112 | |
| 113 | R8_FIQ = (151, "R8_FIQ" ), |
| 114 | R9_FIQ = (152, "R9_FIQ" ), |
| 115 | R10_FIQ = (153, "R10_FIQ" ), |
| 116 | R11_FIQ = (154, "R11_FIQ" ), |
| 117 | R12_FIQ = (155, "R12_FIQ" ), |
| 118 | R13_FIQ = (156, "R13_FIQ" ), |
| 119 | R14_FIQ = (157, "R14_FIQ" ), |
| 120 | |
| 121 | R13_IRQ = (158, "R13_IRQ" ), |
| 122 | R14_IRQ = (159, "R14_IRQ" ), |
| 123 | |
| 124 | R13_ABT = (160, "R13_ABT" ), |
| 125 | R14_ABT = (161, "R14_ABT" ), |
| 126 | |
| 127 | R13_UND = (162, "R13_UND" ), |
| 128 | R14_UND = (163, "R14_UND" ), |
| 129 | |
| 130 | R13_SVC = (164, "R13_SVC" ), |
| 131 | R14_SVC = (165, "R14_SVC" ), |
| 132 | |
| 133 | WC0 = (192, "wC0" ), |
| 134 | WC1 = (193, "wC1" ), |
| 135 | WC2 = (194, "wC2" ), |
| 136 | WC3 = (195, "wC3" ), |
| 137 | WC4 = (196, "wC4" ), |
| 138 | WC5 = (197, "wC5" ), |
| 139 | WC6 = (198, "wC6" ), |
| 140 | WC7 = (199, "wC7" ), |
| 141 | |
| 142 | D0 = (256, "D0" ), |
| 143 | D1 = (257, "D1" ), |
| 144 | D2 = (258, "D2" ), |
| 145 | D3 = (259, "D3" ), |
| 146 | D4 = (260, "D4" ), |
| 147 | D5 = (261, "D5" ), |
| 148 | D6 = (262, "D6" ), |
| 149 | D7 = (263, "D7" ), |
| 150 | D8 = (264, "D8" ), |
| 151 | D9 = (265, "D9" ), |
| 152 | D10 = (266, "D10" ), |
| 153 | D11 = (267, "D11" ), |
| 154 | D12 = (268, "D12" ), |
| 155 | D13 = (269, "D13" ), |
| 156 | D14 = (270, "D14" ), |
| 157 | D15 = (271, "D15" ), |
| 158 | D16 = (272, "D16" ), |
| 159 | D17 = (273, "D17" ), |
| 160 | D18 = (274, "D18" ), |
| 161 | D19 = (275, "D19" ), |
| 162 | D20 = (276, "D20" ), |
| 163 | D21 = (277, "D21" ), |
| 164 | D22 = (278, "D22" ), |
| 165 | D23 = (279, "D23" ), |
| 166 | D24 = (280, "D24" ), |
| 167 | D25 = (281, "D25" ), |
| 168 | D26 = (282, "D26" ), |
| 169 | D27 = (283, "D27" ), |
| 170 | D28 = (284, "D28" ), |
| 171 | D29 = (285, "D29" ), |
| 172 | D30 = (286, "D30" ), |
| 173 | D31 = (287, "D31" ), |
| 174 | |
| 175 | TPIDRURO = (320, "TPIDRURO" ), |
| 176 | TPIDRURW = (321, "TPIDRURW" ), |
| 177 | TPIDPR = (322, "TPIDPR" ), |
| 178 | HTPIDPR = (323, "HTPIDPR" ), |
| 179 | }, |
| 180 | aliases { |
| 181 | SP = (13, "SP" ), |
| 182 | LR = (14, "LR" ), |
| 183 | PC = (15, "PC" ), |
| 184 | |
| 185 | ACC0 = (104, "ACC0" ), |
| 186 | ACC1 = (105, "ACC1" ), |
| 187 | ACC2 = (106, "ACC2" ), |
| 188 | ACC3 = (107, "ACC3" ), |
| 189 | ACC4 = (108, "ACC4" ), |
| 190 | ACC5 = (109, "ACC5" ), |
| 191 | ACC6 = (110, "ACC6" ), |
| 192 | ACC7 = (111, "ACC7" ), |
| 193 | |
| 194 | S0 = (256, "S0" ), |
| 195 | S1 = (256, "S1" ), |
| 196 | S2 = (257, "S2" ), |
| 197 | S3 = (257, "S3" ), |
| 198 | S4 = (258, "S4" ), |
| 199 | S5 = (258, "S5" ), |
| 200 | S6 = (259, "S6" ), |
| 201 | S7 = (259, "S7" ), |
| 202 | S8 = (260, "S8" ), |
| 203 | S9 = (260, "S9" ), |
| 204 | S10 = (261, "S10" ), |
| 205 | S11 = (261, "S11" ), |
| 206 | S12 = (262, "S12" ), |
| 207 | S13 = (262, "S13" ), |
| 208 | S14 = (263, "S14" ), |
| 209 | S15 = (263, "S15" ), |
| 210 | S16 = (264, "S16" ), |
| 211 | S17 = (264, "S17" ), |
| 212 | S18 = (265, "S18" ), |
| 213 | S19 = (265, "S19" ), |
| 214 | S20 = (266, "S20" ), |
| 215 | S21 = (266, "S21" ), |
| 216 | S22 = (267, "S22" ), |
| 217 | S23 = (267, "S23" ), |
| 218 | S24 = (268, "S24" ), |
| 219 | S25 = (268, "S25" ), |
| 220 | S26 = (269, "S26" ), |
| 221 | S27 = (269, "S27" ), |
| 222 | S28 = (270, "S28" ), |
| 223 | S29 = (270, "S29" ), |
| 224 | S30 = (271, "S30" ), |
| 225 | S31 = (271, "S31" ), |
| 226 | }); |
| 227 | |
| 228 | /// ARM 64-bit (AArch64) architecture specific definitions. |
| 229 | /// |
| 230 | /// See [DWARF for the ARM 64-bit Architecture]( |
| 231 | /// https://github.com/ARM-software/abi-aa/blob/main/aadwarf64/aadwarf64.rst). |
| 232 | #[derive (Debug, Clone, Copy)] |
| 233 | pub struct AArch64; |
| 234 | |
| 235 | registers!(AArch64, { |
| 236 | X0 = (0, "X0" ), |
| 237 | X1 = (1, "X1" ), |
| 238 | X2 = (2, "X2" ), |
| 239 | X3 = (3, "X3" ), |
| 240 | X4 = (4, "X4" ), |
| 241 | X5 = (5, "X5" ), |
| 242 | X6 = (6, "X6" ), |
| 243 | X7 = (7, "X7" ), |
| 244 | X8 = (8, "X8" ), |
| 245 | X9 = (9, "X9" ), |
| 246 | X10 = (10, "X10" ), |
| 247 | X11 = (11, "X11" ), |
| 248 | X12 = (12, "X12" ), |
| 249 | X13 = (13, "X13" ), |
| 250 | X14 = (14, "X14" ), |
| 251 | X15 = (15, "X15" ), |
| 252 | X16 = (16, "X16" ), |
| 253 | X17 = (17, "X17" ), |
| 254 | X18 = (18, "X18" ), |
| 255 | X19 = (19, "X19" ), |
| 256 | X20 = (20, "X20" ), |
| 257 | X21 = (21, "X21" ), |
| 258 | X22 = (22, "X22" ), |
| 259 | X23 = (23, "X23" ), |
| 260 | X24 = (24, "X24" ), |
| 261 | X25 = (25, "X25" ), |
| 262 | X26 = (26, "X26" ), |
| 263 | X27 = (27, "X27" ), |
| 264 | X28 = (28, "X28" ), |
| 265 | X29 = (29, "X29" ), |
| 266 | X30 = (30, "X30" ), |
| 267 | SP = (31, "SP" ), |
| 268 | PC = (32, "PC" ), |
| 269 | ELR_MODE = (33, "ELR_mode" ), |
| 270 | RA_SIGN_STATE = (34, "RA_SIGN_STATE" ), |
| 271 | TPIDRRO_EL0 = (35, "TPIDRRO_EL0" ), |
| 272 | TPIDR_EL0 = (36, "TPIDR_EL0" ), |
| 273 | TPIDR_EL1 = (37, "TPIDR_EL1" ), |
| 274 | TPIDR_EL2 = (38, "TPIDR_EL2" ), |
| 275 | TPIDR_EL3 = (39, "TPIDR_EL3" ), |
| 276 | |
| 277 | VG = (46, "VG" ), |
| 278 | FFR = (47, "FFR" ), |
| 279 | |
| 280 | P0 = (48, "P0" ), |
| 281 | P1 = (49, "P1" ), |
| 282 | P2 = (50, "P2" ), |
| 283 | P3 = (51, "P3" ), |
| 284 | P4 = (52, "P4" ), |
| 285 | P5 = (53, "P5" ), |
| 286 | P6 = (54, "P6" ), |
| 287 | P7 = (55, "P7" ), |
| 288 | P8 = (56, "P8" ), |
| 289 | P9 = (57, "P9" ), |
| 290 | P10 = (58, "P10" ), |
| 291 | P11 = (59, "P11" ), |
| 292 | P12 = (60, "P12" ), |
| 293 | P13 = (61, "P13" ), |
| 294 | P14 = (62, "P14" ), |
| 295 | P15 = (63, "P15" ), |
| 296 | |
| 297 | V0 = (64, "V0" ), |
| 298 | V1 = (65, "V1" ), |
| 299 | V2 = (66, "V2" ), |
| 300 | V3 = (67, "V3" ), |
| 301 | V4 = (68, "V4" ), |
| 302 | V5 = (69, "V5" ), |
| 303 | V6 = (70, "V6" ), |
| 304 | V7 = (71, "V7" ), |
| 305 | V8 = (72, "V8" ), |
| 306 | V9 = (73, "V9" ), |
| 307 | V10 = (74, "V10" ), |
| 308 | V11 = (75, "V11" ), |
| 309 | V12 = (76, "V12" ), |
| 310 | V13 = (77, "V13" ), |
| 311 | V14 = (78, "V14" ), |
| 312 | V15 = (79, "V15" ), |
| 313 | V16 = (80, "V16" ), |
| 314 | V17 = (81, "V17" ), |
| 315 | V18 = (82, "V18" ), |
| 316 | V19 = (83, "V19" ), |
| 317 | V20 = (84, "V20" ), |
| 318 | V21 = (85, "V21" ), |
| 319 | V22 = (86, "V22" ), |
| 320 | V23 = (87, "V23" ), |
| 321 | V24 = (88, "V24" ), |
| 322 | V25 = (89, "V25" ), |
| 323 | V26 = (90, "V26" ), |
| 324 | V27 = (91, "V27" ), |
| 325 | V28 = (92, "V28" ), |
| 326 | V29 = (93, "V29" ), |
| 327 | V30 = (94, "V30" ), |
| 328 | V31 = (95, "V31" ), |
| 329 | |
| 330 | Z0 = (96, "Z0" ), |
| 331 | Z1 = (97, "Z1" ), |
| 332 | Z2 = (98, "Z2" ), |
| 333 | Z3 = (99, "Z3" ), |
| 334 | Z4 = (100, "Z4" ), |
| 335 | Z5 = (101, "Z5" ), |
| 336 | Z6 = (102, "Z6" ), |
| 337 | Z7 = (103, "Z7" ), |
| 338 | Z8 = (104, "Z8" ), |
| 339 | Z9 = (105, "Z9" ), |
| 340 | Z10 = (106, "Z10" ), |
| 341 | Z11 = (107, "Z11" ), |
| 342 | Z12 = (108, "Z12" ), |
| 343 | Z13 = (109, "Z13" ), |
| 344 | Z14 = (110, "Z14" ), |
| 345 | Z15 = (111, "Z15" ), |
| 346 | Z16 = (112, "Z16" ), |
| 347 | Z17 = (113, "Z17" ), |
| 348 | Z18 = (114, "Z18" ), |
| 349 | Z19 = (115, "Z19" ), |
| 350 | Z20 = (116, "Z20" ), |
| 351 | Z21 = (117, "Z21" ), |
| 352 | Z22 = (118, "Z22" ), |
| 353 | Z23 = (119, "Z23" ), |
| 354 | Z24 = (120, "Z24" ), |
| 355 | Z25 = (121, "Z25" ), |
| 356 | Z26 = (122, "Z26" ), |
| 357 | Z27 = (123, "Z27" ), |
| 358 | Z28 = (124, "Z28" ), |
| 359 | Z29 = (125, "Z29" ), |
| 360 | Z30 = (126, "Z30" ), |
| 361 | Z31 = (127, "Z31" ), |
| 362 | }); |
| 363 | |
| 364 | /// LoongArch architecture specific definitions. |
| 365 | /// |
| 366 | /// See [LoongArch ELF psABI specification](https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html). |
| 367 | #[derive (Debug, Clone, Copy)] |
| 368 | pub struct LoongArch; |
| 369 | |
| 370 | registers!(LoongArch, { |
| 371 | R0 = (0, "$r0" ), |
| 372 | R1 = (1, "$r1" ), |
| 373 | R2 = (2, "$r2" ), |
| 374 | R3 = (3, "$r3" ), |
| 375 | R4 = (4, "$r4" ), |
| 376 | R5 = (5, "$r5" ), |
| 377 | R6 = (6, "$r6" ), |
| 378 | R7 = (7, "$r7" ), |
| 379 | R8 = (8, "$r8" ), |
| 380 | R9 = (9, "$r9" ), |
| 381 | R10 = (10, "$r10" ), |
| 382 | R11 = (11, "$r11" ), |
| 383 | R12 = (12, "$r12" ), |
| 384 | R13 = (13, "$r13" ), |
| 385 | R14 = (14, "$r14" ), |
| 386 | R15 = (15, "$r15" ), |
| 387 | R16 = (16, "$r16" ), |
| 388 | R17 = (17, "$r17" ), |
| 389 | R18 = (18, "$r18" ), |
| 390 | R19 = (19, "$r19" ), |
| 391 | R20 = (20, "$r20" ), |
| 392 | R21 = (21, "$r21" ), |
| 393 | R22 = (22, "$r22" ), |
| 394 | R23 = (23, "$r23" ), |
| 395 | R24 = (24, "$r24" ), |
| 396 | R25 = (25, "$r25" ), |
| 397 | R26 = (26, "$r26" ), |
| 398 | R27 = (27, "$r27" ), |
| 399 | R28 = (28, "$r28" ), |
| 400 | R29 = (29, "$r29" ), |
| 401 | R30 = (30, "$r30" ), |
| 402 | R31 = (31, "$r31" ), |
| 403 | |
| 404 | F0 = (32, "$f0" ), |
| 405 | F1 = (33, "$f1" ), |
| 406 | F2 = (34, "$f2" ), |
| 407 | F3 = (35, "$f3" ), |
| 408 | F4 = (36, "$f4" ), |
| 409 | F5 = (37, "$f5" ), |
| 410 | F6 = (38, "$f6" ), |
| 411 | F7 = (39, "$f7" ), |
| 412 | F8 = (40, "$f8" ), |
| 413 | F9 = (41, "$f9" ), |
| 414 | F10 = (42, "$f10" ), |
| 415 | F11 = (43, "$f11" ), |
| 416 | F12 = (44, "$f12" ), |
| 417 | F13 = (45, "$f13" ), |
| 418 | F14 = (46, "$f14" ), |
| 419 | F15 = (47, "$f15" ), |
| 420 | F16 = (48, "$f16" ), |
| 421 | F17 = (49, "$f17" ), |
| 422 | F18 = (50, "$f18" ), |
| 423 | F19 = (51, "$f19" ), |
| 424 | F20 = (52, "$f20" ), |
| 425 | F21 = (53, "$f21" ), |
| 426 | F22 = (54, "$f22" ), |
| 427 | F23 = (55, "$f23" ), |
| 428 | F24 = (56, "$f24" ), |
| 429 | F25 = (57, "$f25" ), |
| 430 | F26 = (58, "$f26" ), |
| 431 | F27 = (59, "$f27" ), |
| 432 | F28 = (60, "$f28" ), |
| 433 | F29 = (61, "$f29" ), |
| 434 | F30 = (62, "$f30" ), |
| 435 | F31 = (63, "$f31" ), |
| 436 | FCC0 = (64, "$fcc0" ), |
| 437 | FCC1 = (65, "$fcc1" ), |
| 438 | FCC2 = (66, "$fcc2" ), |
| 439 | FCC3 = (67, "$fcc3" ), |
| 440 | FCC4 = (68, "$fcc4" ), |
| 441 | FCC5 = (69, "$fcc5" ), |
| 442 | FCC6 = (70, "$fcc6" ), |
| 443 | FCC7 = (71, "$fcc7" ), |
| 444 | }, |
| 445 | aliases { |
| 446 | ZERO = (0, "$zero" ), |
| 447 | RA = (1, "$ra" ), |
| 448 | TP = (2, "$tp" ), |
| 449 | SP = (3, "$sp" ), |
| 450 | A0 = (4, "$a0" ), |
| 451 | A1 = (5, "$a1" ), |
| 452 | A2 = (6, "$a2" ), |
| 453 | A3 = (7, "$a3" ), |
| 454 | A4 = (8, "$a4" ), |
| 455 | A5 = (9, "$a5" ), |
| 456 | A6 = (10, "$a6" ), |
| 457 | A7 = (11, "$a7" ), |
| 458 | T0 = (12, "$t0" ), |
| 459 | T1 = (13, "$t1" ), |
| 460 | T2 = (14, "$t2" ), |
| 461 | T3 = (15, "$t3" ), |
| 462 | T4 = (16, "$t4" ), |
| 463 | T5 = (17, "$t5" ), |
| 464 | T6 = (18, "$t6" ), |
| 465 | T7 = (19, "$t7" ), |
| 466 | T8 = (20, "$t8" ), |
| 467 | FP = (22, "$fp" ), |
| 468 | S0 = (23, "$s0" ), |
| 469 | S1 = (24, "$s1" ), |
| 470 | S2 = (25, "$s2" ), |
| 471 | S3 = (26, "$s3" ), |
| 472 | S4 = (27, "$s4" ), |
| 473 | S5 = (28, "$s5" ), |
| 474 | S6 = (29, "$s6" ), |
| 475 | S7 = (30, "$s7" ), |
| 476 | S8 = (31, "$s8" ), |
| 477 | |
| 478 | FA0 = (32, "$fa0" ), |
| 479 | FA1 = (33, "$fa1" ), |
| 480 | FA2 = (34, "$fa2" ), |
| 481 | FA3 = (35, "$fa3" ), |
| 482 | FA4 = (36, "$fa4" ), |
| 483 | FA5 = (37, "$fa5" ), |
| 484 | FA6 = (38, "$fa6" ), |
| 485 | FA7 = (39, "$fa7" ), |
| 486 | FT0 = (40, "$ft0" ), |
| 487 | FT1 = (41, "$ft1" ), |
| 488 | FT2 = (42, "$ft2" ), |
| 489 | FT3 = (43, "$ft3" ), |
| 490 | FT4 = (44, "$ft4" ), |
| 491 | FT5 = (45, "$ft5" ), |
| 492 | FT6 = (46, "$ft6" ), |
| 493 | FT7 = (47, "$ft7" ), |
| 494 | FT8 = (48, "$ft8" ), |
| 495 | FT9 = (49, "$ft9" ), |
| 496 | FT10 = (50, "$ft10" ), |
| 497 | FT11 = (51, "$ft11" ), |
| 498 | FT12 = (52, "$ft12" ), |
| 499 | FT13 = (53, "$ft13" ), |
| 500 | FT14 = (54, "$ft14" ), |
| 501 | FT15 = (55, "$ft15" ), |
| 502 | FS0 = (56, "$fs0" ), |
| 503 | FS1 = (57, "$fs1" ), |
| 504 | FS2 = (58, "$fs2" ), |
| 505 | FS3 = (59, "$fs3" ), |
| 506 | FS4 = (60, "$fs4" ), |
| 507 | FS5 = (61, "$fs5" ), |
| 508 | FS6 = (62, "$fs6" ), |
| 509 | FS7 = (63, "$fs7" ), |
| 510 | }); |
| 511 | |
| 512 | /// MIPS architecture specific definitions. |
| 513 | /// |
| 514 | /// See [MIPS Details](https://en.wikibooks.org/wiki/MIPS_Assembly/MIPS_Details). |
| 515 | #[derive (Debug, Clone, Copy)] |
| 516 | pub struct MIPS; |
| 517 | |
| 518 | registers!(MIPS, { |
| 519 | R0 = (0, "$0" ), |
| 520 | R1 = (1, "$1" ), |
| 521 | R2 = (2, "$2" ), |
| 522 | R3 = (3, "$3" ), |
| 523 | R4 = (4, "$4" ), |
| 524 | R5 = (5, "$5" ), |
| 525 | R6 = (6, "$6" ), |
| 526 | R7 = (7, "$7" ), |
| 527 | R8 = (8, "$8" ), |
| 528 | R9 = (9, "$9" ), |
| 529 | R10 = (10, "$10" ), |
| 530 | R11 = (11, "$11" ), |
| 531 | R12 = (12, "$12" ), |
| 532 | R13 = (13, "$13" ), |
| 533 | R14 = (14, "$14" ), |
| 534 | R15 = (15, "$15" ), |
| 535 | R16 = (16, "$16" ), |
| 536 | R17 = (17, "$17" ), |
| 537 | R18 = (18, "$18" ), |
| 538 | R19 = (19, "$19" ), |
| 539 | R20 = (20, "$20" ), |
| 540 | R21 = (21, "$21" ), |
| 541 | R22 = (22, "$22" ), |
| 542 | R23 = (23, "$23" ), |
| 543 | R24 = (24, "$24" ), |
| 544 | R25 = (25, "$25" ), |
| 545 | R26 = (26, "$26" ), |
| 546 | R27 = (27, "$27" ), |
| 547 | R28 = (28, "$28" ), |
| 548 | R29 = (29, "$29" ), |
| 549 | R30 = (30, "$30" ), |
| 550 | R31 = (31, "$31" ), |
| 551 | |
| 552 | F0 = (32, "$f0" ), |
| 553 | F1 = (33, "$f1" ), |
| 554 | F2 = (34, "$f2" ), |
| 555 | F3 = (35, "$f3" ), |
| 556 | F4 = (36, "$f4" ), |
| 557 | F5 = (37, "$f5" ), |
| 558 | F6 = (38, "$f6" ), |
| 559 | F7 = (39, "$f7" ), |
| 560 | F8 = (40, "$f8" ), |
| 561 | F9 = (41, "$f9" ), |
| 562 | F10 = (42, "$f10" ), |
| 563 | F11 = (43, "$f11" ), |
| 564 | F12 = (44, "$f12" ), |
| 565 | F13 = (45, "$f13" ), |
| 566 | F14 = (46, "$f14" ), |
| 567 | F15 = (47, "$f15" ), |
| 568 | F16 = (48, "$f16" ), |
| 569 | F17 = (49, "$f17" ), |
| 570 | F18 = (50, "$f18" ), |
| 571 | F19 = (51, "$f19" ), |
| 572 | F20 = (52, "$f20" ), |
| 573 | F21 = (53, "$f21" ), |
| 574 | F22 = (54, "$f22" ), |
| 575 | F23 = (55, "$f23" ), |
| 576 | F24 = (56, "$f24" ), |
| 577 | F25 = (57, "$f25" ), |
| 578 | F26 = (58, "$f26" ), |
| 579 | F27 = (59, "$f27" ), |
| 580 | F28 = (60, "$f28" ), |
| 581 | F29 = (61, "$f29" ), |
| 582 | F30 = (62, "$f30" ), |
| 583 | F31 = (63, "$f31" ), |
| 584 | |
| 585 | HI = (64, "$hi" ), |
| 586 | LO = (65, "$lo" ), |
| 587 | }, |
| 588 | aliases { |
| 589 | ZERO = (0, "$zero" ), |
| 590 | AT = (1, "$at" ), |
| 591 | V0 = (2, "$v0" ), |
| 592 | V1 = (3, "$v1" ), |
| 593 | A0 = (4, "$a0" ), |
| 594 | A1 = (5, "$a1" ), |
| 595 | A2 = (6, "$a2" ), |
| 596 | A3 = (7, "$a3" ), |
| 597 | T0 = (8, "$t0" ), |
| 598 | T1 = (9, "$t1" ), |
| 599 | T2 = (10, "$t2" ), |
| 600 | T3 = (11, "$t3" ), |
| 601 | T4 = (12, "$t4" ), |
| 602 | T5 = (13, "$t5" ), |
| 603 | T6 = (14, "$t6" ), |
| 604 | T7 = (15, "$t7" ), |
| 605 | S0 = (16, "$s0" ), |
| 606 | S1 = (17, "$s1" ), |
| 607 | S2 = (18, "$s2" ), |
| 608 | S3 = (19, "$s3" ), |
| 609 | S4 = (20, "$s4" ), |
| 610 | S5 = (21, "$s5" ), |
| 611 | S6 = (22, "$s6" ), |
| 612 | S7 = (23, "$s7" ), |
| 613 | T8 = (24, "$t8" ), |
| 614 | T9 = (25, "$t9" ), |
| 615 | K0 = (26, "$k0" ), |
| 616 | K1 = (27, "$k1" ), |
| 617 | GP = (28, "$gp" ), |
| 618 | SP = (29, "$sp" ), |
| 619 | FP = (30, "$fp" ), |
| 620 | RA = (31, "$ra" ), |
| 621 | |
| 622 | S8 = (30, "$s8" ) |
| 623 | }); |
| 624 | |
| 625 | /// RISC-V architecture specific definitions. |
| 626 | /// |
| 627 | /// See [RISC-V ELF psABI specification](https://github.com/riscv/riscv-elf-psabi-doc). |
| 628 | #[derive (Debug, Clone, Copy)] |
| 629 | pub struct RiscV; |
| 630 | |
| 631 | registers!(RiscV, { |
| 632 | X0 = (0, "x0" ), |
| 633 | X1 = (1, "x1" ), |
| 634 | X2 = (2, "x2" ), |
| 635 | X3 = (3, "x3" ), |
| 636 | X4 = (4, "x4" ), |
| 637 | X5 = (5, "x5" ), |
| 638 | X6 = (6, "x6" ), |
| 639 | X7 = (7, "x7" ), |
| 640 | X8 = (8, "x8" ), |
| 641 | X9 = (9, "x9" ), |
| 642 | X10 = (10, "x10" ), |
| 643 | X11 = (11, "x11" ), |
| 644 | X12 = (12, "x12" ), |
| 645 | X13 = (13, "x13" ), |
| 646 | X14 = (14, "x14" ), |
| 647 | X15 = (15, "x15" ), |
| 648 | X16 = (16, "x16" ), |
| 649 | X17 = (17, "x17" ), |
| 650 | X18 = (18, "x18" ), |
| 651 | X19 = (19, "x19" ), |
| 652 | X20 = (20, "x20" ), |
| 653 | X21 = (21, "x21" ), |
| 654 | X22 = (22, "x22" ), |
| 655 | X23 = (23, "x23" ), |
| 656 | X24 = (24, "x24" ), |
| 657 | X25 = (25, "x25" ), |
| 658 | X26 = (26, "x26" ), |
| 659 | X27 = (27, "x27" ), |
| 660 | X28 = (28, "x28" ), |
| 661 | X29 = (29, "x29" ), |
| 662 | X30 = (30, "x30" ), |
| 663 | X31 = (31, "x31" ), |
| 664 | |
| 665 | F0 = (32, "f0" ), |
| 666 | F1 = (33, "f1" ), |
| 667 | F2 = (34, "f2" ), |
| 668 | F3 = (35, "f3" ), |
| 669 | F4 = (36, "f4" ), |
| 670 | F5 = (37, "f5" ), |
| 671 | F6 = (38, "f6" ), |
| 672 | F7 = (39, "f7" ), |
| 673 | F8 = (40, "f8" ), |
| 674 | F9 = (41, "f9" ), |
| 675 | F10 = (42, "f10" ), |
| 676 | F11 = (43, "f11" ), |
| 677 | F12 = (44, "f12" ), |
| 678 | F13 = (45, "f13" ), |
| 679 | F14 = (46, "f14" ), |
| 680 | F15 = (47, "f15" ), |
| 681 | F16 = (48, "f16" ), |
| 682 | F17 = (49, "f17" ), |
| 683 | F18 = (50, "f18" ), |
| 684 | F19 = (51, "f19" ), |
| 685 | F20 = (52, "f20" ), |
| 686 | F21 = (53, "f21" ), |
| 687 | F22 = (54, "f22" ), |
| 688 | F23 = (55, "f23" ), |
| 689 | F24 = (56, "f24" ), |
| 690 | F25 = (57, "f25" ), |
| 691 | F26 = (58, "f26" ), |
| 692 | F27 = (59, "f27" ), |
| 693 | F28 = (60, "f28" ), |
| 694 | F29 = (61, "f29" ), |
| 695 | F30 = (62, "f30" ), |
| 696 | F31 = (63, "f31" ), |
| 697 | }, |
| 698 | aliases { |
| 699 | ZERO = (0, "zero" ), |
| 700 | RA = (1, "ra" ), |
| 701 | SP = (2, "sp" ), |
| 702 | GP = (3, "gp" ), |
| 703 | TP = (4, "tp" ), |
| 704 | T0 = (5, "t0" ), |
| 705 | T1 = (6, "t1" ), |
| 706 | T2 = (7, "t2" ), |
| 707 | S0 = (8, "s0" ), |
| 708 | S1 = (9, "s1" ), |
| 709 | A0 = (10, "a0" ), |
| 710 | A1 = (11, "a1" ), |
| 711 | A2 = (12, "a2" ), |
| 712 | A3 = (13, "a3" ), |
| 713 | A4 = (14, "a4" ), |
| 714 | A5 = (15, "a5" ), |
| 715 | A6 = (16, "a6" ), |
| 716 | A7 = (17, "a7" ), |
| 717 | S2 = (18, "s2" ), |
| 718 | S3 = (19, "s3" ), |
| 719 | S4 = (20, "s4" ), |
| 720 | S5 = (21, "s5" ), |
| 721 | S6 = (22, "s6" ), |
| 722 | S7 = (23, "s7" ), |
| 723 | S8 = (24, "s8" ), |
| 724 | S9 = (25, "s9" ), |
| 725 | S10 = (26, "s10" ), |
| 726 | S11 = (27, "s11" ), |
| 727 | T3 = (28, "t3" ), |
| 728 | T4 = (29, "t4" ), |
| 729 | T5 = (30, "t5" ), |
| 730 | T6 = (31, "t6" ), |
| 731 | |
| 732 | FT0 = (32, "ft0" ), |
| 733 | FT1 = (33, "ft1" ), |
| 734 | FT2 = (34, "ft2" ), |
| 735 | FT3 = (35, "ft3" ), |
| 736 | FT4 = (36, "ft4" ), |
| 737 | FT5 = (37, "ft5" ), |
| 738 | FT6 = (38, "ft6" ), |
| 739 | FT7 = (39, "ft7" ), |
| 740 | FS0 = (40, "fs0" ), |
| 741 | FS1 = (41, "fs1" ), |
| 742 | FA0 = (42, "fa0" ), |
| 743 | FA1 = (43, "fa1" ), |
| 744 | FA2 = (44, "fa2" ), |
| 745 | FA3 = (45, "fa3" ), |
| 746 | FA4 = (46, "fa4" ), |
| 747 | FA5 = (47, "fa5" ), |
| 748 | FA6 = (48, "fa6" ), |
| 749 | FA7 = (49, "fa7" ), |
| 750 | FS2 = (50, "fs2" ), |
| 751 | FS3 = (51, "fs3" ), |
| 752 | FS4 = (52, "fs4" ), |
| 753 | FS5 = (53, "fs5" ), |
| 754 | FS6 = (54, "fs6" ), |
| 755 | FS7 = (55, "fs7" ), |
| 756 | FS8 = (56, "fs8" ), |
| 757 | FS9 = (57, "fs9" ), |
| 758 | FS10 = (58, "fs10" ), |
| 759 | FS11 = (59, "fs11" ), |
| 760 | FT8 = (60, "ft8" ), |
| 761 | FT9 = (61, "ft9" ), |
| 762 | FT10 = (62, "ft10" ), |
| 763 | FT11 = (63, "ft11" ), |
| 764 | }); |
| 765 | |
| 766 | /// Intel i386 architecture specific definitions. |
| 767 | /// |
| 768 | /// See Intel386 psABi version 1.1 at the [X86 psABI wiki](https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI). |
| 769 | #[derive (Debug, Clone, Copy)] |
| 770 | pub struct X86; |
| 771 | |
| 772 | registers!(X86, { |
| 773 | EAX = (0, "eax" ), |
| 774 | ECX = (1, "ecx" ), |
| 775 | EDX = (2, "edx" ), |
| 776 | EBX = (3, "ebx" ), |
| 777 | ESP = (4, "esp" ), |
| 778 | EBP = (5, "ebp" ), |
| 779 | ESI = (6, "esi" ), |
| 780 | EDI = (7, "edi" ), |
| 781 | |
| 782 | // Return Address register. This is stored in `0(%esp, "")` and is not a physical register. |
| 783 | RA = (8, "RA" ), |
| 784 | |
| 785 | ST0 = (11, "st0" ), |
| 786 | ST1 = (12, "st1" ), |
| 787 | ST2 = (13, "st2" ), |
| 788 | ST3 = (14, "st3" ), |
| 789 | ST4 = (15, "st4" ), |
| 790 | ST5 = (16, "st5" ), |
| 791 | ST6 = (17, "st6" ), |
| 792 | ST7 = (18, "st7" ), |
| 793 | |
| 794 | XMM0 = (21, "xmm0" ), |
| 795 | XMM1 = (22, "xmm1" ), |
| 796 | XMM2 = (23, "xmm2" ), |
| 797 | XMM3 = (24, "xmm3" ), |
| 798 | XMM4 = (25, "xmm4" ), |
| 799 | XMM5 = (26, "xmm5" ), |
| 800 | XMM6 = (27, "xmm6" ), |
| 801 | XMM7 = (28, "xmm7" ), |
| 802 | |
| 803 | MM0 = (29, "mm0" ), |
| 804 | MM1 = (30, "mm1" ), |
| 805 | MM2 = (31, "mm2" ), |
| 806 | MM3 = (32, "mm3" ), |
| 807 | MM4 = (33, "mm4" ), |
| 808 | MM5 = (34, "mm5" ), |
| 809 | MM6 = (35, "mm6" ), |
| 810 | MM7 = (36, "mm7" ), |
| 811 | |
| 812 | MXCSR = (39, "mxcsr" ), |
| 813 | |
| 814 | ES = (40, "es" ), |
| 815 | CS = (41, "cs" ), |
| 816 | SS = (42, "ss" ), |
| 817 | DS = (43, "ds" ), |
| 818 | FS = (44, "fs" ), |
| 819 | GS = (45, "gs" ), |
| 820 | |
| 821 | TR = (48, "tr" ), |
| 822 | LDTR = (49, "ldtr" ), |
| 823 | |
| 824 | FS_BASE = (93, "fs.base" ), |
| 825 | GS_BASE = (94, "gs.base" ), |
| 826 | }); |
| 827 | |
| 828 | /// AMD64 architecture specific definitions. |
| 829 | /// |
| 830 | /// See x86-64 psABI version 1.0 at the [X86 psABI wiki](https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI). |
| 831 | #[derive (Debug, Clone, Copy)] |
| 832 | pub struct X86_64; |
| 833 | |
| 834 | registers!(X86_64, { |
| 835 | RAX = (0, "rax" ), |
| 836 | RDX = (1, "rdx" ), |
| 837 | RCX = (2, "rcx" ), |
| 838 | RBX = (3, "rbx" ), |
| 839 | RSI = (4, "rsi" ), |
| 840 | RDI = (5, "rdi" ), |
| 841 | RBP = (6, "rbp" ), |
| 842 | RSP = (7, "rsp" ), |
| 843 | |
| 844 | R8 = (8, "r8" ), |
| 845 | R9 = (9, "r9" ), |
| 846 | R10 = (10, "r10" ), |
| 847 | R11 = (11, "r11" ), |
| 848 | R12 = (12, "r12" ), |
| 849 | R13 = (13, "r13" ), |
| 850 | R14 = (14, "r14" ), |
| 851 | R15 = (15, "r15" ), |
| 852 | |
| 853 | // Return Address register. This is stored in `0(%rsp, "")` and is not a physical register. |
| 854 | RA = (16, "RA" ), |
| 855 | |
| 856 | XMM0 = (17, "xmm0" ), |
| 857 | XMM1 = (18, "xmm1" ), |
| 858 | XMM2 = (19, "xmm2" ), |
| 859 | XMM3 = (20, "xmm3" ), |
| 860 | XMM4 = (21, "xmm4" ), |
| 861 | XMM5 = (22, "xmm5" ), |
| 862 | XMM6 = (23, "xmm6" ), |
| 863 | XMM7 = (24, "xmm7" ), |
| 864 | |
| 865 | XMM8 = (25, "xmm8" ), |
| 866 | XMM9 = (26, "xmm9" ), |
| 867 | XMM10 = (27, "xmm10" ), |
| 868 | XMM11 = (28, "xmm11" ), |
| 869 | XMM12 = (29, "xmm12" ), |
| 870 | XMM13 = (30, "xmm13" ), |
| 871 | XMM14 = (31, "xmm14" ), |
| 872 | XMM15 = (32, "xmm15" ), |
| 873 | |
| 874 | ST0 = (33, "st0" ), |
| 875 | ST1 = (34, "st1" ), |
| 876 | ST2 = (35, "st2" ), |
| 877 | ST3 = (36, "st3" ), |
| 878 | ST4 = (37, "st4" ), |
| 879 | ST5 = (38, "st5" ), |
| 880 | ST6 = (39, "st6" ), |
| 881 | ST7 = (40, "st7" ), |
| 882 | |
| 883 | MM0 = (41, "mm0" ), |
| 884 | MM1 = (42, "mm1" ), |
| 885 | MM2 = (43, "mm2" ), |
| 886 | MM3 = (44, "mm3" ), |
| 887 | MM4 = (45, "mm4" ), |
| 888 | MM5 = (46, "mm5" ), |
| 889 | MM6 = (47, "mm6" ), |
| 890 | MM7 = (48, "mm7" ), |
| 891 | |
| 892 | RFLAGS = (49, "rFLAGS" ), |
| 893 | ES = (50, "es" ), |
| 894 | CS = (51, "cs" ), |
| 895 | SS = (52, "ss" ), |
| 896 | DS = (53, "ds" ), |
| 897 | FS = (54, "fs" ), |
| 898 | GS = (55, "gs" ), |
| 899 | |
| 900 | FS_BASE = (58, "fs.base" ), |
| 901 | GS_BASE = (59, "gs.base" ), |
| 902 | |
| 903 | TR = (62, "tr" ), |
| 904 | LDTR = (63, "ldtr" ), |
| 905 | MXCSR = (64, "mxcsr" ), |
| 906 | FCW = (65, "fcw" ), |
| 907 | FSW = (66, "fsw" ), |
| 908 | |
| 909 | XMM16 = (67, "xmm16" ), |
| 910 | XMM17 = (68, "xmm17" ), |
| 911 | XMM18 = (69, "xmm18" ), |
| 912 | XMM19 = (70, "xmm19" ), |
| 913 | XMM20 = (71, "xmm20" ), |
| 914 | XMM21 = (72, "xmm21" ), |
| 915 | XMM22 = (73, "xmm22" ), |
| 916 | XMM23 = (74, "xmm23" ), |
| 917 | XMM24 = (75, "xmm24" ), |
| 918 | XMM25 = (76, "xmm25" ), |
| 919 | XMM26 = (77, "xmm26" ), |
| 920 | XMM27 = (78, "xmm27" ), |
| 921 | XMM28 = (79, "xmm28" ), |
| 922 | XMM29 = (80, "xmm29" ), |
| 923 | XMM30 = (81, "xmm30" ), |
| 924 | XMM31 = (82, "xmm31" ), |
| 925 | |
| 926 | K0 = (118, "k0" ), |
| 927 | K1 = (119, "k1" ), |
| 928 | K2 = (120, "k2" ), |
| 929 | K3 = (121, "k3" ), |
| 930 | K4 = (122, "k4" ), |
| 931 | K5 = (123, "k5" ), |
| 932 | K6 = (124, "k6" ), |
| 933 | K7 = (125, "k7" ), |
| 934 | }); |
| 935 | |
| 936 | /// PowerPC 64bit |
| 937 | /// |
| 938 | /// See [64-bit ELF ABI Specification for OpenPOWER Architecture](https://openpowerfoundation.org/specifications/64bitelfabi/). |
| 939 | #[derive (Debug, Clone, Copy)] |
| 940 | pub struct PowerPc64; |
| 941 | |
| 942 | registers!(PowerPc64, { |
| 943 | R0 = (0, "r0" ), |
| 944 | R1 = (1, "r1" ), |
| 945 | R2 = (2, "r2" ), |
| 946 | R3 = (3, "r3" ), |
| 947 | R4 = (4, "r4" ), |
| 948 | R5 = (5, "r5" ), |
| 949 | R6 = (6, "r6" ), |
| 950 | R7 = (7, "r7" ), |
| 951 | R8 = (8, "r8" ), |
| 952 | R9 = (9, "r9" ), |
| 953 | R10 = (10, "r10" ), |
| 954 | R11 = (11, "r11" ), |
| 955 | R12 = (12, "r12" ), |
| 956 | R13 = (13, "r13" ), |
| 957 | R14 = (14, "r14" ), |
| 958 | R15 = (15, "r15" ), |
| 959 | R16 = (16, "r16" ), |
| 960 | R17 = (17, "r17" ), |
| 961 | R18 = (18, "r18" ), |
| 962 | R19 = (19, "r19" ), |
| 963 | R20 = (20, "r20" ), |
| 964 | R21 = (21, "r21" ), |
| 965 | R22 = (22, "r22" ), |
| 966 | R23 = (23, "r23" ), |
| 967 | R24 = (24, "r24" ), |
| 968 | R25 = (25, "r25" ), |
| 969 | R26 = (26, "r26" ), |
| 970 | R27 = (27, "r27" ), |
| 971 | R28 = (28, "r28" ), |
| 972 | R29 = (29, "r29" ), |
| 973 | R30 = (30, "r30" ), |
| 974 | R31 = (31, "r31" ), |
| 975 | |
| 976 | F0 = (32, "f0" ), |
| 977 | F1 = (33, "f1" ), |
| 978 | F2 = (34, "f2" ), |
| 979 | F3 = (35, "f3" ), |
| 980 | F4 = (36, "f4" ), |
| 981 | F5 = (37, "f5" ), |
| 982 | F6 = (38, "f6" ), |
| 983 | F7 = (39, "f7" ), |
| 984 | F8 = (40, "f8" ), |
| 985 | F9 = (41, "f9" ), |
| 986 | F10 = (42, "f10" ), |
| 987 | F11 = (43, "f11" ), |
| 988 | F12 = (44, "f12" ), |
| 989 | F13 = (45, "f13" ), |
| 990 | F14 = (46, "f14" ), |
| 991 | F15 = (47, "f15" ), |
| 992 | F16 = (48, "f16" ), |
| 993 | F17 = (49, "f17" ), |
| 994 | F18 = (50, "f18" ), |
| 995 | F19 = (51, "f19" ), |
| 996 | F20 = (52, "f20" ), |
| 997 | F21 = (53, "f21" ), |
| 998 | F22 = (54, "f22" ), |
| 999 | F23 = (55, "f23" ), |
| 1000 | F24 = (56, "f24" ), |
| 1001 | F25 = (57, "f25" ), |
| 1002 | F26 = (58, "f26" ), |
| 1003 | F27 = (59, "f27" ), |
| 1004 | F28 = (60, "f28" ), |
| 1005 | F29 = (61, "f29" ), |
| 1006 | F30 = (62, "f30" ), |
| 1007 | F31 = (63, "f31" ), |
| 1008 | |
| 1009 | LR = (65, "lr" ), |
| 1010 | CTR = (66, "ctr" ), |
| 1011 | |
| 1012 | CR0 = (68, "cr0" ), |
| 1013 | CR1 = (69, "cr1" ), |
| 1014 | CR2 = (70, "cr2" ), |
| 1015 | CR3 = (71, "cr3" ), |
| 1016 | CR4 = (72, "cr4" ), |
| 1017 | CR5 = (73, "cr5" ), |
| 1018 | CR6 = (74, "cr6" ), |
| 1019 | CR7 = (75, "cr7" ), |
| 1020 | XER = (76, "xer" ), |
| 1021 | |
| 1022 | VR0 = (77, "vr0" ), |
| 1023 | VR1 = (78, "vr1" ), |
| 1024 | VR2 = (79, "vr2" ), |
| 1025 | VR3 = (80, "vr3" ), |
| 1026 | VR4 = (81, "vr4" ), |
| 1027 | VR5 = (82, "vr5" ), |
| 1028 | VR6 = (83, "vr6" ), |
| 1029 | VR7 = (84, "vr7" ), |
| 1030 | VR8 = (85, "vr8" ), |
| 1031 | VR9 = (86, "vr9" ), |
| 1032 | VR10 = (87, "vr10" ), |
| 1033 | VR11 = (88, "vr11" ), |
| 1034 | VR12 = (89, "vr12" ), |
| 1035 | VR13 = (90, "vr13" ), |
| 1036 | VR14 = (91, "vr14" ), |
| 1037 | VR15 = (92, "vr15" ), |
| 1038 | VR16 = (93, "vr16" ), |
| 1039 | VR17 = (94, "vr17" ), |
| 1040 | VR18 = (95, "vr18" ), |
| 1041 | VR19 = (96, "vr19" ), |
| 1042 | VR20 = (97, "vr20" ), |
| 1043 | VR21 = (98, "vr21" ), |
| 1044 | VR22 = (99, "vr22" ), |
| 1045 | VR23 = (100, "vr23" ), |
| 1046 | VR24 = (101, "vr24" ), |
| 1047 | VR25 = (102, "vr25" ), |
| 1048 | VR26 = (103, "vr26" ), |
| 1049 | VR27 = (104, "vr27" ), |
| 1050 | VR28 = (105, "vr28" ), |
| 1051 | VR29 = (106, "vr29" ), |
| 1052 | VR30 = (107, "vr30" ), |
| 1053 | VR31 = (108, "vr31" ), |
| 1054 | |
| 1055 | VSCR = (110, "vscr" ), |
| 1056 | TFHAR = (114, "tfhar" ), |
| 1057 | TFIAR = (115, "tfiar" ), |
| 1058 | TEXASR = (116, "texasr" ), |
| 1059 | }); |
| 1060 | |
| 1061 | #[cfg (test)] |
| 1062 | mod tests { |
| 1063 | |
| 1064 | #[test ] |
| 1065 | #[cfg (feature = "std" )] |
| 1066 | fn test_aarch64_registers() { |
| 1067 | use super::*; |
| 1068 | use std::collections::HashSet; |
| 1069 | |
| 1070 | let mut names = HashSet::new(); |
| 1071 | for n in (0..=39).chain(46..=127) { |
| 1072 | let name = AArch64::register_name(Register(n)) |
| 1073 | .unwrap_or_else(|| panic!("Register {} should have a name." , n)); |
| 1074 | assert!(names.insert(name)); |
| 1075 | } |
| 1076 | } |
| 1077 | |
| 1078 | #[test ] |
| 1079 | #[cfg (feature = "std" )] |
| 1080 | fn test_power64_registers() { |
| 1081 | use super::*; |
| 1082 | use std::collections::HashSet; |
| 1083 | |
| 1084 | let mut names = HashSet::new(); |
| 1085 | for n in (0..=63).chain(68..=75).chain(77..=108) { |
| 1086 | let name = PowerPc64::register_name(Register(n)) |
| 1087 | .unwrap_or_else(|| panic!("Register {} should have a name." , n)); |
| 1088 | assert!(names.insert(name)); |
| 1089 | } |
| 1090 | } |
| 1091 | } |
| 1092 | |