1use crate::enums::size_x_64::SizeX64;
2use crate::records::assembly_builder_x_64::AssemblyBuilderX64;
3use crate::records::register_x_64::RegisterX64;
4
5impl AssemblyBuilderX64 {
6 pub fn get_register_name(&self, reg: RegisterX64) -> &'static str {
7 static NAMES: [[&str; 16]; 7] = [
8 [
9 "rip", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
10 ],
11 [
12 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil", "r8b", "r9b", "r10b", "r11b",
13 "r12b", "r13b", "r14b", "r15b",
14 ],
15 [
16 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di", "r8w", "r9w", "r10w", "r11w",
17 "r12w", "r13w", "r14w", "r15w",
18 ],
19 [
20 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", "r8d", "r9d", "r10d",
21 "r11d", "r12d", "r13d", "r14d", "r15d",
22 ],
23 [
24 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", "r8", "r9", "r10", "r11",
25 "r12", "r13", "r14", "r15",
26 ],
27 [
28 "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", "xmm8", "xmm9",
29 "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15",
30 ],
31 [
32 "ymm0", "ymm1", "ymm2", "ymm3", "ymm4", "ymm5", "ymm6", "ymm7", "ymm8", "ymm9",
33 "ymm10", "ymm11", "ymm12", "ymm13", "ymm14", "ymm15",
34 ],
35 ];
36
37 let size_index = match reg.size() {
38 SizeX64::none => 0,
39 SizeX64::byte => 1,
40 SizeX64::word => 2,
41 SizeX64::dword => 3,
42 SizeX64::qword => 4,
43 SizeX64::xmmword => 5,
44 SizeX64::ymmword => 6,
45 };
46 let index = reg.index() as usize;
47
48 NAMES[size_index][index]
49 }
50}