xref: /src/contrib/llvm-project/lldb/source/Plugins/SymbolFile/NativePDB/CodeViewRegisterMapping.cpp (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
1cfca06d7SDimitry Andric //===-- CodeViewRegisterMapping.cpp ---------------------------------------===//
25f29bb8aSDimitry Andric //
35f29bb8aSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45f29bb8aSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
55f29bb8aSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65f29bb8aSDimitry Andric //
75f29bb8aSDimitry Andric //===----------------------------------------------------------------------===//
85f29bb8aSDimitry Andric 
95f29bb8aSDimitry Andric #include "CodeViewRegisterMapping.h"
105f29bb8aSDimitry Andric 
115f29bb8aSDimitry Andric #include "lldb/lldb-defines.h"
125f29bb8aSDimitry Andric 
13145449b1SDimitry Andric #include "Plugins/Process/Utility/lldb-arm64-register-enums.h"
145f29bb8aSDimitry Andric #include "Plugins/Process/Utility/lldb-x86-register-enums.h"
155f29bb8aSDimitry Andric 
165f29bb8aSDimitry Andric using namespace lldb_private;
175f29bb8aSDimitry Andric 
18145449b1SDimitry Andric static const uint32_t g_code_view_to_lldb_registers_arm64[] = {
19145449b1SDimitry Andric     LLDB_INVALID_REGNUM, // NONE
20145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
21145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
22145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
23145449b1SDimitry Andric     gpr_w0_arm64,  // ARM64_W0, 10)
24145449b1SDimitry Andric     gpr_w1_arm64,  // ARM64_W1, 11)
25145449b1SDimitry Andric     gpr_w2_arm64,  // ARM64_W2, 12)
26145449b1SDimitry Andric     gpr_w3_arm64,  // ARM64_W3, 13)
27145449b1SDimitry Andric     gpr_w4_arm64,  // ARM64_W4, 14)
28145449b1SDimitry Andric     gpr_w5_arm64,  // ARM64_W5, 15)
29145449b1SDimitry Andric     gpr_w6_arm64,  // ARM64_W6, 16)
30145449b1SDimitry Andric     gpr_w7_arm64,  // ARM64_W7, 17)
31145449b1SDimitry Andric     gpr_w8_arm64,  // ARM64_W8, 18)
32145449b1SDimitry Andric     gpr_w9_arm64,  // ARM64_W9, 19)
33145449b1SDimitry Andric     gpr_w10_arm64, // ARM64_W10, 20)
34145449b1SDimitry Andric     gpr_w11_arm64, // ARM64_W11, 21)
35145449b1SDimitry Andric     gpr_w12_arm64, // ARM64_W12, 22)
36145449b1SDimitry Andric     gpr_w13_arm64, // ARM64_W13, 23)
37145449b1SDimitry Andric     gpr_w14_arm64, // ARM64_W14, 24)
38145449b1SDimitry Andric     gpr_w15_arm64, // ARM64_W15, 25)
39145449b1SDimitry Andric     gpr_w16_arm64, // ARM64_W16, 26)
40145449b1SDimitry Andric     gpr_w17_arm64, // ARM64_W17, 27)
41145449b1SDimitry Andric     gpr_w18_arm64, // ARM64_W18, 28)
42145449b1SDimitry Andric     gpr_w19_arm64, // ARM64_W19, 29)
43145449b1SDimitry Andric     gpr_w20_arm64, // ARM64_W20, 30)
44145449b1SDimitry Andric     gpr_w21_arm64, // ARM64_W21, 31)
45145449b1SDimitry Andric     gpr_w22_arm64, // ARM64_W22, 32)
46145449b1SDimitry Andric     gpr_w23_arm64, // ARM64_W23, 33)
47145449b1SDimitry Andric     gpr_w24_arm64, // ARM64_W24, 34)
48145449b1SDimitry Andric     gpr_w25_arm64, // ARM64_W25, 35)
49145449b1SDimitry Andric     gpr_w26_arm64, // ARM64_W26, 36)
50145449b1SDimitry Andric     gpr_w27_arm64, // ARM64_W27, 37)
51145449b1SDimitry Andric     gpr_w28_arm64, // ARM64_W28, 38)
52145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
53145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
54145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
55145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
56145449b1SDimitry Andric     gpr_x0_arm64,  // ARM64_X0, 50)
57145449b1SDimitry Andric     gpr_x1_arm64,  // ARM64_X1, 51)
58145449b1SDimitry Andric     gpr_x2_arm64,  // ARM64_X2, 52)
59145449b1SDimitry Andric     gpr_x3_arm64,  // ARM64_X3, 53)
60145449b1SDimitry Andric     gpr_x4_arm64,  // ARM64_X4, 54)
61145449b1SDimitry Andric     gpr_x5_arm64,  // ARM64_X5, 55)
62145449b1SDimitry Andric     gpr_x6_arm64,  // ARM64_X6, 56)
63145449b1SDimitry Andric     gpr_x7_arm64,  // ARM64_X7, 57)
64145449b1SDimitry Andric     gpr_x8_arm64,  // ARM64_X8, 58)
65145449b1SDimitry Andric     gpr_x9_arm64,  // ARM64_X9, 59)
66145449b1SDimitry Andric     gpr_x10_arm64, // ARM64_X10, 60)
67145449b1SDimitry Andric     gpr_x11_arm64, // ARM64_X11, 61)
68145449b1SDimitry Andric     gpr_x12_arm64, // ARM64_X12, 62)
69145449b1SDimitry Andric     gpr_x13_arm64, // ARM64_X13, 63)
70145449b1SDimitry Andric     gpr_x14_arm64, // ARM64_X14, 64)
71145449b1SDimitry Andric     gpr_x15_arm64, // ARM64_X15, 65)
72145449b1SDimitry Andric     gpr_x16_arm64, // ARM64_X16, 66)
73145449b1SDimitry Andric     gpr_x17_arm64, // ARM64_X17, 67)
74145449b1SDimitry Andric     gpr_x18_arm64, // ARM64_X18, 68)
75145449b1SDimitry Andric     gpr_x19_arm64, // ARM64_X19, 69)
76145449b1SDimitry Andric     gpr_x20_arm64, // ARM64_X20, 70)
77145449b1SDimitry Andric     gpr_x21_arm64, // ARM64_X21, 71)
78145449b1SDimitry Andric     gpr_x22_arm64, // ARM64_X22, 72)
79145449b1SDimitry Andric     gpr_x23_arm64, // ARM64_X23, 73)
80145449b1SDimitry Andric     gpr_x24_arm64, // ARM64_X24, 74)
81145449b1SDimitry Andric     gpr_x25_arm64, // ARM64_X25, 75)
82145449b1SDimitry Andric     gpr_x26_arm64, // ARM64_X26, 76)
83145449b1SDimitry Andric     gpr_x27_arm64, // ARM64_X27, 77)
84145449b1SDimitry Andric     gpr_x28_arm64, // ARM64_X28, 78)
85145449b1SDimitry Andric     gpr_fp_arm64,  // ARM64_FP, 79)
86145449b1SDimitry Andric     gpr_lr_arm64,  // ARM64_LR, 80)
87145449b1SDimitry Andric     gpr_sp_arm64,  // ARM64_SP, 81)
88145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
89145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
90145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
91145449b1SDimitry Andric     gpr_cpsr_arm64, // ARM64_NZCV, 90)
92145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
93145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
94145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
95145449b1SDimitry Andric     fpu_s0_arm64,  // (ARM64_S0, 100)
96145449b1SDimitry Andric     fpu_s1_arm64,  // (ARM64_S1, 101)
97145449b1SDimitry Andric     fpu_s2_arm64,  // (ARM64_S2, 102)
98145449b1SDimitry Andric     fpu_s3_arm64,  // (ARM64_S3, 103)
99145449b1SDimitry Andric     fpu_s4_arm64,  // (ARM64_S4, 104)
100145449b1SDimitry Andric     fpu_s5_arm64,  // (ARM64_S5, 105)
101145449b1SDimitry Andric     fpu_s6_arm64,  // (ARM64_S6, 106)
102145449b1SDimitry Andric     fpu_s7_arm64,  // (ARM64_S7, 107)
103145449b1SDimitry Andric     fpu_s8_arm64,  // (ARM64_S8, 108)
104145449b1SDimitry Andric     fpu_s9_arm64,  // (ARM64_S9, 109)
105145449b1SDimitry Andric     fpu_s10_arm64, // (ARM64_S10, 110)
106145449b1SDimitry Andric     fpu_s11_arm64, // (ARM64_S11, 111)
107145449b1SDimitry Andric     fpu_s12_arm64, // (ARM64_S12, 112)
108145449b1SDimitry Andric     fpu_s13_arm64, // (ARM64_S13, 113)
109145449b1SDimitry Andric     fpu_s14_arm64, // (ARM64_S14, 114)
110145449b1SDimitry Andric     fpu_s15_arm64, // (ARM64_S15, 115)
111145449b1SDimitry Andric     fpu_s16_arm64, // (ARM64_S16, 116)
112145449b1SDimitry Andric     fpu_s17_arm64, // (ARM64_S17, 117)
113145449b1SDimitry Andric     fpu_s18_arm64, // (ARM64_S18, 118)
114145449b1SDimitry Andric     fpu_s19_arm64, // (ARM64_S19, 119)
115145449b1SDimitry Andric     fpu_s20_arm64, // (ARM64_S20, 120)
116145449b1SDimitry Andric     fpu_s21_arm64, // (ARM64_S21, 121)
117145449b1SDimitry Andric     fpu_s22_arm64, // (ARM64_S22, 122)
118145449b1SDimitry Andric     fpu_s23_arm64, // (ARM64_S23, 123)
119145449b1SDimitry Andric     fpu_s24_arm64, // (ARM64_S24, 124)
120145449b1SDimitry Andric     fpu_s25_arm64, // (ARM64_S25, 125)
121145449b1SDimitry Andric     fpu_s26_arm64, // (ARM64_S26, 126)
122145449b1SDimitry Andric     fpu_s27_arm64, // (ARM64_S27, 127)
123145449b1SDimitry Andric     fpu_s28_arm64, // (ARM64_S28, 128)
124145449b1SDimitry Andric     fpu_s29_arm64, // (ARM64_S29, 129)
125145449b1SDimitry Andric     fpu_s30_arm64, // (ARM64_S30, 130)
126145449b1SDimitry Andric     fpu_s31_arm64, // (ARM64_S31, 131)
127145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
128145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
129145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
130145449b1SDimitry Andric     fpu_d0_arm64,  // (ARM64_D0, 140)
131145449b1SDimitry Andric     fpu_d1_arm64,  // (ARM64_D1, 141)
132145449b1SDimitry Andric     fpu_d2_arm64,  // (ARM64_D2, 142)
133145449b1SDimitry Andric     fpu_d3_arm64,  // (ARM64_D3, 143)
134145449b1SDimitry Andric     fpu_d4_arm64,  // (ARM64_D4, 144)
135145449b1SDimitry Andric     fpu_d5_arm64,  // (ARM64_D5, 145)
136145449b1SDimitry Andric     fpu_d6_arm64,  // (ARM64_D6, 146)
137145449b1SDimitry Andric     fpu_d7_arm64,  // (ARM64_D7, 147)
138145449b1SDimitry Andric     fpu_d8_arm64,  // (ARM64_D8, 148)
139145449b1SDimitry Andric     fpu_d9_arm64,  // (ARM64_D9, 149)
140145449b1SDimitry Andric     fpu_d10_arm64, // (ARM64_D10, 150)
141145449b1SDimitry Andric     fpu_d11_arm64, // (ARM64_D11, 151)
142145449b1SDimitry Andric     fpu_d12_arm64, // (ARM64_D12, 152)
143145449b1SDimitry Andric     fpu_d13_arm64, // (ARM64_D13, 153)
144145449b1SDimitry Andric     fpu_d14_arm64, // (ARM64_D14, 154)
145145449b1SDimitry Andric     fpu_d15_arm64, // (ARM64_D15, 155)
146145449b1SDimitry Andric     fpu_d16_arm64, // (ARM64_D16, 156)
147145449b1SDimitry Andric     fpu_d17_arm64, // (ARM64_D17, 157)
148145449b1SDimitry Andric     fpu_d18_arm64, // (ARM64_D18, 158)
149145449b1SDimitry Andric     fpu_d19_arm64, // (ARM64_D19, 159)
150145449b1SDimitry Andric     fpu_d20_arm64, // (ARM64_D20, 160)
151145449b1SDimitry Andric     fpu_d21_arm64, // (ARM64_D21, 161)
152145449b1SDimitry Andric     fpu_d22_arm64, // (ARM64_D22, 162)
153145449b1SDimitry Andric     fpu_d23_arm64, // (ARM64_D23, 163)
154145449b1SDimitry Andric     fpu_d24_arm64, // (ARM64_D24, 164)
155145449b1SDimitry Andric     fpu_d25_arm64, // (ARM64_D25, 165)
156145449b1SDimitry Andric     fpu_d26_arm64, // (ARM64_D26, 166)
157145449b1SDimitry Andric     fpu_d27_arm64, // (ARM64_D27, 167)
158145449b1SDimitry Andric     fpu_d28_arm64, // (ARM64_D28, 168)
159145449b1SDimitry Andric     fpu_d29_arm64, // (ARM64_D29, 169)
160145449b1SDimitry Andric     fpu_d30_arm64, // (ARM64_D30, 170)
161145449b1SDimitry Andric     fpu_d31_arm64, // (ARM64_D31, 171)
162145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
163145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
164145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
165145449b1SDimitry Andric     fpu_v0_arm64,  // (ARM64_Q0, 180)
166145449b1SDimitry Andric     fpu_v1_arm64,  // (ARM64_Q1, 181)
167145449b1SDimitry Andric     fpu_v2_arm64,  // (ARM64_Q2, 182)
168145449b1SDimitry Andric     fpu_v3_arm64,  // (ARM64_Q3, 183)
169145449b1SDimitry Andric     fpu_v4_arm64,  // (ARM64_Q4, 184)
170145449b1SDimitry Andric     fpu_v5_arm64,  // (ARM64_Q5, 185)
171145449b1SDimitry Andric     fpu_v6_arm64,  // (ARM64_Q6, 186)
172145449b1SDimitry Andric     fpu_v7_arm64,  // (ARM64_Q7, 187)
173145449b1SDimitry Andric     fpu_v8_arm64,  // (ARM64_Q8, 188)
174145449b1SDimitry Andric     fpu_v9_arm64,  // (ARM64_Q9, 189)
175145449b1SDimitry Andric     fpu_v10_arm64, // (ARM64_Q10, 190)
176145449b1SDimitry Andric     fpu_v11_arm64, // (ARM64_Q11, 191)
177145449b1SDimitry Andric     fpu_v12_arm64, // (ARM64_Q12, 192)
178145449b1SDimitry Andric     fpu_v13_arm64, // (ARM64_Q13, 193)
179145449b1SDimitry Andric     fpu_v14_arm64, // (ARM64_Q14, 194)
180145449b1SDimitry Andric     fpu_v15_arm64, // (ARM64_Q15, 195)
181145449b1SDimitry Andric     fpu_v16_arm64, // (ARM64_Q16, 196)
182145449b1SDimitry Andric     fpu_v17_arm64, // (ARM64_Q17, 197)
183145449b1SDimitry Andric     fpu_v18_arm64, // (ARM64_Q18, 198)
184145449b1SDimitry Andric     fpu_v19_arm64, // (ARM64_Q19, 199)
185145449b1SDimitry Andric     fpu_v20_arm64, // (ARM64_Q20, 200)
186145449b1SDimitry Andric     fpu_v21_arm64, // (ARM64_Q21, 201)
187145449b1SDimitry Andric     fpu_v22_arm64, // (ARM64_Q22, 202)
188145449b1SDimitry Andric     fpu_v23_arm64, // (ARM64_Q23, 203)
189145449b1SDimitry Andric     fpu_v24_arm64, // (ARM64_Q24, 204)
190145449b1SDimitry Andric     fpu_v25_arm64, // (ARM64_Q25, 205)
191145449b1SDimitry Andric     fpu_v26_arm64, // (ARM64_Q26, 206)
192145449b1SDimitry Andric     fpu_v27_arm64, // (ARM64_Q27, 207)
193145449b1SDimitry Andric     fpu_v28_arm64, // (ARM64_Q28, 208)
194145449b1SDimitry Andric     fpu_v29_arm64, // (ARM64_Q29, 209)
195145449b1SDimitry Andric     fpu_v30_arm64, // (ARM64_Q30, 210)
196145449b1SDimitry Andric     fpu_v31_arm64, // (ARM64_Q31, 211)
197145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
198145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
199145449b1SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
200145449b1SDimitry Andric     fpu_fpsr_arm64 // ARM64_FPSR, 220)
201145449b1SDimitry Andric };
202145449b1SDimitry Andric 
2035f29bb8aSDimitry Andric static const uint32_t g_code_view_to_lldb_registers_x86[] = {
2045f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // NONE
2055f29bb8aSDimitry Andric     lldb_al_i386,        // AL
2065f29bb8aSDimitry Andric     lldb_cl_i386,        // CL
2075f29bb8aSDimitry Andric     lldb_dl_i386,        // DL
2085f29bb8aSDimitry Andric     lldb_bl_i386,        // BL
2095f29bb8aSDimitry Andric     lldb_ah_i386,        // AH
2105f29bb8aSDimitry Andric     lldb_ch_i386,        // CH
2115f29bb8aSDimitry Andric     lldb_dh_i386,        // DH
2125f29bb8aSDimitry Andric     lldb_bh_i386,        // BH
2135f29bb8aSDimitry Andric     lldb_ax_i386,        // AX
2145f29bb8aSDimitry Andric     lldb_cx_i386,        // CX
2155f29bb8aSDimitry Andric     lldb_dx_i386,        // DX
2165f29bb8aSDimitry Andric     lldb_bx_i386,        // BX
2175f29bb8aSDimitry Andric     lldb_sp_i386,        // SP
2185f29bb8aSDimitry Andric     lldb_bp_i386,        // BP
2195f29bb8aSDimitry Andric     lldb_si_i386,        // SI
2205f29bb8aSDimitry Andric     lldb_di_i386,        // DI
2215f29bb8aSDimitry Andric     lldb_eax_i386,       // EAX
2225f29bb8aSDimitry Andric     lldb_ecx_i386,       // ECX
2235f29bb8aSDimitry Andric     lldb_edx_i386,       // EDX
2245f29bb8aSDimitry Andric     lldb_ebx_i386,       // EBX
2255f29bb8aSDimitry Andric     lldb_esp_i386,       // ESP
2265f29bb8aSDimitry Andric     lldb_ebp_i386,       // EBP
2275f29bb8aSDimitry Andric     lldb_esi_i386,       // ESI
2285f29bb8aSDimitry Andric     lldb_edi_i386,       // EDI
2295f29bb8aSDimitry Andric     lldb_es_i386,        // ES
2305f29bb8aSDimitry Andric     lldb_cs_i386,        // CS
2315f29bb8aSDimitry Andric     lldb_ss_i386,        // SS
2325f29bb8aSDimitry Andric     lldb_ds_i386,        // DS
2335f29bb8aSDimitry Andric     lldb_fs_i386,        // FS
2345f29bb8aSDimitry Andric     lldb_gs_i386,        // GS
2355f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // IP
2365f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FLAGS
2375f29bb8aSDimitry Andric     lldb_eip_i386,       // EIP
2385f29bb8aSDimitry Andric     lldb_eflags_i386,    // EFLAGS
2395f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2405f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2415f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // TEMP
2425f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // TEMPH
2435f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // QUOTE
2445f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PCDR3
2455f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PCDR4
2465f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PCDR5
2475f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PCDR6
2485f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PCDR7
2495f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2505f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2515f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2525f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2535f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2545f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2555f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2565f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2575f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2585f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2595f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2605f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // CR0
2615f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // CR1
2625f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // CR2
2635f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // CR3
2645f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // CR4
2655f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2665f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2675f29bb8aSDimitry Andric     lldb_dr0_i386, // DR0
2685f29bb8aSDimitry Andric     lldb_dr1_i386, // DR1
2695f29bb8aSDimitry Andric     lldb_dr2_i386, // DR2
2705f29bb8aSDimitry Andric     lldb_dr3_i386, // DR3
2715f29bb8aSDimitry Andric     lldb_dr4_i386, // DR4
2725f29bb8aSDimitry Andric     lldb_dr5_i386, // DR5
2735f29bb8aSDimitry Andric     lldb_dr6_i386, // DR6
2745f29bb8aSDimitry Andric     lldb_dr7_i386, // DR7
2755f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2765f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2775f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2785f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2795f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // GDTR
2805f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // GDTL
2815f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // IDTR
2825f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // IDTL
2835f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // LDTR
2845f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // TR
2855f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO1
2865f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO2
2875f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO3
2885f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO4
2895f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO5
2905f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO6
2915f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO7
2925f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO8
2935f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO9
2945f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2955f29bb8aSDimitry Andric     lldb_st0_i386,       // ST0
2965f29bb8aSDimitry Andric     lldb_st1_i386,       // ST1
2975f29bb8aSDimitry Andric     lldb_st2_i386,       // ST2
2985f29bb8aSDimitry Andric     lldb_st3_i386,       // ST3
2995f29bb8aSDimitry Andric     lldb_st4_i386,       // ST4
3005f29bb8aSDimitry Andric     lldb_st5_i386,       // ST5
3015f29bb8aSDimitry Andric     lldb_st6_i386,       // ST6
3025f29bb8aSDimitry Andric     lldb_st7_i386,       // ST7
3035f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // CTRL
3045f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // STAT
3055f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // TAG
3065f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FPIP
3075f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FPCS
3085f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FPDO
3095f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FPDS
3105f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // ISEM
3115f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FPEIP
3125f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FPEDO
3135f29bb8aSDimitry Andric     lldb_mm0_i386,       // MM0
3145f29bb8aSDimitry Andric     lldb_mm1_i386,       // MM1
3155f29bb8aSDimitry Andric     lldb_mm2_i386,       // MM2
3165f29bb8aSDimitry Andric     lldb_mm3_i386,       // MM3
3175f29bb8aSDimitry Andric     lldb_mm4_i386,       // MM4
3185f29bb8aSDimitry Andric     lldb_mm5_i386,       // MM5
3195f29bb8aSDimitry Andric     lldb_mm6_i386,       // MM6
3205f29bb8aSDimitry Andric     lldb_mm7_i386,       // MM7
3215f29bb8aSDimitry Andric     lldb_xmm0_i386,      // XMM0
3225f29bb8aSDimitry Andric     lldb_xmm1_i386,      // XMM1
3235f29bb8aSDimitry Andric     lldb_xmm2_i386,      // XMM2
3245f29bb8aSDimitry Andric     lldb_xmm3_i386,      // XMM3
3255f29bb8aSDimitry Andric     lldb_xmm4_i386,      // XMM4
3265f29bb8aSDimitry Andric     lldb_xmm5_i386,      // XMM5
3275f29bb8aSDimitry Andric     lldb_xmm6_i386,      // XMM6
3285f29bb8aSDimitry Andric     lldb_xmm7_i386       // XMM7
3295f29bb8aSDimitry Andric };
3305f29bb8aSDimitry Andric 
3315f29bb8aSDimitry Andric static const uint32_t g_code_view_to_lldb_registers_x86_64[] = {
3325f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // NONE
3335f29bb8aSDimitry Andric     lldb_al_x86_64,      // AL
3345f29bb8aSDimitry Andric     lldb_cl_x86_64,      // CL
3355f29bb8aSDimitry Andric     lldb_dl_x86_64,      // DL
3365f29bb8aSDimitry Andric     lldb_bl_x86_64,      // BL
3375f29bb8aSDimitry Andric     lldb_ah_x86_64,      // AH
3385f29bb8aSDimitry Andric     lldb_ch_x86_64,      // CH
3395f29bb8aSDimitry Andric     lldb_dh_x86_64,      // DH
3405f29bb8aSDimitry Andric     lldb_bh_x86_64,      // BH
3415f29bb8aSDimitry Andric     lldb_ax_x86_64,      // AX
3425f29bb8aSDimitry Andric     lldb_cx_x86_64,      // CX
3435f29bb8aSDimitry Andric     lldb_dx_x86_64,      // DX
3445f29bb8aSDimitry Andric     lldb_bx_x86_64,      // BX
3455f29bb8aSDimitry Andric     lldb_sp_x86_64,      // SP
3465f29bb8aSDimitry Andric     lldb_bp_x86_64,      // BP
3475f29bb8aSDimitry Andric     lldb_si_x86_64,      // SI
3485f29bb8aSDimitry Andric     lldb_di_x86_64,      // DI
3495f29bb8aSDimitry Andric     lldb_eax_x86_64,     // EAX
3505f29bb8aSDimitry Andric     lldb_ecx_x86_64,     // ECX
3515f29bb8aSDimitry Andric     lldb_edx_x86_64,     // EDX
3525f29bb8aSDimitry Andric     lldb_ebx_x86_64,     // EBX
3535f29bb8aSDimitry Andric     lldb_esp_x86_64,     // ESP
3545f29bb8aSDimitry Andric     lldb_ebp_x86_64,     // EBP
3555f29bb8aSDimitry Andric     lldb_esi_x86_64,     // ESI
3565f29bb8aSDimitry Andric     lldb_edi_x86_64,     // EDI
3575f29bb8aSDimitry Andric     lldb_es_x86_64,      // ES
3585f29bb8aSDimitry Andric     lldb_cs_x86_64,      // CS
3595f29bb8aSDimitry Andric     lldb_ss_x86_64,      // SS
3605f29bb8aSDimitry Andric     lldb_ds_x86_64,      // DS
3615f29bb8aSDimitry Andric     lldb_fs_x86_64,      // FS
3625f29bb8aSDimitry Andric     lldb_gs_x86_64,      // GS
3635f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // IP
3645f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FLAGS
3655f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EIP
3665f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EFLAGS
3675f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3685f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3695f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // TEMP
3705f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // TEMPH
3715f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // QUOTE
3725f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PCDR3
3735f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PCDR4
3745f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PCDR5
3755f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PCDR6
3765f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PCDR7
3775f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3785f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3795f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3805f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3815f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3825f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3835f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3845f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3855f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3865f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3875f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3885f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // CR0
3895f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // CR1
3905f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // CR2
3915f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // CR3
3925f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // CR4
3935f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3945f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3955f29bb8aSDimitry Andric     lldb_dr0_x86_64, // DR0
3965f29bb8aSDimitry Andric     lldb_dr1_x86_64, // DR1
3975f29bb8aSDimitry Andric     lldb_dr2_x86_64, // DR2
3985f29bb8aSDimitry Andric     lldb_dr3_x86_64, // DR3
3995f29bb8aSDimitry Andric     lldb_dr4_x86_64, // DR4
4005f29bb8aSDimitry Andric     lldb_dr5_x86_64, // DR5
4015f29bb8aSDimitry Andric     lldb_dr6_x86_64, // DR6
4025f29bb8aSDimitry Andric     lldb_dr7_x86_64, // DR7
4035f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4045f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4055f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4065f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4075f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // GDTR
4085f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // GDTL
4095f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // IDTR
4105f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // IDTL
4115f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // LDTR
4125f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // TR
4135f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO1
4145f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO2
4155f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO3
4165f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO4
4175f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO5
4185f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO6
4195f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO7
4205f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO8
4215f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO9
4225f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4235f29bb8aSDimitry Andric     lldb_st0_x86_64,     // ST0
4245f29bb8aSDimitry Andric     lldb_st1_x86_64,     // ST1
4255f29bb8aSDimitry Andric     lldb_st2_x86_64,     // ST2
4265f29bb8aSDimitry Andric     lldb_st3_x86_64,     // ST3
4275f29bb8aSDimitry Andric     lldb_st4_x86_64,     // ST4
4285f29bb8aSDimitry Andric     lldb_st5_x86_64,     // ST5
4295f29bb8aSDimitry Andric     lldb_st6_x86_64,     // ST6
4305f29bb8aSDimitry Andric     lldb_st7_x86_64,     // ST7
4315f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // CTRL
4325f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // STAT
4335f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // TAG
4345f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FPIP
4355f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FPCS
4365f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FPDO
4375f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FPDS
4385f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // ISEM
4395f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FPEIP
4405f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // FPEDO
4415f29bb8aSDimitry Andric     lldb_mm0_x86_64,     // MM0
4425f29bb8aSDimitry Andric     lldb_mm1_x86_64,     // MM1
4435f29bb8aSDimitry Andric     lldb_mm2_x86_64,     // MM2
4445f29bb8aSDimitry Andric     lldb_mm3_x86_64,     // MM3
4455f29bb8aSDimitry Andric     lldb_mm4_x86_64,     // MM4
4465f29bb8aSDimitry Andric     lldb_mm5_x86_64,     // MM5
4475f29bb8aSDimitry Andric     lldb_mm6_x86_64,     // MM6
4485f29bb8aSDimitry Andric     lldb_mm7_x86_64,     // MM7
4495f29bb8aSDimitry Andric     lldb_xmm0_x86_64,    // XMM0
4505f29bb8aSDimitry Andric     lldb_xmm1_x86_64,    // XMM1
4515f29bb8aSDimitry Andric     lldb_xmm2_x86_64,    // XMM2
4525f29bb8aSDimitry Andric     lldb_xmm3_x86_64,    // XMM3
4535f29bb8aSDimitry Andric     lldb_xmm4_x86_64,    // XMM4
4545f29bb8aSDimitry Andric     lldb_xmm5_x86_64,    // XMM5
4555f29bb8aSDimitry Andric     lldb_xmm6_x86_64,    // XMM6
4565f29bb8aSDimitry Andric     lldb_xmm7_x86_64,    // XMM7
4575f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4585f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4595f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4605f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4615f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4625f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4635f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4645f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4655f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4665f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4675f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4685f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4695f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4705f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4715f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4725f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4735f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM,
4745f29bb8aSDimitry Andric     lldb_mxcsr_x86_64,   // MXCSR
4755f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EDXEAX
4765f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4775f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4785f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM,
4795f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM0L
4805f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM1L
4815f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM2L
4825f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM3L
4835f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM4L
4845f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM5L
4855f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM6L
4865f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM7L
4875f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM0H
4885f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM1H
4895f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM2H
4905f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM3H
4915f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM4H
4925f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM5H
4935f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM6H
4945f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // EMM7H
4955f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM00
4965f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM01
4975f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM10
4985f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM11
4995f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM20
5005f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM21
5015f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM30
5025f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM31
5035f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM40
5045f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM41
5055f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM50
5065f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM51
5075f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM60
5085f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM61
5095f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM70
5105f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, // MM71
5115f29bb8aSDimitry Andric     lldb_xmm8_x86_64,    // XMM8
5125f29bb8aSDimitry Andric     lldb_xmm9_x86_64,    // XMM9
5135f29bb8aSDimitry Andric     lldb_xmm10_x86_64,   // XMM10
5145f29bb8aSDimitry Andric     lldb_xmm11_x86_64,   // XMM11
5155f29bb8aSDimitry Andric     lldb_xmm12_x86_64,   // XMM12
5165f29bb8aSDimitry Andric     lldb_xmm13_x86_64,   // XMM13
5175f29bb8aSDimitry Andric     lldb_xmm14_x86_64,   // XMM14
5185f29bb8aSDimitry Andric     lldb_xmm15_x86_64,   // XMM15
5195f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5205f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5215f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5225f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5235f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5245f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5255f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5265f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5275f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5285f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5295f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5305f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5315f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5325f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5335f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5345f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5355f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5365f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5375f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5385f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5395f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5405f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM,
5415f29bb8aSDimitry Andric     lldb_sil_x86_64,   // SIL
5425f29bb8aSDimitry Andric     lldb_dil_x86_64,   // DIL
5435f29bb8aSDimitry Andric     lldb_bpl_x86_64,   // BPL
5445f29bb8aSDimitry Andric     lldb_spl_x86_64,   // SPL
5455f29bb8aSDimitry Andric     lldb_rax_x86_64,   // RAX
5465f29bb8aSDimitry Andric     lldb_rbx_x86_64,   // RBX
5475f29bb8aSDimitry Andric     lldb_rcx_x86_64,   // RCX
5485f29bb8aSDimitry Andric     lldb_rdx_x86_64,   // RDX
5495f29bb8aSDimitry Andric     lldb_rsi_x86_64,   // RSI
5505f29bb8aSDimitry Andric     lldb_rdi_x86_64,   // RDI
5515f29bb8aSDimitry Andric     lldb_rbp_x86_64,   // RBP
5525f29bb8aSDimitry Andric     lldb_rsp_x86_64,   // RSP
5535f29bb8aSDimitry Andric     lldb_r8_x86_64,    // R8
5545f29bb8aSDimitry Andric     lldb_r9_x86_64,    // R9
5555f29bb8aSDimitry Andric     lldb_r10_x86_64,   // R10
5565f29bb8aSDimitry Andric     lldb_r11_x86_64,   // R11
5575f29bb8aSDimitry Andric     lldb_r12_x86_64,   // R12
5585f29bb8aSDimitry Andric     lldb_r13_x86_64,   // R13
5595f29bb8aSDimitry Andric     lldb_r14_x86_64,   // R14
5605f29bb8aSDimitry Andric     lldb_r15_x86_64,   // R15
5615f29bb8aSDimitry Andric     lldb_r8l_x86_64,   // R8B
5625f29bb8aSDimitry Andric     lldb_r9l_x86_64,   // R9B
5635f29bb8aSDimitry Andric     lldb_r10l_x86_64,  // R10B
5645f29bb8aSDimitry Andric     lldb_r11l_x86_64,  // R11B
5655f29bb8aSDimitry Andric     lldb_r12l_x86_64,  // R12B
5665f29bb8aSDimitry Andric     lldb_r13l_x86_64,  // R13B
5675f29bb8aSDimitry Andric     lldb_r14l_x86_64,  // R14B
5685f29bb8aSDimitry Andric     lldb_r15l_x86_64,  // R15B
5695f29bb8aSDimitry Andric     lldb_r8w_x86_64,   // R8W
5705f29bb8aSDimitry Andric     lldb_r9w_x86_64,   // R9W
5715f29bb8aSDimitry Andric     lldb_r10w_x86_64,  // R10W
5725f29bb8aSDimitry Andric     lldb_r11w_x86_64,  // R11W
5735f29bb8aSDimitry Andric     lldb_r12w_x86_64,  // R12W
5745f29bb8aSDimitry Andric     lldb_r13w_x86_64,  // R13W
5755f29bb8aSDimitry Andric     lldb_r14w_x86_64,  // R14W
5765f29bb8aSDimitry Andric     lldb_r15w_x86_64,  // R15W
5775f29bb8aSDimitry Andric     lldb_r8d_x86_64,   // R8D
5785f29bb8aSDimitry Andric     lldb_r9d_x86_64,   // R9D
5795f29bb8aSDimitry Andric     lldb_r10d_x86_64,  // R10D
5805f29bb8aSDimitry Andric     lldb_r11d_x86_64,  // R11D
5815f29bb8aSDimitry Andric     lldb_r12d_x86_64,  // R12D
5825f29bb8aSDimitry Andric     lldb_r13d_x86_64,  // R13D
5835f29bb8aSDimitry Andric     lldb_r14d_x86_64,  // R14D
5845f29bb8aSDimitry Andric     lldb_r15d_x86_64,  // R15D
5855f29bb8aSDimitry Andric     lldb_ymm0_x86_64,  // AMD64_YMM0
5865f29bb8aSDimitry Andric     lldb_ymm1_x86_64,  // AMD64_YMM1
5875f29bb8aSDimitry Andric     lldb_ymm2_x86_64,  // AMD64_YMM2
5885f29bb8aSDimitry Andric     lldb_ymm3_x86_64,  // AMD64_YMM3
5895f29bb8aSDimitry Andric     lldb_ymm4_x86_64,  // AMD64_YMM4
5905f29bb8aSDimitry Andric     lldb_ymm5_x86_64,  // AMD64_YMM5
5915f29bb8aSDimitry Andric     lldb_ymm6_x86_64,  // AMD64_YMM6
5925f29bb8aSDimitry Andric     lldb_ymm7_x86_64,  // AMD64_YMM7
5935f29bb8aSDimitry Andric     lldb_ymm8_x86_64,  // AMD64_YMM8
5945f29bb8aSDimitry Andric     lldb_ymm9_x86_64,  // AMD64_YMM9
5955f29bb8aSDimitry Andric     lldb_ymm10_x86_64, // AMD64_YMM10
5965f29bb8aSDimitry Andric     lldb_ymm11_x86_64, // AMD64_YMM11
5975f29bb8aSDimitry Andric     lldb_ymm12_x86_64, // AMD64_YMM12
5985f29bb8aSDimitry Andric     lldb_ymm13_x86_64, // AMD64_YMM13
5995f29bb8aSDimitry Andric     lldb_ymm14_x86_64, // AMD64_YMM14
6005f29bb8aSDimitry Andric     lldb_ymm15_x86_64, // AMD64_YMM15
6015f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
6025f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
6035f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
6045f29bb8aSDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
6055f29bb8aSDimitry Andric     lldb_bnd0_x86_64, // BND0
6065f29bb8aSDimitry Andric     lldb_bnd1_x86_64, // BND1
6075f29bb8aSDimitry Andric     lldb_bnd2_x86_64  // BND2
6085f29bb8aSDimitry Andric };
6095f29bb8aSDimitry Andric 
GetLLDBRegisterNumber(llvm::Triple::ArchType arch_type,llvm::codeview::RegisterId register_id)6105f29bb8aSDimitry Andric uint32_t lldb_private::npdb::GetLLDBRegisterNumber(
6115f29bb8aSDimitry Andric     llvm::Triple::ArchType arch_type, llvm::codeview::RegisterId register_id) {
6125f29bb8aSDimitry Andric   switch (arch_type) {
613145449b1SDimitry Andric   case llvm::Triple::aarch64:
614145449b1SDimitry Andric     if (static_cast<uint16_t>(register_id) <
615145449b1SDimitry Andric         sizeof(g_code_view_to_lldb_registers_arm64) /
616145449b1SDimitry Andric             sizeof(g_code_view_to_lldb_registers_arm64[0]))
617145449b1SDimitry Andric       return g_code_view_to_lldb_registers_arm64[static_cast<uint16_t>(
618145449b1SDimitry Andric           register_id)];
619145449b1SDimitry Andric 
620145449b1SDimitry Andric     return LLDB_INVALID_REGNUM;
6215f29bb8aSDimitry Andric   case llvm::Triple::x86:
6225f29bb8aSDimitry Andric     if (static_cast<uint16_t>(register_id) <
6235f29bb8aSDimitry Andric         sizeof(g_code_view_to_lldb_registers_x86) /
6245f29bb8aSDimitry Andric             sizeof(g_code_view_to_lldb_registers_x86[0]))
6255f29bb8aSDimitry Andric       return g_code_view_to_lldb_registers_x86[static_cast<uint16_t>(
6265f29bb8aSDimitry Andric           register_id)];
6275f29bb8aSDimitry Andric 
6285f29bb8aSDimitry Andric     switch (register_id) {
6295f29bb8aSDimitry Andric     case llvm::codeview::RegisterId::MXCSR:
6305f29bb8aSDimitry Andric       return lldb_mxcsr_i386;
6315f29bb8aSDimitry Andric     case llvm::codeview::RegisterId::BND0:
6325f29bb8aSDimitry Andric       return lldb_bnd0_i386;
6335f29bb8aSDimitry Andric     case llvm::codeview::RegisterId::BND1:
6345f29bb8aSDimitry Andric       return lldb_bnd1_i386;
6355f29bb8aSDimitry Andric     case llvm::codeview::RegisterId::BND2:
6365f29bb8aSDimitry Andric       return lldb_bnd2_i386;
6375f29bb8aSDimitry Andric     default:
6385f29bb8aSDimitry Andric       return LLDB_INVALID_REGNUM;
6395f29bb8aSDimitry Andric     }
6405f29bb8aSDimitry Andric   case llvm::Triple::x86_64:
6415f29bb8aSDimitry Andric     if (static_cast<uint16_t>(register_id) <
6425f29bb8aSDimitry Andric         sizeof(g_code_view_to_lldb_registers_x86_64) /
6435f29bb8aSDimitry Andric             sizeof(g_code_view_to_lldb_registers_x86_64[0]))
6445f29bb8aSDimitry Andric       return g_code_view_to_lldb_registers_x86_64[static_cast<uint16_t>(
6455f29bb8aSDimitry Andric           register_id)];
6465f29bb8aSDimitry Andric 
6475f29bb8aSDimitry Andric     return LLDB_INVALID_REGNUM;
6485f29bb8aSDimitry Andric   default:
6495f29bb8aSDimitry Andric     return LLDB_INVALID_REGNUM;
6505f29bb8aSDimitry Andric   }
6515f29bb8aSDimitry Andric }
652e3b55780SDimitry Andric 
653e3b55780SDimitry Andric uint32_t
GetRegisterSize(llvm::codeview::RegisterId register_id)654e3b55780SDimitry Andric lldb_private::npdb::GetRegisterSize(llvm::codeview::RegisterId register_id) {
655e3b55780SDimitry Andric   switch(register_id) {
656e3b55780SDimitry Andric     case llvm::codeview::RegisterId::AL:
657e3b55780SDimitry Andric     case llvm::codeview::RegisterId::BL:
658e3b55780SDimitry Andric     case llvm::codeview::RegisterId::CL:
659e3b55780SDimitry Andric     case llvm::codeview::RegisterId::DL:
660e3b55780SDimitry Andric     case llvm::codeview::RegisterId::AH:
661e3b55780SDimitry Andric     case llvm::codeview::RegisterId::BH:
662e3b55780SDimitry Andric     case llvm::codeview::RegisterId::CH:
663e3b55780SDimitry Andric     case llvm::codeview::RegisterId::DH:
664e3b55780SDimitry Andric     case llvm::codeview::RegisterId::SIL:
665e3b55780SDimitry Andric     case llvm::codeview::RegisterId::DIL:
666e3b55780SDimitry Andric     case llvm::codeview::RegisterId::BPL:
667e3b55780SDimitry Andric     case llvm::codeview::RegisterId::SPL:
668e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R8B:
669e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R9B:
670e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R10B:
671e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R11B:
672e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R12B:
673e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R13B:
674e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R14B:
675e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R15B:
676e3b55780SDimitry Andric       return 1;
677e3b55780SDimitry Andric     case llvm::codeview::RegisterId::AX:
678e3b55780SDimitry Andric     case llvm::codeview::RegisterId::BX:
679e3b55780SDimitry Andric     case llvm::codeview::RegisterId::CX:
680e3b55780SDimitry Andric     case llvm::codeview::RegisterId::DX:
681e3b55780SDimitry Andric     case llvm::codeview::RegisterId::SP:
682e3b55780SDimitry Andric     case llvm::codeview::RegisterId::BP:
683e3b55780SDimitry Andric     case llvm::codeview::RegisterId::SI:
684e3b55780SDimitry Andric     case llvm::codeview::RegisterId::DI:
685e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R8W:
686e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R9W:
687e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R10W:
688e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R11W:
689e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R12W:
690e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R13W:
691e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R14W:
692e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R15W:
693e3b55780SDimitry Andric       return 2;
694e3b55780SDimitry Andric     case llvm::codeview::RegisterId::EAX:
695e3b55780SDimitry Andric     case llvm::codeview::RegisterId::EBX:
696e3b55780SDimitry Andric     case llvm::codeview::RegisterId::ECX:
697e3b55780SDimitry Andric     case llvm::codeview::RegisterId::EDX:
698e3b55780SDimitry Andric     case llvm::codeview::RegisterId::ESP:
699e3b55780SDimitry Andric     case llvm::codeview::RegisterId::EBP:
700e3b55780SDimitry Andric     case llvm::codeview::RegisterId::ESI:
701e3b55780SDimitry Andric     case llvm::codeview::RegisterId::EDI:
702e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R8D:
703e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R9D:
704e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R10D:
705e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R11D:
706e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R12D:
707e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R13D:
708e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R14D:
709e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R15D:
710e3b55780SDimitry Andric       return 4;
711e3b55780SDimitry Andric     case llvm::codeview::RegisterId::RAX:
712e3b55780SDimitry Andric     case llvm::codeview::RegisterId::RBX:
713e3b55780SDimitry Andric     case llvm::codeview::RegisterId::RCX:
714e3b55780SDimitry Andric     case llvm::codeview::RegisterId::RDX:
715e3b55780SDimitry Andric     case llvm::codeview::RegisterId::RSI:
716e3b55780SDimitry Andric     case llvm::codeview::RegisterId::RDI:
717e3b55780SDimitry Andric     case llvm::codeview::RegisterId::RBP:
718e3b55780SDimitry Andric     case llvm::codeview::RegisterId::RSP:
719e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R8:
720e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R9:
721e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R10:
722e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R11:
723e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R12:
724e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R13:
725e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R14:
726e3b55780SDimitry Andric     case llvm::codeview::RegisterId::R15:
727e3b55780SDimitry Andric       return 8;
728e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM0:
729e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM1:
730e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM2:
731e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM3:
732e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM4:
733e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM5:
734e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM6:
735e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM7:
736e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM8:
737e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM9:
738e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM10:
739e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM11:
740e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM12:
741e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM13:
742e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM14:
743e3b55780SDimitry Andric     case llvm::codeview::RegisterId::XMM15:
744e3b55780SDimitry Andric       return 16;
745e3b55780SDimitry Andric     default:
746e3b55780SDimitry Andric       return 0;
747e3b55780SDimitry Andric   }
748e3b55780SDimitry Andric }
749