use crate ::common::Register;
macro_rules! registers {
($struct_name:ident, { $($name:ident = ($val:expr, $disp:expr)),+ $(,)? }
$(, aliases { $($alias_name:ident = ($alias_val:expr, $alias_disp:expr)),+ $(,)? })?) => {
#[ allow(missing_docs)]
impl $struct_name {
$(
pub const $name: Register = Register($val);
)+
$(
$(
pub const $alias_name: Register = Register($alias_val);)+
)*
}
impl $struct_name {
/// The name of a register, or `None` if the register number is unknown.
///
/// Only returns the primary name for registers that alias with others.
pub fn register_name(register: Register) -> Option<&
'static str> {
match register {
$(
Self ::$name => Some($disp),
)+
_ =>
return None,
}
}
/// Converts a register name into a register number.
pub fn name_to_register(value: &str) -> Option<Register> {
match value {
$(
$disp => Some(
Self ::$name),
)+
$(
$($alias_disp => Some(
Self ::$alias_name),)+
)*
_ =>
return None,
}
}
}
};
}
/// ARM architecture specific definitions.
///
/// See [DWARF for the ARM Architecture](
/// https://github.com/ARM-software/abi-aa/blob/main/aadwarf32/aadwarf32.rst).
#[ derive(Debug, Clone, Copy)]
pub struct Arm;
registers!(Arm, {
R0 = (
0 ,
"R0" ),
R1 = (
1 ,
"R1" ),
R2 = (
2 ,
"R2" ),
R3 = (
3 ,
"R3" ),
R4 = (
4 ,
"R4" ),
R5 = (
5 ,
"R5" ),
R6 = (
6 ,
"R6" ),
R7 = (
7 ,
"R7" ),
R8 = (
8 ,
"R8" ),
R9 = (
9 ,
"R9" ),
R10 = (
10 ,
"R10" ),
R11 = (
11 ,
"R11" ),
R12 = (
12 ,
"R12" ),
R13 = (
13 ,
"R13" ),
R14 = (
14 ,
"R14" ),
R15 = (
15 ,
"R15" ),
WCGR0 = (
104 ,
"wCGR0" ),
WCGR1 = (
105 ,
"wCGR1" ),
WCGR2 = (
106 ,
"wCGR2" ),
WCGR3 = (
107 ,
"wCGR3" ),
WCGR4 = (
108 ,
"wCGR4" ),
WCGR5 = (
109 ,
"wCGR5" ),
WCGR6 = (
110 ,
"wCGR6" ),
WCGR7 = (
111 ,
"wCGR7" ),
WR0 = (
112 ,
"wR0" ),
WR1 = (
113 ,
"wR1" ),
WR2 = (
114 ,
"wR2" ),
WR3 = (
115 ,
"wR3" ),
WR4 = (
116 ,
"wR4" ),
WR5 = (
117 ,
"wR5" ),
WR6 = (
118 ,
"wR6" ),
WR7 = (
119 ,
"wR7" ),
WR8 = (
120 ,
"wR8" ),
WR9 = (
121 ,
"wR9" ),
WR10 = (
122 ,
"wR10" ),
WR11 = (
123 ,
"wR11" ),
WR12 = (
124 ,
"wR12" ),
WR13 = (
125 ,
"wR13" ),
WR14 = (
126 ,
"wR14" ),
WR15 = (
127 ,
"wR15" ),
SPSR = (
128 ,
"SPSR" ),
SPSR_FIQ = (
129 ,
"SPSR_FIQ" ),
SPSR_IRQ = (
130 ,
"SPSR_IRQ" ),
SPSR_ABT = (
131 ,
"SPSR_ABT" ),
SPSR_UND = (
132 ,
"SPSR_UND" ),
SPSR_SVC = (
133 ,
"SPSR_SVC" ),
RA_AUTH_CODE = (
143 ,
"RA_AUTH_CODE" ),
R8_USR = (
144 ,
"R8_USR" ),
R9_USR = (
145 ,
"R9_USR" ),
R10_USR = (
146 ,
"R10_USR" ),
R11_USR = (
147 ,
"R11_USR" ),
R12_USR = (
148 ,
"R12_USR" ),
R13_USR = (
149 ,
"R13_USR" ),
R14_USR = (
150 ,
"R14_USR" ),
R8_FIQ = (
151 ,
"R8_FIQ" ),
R9_FIQ = (
152 ,
"R9_FIQ" ),
R10_FIQ = (
153 ,
"R10_FIQ" ),
R11_FIQ = (
154 ,
"R11_FIQ" ),
R12_FIQ = (
155 ,
"R12_FIQ" ),
R13_FIQ = (
156 ,
"R13_FIQ" ),
R14_FIQ = (
157 ,
"R14_FIQ" ),
R13_IRQ = (
158 ,
"R13_IRQ" ),
R14_IRQ = (
159 ,
"R14_IRQ" ),
R13_ABT = (
160 ,
"R13_ABT" ),
R14_ABT = (
161 ,
"R14_ABT" ),
R13_UND = (
162 ,
"R13_UND" ),
R14_UND = (
163 ,
"R14_UND" ),
R13_SVC = (
164 ,
"R13_SVC" ),
R14_SVC = (
165 ,
"R14_SVC" ),
WC0 = (
192 ,
"wC0" ),
WC1 = (
193 ,
"wC1" ),
WC2 = (
194 ,
"wC2" ),
WC3 = (
195 ,
"wC3" ),
WC4 = (
196 ,
"wC4" ),
WC5 = (
197 ,
"wC5" ),
WC6 = (
198 ,
"wC6" ),
WC7 = (
199 ,
"wC7" ),
D0 = (
256 ,
"D0" ),
D1 = (
257 ,
"D1" ),
D2 = (
258 ,
"D2" ),
D3 = (
259 ,
"D3" ),
D4 = (
260 ,
"D4" ),
D5 = (
261 ,
"D5" ),
D6 = (
262 ,
"D6" ),
D7 = (
263 ,
"D7" ),
D8 = (
264 ,
"D8" ),
D9 = (
265 ,
"D9" ),
D10 = (
266 ,
"D10" ),
D11 = (
267 ,
"D11" ),
D12 = (
268 ,
"D12" ),
D13 = (
269 ,
"D13" ),
D14 = (
270 ,
"D14" ),
D15 = (
271 ,
"D15" ),
D16 = (
272 ,
"D16" ),
D17 = (
273 ,
"D17" ),
D18 = (
274 ,
"D18" ),
D19 = (
275 ,
"D19" ),
D20 = (
276 ,
"D20" ),
D21 = (
277 ,
"D21" ),
D22 = (
278 ,
"D22" ),
D23 = (
279 ,
"D23" ),
D24 = (
280 ,
"D24" ),
D25 = (
281 ,
"D25" ),
D26 = (
282 ,
"D26" ),
D27 = (
283 ,
"D27" ),
D28 = (
284 ,
"D28" ),
D29 = (
285 ,
"D29" ),
D30 = (
286 ,
"D30" ),
D31 = (
287 ,
"D31" ),
TPIDRURO = (
320 ,
"TPIDRURO" ),
TPIDRURW = (
321 ,
"TPIDRURW" ),
TPIDPR = (
322 ,
"TPIDPR" ),
HTPIDPR = (
323 ,
"HTPIDPR" ),
},
aliases {
SP = (
13 ,
"SP" ),
LR = (
14 ,
"LR" ),
PC = (
15 ,
"PC" ),
ACC0 = (
104 ,
"ACC0" ),
ACC1 = (
105 ,
"ACC1" ),
ACC2 = (
106 ,
"ACC2" ),
ACC3 = (
107 ,
"ACC3" ),
ACC4 = (
108 ,
"ACC4" ),
ACC5 = (
109 ,
"ACC5" ),
ACC6 = (
110 ,
"ACC6" ),
ACC7 = (
111 ,
"ACC7" ),
S0 = (
256 ,
"S0" ),
S1 = (
256 ,
"S1" ),
S2 = (
257 ,
"S2" ),
S3 = (
257 ,
"S3" ),
S4 = (
258 ,
"S4" ),
S5 = (
258 ,
"S5" ),
S6 = (
259 ,
"S6" ),
S7 = (
259 ,
"S7" ),
S8 = (
260 ,
"S8" ),
S9 = (
260 ,
"S9" ),
S10 = (
261 ,
"S10" ),
S11 = (
261 ,
"S11" ),
S12 = (
262 ,
"S12" ),
S13 = (
262 ,
"S13" ),
S14 = (
263 ,
"S14" ),
S15 = (
263 ,
"S15" ),
S16 = (
264 ,
"S16" ),
S17 = (
264 ,
"S17" ),
S18 = (
265 ,
"S18" ),
S19 = (
265 ,
"S19" ),
S20 = (
266 ,
"S20" ),
S21 = (
266 ,
"S21" ),
S22 = (
267 ,
"S22" ),
S23 = (
267 ,
"S23" ),
S24 = (
268 ,
"S24" ),
S25 = (
268 ,
"S25" ),
S26 = (
269 ,
"S26" ),
S27 = (
269 ,
"S27" ),
S28 = (
270 ,
"S28" ),
S29 = (
270 ,
"S29" ),
S30 = (
271 ,
"S30" ),
S31 = (
271 ,
"S31" ),
});
/// ARM 64-bit (AArch64) architecture specific definitions.
///
/// See [DWARF for the ARM 64-bit Architecture](
/// https://github.com/ARM-software/abi-aa/blob/main/aadwarf64/aadwarf64.rst).
#[ derive(Debug, Clone, Copy)]
pub struct AArch64;
registers!(AArch64, {
X0 = (
0 ,
"X0" ),
X1 = (
1 ,
"X1" ),
X2 = (
2 ,
"X2" ),
X3 = (
3 ,
"X3" ),
X4 = (
4 ,
"X4" ),
X5 = (
5 ,
"X5" ),
X6 = (
6 ,
"X6" ),
X7 = (
7 ,
"X7" ),
X8 = (
8 ,
"X8" ),
X9 = (
9 ,
"X9" ),
X10 = (
10 ,
"X10" ),
X11 = (
11 ,
"X11" ),
X12 = (
12 ,
"X12" ),
X13 = (
13 ,
"X13" ),
X14 = (
14 ,
"X14" ),
X15 = (
15 ,
"X15" ),
X16 = (
16 ,
"X16" ),
X17 = (
17 ,
"X17" ),
X18 = (
18 ,
"X18" ),
X19 = (
19 ,
"X19" ),
X20 = (
20 ,
"X20" ),
X21 = (
21 ,
"X21" ),
X22 = (
22 ,
"X22" ),
X23 = (
23 ,
"X23" ),
X24 = (
24 ,
"X24" ),
X25 = (
25 ,
"X25" ),
X26 = (
26 ,
"X26" ),
X27 = (
27 ,
"X27" ),
X28 = (
28 ,
"X28" ),
X29 = (
29 ,
"X29" ),
X30 = (
30 ,
"X30" ),
SP = (
31 ,
"SP" ),
PC = (
32 ,
"PC" ),
ELR_MODE = (
33 ,
"ELR_mode" ),
RA_SIGN_STATE = (
34 ,
"RA_SIGN_STATE" ),
TPIDRRO_EL0 = (
35 ,
"TPIDRRO_EL0" ),
TPIDR_EL0 = (
36 ,
"TPIDR_EL0" ),
TPIDR_EL1 = (
37 ,
"TPIDR_EL1" ),
TPIDR_EL2 = (
38 ,
"TPIDR_EL2" ),
TPIDR_EL3 = (
39 ,
"TPIDR_EL3" ),
VG = (
46 ,
"VG" ),
FFR = (
47 ,
"FFR" ),
P0 = (
48 ,
"P0" ),
P1 = (
49 ,
"P1" ),
P2 = (
50 ,
"P2" ),
P3 = (
51 ,
"P3" ),
P4 = (
52 ,
"P4" ),
P5 = (
53 ,
"P5" ),
P6 = (
54 ,
"P6" ),
P7 = (
55 ,
"P7" ),
P8 = (
56 ,
"P8" ),
P9 = (
57 ,
"P9" ),
P10 = (
58 ,
"P10" ),
P11 = (
59 ,
"P11" ),
P12 = (
60 ,
"P12" ),
P13 = (
61 ,
"P13" ),
P14 = (
62 ,
"P14" ),
P15 = (
63 ,
"P15" ),
V0 = (
64 ,
"V0" ),
V1 = (
65 ,
"V1" ),
V2 = (
66 ,
"V2" ),
V3 = (
67 ,
"V3" ),
V4 = (
68 ,
"V4" ),
V5 = (
69 ,
"V5" ),
V6 = (
70 ,
"V6" ),
V7 = (
71 ,
"V7" ),
V8 = (
72 ,
"V8" ),
V9 = (
73 ,
"V9" ),
V10 = (
74 ,
"V10" ),
V11 = (
75 ,
"V11" ),
V12 = (
76 ,
"V12" ),
V13 = (
77 ,
"V13" ),
V14 = (
78 ,
"V14" ),
V15 = (
79 ,
"V15" ),
V16 = (
80 ,
"V16" ),
V17 = (
81 ,
"V17" ),
V18 = (
82 ,
"V18" ),
V19 = (
83 ,
"V19" ),
V20 = (
84 ,
"V20" ),
V21 = (
85 ,
"V21" ),
V22 = (
86 ,
"V22" ),
V23 = (
87 ,
"V23" ),
V24 = (
88 ,
"V24" ),
V25 = (
89 ,
"V25" ),
V26 = (
90 ,
"V26" ),
V27 = (
91 ,
"V27" ),
V28 = (
92 ,
"V28" ),
V29 = (
93 ,
"V29" ),
V30 = (
94 ,
"V30" ),
V31 = (
95 ,
"V31" ),
Z0 = (
96 ,
"Z0" ),
Z1 = (
97 ,
"Z1" ),
Z2 = (
98 ,
"Z2" ),
Z3 = (
99 ,
"Z3" ),
Z4 = (
100 ,
"Z4" ),
Z5 = (
101 ,
"Z5" ),
Z6 = (
102 ,
"Z6" ),
Z7 = (
103 ,
"Z7" ),
Z8 = (
104 ,
"Z8" ),
Z9 = (
105 ,
"Z9" ),
Z10 = (
106 ,
"Z10" ),
Z11 = (
107 ,
"Z11" ),
Z12 = (
108 ,
"Z12" ),
Z13 = (
109 ,
"Z13" ),
Z14 = (
110 ,
"Z14" ),
Z15 = (
111 ,
"Z15" ),
Z16 = (
112 ,
"Z16" ),
Z17 = (
113 ,
"Z17" ),
Z18 = (
114 ,
"Z18" ),
Z19 = (
115 ,
"Z19" ),
Z20 = (
116 ,
"Z20" ),
Z21 = (
117 ,
"Z21" ),
Z22 = (
118 ,
"Z22" ),
Z23 = (
119 ,
"Z23" ),
Z24 = (
120 ,
"Z24" ),
Z25 = (
121 ,
"Z25" ),
Z26 = (
122 ,
"Z26" ),
Z27 = (
123 ,
"Z27" ),
Z28 = (
124 ,
"Z28" ),
Z29 = (
125 ,
"Z29" ),
Z30 = (
126 ,
"Z30" ),
Z31 = (
127 ,
"Z31" ),
});
/// LoongArch architecture specific definitions.
///
/// See [LoongArch ELF psABI specification](https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html).
#[ derive(Debug, Clone, Copy)]
pub struct LoongArch;
registers!(LoongArch, {
R0 = (
0 ,
"$r0" ),
R1 = (
1 ,
"$r1" ),
R2 = (
2 ,
"$r2" ),
R3 = (
3 ,
"$r3" ),
R4 = (
4 ,
"$r4" ),
R5 = (
5 ,
"$r5" ),
R6 = (
6 ,
"$r6" ),
R7 = (
7 ,
"$r7" ),
R8 = (
8 ,
"$r8" ),
R9 = (
9 ,
"$r9" ),
R10 = (
10 ,
"$r10" ),
R11 = (
11 ,
"$r11" ),
R12 = (
12 ,
"$r12" ),
R13 = (
13 ,
"$r13" ),
R14 = (
14 ,
"$r14" ),
R15 = (
15 ,
"$r15" ),
R16 = (
16 ,
"$r16" ),
R17 = (
17 ,
"$r17" ),
R18 = (
18 ,
"$r18" ),
R19 = (
19 ,
"$r19" ),
R20 = (
20 ,
"$r20" ),
R21 = (
21 ,
"$r21" ),
R22 = (
22 ,
"$r22" ),
R23 = (
23 ,
"$r23" ),
R24 = (
24 ,
"$r24" ),
R25 = (
25 ,
"$r25" ),
R26 = (
26 ,
"$r26" ),
R27 = (
27 ,
"$r27" ),
R28 = (
28 ,
"$r28" ),
R29 = (
29 ,
"$r29" ),
R30 = (
30 ,
"$r30" ),
R31 = (
31 ,
"$r31" ),
F0 = (
32 ,
"$f0" ),
F1 = (
33 ,
"$f1" ),
F2 = (
34 ,
"$f2" ),
F3 = (
35 ,
"$f3" ),
F4 = (
36 ,
"$f4" ),
F5 = (
37 ,
"$f5" ),
F6 = (
38 ,
"$f6" ),
F7 = (
39 ,
"$f7" ),
F8 = (
40 ,
"$f8" ),
F9 = (
41 ,
"$f9" ),
F10 = (
42 ,
"$f10" ),
F11 = (
43 ,
"$f11" ),
F12 = (
44 ,
"$f12" ),
F13 = (
45 ,
"$f13" ),
F14 = (
46 ,
"$f14" ),
F15 = (
47 ,
"$f15" ),
F16 = (
48 ,
"$f16" ),
F17 = (
49 ,
"$f17" ),
F18 = (
50 ,
"$f18" ),
F19 = (
51 ,
"$f19" ),
F20 = (
52 ,
"$f20" ),
F21 = (
53 ,
"$f21" ),
F22 = (
54 ,
"$f22" ),
F23 = (
55 ,
"$f23" ),
F24 = (
56 ,
"$f24" ),
F25 = (
57 ,
"$f25" ),
F26 = (
58 ,
"$f26" ),
F27 = (
59 ,
"$f27" ),
F28 = (
60 ,
"$f28" ),
F29 = (
61 ,
"$f29" ),
F30 = (
62 ,
"$f30" ),
F31 = (
63 ,
"$f31" ),
FCC0 = (
64 ,
"$fcc0" ),
FCC1 = (
65 ,
"$fcc1" ),
FCC2 = (
66 ,
"$fcc2" ),
FCC3 = (
67 ,
"$fcc3" ),
FCC4 = (
68 ,
"$fcc4" ),
FCC5 = (
69 ,
"$fcc5" ),
FCC6 = (
70 ,
"$fcc6" ),
FCC7 = (
71 ,
"$fcc7" ),
},
aliases {
ZERO = (
0 ,
"$zero" ),
RA = (
1 ,
"$ra" ),
TP = (
2 ,
"$tp" ),
SP = (
3 ,
"$sp" ),
A0 = (
4 ,
"$a0" ),
A1 = (
5 ,
"$a1" ),
A2 = (
6 ,
"$a2" ),
A3 = (
7 ,
"$a3" ),
A4 = (
8 ,
"$a4" ),
A5 = (
9 ,
"$a5" ),
A6 = (
10 ,
"$a6" ),
A7 = (
11 ,
"$a7" ),
T0 = (
12 ,
"$t0" ),
T1 = (
13 ,
"$t1" ),
T2 = (
14 ,
"$t2" ),
T3 = (
15 ,
"$t3" ),
T4 = (
16 ,
"$t4" ),
T5 = (
17 ,
"$t5" ),
T6 = (
18 ,
"$t6" ),
T7 = (
19 ,
"$t7" ),
T8 = (
20 ,
"$t8" ),
FP = (
22 ,
"$fp" ),
S0 = (
23 ,
"$s0" ),
S1 = (
24 ,
"$s1" ),
S2 = (
25 ,
"$s2" ),
S3 = (
26 ,
"$s3" ),
S4 = (
27 ,
"$s4" ),
S5 = (
28 ,
"$s5" ),
S6 = (
29 ,
"$s6" ),
S7 = (
30 ,
"$s7" ),
S8 = (
31 ,
"$s8" ),
FA0 = (
32 ,
"$fa0" ),
FA1 = (
33 ,
"$fa1" ),
FA2 = (
34 ,
"$fa2" ),
FA3 = (
35 ,
"$fa3" ),
FA4 = (
36 ,
"$fa4" ),
FA5 = (
37 ,
"$fa5" ),
FA6 = (
38 ,
"$fa6" ),
FA7 = (
39 ,
"$fa7" ),
FT0 = (
40 ,
"$ft0" ),
FT1 = (
41 ,
"$ft1" ),
FT2 = (
42 ,
"$ft2" ),
FT3 = (
43 ,
"$ft3" ),
FT4 = (
44 ,
"$ft4" ),
FT5 = (
45 ,
"$ft5" ),
FT6 = (
46 ,
"$ft6" ),
FT7 = (
47 ,
"$ft7" ),
FT8 = (
48 ,
"$ft8" ),
FT9 = (
49 ,
"$ft9" ),
FT10 = (
50 ,
"$ft10" ),
FT11 = (
51 ,
"$ft11" ),
FT12 = (
52 ,
"$ft12" ),
FT13 = (
53 ,
"$ft13" ),
FT14 = (
54 ,
"$ft14" ),
FT15 = (
55 ,
"$ft15" ),
FS0 = (
56 ,
"$fs0" ),
FS1 = (
57 ,
"$fs1" ),
FS2 = (
58 ,
"$fs2" ),
FS3 = (
59 ,
"$fs3" ),
FS4 = (
60 ,
"$fs4" ),
FS5 = (
61 ,
"$fs5" ),
FS6 = (
62 ,
"$fs6" ),
FS7 = (
63 ,
"$fs7" ),
});
/// MIPS architecture specific definitions.
///
/// See [MIPS Details](https://en.wikibooks.org/wiki/MIPS_Assembly/MIPS_Details).
#[ derive(Debug, Clone, Copy)]
pub struct MIPS;
registers!(MIPS, {
R0 = (
0 ,
"$0" ),
R1 = (
1 ,
"$1" ),
R2 = (
2 ,
"$2" ),
R3 = (
3 ,
"$3" ),
R4 = (
4 ,
"$4" ),
R5 = (
5 ,
"$5" ),
R6 = (
6 ,
"$6" ),
R7 = (
7 ,
"$7" ),
R8 = (
8 ,
"$8" ),
R9 = (
9 ,
"$9" ),
R10 = (
10 ,
"$10" ),
R11 = (
11 ,
"$11" ),
R12 = (
12 ,
"$12" ),
R13 = (
13 ,
"$13" ),
R14 = (
14 ,
"$14" ),
R15 = (
15 ,
"$15" ),
R16 = (
16 ,
"$16" ),
R17 = (
17 ,
"$17" ),
R18 = (
18 ,
"$18" ),
R19 = (
19 ,
"$19" ),
R20 = (
20 ,
"$20" ),
R21 = (
21 ,
"$21" ),
R22 = (
22 ,
"$22" ),
R23 = (
23 ,
"$23" ),
R24 = (
24 ,
"$24" ),
R25 = (
25 ,
"$25" ),
R26 = (
26 ,
"$26" ),
R27 = (
27 ,
"$27" ),
R28 = (
28 ,
"$28" ),
R29 = (
29 ,
"$29" ),
R30 = (
30 ,
"$30" ),
R31 = (
31 ,
"$31" ),
F0 = (
32 ,
"$f0" ),
F1 = (
33 ,
"$f1" ),
F2 = (
34 ,
"$f2" ),
F3 = (
35 ,
"$f3" ),
F4 = (
36 ,
"$f4" ),
F5 = (
37 ,
"$f5" ),
F6 = (
38 ,
"$f6" ),
F7 = (
39 ,
"$f7" ),
F8 = (
40 ,
"$f8" ),
F9 = (
41 ,
"$f9" ),
F10 = (
42 ,
"$f10" ),
F11 = (
43 ,
"$f11" ),
F12 = (
44 ,
"$f12" ),
F13 = (
45 ,
"$f13" ),
F14 = (
46 ,
"$f14" ),
F15 = (
47 ,
"$f15" ),
F16 = (
48 ,
"$f16" ),
F17 = (
49 ,
"$f17" ),
F18 = (
50 ,
"$f18" ),
F19 = (
51 ,
"$f19" ),
F20 = (
52 ,
"$f20" ),
F21 = (
53 ,
"$f21" ),
F22 = (
54 ,
"$f22" ),
F23 = (
55 ,
"$f23" ),
F24 = (
56 ,
"$f24" ),
F25 = (
57 ,
"$f25" ),
F26 = (
58 ,
"$f26" ),
F27 = (
59 ,
"$f27" ),
F28 = (
60 ,
"$f28" ),
F29 = (
61 ,
"$f29" ),
F30 = (
62 ,
"$f30" ),
F31 = (
63 ,
"$f31" ),
},
aliases {
ZERO = (
0 ,
"$zero" ),
AT = (
1 ,
"$at" ),
V0 = (
2 ,
"$v0" ),
V1 = (
3 ,
"$v1" ),
A0 = (
4 ,
"$a0" ),
A1 = (
5 ,
"$a1" ),
A2 = (
6 ,
"$a2" ),
A3 = (
7 ,
"$a3" ),
T0 = (
8 ,
"$t0" ),
T1 = (
9 ,
"$t1" ),
T2 = (
10 ,
"$t2" ),
T3 = (
11 ,
"$t3" ),
T4 = (
12 ,
"$t4" ),
T5 = (
13 ,
"$t5" ),
T6 = (
14 ,
"$t6" ),
T7 = (
15 ,
"$t7" ),
S0 = (
16 ,
"$s0" ),
S1 = (
17 ,
"$s1" ),
S2 = (
18 ,
"$s2" ),
S3 = (
19 ,
"$s3" ),
S4 = (
20 ,
"$s4" ),
S5 = (
21 ,
"$s5" ),
S6 = (
22 ,
"$s6" ),
S7 = (
23 ,
"$s7" ),
T8 = (
24 ,
"$t8" ),
T9 = (
25 ,
"$t9" ),
K0 = (
26 ,
"$k0" ),
K1 = (
27 ,
"$k1" ),
GP = (
28 ,
"$gp" ),
SP = (
29 ,
"$sp" ),
FP = (
30 ,
"$fp" ),
RA = (
31 ,
"$ra" ),
S8 = (
30 ,
"$s8" )
});
/// RISC-V architecture specific definitions.
///
/// See [RISC-V ELF psABI specification](https://github.com/riscv/riscv-elf-psabi-doc).
#[ derive(Debug, Clone, Copy)]
pub struct RiscV;
registers!(RiscV, {
X0 = (
0 ,
"x0" ),
X1 = (
1 ,
"x1" ),
X2 = (
2 ,
"x2" ),
X3 = (
3 ,
"x3" ),
X4 = (
4 ,
"x4" ),
X5 = (
5 ,
"x5" ),
X6 = (
6 ,
"x6" ),
X7 = (
7 ,
"x7" ),
X8 = (
8 ,
"x8" ),
X9 = (
9 ,
"x9" ),
X10 = (
10 ,
"x10" ),
X11 = (
11 ,
"x11" ),
X12 = (
12 ,
"x12" ),
X13 = (
13 ,
"x13" ),
X14 = (
14 ,
"x14" ),
X15 = (
15 ,
"x15" ),
X16 = (
16 ,
"x16" ),
X17 = (
17 ,
"x17" ),
X18 = (
18 ,
"x18" ),
X19 = (
19 ,
"x19" ),
X20 = (
20 ,
"x20" ),
X21 = (
21 ,
"x21" ),
X22 = (
22 ,
"x22" ),
X23 = (
23 ,
"x23" ),
X24 = (
24 ,
"x24" ),
X25 = (
25 ,
"x25" ),
X26 = (
26 ,
"x26" ),
X27 = (
27 ,
"x27" ),
X28 = (
28 ,
"x28" ),
X29 = (
29 ,
"x29" ),
X30 = (
30 ,
"x30" ),
X31 = (
31 ,
"x31" ),
F0 = (
32 ,
"f0" ),
F1 = (
33 ,
"f1" ),
F2 = (
34 ,
"f2" ),
F3 = (
35 ,
"f3" ),
F4 = (
36 ,
"f4" ),
F5 = (
37 ,
"f5" ),
F6 = (
38 ,
"f6" ),
F7 = (
39 ,
"f7" ),
F8 = (
40 ,
"f8" ),
F9 = (
41 ,
"f9" ),
F10 = (
42 ,
"f10" ),
F11 = (
43 ,
"f11" ),
F12 = (
44 ,
"f12" ),
F13 = (
45 ,
"f13" ),
F14 = (
46 ,
"f14" ),
F15 = (
47 ,
"f15" ),
F16 = (
48 ,
"f16" ),
F17 = (
49 ,
"f17" ),
F18 = (
50 ,
"f18" ),
F19 = (
51 ,
"f19" ),
F20 = (
52 ,
"f20" ),
F21 = (
53 ,
"f21" ),
F22 = (
54 ,
"f22" ),
F23 = (
55 ,
"f23" ),
F24 = (
56 ,
"f24" ),
F25 = (
57 ,
"f25" ),
F26 = (
58 ,
"f26" ),
F27 = (
59 ,
"f27" ),
F28 = (
60 ,
"f28" ),
F29 = (
61 ,
"f29" ),
F30 = (
62 ,
"f30" ),
F31 = (
63 ,
"f31" ),
},
aliases {
ZERO = (
0 ,
"zero" ),
RA = (
1 ,
"ra" ),
SP = (
2 ,
"sp" ),
GP = (
3 ,
"gp" ),
TP = (
4 ,
"tp" ),
T0 = (
5 ,
"t0" ),
T1 = (
6 ,
"t1" ),
T2 = (
7 ,
"t2" ),
S0 = (
8 ,
"s0" ),
S1 = (
9 ,
"s1" ),
A0 = (
10 ,
"a0" ),
A1 = (
11 ,
"a1" ),
A2 = (
12 ,
"a2" ),
A3 = (
13 ,
"a3" ),
A4 = (
14 ,
"a4" ),
A5 = (
15 ,
"a5" ),
A6 = (
16 ,
"a6" ),
A7 = (
17 ,
"a7" ),
S2 = (
18 ,
"s2" ),
S3 = (
19 ,
"s3" ),
S4 = (
20 ,
"s4" ),
S5 = (
21 ,
"s5" ),
S6 = (
22 ,
"s6" ),
S7 = (
23 ,
"s7" ),
S8 = (
24 ,
"s8" ),
S9 = (
25 ,
"s9" ),
S10 = (
26 ,
"s10" ),
S11 = (
27 ,
"s11" ),
T3 = (
28 ,
"t3" ),
T4 = (
29 ,
"t4" ),
T5 = (
30 ,
"t5" ),
T6 = (
31 ,
"t6" ),
FT0 = (
32 ,
"ft0" ),
FT1 = (
33 ,
"ft1" ),
FT2 = (
34 ,
"ft2" ),
FT3 = (
35 ,
"ft3" ),
FT4 = (
36 ,
"ft4" ),
FT5 = (
37 ,
"ft5" ),
FT6 = (
38 ,
"ft6" ),
FT7 = (
39 ,
"ft7" ),
FS0 = (
40 ,
"fs0" ),
FS1 = (
41 ,
"fs1" ),
FA0 = (
42 ,
"fa0" ),
FA1 = (
43 ,
"fa1" ),
FA2 = (
44 ,
"fa2" ),
FA3 = (
45 ,
"fa3" ),
FA4 = (
46 ,
"fa4" ),
FA5 = (
47 ,
"fa5" ),
FA6 = (
48 ,
"fa6" ),
FA7 = (
49 ,
"fa7" ),
FS2 = (
50 ,
"fs2" ),
FS3 = (
51 ,
"fs3" ),
FS4 = (
52 ,
"fs4" ),
FS5 = (
53 ,
"fs5" ),
FS6 = (
54 ,
"fs6" ),
FS7 = (
55 ,
"fs7" ),
FS8 = (
56 ,
"fs8" ),
FS9 = (
57 ,
"fs9" ),
FS10 = (
58 ,
"fs10" ),
FS11 = (
59 ,
"fs11" ),
FT8 = (
60 ,
"ft8" ),
FT9 = (
61 ,
"ft9" ),
FT10 = (
62 ,
"ft10" ),
FT11 = (
63 ,
"ft11" ),
});
/// Intel i386 architecture specific definitions.
///
/// See Intel386 psABi version 1.1 at the [X86 psABI wiki](https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI).
#[ derive(Debug, Clone, Copy)]
pub struct X86;
registers!(X86, {
EAX = (
0 ,
"eax" ),
ECX = (
1 ,
"ecx" ),
EDX = (
2 ,
"edx" ),
EBX = (
3 ,
"ebx" ),
ESP = (
4 ,
"esp" ),
EBP = (
5 ,
"ebp" ),
ESI = (
6 ,
"esi" ),
EDI = (
7 ,
"edi" ),
// Return Address register. This is stored in `0(%esp, "")` and is not a physical register.
RA = (
8 ,
"RA" ),
ST0 = (
11 ,
"st0" ),
ST1 = (
12 ,
"st1" ),
ST2 = (
13 ,
"st2" ),
ST3 = (
14 ,
"st3" ),
ST4 = (
15 ,
"st4" ),
ST5 = (
16 ,
"st5" ),
ST6 = (
17 ,
"st6" ),
ST7 = (
18 ,
"st7" ),
XMM0 = (
21 ,
"xmm0" ),
XMM1 = (
22 ,
"xmm1" ),
XMM2 = (
23 ,
"xmm2" ),
XMM3 = (
24 ,
"xmm3" ),
XMM4 = (
25 ,
"xmm4" ),
XMM5 = (
26 ,
"xmm5" ),
XMM6 = (
27 ,
"xmm6" ),
XMM7 = (
28 ,
"xmm7" ),
MM0 = (
29 ,
"mm0" ),
MM1 = (
30 ,
"mm1" ),
MM2 = (
31 ,
"mm2" ),
MM3 = (
32 ,
"mm3" ),
MM4 = (
33 ,
"mm4" ),
MM5 = (
34 ,
"mm5" ),
MM6 = (
35 ,
"mm6" ),
MM7 = (
36 ,
"mm7" ),
MXCSR = (
39 ,
"mxcsr" ),
ES = (
40 ,
"es" ),
CS = (
41 ,
"cs" ),
SS = (
42 ,
"ss" ),
DS = (
43 ,
"ds" ),
FS = (
44 ,
"fs" ),
GS = (
45 ,
"gs" ),
TR = (
48 ,
"tr" ),
LDTR = (
49 ,
"ldtr" ),
FS_BASE = (
93 ,
"fs.base" ),
GS_BASE = (
94 ,
"gs.base" ),
});
/// AMD64 architecture specific definitions.
///
/// See x86-64 psABI version 1.0 at the [X86 psABI wiki](https://github.com/hjl-tools/x86-psABI/wiki/X86-psABI).
#[ derive(Debug, Clone, Copy)]
pub struct X86_64;
registers!(X86_64, {
RAX = (
0 ,
"rax" ),
RDX = (
1 ,
"rdx" ),
RCX = (
2 ,
"rcx" ),
RBX = (
3 ,
"rbx" ),
RSI = (
4 ,
"rsi" ),
RDI = (
5 ,
"rdi" ),
RBP = (
6 ,
"rbp" ),
RSP = (
7 ,
"rsp" ),
R8 = (
8 ,
"r8" ),
R9 = (
9 ,
"r9" ),
R10 = (
10 ,
"r10" ),
R11 = (
11 ,
"r11" ),
R12 = (
12 ,
"r12" ),
R13 = (
13 ,
"r13" ),
R14 = (
14 ,
"r14" ),
R15 = (
15 ,
"r15" ),
// Return Address register. This is stored in `0(%rsp, "")` and is not a physical register.
RA = (
16 ,
"RA" ),
XMM0 = (
17 ,
"xmm0" ),
XMM1 = (
18 ,
"xmm1" ),
XMM2 = (
19 ,
"xmm2" ),
XMM3 = (
20 ,
"xmm3" ),
XMM4 = (
21 ,
"xmm4" ),
XMM5 = (
22 ,
"xmm5" ),
XMM6 = (
23 ,
"xmm6" ),
XMM7 = (
24 ,
"xmm7" ),
XMM8 = (
25 ,
"xmm8" ),
XMM9 = (
26 ,
"xmm9" ),
XMM10 = (
27 ,
"xmm10" ),
XMM11 = (
28 ,
"xmm11" ),
XMM12 = (
29 ,
"xmm12" ),
XMM13 = (
30 ,
"xmm13" ),
XMM14 = (
31 ,
"xmm14" ),
XMM15 = (
32 ,
"xmm15" ),
ST0 = (
33 ,
"st0" ),
ST1 = (
34 ,
"st1" ),
ST2 = (
35 ,
"st2" ),
ST3 = (
36 ,
"st3" ),
ST4 = (
37 ,
"st4" ),
ST5 = (
38 ,
"st5" ),
ST6 = (
39 ,
"st6" ),
ST7 = (
40 ,
"st7" ),
MM0 = (
41 ,
"mm0" ),
MM1 = (
42 ,
"mm1" ),
MM2 = (
43 ,
"mm2" ),
MM3 = (
44 ,
"mm3" ),
MM4 = (
45 ,
"mm4" ),
MM5 = (
46 ,
"mm5" ),
MM6 = (
47 ,
"mm6" ),
MM7 = (
48 ,
"mm7" ),
RFLAGS = (
49 ,
"rFLAGS" ),
ES = (
50 ,
"es" ),
CS = (
51 ,
"cs" ),
SS = (
52 ,
"ss" ),
DS = (
53 ,
"ds" ),
FS = (
54 ,
"fs" ),
GS = (
55 ,
"gs" ),
FS_BASE = (
58 ,
"fs.base" ),
GS_BASE = (
59 ,
"gs.base" ),
TR = (
62 ,
"tr" ),
LDTR = (
63 ,
"ldtr" ),
MXCSR = (
64 ,
"mxcsr" ),
FCW = (
65 ,
"fcw" ),
FSW = (
66 ,
"fsw" ),
XMM16 = (
67 ,
"xmm16" ),
XMM17 = (
68 ,
"xmm17" ),
XMM18 = (
69 ,
"xmm18" ),
XMM19 = (
70 ,
"xmm19" ),
XMM20 = (
71 ,
"xmm20" ),
XMM21 = (
72 ,
"xmm21" ),
XMM22 = (
73 ,
"xmm22" ),
XMM23 = (
74 ,
"xmm23" ),
XMM24 = (
75 ,
"xmm24" ),
XMM25 = (
76 ,
"xmm25" ),
XMM26 = (
77 ,
"xmm26" ),
XMM27 = (
78 ,
"xmm27" ),
XMM28 = (
79 ,
"xmm28" ),
XMM29 = (
80 ,
"xmm29" ),
XMM30 = (
81 ,
"xmm30" ),
XMM31 = (
82 ,
"xmm31" ),
K0 = (
118 ,
"k0" ),
K1 = (
119 ,
"k1" ),
K2 = (
120 ,
"k2" ),
K3 = (
121 ,
"k3" ),
K4 = (
122 ,
"k4" ),
K5 = (
123 ,
"k5" ),
K6 = (
124 ,
"k6" ),
K7 = (
125 ,
"k7" ),
});
/// PowerPC 64bit
///
/// See [64-bit ELF ABI Specification for OpenPOWER Architecture](https://openpowerfoundation.org/specifications/64bitelfabi/).
#[ derive(Debug, Clone, Copy)]
pub struct PowerPc64;
registers!(PowerPc64, {
R0 = (
0 ,
"r0" ),
R1 = (
1 ,
"r1" ),
R2 = (
2 ,
"r2" ),
R3 = (
3 ,
"r3" ),
R4 = (
4 ,
"r4" ),
R5 = (
5 ,
"r5" ),
R6 = (
6 ,
"r6" ),
R7 = (
7 ,
"r7" ),
R8 = (
8 ,
"r8" ),
R9 = (
9 ,
"r9" ),
R10 = (
10 ,
"r10" ),
R11 = (
11 ,
"r11" ),
R12 = (
12 ,
"r12" ),
R13 = (
13 ,
"r13" ),
R14 = (
14 ,
"r14" ),
R15 = (
15 ,
"r15" ),
R16 = (
16 ,
"r16" ),
R17 = (
17 ,
"r17" ),
R18 = (
18 ,
"r18" ),
R19 = (
19 ,
"r19" ),
R20 = (
20 ,
"r20" ),
R21 = (
21 ,
"r21" ),
R22 = (
22 ,
"r22" ),
R23 = (
23 ,
"r23" ),
R24 = (
24 ,
"r24" ),
R25 = (
25 ,
"r25" ),
R26 = (
26 ,
"r26" ),
R27 = (
27 ,
"r27" ),
R28 = (
28 ,
"r28" ),
R29 = (
29 ,
"r29" ),
R30 = (
30 ,
"r30" ),
R31 = (
31 ,
"r31" ),
F0 = (
32 ,
"f0" ),
F1 = (
33 ,
"f1" ),
F2 = (
34 ,
"f2" ),
F3 = (
35 ,
"f3" ),
F4 = (
36 ,
"f4" ),
F5 = (
37 ,
"f5" ),
F6 = (
38 ,
"f6" ),
F7 = (
39 ,
"f7" ),
F8 = (
40 ,
"f8" ),
F9 = (
41 ,
"f9" ),
F10 = (
42 ,
"f10" ),
F11 = (
43 ,
"f11" ),
F12 = (
44 ,
"f12" ),
F13 = (
45 ,
"f13" ),
F14 = (
46 ,
"f14" ),
F15 = (
47 ,
"f15" ),
F16 = (
48 ,
"f16" ),
F17 = (
49 ,
"f17" ),
F18 = (
50 ,
"f18" ),
F19 = (
51 ,
"f19" ),
F20 = (
52 ,
"f20" ),
F21 = (
53 ,
"f21" ),
F22 = (
54 ,
"f22" ),
F23 = (
55 ,
"f23" ),
F24 = (
56 ,
"f24" ),
F25 = (
57 ,
"f25" ),
F26 = (
58 ,
"f26" ),
F27 = (
59 ,
"f27" ),
F28 = (
60 ,
"f28" ),
F29 = (
61 ,
"f29" ),
F30 = (
62 ,
"f30" ),
F31 = (
63 ,
"f31" ),
LR = (
65 ,
"lr" ),
CTR = (
66 ,
"ctr" ),
CR0 = (
68 ,
"cr0" ),
CR1 = (
69 ,
"cr1" ),
CR2 = (
70 ,
"cr2" ),
CR3 = (
71 ,
"cr3" ),
CR4 = (
72 ,
"cr4" ),
CR5 = (
73 ,
"cr5" ),
CR6 = (
74 ,
"cr6" ),
CR7 = (
75 ,
"cr7" ),
XER = (
76 ,
"xer" ),
VR0 = (
77 ,
"vr0" ),
VR1 = (
78 ,
"vr1" ),
VR2 = (
79 ,
"vr2" ),
VR3 = (
80 ,
"vr3" ),
VR4 = (
81 ,
"vr4" ),
VR5 = (
82 ,
"vr5" ),
VR6 = (
83 ,
"vr6" ),
VR7 = (
84 ,
"vr7" ),
VR8 = (
85 ,
"vr8" ),
VR9 = (
86 ,
"vr9" ),
VR10 = (
87 ,
"vr10" ),
VR11 = (
88 ,
"vr11" ),
VR12 = (
89 ,
"vr12" ),
VR13 = (
90 ,
"vr13" ),
VR14 = (
91 ,
"vr14" ),
VR15 = (
92 ,
"vr15" ),
VR16 = (
93 ,
"vr16" ),
VR17 = (
94 ,
"vr17" ),
VR18 = (
95 ,
"vr18" ),
VR19 = (
96 ,
"vr19" ),
VR20 = (
97 ,
"vr20" ),
VR21 = (
98 ,
"vr21" ),
VR22 = (
99 ,
"vr22" ),
VR23 = (
100 ,
"vr23" ),
VR24 = (
101 ,
"vr24" ),
VR25 = (
102 ,
"vr25" ),
VR26 = (
103 ,
"vr26" ),
VR27 = (
104 ,
"vr27" ),
VR28 = (
105 ,
"vr28" ),
VR29 = (
106 ,
"vr29" ),
VR30 = (
107 ,
"vr30" ),
VR31 = (
108 ,
"vr31" ),
VSCR = (
110 ,
"vscr" ),
TFHAR = (
114 ,
"tfhar" ),
TFIAR = (
115 ,
"tfiar" ),
TEXASR = (
116 ,
"texasr" ),
});
#[ cfg(test)]
mod tests {
#[ test]
#[ cfg(feature =
"std" )]
fn test_aarch64_registers() {
use super ::*;
use std::collections::HashSet;
let mut names = HashSet::new();
for n
in (
0 ..=
39 ).chain(
46 ..=
127 ) {
let name = AArch64::register_name(Register(n))
.unwrap_or_else(|| panic!(
"Register {} should have a name." , n));
assert!(names.insert(name));
}
}
#[ test]
#[ cfg(feature =
"std" )]
fn test_power64_registers() {
use super ::*;
use std::collections::HashSet;
let mut names = HashSet::new();
for n
in (
0 ..=
63 ).chain(
68 ..=
75 ).chain(
77 ..=
108 ) {
let name = PowerPc64::register_name(Register(n))
.unwrap_or_else(|| panic!(
"Register {} should have a name." , n));
assert!(names.insert(name));
}
}
}
Messung V0.5 in Prozent C=85 H=96 G=90
¤ Dauer der Verarbeitung: 0.41 Sekunden
(vorverarbeitet am 2026-06-19)
¤
*© Formatika GbR, Deutschland