1*0b57cec5SDimitry Andric //===-- CodeViewRegisterMapping.cpp ---------------------------------------===//
2*0b57cec5SDimitry Andric //
3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0b57cec5SDimitry Andric //
7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
8*0b57cec5SDimitry Andric 
9*0b57cec5SDimitry Andric #include "CodeViewRegisterMapping.h"
10*0b57cec5SDimitry Andric 
11*0b57cec5SDimitry Andric #include "lldb/lldb-defines.h"
12*0b57cec5SDimitry Andric 
13*0b57cec5SDimitry Andric #include "Plugins/Process/Utility/lldb-x86-register-enums.h"
14*0b57cec5SDimitry Andric 
15*0b57cec5SDimitry Andric using namespace lldb_private;
16*0b57cec5SDimitry Andric 
17*0b57cec5SDimitry Andric static const uint32_t g_code_view_to_lldb_registers_x86[] = {
18*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // NONE
19*0b57cec5SDimitry Andric     lldb_al_i386,        // AL
20*0b57cec5SDimitry Andric     lldb_cl_i386,        // CL
21*0b57cec5SDimitry Andric     lldb_dl_i386,        // DL
22*0b57cec5SDimitry Andric     lldb_bl_i386,        // BL
23*0b57cec5SDimitry Andric     lldb_ah_i386,        // AH
24*0b57cec5SDimitry Andric     lldb_ch_i386,        // CH
25*0b57cec5SDimitry Andric     lldb_dh_i386,        // DH
26*0b57cec5SDimitry Andric     lldb_bh_i386,        // BH
27*0b57cec5SDimitry Andric     lldb_ax_i386,        // AX
28*0b57cec5SDimitry Andric     lldb_cx_i386,        // CX
29*0b57cec5SDimitry Andric     lldb_dx_i386,        // DX
30*0b57cec5SDimitry Andric     lldb_bx_i386,        // BX
31*0b57cec5SDimitry Andric     lldb_sp_i386,        // SP
32*0b57cec5SDimitry Andric     lldb_bp_i386,        // BP
33*0b57cec5SDimitry Andric     lldb_si_i386,        // SI
34*0b57cec5SDimitry Andric     lldb_di_i386,        // DI
35*0b57cec5SDimitry Andric     lldb_eax_i386,       // EAX
36*0b57cec5SDimitry Andric     lldb_ecx_i386,       // ECX
37*0b57cec5SDimitry Andric     lldb_edx_i386,       // EDX
38*0b57cec5SDimitry Andric     lldb_ebx_i386,       // EBX
39*0b57cec5SDimitry Andric     lldb_esp_i386,       // ESP
40*0b57cec5SDimitry Andric     lldb_ebp_i386,       // EBP
41*0b57cec5SDimitry Andric     lldb_esi_i386,       // ESI
42*0b57cec5SDimitry Andric     lldb_edi_i386,       // EDI
43*0b57cec5SDimitry Andric     lldb_es_i386,        // ES
44*0b57cec5SDimitry Andric     lldb_cs_i386,        // CS
45*0b57cec5SDimitry Andric     lldb_ss_i386,        // SS
46*0b57cec5SDimitry Andric     lldb_ds_i386,        // DS
47*0b57cec5SDimitry Andric     lldb_fs_i386,        // FS
48*0b57cec5SDimitry Andric     lldb_gs_i386,        // GS
49*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // IP
50*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FLAGS
51*0b57cec5SDimitry Andric     lldb_eip_i386,       // EIP
52*0b57cec5SDimitry Andric     lldb_eflags_i386,    // EFLAGS
53*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
54*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
55*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // TEMP
56*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // TEMPH
57*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // QUOTE
58*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PCDR3
59*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PCDR4
60*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PCDR5
61*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PCDR6
62*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PCDR7
63*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
64*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
65*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
66*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
67*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
68*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
69*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
70*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
71*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
72*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
73*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
74*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // CR0
75*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // CR1
76*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // CR2
77*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // CR3
78*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // CR4
79*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
80*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
81*0b57cec5SDimitry Andric     lldb_dr0_i386, // DR0
82*0b57cec5SDimitry Andric     lldb_dr1_i386, // DR1
83*0b57cec5SDimitry Andric     lldb_dr2_i386, // DR2
84*0b57cec5SDimitry Andric     lldb_dr3_i386, // DR3
85*0b57cec5SDimitry Andric     lldb_dr4_i386, // DR4
86*0b57cec5SDimitry Andric     lldb_dr5_i386, // DR5
87*0b57cec5SDimitry Andric     lldb_dr6_i386, // DR6
88*0b57cec5SDimitry Andric     lldb_dr7_i386, // DR7
89*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
90*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
91*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
92*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
93*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // GDTR
94*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // GDTL
95*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // IDTR
96*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // IDTL
97*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // LDTR
98*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // TR
99*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO1
100*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO2
101*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO3
102*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO4
103*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO5
104*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO6
105*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO7
106*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO8
107*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO9
108*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
109*0b57cec5SDimitry Andric     lldb_st0_i386,       // ST0
110*0b57cec5SDimitry Andric     lldb_st1_i386,       // ST1
111*0b57cec5SDimitry Andric     lldb_st2_i386,       // ST2
112*0b57cec5SDimitry Andric     lldb_st3_i386,       // ST3
113*0b57cec5SDimitry Andric     lldb_st4_i386,       // ST4
114*0b57cec5SDimitry Andric     lldb_st5_i386,       // ST5
115*0b57cec5SDimitry Andric     lldb_st6_i386,       // ST6
116*0b57cec5SDimitry Andric     lldb_st7_i386,       // ST7
117*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // CTRL
118*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // STAT
119*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // TAG
120*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FPIP
121*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FPCS
122*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FPDO
123*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FPDS
124*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // ISEM
125*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FPEIP
126*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FPEDO
127*0b57cec5SDimitry Andric     lldb_mm0_i386,       // MM0
128*0b57cec5SDimitry Andric     lldb_mm1_i386,       // MM1
129*0b57cec5SDimitry Andric     lldb_mm2_i386,       // MM2
130*0b57cec5SDimitry Andric     lldb_mm3_i386,       // MM3
131*0b57cec5SDimitry Andric     lldb_mm4_i386,       // MM4
132*0b57cec5SDimitry Andric     lldb_mm5_i386,       // MM5
133*0b57cec5SDimitry Andric     lldb_mm6_i386,       // MM6
134*0b57cec5SDimitry Andric     lldb_mm7_i386,       // MM7
135*0b57cec5SDimitry Andric     lldb_xmm0_i386,      // XMM0
136*0b57cec5SDimitry Andric     lldb_xmm1_i386,      // XMM1
137*0b57cec5SDimitry Andric     lldb_xmm2_i386,      // XMM2
138*0b57cec5SDimitry Andric     lldb_xmm3_i386,      // XMM3
139*0b57cec5SDimitry Andric     lldb_xmm4_i386,      // XMM4
140*0b57cec5SDimitry Andric     lldb_xmm5_i386,      // XMM5
141*0b57cec5SDimitry Andric     lldb_xmm6_i386,      // XMM6
142*0b57cec5SDimitry Andric     lldb_xmm7_i386       // XMM7
143*0b57cec5SDimitry Andric };
144*0b57cec5SDimitry Andric 
145*0b57cec5SDimitry Andric static const uint32_t g_code_view_to_lldb_registers_x86_64[] = {
146*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // NONE
147*0b57cec5SDimitry Andric     lldb_al_x86_64,      // AL
148*0b57cec5SDimitry Andric     lldb_cl_x86_64,      // CL
149*0b57cec5SDimitry Andric     lldb_dl_x86_64,      // DL
150*0b57cec5SDimitry Andric     lldb_bl_x86_64,      // BL
151*0b57cec5SDimitry Andric     lldb_ah_x86_64,      // AH
152*0b57cec5SDimitry Andric     lldb_ch_x86_64,      // CH
153*0b57cec5SDimitry Andric     lldb_dh_x86_64,      // DH
154*0b57cec5SDimitry Andric     lldb_bh_x86_64,      // BH
155*0b57cec5SDimitry Andric     lldb_ax_x86_64,      // AX
156*0b57cec5SDimitry Andric     lldb_cx_x86_64,      // CX
157*0b57cec5SDimitry Andric     lldb_dx_x86_64,      // DX
158*0b57cec5SDimitry Andric     lldb_bx_x86_64,      // BX
159*0b57cec5SDimitry Andric     lldb_sp_x86_64,      // SP
160*0b57cec5SDimitry Andric     lldb_bp_x86_64,      // BP
161*0b57cec5SDimitry Andric     lldb_si_x86_64,      // SI
162*0b57cec5SDimitry Andric     lldb_di_x86_64,      // DI
163*0b57cec5SDimitry Andric     lldb_eax_x86_64,     // EAX
164*0b57cec5SDimitry Andric     lldb_ecx_x86_64,     // ECX
165*0b57cec5SDimitry Andric     lldb_edx_x86_64,     // EDX
166*0b57cec5SDimitry Andric     lldb_ebx_x86_64,     // EBX
167*0b57cec5SDimitry Andric     lldb_esp_x86_64,     // ESP
168*0b57cec5SDimitry Andric     lldb_ebp_x86_64,     // EBP
169*0b57cec5SDimitry Andric     lldb_esi_x86_64,     // ESI
170*0b57cec5SDimitry Andric     lldb_edi_x86_64,     // EDI
171*0b57cec5SDimitry Andric     lldb_es_x86_64,      // ES
172*0b57cec5SDimitry Andric     lldb_cs_x86_64,      // CS
173*0b57cec5SDimitry Andric     lldb_ss_x86_64,      // SS
174*0b57cec5SDimitry Andric     lldb_ds_x86_64,      // DS
175*0b57cec5SDimitry Andric     lldb_fs_x86_64,      // FS
176*0b57cec5SDimitry Andric     lldb_gs_x86_64,      // GS
177*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // IP
178*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FLAGS
179*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EIP
180*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EFLAGS
181*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
182*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
183*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // TEMP
184*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // TEMPH
185*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // QUOTE
186*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PCDR3
187*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PCDR4
188*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PCDR5
189*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PCDR6
190*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PCDR7
191*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
192*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
193*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
194*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
195*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
196*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
197*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
198*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
199*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
200*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
201*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
202*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // CR0
203*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // CR1
204*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // CR2
205*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // CR3
206*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // CR4
207*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
208*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
209*0b57cec5SDimitry Andric     lldb_dr0_x86_64, // DR0
210*0b57cec5SDimitry Andric     lldb_dr1_x86_64, // DR1
211*0b57cec5SDimitry Andric     lldb_dr2_x86_64, // DR2
212*0b57cec5SDimitry Andric     lldb_dr3_x86_64, // DR3
213*0b57cec5SDimitry Andric     lldb_dr4_x86_64, // DR4
214*0b57cec5SDimitry Andric     lldb_dr5_x86_64, // DR5
215*0b57cec5SDimitry Andric     lldb_dr6_x86_64, // DR6
216*0b57cec5SDimitry Andric     lldb_dr7_x86_64, // DR7
217*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
218*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
219*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
220*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
221*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // GDTR
222*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // GDTL
223*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // IDTR
224*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // IDTL
225*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // LDTR
226*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // TR
227*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO1
228*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO2
229*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO3
230*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO4
231*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO5
232*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO6
233*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO7
234*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO8
235*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // PSEUDO9
236*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
237*0b57cec5SDimitry Andric     lldb_st0_x86_64,     // ST0
238*0b57cec5SDimitry Andric     lldb_st1_x86_64,     // ST1
239*0b57cec5SDimitry Andric     lldb_st2_x86_64,     // ST2
240*0b57cec5SDimitry Andric     lldb_st3_x86_64,     // ST3
241*0b57cec5SDimitry Andric     lldb_st4_x86_64,     // ST4
242*0b57cec5SDimitry Andric     lldb_st5_x86_64,     // ST5
243*0b57cec5SDimitry Andric     lldb_st6_x86_64,     // ST6
244*0b57cec5SDimitry Andric     lldb_st7_x86_64,     // ST7
245*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // CTRL
246*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // STAT
247*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // TAG
248*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FPIP
249*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FPCS
250*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FPDO
251*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FPDS
252*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // ISEM
253*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FPEIP
254*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // FPEDO
255*0b57cec5SDimitry Andric     lldb_mm0_x86_64,     // MM0
256*0b57cec5SDimitry Andric     lldb_mm1_x86_64,     // MM1
257*0b57cec5SDimitry Andric     lldb_mm2_x86_64,     // MM2
258*0b57cec5SDimitry Andric     lldb_mm3_x86_64,     // MM3
259*0b57cec5SDimitry Andric     lldb_mm4_x86_64,     // MM4
260*0b57cec5SDimitry Andric     lldb_mm5_x86_64,     // MM5
261*0b57cec5SDimitry Andric     lldb_mm6_x86_64,     // MM6
262*0b57cec5SDimitry Andric     lldb_mm7_x86_64,     // MM7
263*0b57cec5SDimitry Andric     lldb_xmm0_x86_64,    // XMM0
264*0b57cec5SDimitry Andric     lldb_xmm1_x86_64,    // XMM1
265*0b57cec5SDimitry Andric     lldb_xmm2_x86_64,    // XMM2
266*0b57cec5SDimitry Andric     lldb_xmm3_x86_64,    // XMM3
267*0b57cec5SDimitry Andric     lldb_xmm4_x86_64,    // XMM4
268*0b57cec5SDimitry Andric     lldb_xmm5_x86_64,    // XMM5
269*0b57cec5SDimitry Andric     lldb_xmm6_x86_64,    // XMM6
270*0b57cec5SDimitry Andric     lldb_xmm7_x86_64,    // XMM7
271*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
272*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
273*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
274*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
275*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
276*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
277*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
278*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
279*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
280*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
281*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
282*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
283*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
284*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
285*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
286*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
287*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM,
288*0b57cec5SDimitry Andric     lldb_mxcsr_x86_64,   // MXCSR
289*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EDXEAX
290*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
291*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
292*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM,
293*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM0L
294*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM1L
295*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM2L
296*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM3L
297*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM4L
298*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM5L
299*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM6L
300*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM7L
301*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM0H
302*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM1H
303*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM2H
304*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM3H
305*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM4H
306*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM5H
307*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM6H
308*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // EMM7H
309*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM00
310*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM01
311*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM10
312*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM11
313*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM20
314*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM21
315*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM30
316*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM31
317*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM40
318*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM41
319*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM50
320*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM51
321*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM60
322*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM61
323*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM70
324*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, // MM71
325*0b57cec5SDimitry Andric     lldb_xmm8_x86_64,    // XMM8
326*0b57cec5SDimitry Andric     lldb_xmm9_x86_64,    // XMM9
327*0b57cec5SDimitry Andric     lldb_xmm10_x86_64,   // XMM10
328*0b57cec5SDimitry Andric     lldb_xmm11_x86_64,   // XMM11
329*0b57cec5SDimitry Andric     lldb_xmm12_x86_64,   // XMM12
330*0b57cec5SDimitry Andric     lldb_xmm13_x86_64,   // XMM13
331*0b57cec5SDimitry Andric     lldb_xmm14_x86_64,   // XMM14
332*0b57cec5SDimitry Andric     lldb_xmm15_x86_64,   // XMM15
333*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
334*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
335*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
336*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
337*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
338*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
339*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
340*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
341*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
342*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
343*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
344*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
345*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
346*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
347*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
348*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
349*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
350*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
351*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
352*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
353*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
354*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM,
355*0b57cec5SDimitry Andric     lldb_sil_x86_64,   // SIL
356*0b57cec5SDimitry Andric     lldb_dil_x86_64,   // DIL
357*0b57cec5SDimitry Andric     lldb_bpl_x86_64,   // BPL
358*0b57cec5SDimitry Andric     lldb_spl_x86_64,   // SPL
359*0b57cec5SDimitry Andric     lldb_rax_x86_64,   // RAX
360*0b57cec5SDimitry Andric     lldb_rbx_x86_64,   // RBX
361*0b57cec5SDimitry Andric     lldb_rcx_x86_64,   // RCX
362*0b57cec5SDimitry Andric     lldb_rdx_x86_64,   // RDX
363*0b57cec5SDimitry Andric     lldb_rsi_x86_64,   // RSI
364*0b57cec5SDimitry Andric     lldb_rdi_x86_64,   // RDI
365*0b57cec5SDimitry Andric     lldb_rbp_x86_64,   // RBP
366*0b57cec5SDimitry Andric     lldb_rsp_x86_64,   // RSP
367*0b57cec5SDimitry Andric     lldb_r8_x86_64,    // R8
368*0b57cec5SDimitry Andric     lldb_r9_x86_64,    // R9
369*0b57cec5SDimitry Andric     lldb_r10_x86_64,   // R10
370*0b57cec5SDimitry Andric     lldb_r11_x86_64,   // R11
371*0b57cec5SDimitry Andric     lldb_r12_x86_64,   // R12
372*0b57cec5SDimitry Andric     lldb_r13_x86_64,   // R13
373*0b57cec5SDimitry Andric     lldb_r14_x86_64,   // R14
374*0b57cec5SDimitry Andric     lldb_r15_x86_64,   // R15
375*0b57cec5SDimitry Andric     lldb_r8l_x86_64,   // R8B
376*0b57cec5SDimitry Andric     lldb_r9l_x86_64,   // R9B
377*0b57cec5SDimitry Andric     lldb_r10l_x86_64,  // R10B
378*0b57cec5SDimitry Andric     lldb_r11l_x86_64,  // R11B
379*0b57cec5SDimitry Andric     lldb_r12l_x86_64,  // R12B
380*0b57cec5SDimitry Andric     lldb_r13l_x86_64,  // R13B
381*0b57cec5SDimitry Andric     lldb_r14l_x86_64,  // R14B
382*0b57cec5SDimitry Andric     lldb_r15l_x86_64,  // R15B
383*0b57cec5SDimitry Andric     lldb_r8w_x86_64,   // R8W
384*0b57cec5SDimitry Andric     lldb_r9w_x86_64,   // R9W
385*0b57cec5SDimitry Andric     lldb_r10w_x86_64,  // R10W
386*0b57cec5SDimitry Andric     lldb_r11w_x86_64,  // R11W
387*0b57cec5SDimitry Andric     lldb_r12w_x86_64,  // R12W
388*0b57cec5SDimitry Andric     lldb_r13w_x86_64,  // R13W
389*0b57cec5SDimitry Andric     lldb_r14w_x86_64,  // R14W
390*0b57cec5SDimitry Andric     lldb_r15w_x86_64,  // R15W
391*0b57cec5SDimitry Andric     lldb_r8d_x86_64,   // R8D
392*0b57cec5SDimitry Andric     lldb_r9d_x86_64,   // R9D
393*0b57cec5SDimitry Andric     lldb_r10d_x86_64,  // R10D
394*0b57cec5SDimitry Andric     lldb_r11d_x86_64,  // R11D
395*0b57cec5SDimitry Andric     lldb_r12d_x86_64,  // R12D
396*0b57cec5SDimitry Andric     lldb_r13d_x86_64,  // R13D
397*0b57cec5SDimitry Andric     lldb_r14d_x86_64,  // R14D
398*0b57cec5SDimitry Andric     lldb_r15d_x86_64,  // R15D
399*0b57cec5SDimitry Andric     lldb_ymm0_x86_64,  // AMD64_YMM0
400*0b57cec5SDimitry Andric     lldb_ymm1_x86_64,  // AMD64_YMM1
401*0b57cec5SDimitry Andric     lldb_ymm2_x86_64,  // AMD64_YMM2
402*0b57cec5SDimitry Andric     lldb_ymm3_x86_64,  // AMD64_YMM3
403*0b57cec5SDimitry Andric     lldb_ymm4_x86_64,  // AMD64_YMM4
404*0b57cec5SDimitry Andric     lldb_ymm5_x86_64,  // AMD64_YMM5
405*0b57cec5SDimitry Andric     lldb_ymm6_x86_64,  // AMD64_YMM6
406*0b57cec5SDimitry Andric     lldb_ymm7_x86_64,  // AMD64_YMM7
407*0b57cec5SDimitry Andric     lldb_ymm8_x86_64,  // AMD64_YMM8
408*0b57cec5SDimitry Andric     lldb_ymm9_x86_64,  // AMD64_YMM9
409*0b57cec5SDimitry Andric     lldb_ymm10_x86_64, // AMD64_YMM10
410*0b57cec5SDimitry Andric     lldb_ymm11_x86_64, // AMD64_YMM11
411*0b57cec5SDimitry Andric     lldb_ymm12_x86_64, // AMD64_YMM12
412*0b57cec5SDimitry Andric     lldb_ymm13_x86_64, // AMD64_YMM13
413*0b57cec5SDimitry Andric     lldb_ymm14_x86_64, // AMD64_YMM14
414*0b57cec5SDimitry Andric     lldb_ymm15_x86_64, // AMD64_YMM15
415*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
416*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
417*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
418*0b57cec5SDimitry Andric     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
419*0b57cec5SDimitry Andric     lldb_bnd0_x86_64, // BND0
420*0b57cec5SDimitry Andric     lldb_bnd1_x86_64, // BND1
421*0b57cec5SDimitry Andric     lldb_bnd2_x86_64  // BND2
422*0b57cec5SDimitry Andric };
423*0b57cec5SDimitry Andric 
GetLLDBRegisterNumber(llvm::Triple::ArchType arch_type,llvm::codeview::RegisterId register_id)424*0b57cec5SDimitry Andric uint32_t lldb_private::npdb::GetLLDBRegisterNumber(
425*0b57cec5SDimitry Andric     llvm::Triple::ArchType arch_type, llvm::codeview::RegisterId register_id) {
426*0b57cec5SDimitry Andric   switch (arch_type) {
427*0b57cec5SDimitry Andric   case llvm::Triple::x86:
428*0b57cec5SDimitry Andric     if (static_cast<uint16_t>(register_id) <
429*0b57cec5SDimitry Andric         sizeof(g_code_view_to_lldb_registers_x86) /
430*0b57cec5SDimitry Andric             sizeof(g_code_view_to_lldb_registers_x86[0]))
431*0b57cec5SDimitry Andric       return g_code_view_to_lldb_registers_x86[static_cast<uint16_t>(
432*0b57cec5SDimitry Andric           register_id)];
433*0b57cec5SDimitry Andric 
434*0b57cec5SDimitry Andric     switch (register_id) {
435*0b57cec5SDimitry Andric     case llvm::codeview::RegisterId::MXCSR:
436*0b57cec5SDimitry Andric       return lldb_mxcsr_i386;
437*0b57cec5SDimitry Andric     case llvm::codeview::RegisterId::BND0:
438*0b57cec5SDimitry Andric       return lldb_bnd0_i386;
439*0b57cec5SDimitry Andric     case llvm::codeview::RegisterId::BND1:
440*0b57cec5SDimitry Andric       return lldb_bnd1_i386;
441*0b57cec5SDimitry Andric     case llvm::codeview::RegisterId::BND2:
442*0b57cec5SDimitry Andric       return lldb_bnd2_i386;
443*0b57cec5SDimitry Andric     default:
444*0b57cec5SDimitry Andric       return LLDB_INVALID_REGNUM;
445*0b57cec5SDimitry Andric     }
446*0b57cec5SDimitry Andric   case llvm::Triple::x86_64:
447*0b57cec5SDimitry Andric     if (static_cast<uint16_t>(register_id) <
448*0b57cec5SDimitry Andric         sizeof(g_code_view_to_lldb_registers_x86_64) /
449*0b57cec5SDimitry Andric             sizeof(g_code_view_to_lldb_registers_x86_64[0]))
450*0b57cec5SDimitry Andric       return g_code_view_to_lldb_registers_x86_64[static_cast<uint16_t>(
451*0b57cec5SDimitry Andric           register_id)];
452*0b57cec5SDimitry Andric 
453*0b57cec5SDimitry Andric     return LLDB_INVALID_REGNUM;
454*0b57cec5SDimitry Andric   default:
455*0b57cec5SDimitry Andric     return LLDB_INVALID_REGNUM;
456*0b57cec5SDimitry Andric   }
457*0b57cec5SDimitry Andric }
458