1758657e5SAleksandr Urakov //===-- CodeViewRegisterMapping.cpp -----------------------------*- C++ -*-===//
2758657e5SAleksandr Urakov //
3*ee21a66aSAleksandr Urakov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*ee21a66aSAleksandr Urakov // See https://llvm.org/LICENSE.txt for license information.
5*ee21a66aSAleksandr Urakov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6758657e5SAleksandr Urakov //
7758657e5SAleksandr Urakov //===----------------------------------------------------------------------===//
8758657e5SAleksandr Urakov 
9758657e5SAleksandr Urakov #include "CodeViewRegisterMapping.h"
10758657e5SAleksandr Urakov 
11758657e5SAleksandr Urakov #include "lldb/lldb-defines.h"
12758657e5SAleksandr Urakov 
13758657e5SAleksandr Urakov #include "Plugins/Process/Utility/lldb-x86-register-enums.h"
14758657e5SAleksandr Urakov 
15758657e5SAleksandr Urakov using namespace lldb_private;
16758657e5SAleksandr Urakov 
17758657e5SAleksandr Urakov static const uint32_t g_code_view_to_lldb_registers_x86[] = {
18758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // NONE
19758657e5SAleksandr Urakov     lldb_al_i386,        // AL
20758657e5SAleksandr Urakov     lldb_cl_i386,        // CL
21758657e5SAleksandr Urakov     lldb_dl_i386,        // DL
22758657e5SAleksandr Urakov     lldb_bl_i386,        // BL
23758657e5SAleksandr Urakov     lldb_ah_i386,        // AH
24758657e5SAleksandr Urakov     lldb_ch_i386,        // CH
25758657e5SAleksandr Urakov     lldb_dh_i386,        // DH
26758657e5SAleksandr Urakov     lldb_bh_i386,        // BH
27758657e5SAleksandr Urakov     lldb_ax_i386,        // AX
28758657e5SAleksandr Urakov     lldb_cx_i386,        // CX
29758657e5SAleksandr Urakov     lldb_dx_i386,        // DX
30758657e5SAleksandr Urakov     lldb_bx_i386,        // BX
31758657e5SAleksandr Urakov     lldb_sp_i386,        // SP
32758657e5SAleksandr Urakov     lldb_bp_i386,        // BP
33758657e5SAleksandr Urakov     lldb_si_i386,        // SI
34758657e5SAleksandr Urakov     lldb_di_i386,        // DI
35758657e5SAleksandr Urakov     lldb_eax_i386,       // EAX
36758657e5SAleksandr Urakov     lldb_ecx_i386,       // ECX
37758657e5SAleksandr Urakov     lldb_edx_i386,       // EDX
38758657e5SAleksandr Urakov     lldb_ebx_i386,       // EBX
39758657e5SAleksandr Urakov     lldb_esp_i386,       // ESP
40758657e5SAleksandr Urakov     lldb_ebp_i386,       // EBP
41758657e5SAleksandr Urakov     lldb_esi_i386,       // ESI
42758657e5SAleksandr Urakov     lldb_edi_i386,       // EDI
43758657e5SAleksandr Urakov     lldb_es_i386,        // ES
44758657e5SAleksandr Urakov     lldb_cs_i386,        // CS
45758657e5SAleksandr Urakov     lldb_ss_i386,        // SS
46758657e5SAleksandr Urakov     lldb_ds_i386,        // DS
47758657e5SAleksandr Urakov     lldb_fs_i386,        // FS
48758657e5SAleksandr Urakov     lldb_gs_i386,        // GS
49758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // IP
50758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FLAGS
51758657e5SAleksandr Urakov     lldb_eip_i386,       // EIP
52758657e5SAleksandr Urakov     lldb_eflags_i386,    // EFLAGS
53758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
54758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
55758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // TEMP
56758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // TEMPH
57758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // QUOTE
58758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PCDR3
59758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PCDR4
60758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PCDR5
61758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PCDR6
62758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PCDR7
63758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
64758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
65758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
66758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
67758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
68758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
69758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
70758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
71758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
72758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
73758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
74758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // CR0
75758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // CR1
76758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // CR2
77758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // CR3
78758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // CR4
79758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
80758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
81758657e5SAleksandr Urakov     lldb_dr0_i386, // DR0
82758657e5SAleksandr Urakov     lldb_dr1_i386, // DR1
83758657e5SAleksandr Urakov     lldb_dr2_i386, // DR2
84758657e5SAleksandr Urakov     lldb_dr3_i386, // DR3
85758657e5SAleksandr Urakov     lldb_dr4_i386, // DR4
86758657e5SAleksandr Urakov     lldb_dr5_i386, // DR5
87758657e5SAleksandr Urakov     lldb_dr6_i386, // DR6
88758657e5SAleksandr Urakov     lldb_dr7_i386, // DR7
89758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
90758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
91758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
92758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
93758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // GDTR
94758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // GDTL
95758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // IDTR
96758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // IDTL
97758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // LDTR
98758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // TR
99758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO1
100758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO2
101758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO3
102758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO4
103758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO5
104758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO6
105758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO7
106758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO8
107758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO9
108758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
109758657e5SAleksandr Urakov     lldb_st0_i386,       // ST0
110758657e5SAleksandr Urakov     lldb_st1_i386,       // ST1
111758657e5SAleksandr Urakov     lldb_st2_i386,       // ST2
112758657e5SAleksandr Urakov     lldb_st3_i386,       // ST3
113758657e5SAleksandr Urakov     lldb_st4_i386,       // ST4
114758657e5SAleksandr Urakov     lldb_st5_i386,       // ST5
115758657e5SAleksandr Urakov     lldb_st6_i386,       // ST6
116758657e5SAleksandr Urakov     lldb_st7_i386,       // ST7
117758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // CTRL
118758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // STAT
119758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // TAG
120758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FPIP
121758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FPCS
122758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FPDO
123758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FPDS
124758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // ISEM
125758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FPEIP
126758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FPEDO
127758657e5SAleksandr Urakov     lldb_mm0_i386,       // MM0
128758657e5SAleksandr Urakov     lldb_mm1_i386,       // MM1
129758657e5SAleksandr Urakov     lldb_mm2_i386,       // MM2
130758657e5SAleksandr Urakov     lldb_mm3_i386,       // MM3
131758657e5SAleksandr Urakov     lldb_mm4_i386,       // MM4
132758657e5SAleksandr Urakov     lldb_mm5_i386,       // MM5
133758657e5SAleksandr Urakov     lldb_mm6_i386,       // MM6
134758657e5SAleksandr Urakov     lldb_mm7_i386,       // MM7
135758657e5SAleksandr Urakov     lldb_xmm0_i386,      // XMM0
136758657e5SAleksandr Urakov     lldb_xmm1_i386,      // XMM1
137758657e5SAleksandr Urakov     lldb_xmm2_i386,      // XMM2
138758657e5SAleksandr Urakov     lldb_xmm3_i386,      // XMM3
139758657e5SAleksandr Urakov     lldb_xmm4_i386,      // XMM4
140758657e5SAleksandr Urakov     lldb_xmm5_i386,      // XMM5
141758657e5SAleksandr Urakov     lldb_xmm6_i386,      // XMM6
142758657e5SAleksandr Urakov     lldb_xmm7_i386       // XMM7
143758657e5SAleksandr Urakov };
144758657e5SAleksandr Urakov 
145758657e5SAleksandr Urakov static const uint32_t g_code_view_to_lldb_registers_x86_64[] = {
146758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // NONE
147758657e5SAleksandr Urakov     lldb_al_x86_64,      // AL
148758657e5SAleksandr Urakov     lldb_cl_x86_64,      // CL
149758657e5SAleksandr Urakov     lldb_dl_x86_64,      // DL
150758657e5SAleksandr Urakov     lldb_bl_x86_64,      // BL
151758657e5SAleksandr Urakov     lldb_ah_x86_64,      // AH
152758657e5SAleksandr Urakov     lldb_ch_x86_64,      // CH
153758657e5SAleksandr Urakov     lldb_dh_x86_64,      // DH
154758657e5SAleksandr Urakov     lldb_bh_x86_64,      // BH
155758657e5SAleksandr Urakov     lldb_ax_x86_64,      // AX
156758657e5SAleksandr Urakov     lldb_cx_x86_64,      // CX
157758657e5SAleksandr Urakov     lldb_dx_x86_64,      // DX
158758657e5SAleksandr Urakov     lldb_bx_x86_64,      // BX
159758657e5SAleksandr Urakov     lldb_sp_x86_64,      // SP
160758657e5SAleksandr Urakov     lldb_bp_x86_64,      // BP
161758657e5SAleksandr Urakov     lldb_si_x86_64,      // SI
162758657e5SAleksandr Urakov     lldb_di_x86_64,      // DI
163758657e5SAleksandr Urakov     lldb_eax_x86_64,     // EAX
164758657e5SAleksandr Urakov     lldb_ecx_x86_64,     // ECX
165758657e5SAleksandr Urakov     lldb_edx_x86_64,     // EDX
166758657e5SAleksandr Urakov     lldb_ebx_x86_64,     // EBX
167758657e5SAleksandr Urakov     lldb_esp_x86_64,     // ESP
168758657e5SAleksandr Urakov     lldb_ebp_x86_64,     // EBP
169758657e5SAleksandr Urakov     lldb_esi_x86_64,     // ESI
170758657e5SAleksandr Urakov     lldb_edi_x86_64,     // EDI
171758657e5SAleksandr Urakov     lldb_es_x86_64,      // ES
172758657e5SAleksandr Urakov     lldb_cs_x86_64,      // CS
173758657e5SAleksandr Urakov     lldb_ss_x86_64,      // SS
174758657e5SAleksandr Urakov     lldb_ds_x86_64,      // DS
175758657e5SAleksandr Urakov     lldb_fs_x86_64,      // FS
176758657e5SAleksandr Urakov     lldb_gs_x86_64,      // GS
177758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // IP
178758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FLAGS
179758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EIP
180758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EFLAGS
181758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
182758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
183758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // TEMP
184758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // TEMPH
185758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // QUOTE
186758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PCDR3
187758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PCDR4
188758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PCDR5
189758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PCDR6
190758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PCDR7
191758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
192758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
193758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
194758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
195758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
196758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
197758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
198758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
199758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
200758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
201758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
202758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // CR0
203758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // CR1
204758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // CR2
205758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // CR3
206758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // CR4
207758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
208758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
209758657e5SAleksandr Urakov     lldb_dr0_x86_64, // DR0
210758657e5SAleksandr Urakov     lldb_dr1_x86_64, // DR1
211758657e5SAleksandr Urakov     lldb_dr2_x86_64, // DR2
212758657e5SAleksandr Urakov     lldb_dr3_x86_64, // DR3
213758657e5SAleksandr Urakov     lldb_dr4_x86_64, // DR4
214758657e5SAleksandr Urakov     lldb_dr5_x86_64, // DR5
215758657e5SAleksandr Urakov     lldb_dr6_x86_64, // DR6
216758657e5SAleksandr Urakov     lldb_dr7_x86_64, // DR7
217758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
218758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
219758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
220758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
221758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // GDTR
222758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // GDTL
223758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // IDTR
224758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // IDTL
225758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // LDTR
226758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // TR
227758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO1
228758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO2
229758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO3
230758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO4
231758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO5
232758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO6
233758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO7
234758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO8
235758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // PSEUDO9
236758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
237758657e5SAleksandr Urakov     lldb_st0_x86_64,     // ST0
238758657e5SAleksandr Urakov     lldb_st1_x86_64,     // ST1
239758657e5SAleksandr Urakov     lldb_st2_x86_64,     // ST2
240758657e5SAleksandr Urakov     lldb_st3_x86_64,     // ST3
241758657e5SAleksandr Urakov     lldb_st4_x86_64,     // ST4
242758657e5SAleksandr Urakov     lldb_st5_x86_64,     // ST5
243758657e5SAleksandr Urakov     lldb_st6_x86_64,     // ST6
244758657e5SAleksandr Urakov     lldb_st7_x86_64,     // ST7
245758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // CTRL
246758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // STAT
247758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // TAG
248758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FPIP
249758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FPCS
250758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FPDO
251758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FPDS
252758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // ISEM
253758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FPEIP
254758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // FPEDO
255758657e5SAleksandr Urakov     lldb_mm0_x86_64,     // MM0
256758657e5SAleksandr Urakov     lldb_mm1_x86_64,     // MM1
257758657e5SAleksandr Urakov     lldb_mm2_x86_64,     // MM2
258758657e5SAleksandr Urakov     lldb_mm3_x86_64,     // MM3
259758657e5SAleksandr Urakov     lldb_mm4_x86_64,     // MM4
260758657e5SAleksandr Urakov     lldb_mm5_x86_64,     // MM5
261758657e5SAleksandr Urakov     lldb_mm6_x86_64,     // MM6
262758657e5SAleksandr Urakov     lldb_mm7_x86_64,     // MM7
263758657e5SAleksandr Urakov     lldb_xmm0_x86_64,    // XMM0
264758657e5SAleksandr Urakov     lldb_xmm1_x86_64,    // XMM1
265758657e5SAleksandr Urakov     lldb_xmm2_x86_64,    // XMM2
266758657e5SAleksandr Urakov     lldb_xmm3_x86_64,    // XMM3
267758657e5SAleksandr Urakov     lldb_xmm4_x86_64,    // XMM4
268758657e5SAleksandr Urakov     lldb_xmm5_x86_64,    // XMM5
269758657e5SAleksandr Urakov     lldb_xmm6_x86_64,    // XMM6
270758657e5SAleksandr Urakov     lldb_xmm7_x86_64,    // XMM7
271758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
272758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
273758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
274758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
275758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
276758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
277758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
278758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
279758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
280758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
281758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
282758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
283758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
284758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
285758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
286758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
287758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM,
288758657e5SAleksandr Urakov     lldb_mxcsr_x86_64,   // MXCSR
289758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EDXEAX
290758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
291758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
292758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM,
293758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM0L
294758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM1L
295758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM2L
296758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM3L
297758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM4L
298758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM5L
299758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM6L
300758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM7L
301758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM0H
302758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM1H
303758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM2H
304758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM3H
305758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM4H
306758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM5H
307758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM6H
308758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // EMM7H
309758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM00
310758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM01
311758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM10
312758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM11
313758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM20
314758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM21
315758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM30
316758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM31
317758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM40
318758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM41
319758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM50
320758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM51
321758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM60
322758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM61
323758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM70
324758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, // MM71
325758657e5SAleksandr Urakov     lldb_xmm8_x86_64,    // XMM8
326758657e5SAleksandr Urakov     lldb_xmm9_x86_64,    // XMM9
327758657e5SAleksandr Urakov     lldb_xmm10_x86_64,   // XMM10
328758657e5SAleksandr Urakov     lldb_xmm11_x86_64,   // XMM11
329758657e5SAleksandr Urakov     lldb_xmm12_x86_64,   // XMM12
330758657e5SAleksandr Urakov     lldb_xmm13_x86_64,   // XMM13
331758657e5SAleksandr Urakov     lldb_xmm14_x86_64,   // XMM14
332758657e5SAleksandr Urakov     lldb_xmm15_x86_64,   // XMM15
333758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
334758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
335758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
336758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
337758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
338758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
339758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
340758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
341758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
342758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
343758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
344758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
345758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
346758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
347758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
348758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
349758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
350758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
351758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
352758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
353758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
354758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM,
355758657e5SAleksandr Urakov     lldb_sil_x86_64,   // SIL
356758657e5SAleksandr Urakov     lldb_dil_x86_64,   // DIL
357758657e5SAleksandr Urakov     lldb_bpl_x86_64,   // BPL
358758657e5SAleksandr Urakov     lldb_spl_x86_64,   // SPL
359758657e5SAleksandr Urakov     lldb_rax_x86_64,   // RAX
360758657e5SAleksandr Urakov     lldb_rbx_x86_64,   // RBX
361758657e5SAleksandr Urakov     lldb_rcx_x86_64,   // RCX
362758657e5SAleksandr Urakov     lldb_rdx_x86_64,   // RDX
363758657e5SAleksandr Urakov     lldb_rsi_x86_64,   // RSI
364758657e5SAleksandr Urakov     lldb_rdi_x86_64,   // RDI
365758657e5SAleksandr Urakov     lldb_rbp_x86_64,   // RBP
366758657e5SAleksandr Urakov     lldb_rsp_x86_64,   // RSP
367758657e5SAleksandr Urakov     lldb_r8_x86_64,    // R8
368758657e5SAleksandr Urakov     lldb_r9_x86_64,    // R9
369758657e5SAleksandr Urakov     lldb_r10_x86_64,   // R10
370758657e5SAleksandr Urakov     lldb_r11_x86_64,   // R11
371758657e5SAleksandr Urakov     lldb_r12_x86_64,   // R12
372758657e5SAleksandr Urakov     lldb_r13_x86_64,   // R13
373758657e5SAleksandr Urakov     lldb_r14_x86_64,   // R14
374758657e5SAleksandr Urakov     lldb_r15_x86_64,   // R15
375758657e5SAleksandr Urakov     lldb_r8l_x86_64,   // R8B
376758657e5SAleksandr Urakov     lldb_r9l_x86_64,   // R9B
377758657e5SAleksandr Urakov     lldb_r10l_x86_64,  // R10B
378758657e5SAleksandr Urakov     lldb_r11l_x86_64,  // R11B
379758657e5SAleksandr Urakov     lldb_r12l_x86_64,  // R12B
380758657e5SAleksandr Urakov     lldb_r13l_x86_64,  // R13B
381758657e5SAleksandr Urakov     lldb_r14l_x86_64,  // R14B
382758657e5SAleksandr Urakov     lldb_r15l_x86_64,  // R15B
383758657e5SAleksandr Urakov     lldb_r8w_x86_64,   // R8W
384758657e5SAleksandr Urakov     lldb_r9w_x86_64,   // R9W
385758657e5SAleksandr Urakov     lldb_r10w_x86_64,  // R10W
386758657e5SAleksandr Urakov     lldb_r11w_x86_64,  // R11W
387758657e5SAleksandr Urakov     lldb_r12w_x86_64,  // R12W
388758657e5SAleksandr Urakov     lldb_r13w_x86_64,  // R13W
389758657e5SAleksandr Urakov     lldb_r14w_x86_64,  // R14W
390758657e5SAleksandr Urakov     lldb_r15w_x86_64,  // R15W
391758657e5SAleksandr Urakov     lldb_r8d_x86_64,   // R8D
392758657e5SAleksandr Urakov     lldb_r9d_x86_64,   // R9D
393758657e5SAleksandr Urakov     lldb_r10d_x86_64,  // R10D
394758657e5SAleksandr Urakov     lldb_r11d_x86_64,  // R11D
395758657e5SAleksandr Urakov     lldb_r12d_x86_64,  // R12D
396758657e5SAleksandr Urakov     lldb_r13d_x86_64,  // R13D
397758657e5SAleksandr Urakov     lldb_r14d_x86_64,  // R14D
398758657e5SAleksandr Urakov     lldb_r15d_x86_64,  // R15D
399758657e5SAleksandr Urakov     lldb_ymm0_x86_64,  // AMD64_YMM0
400758657e5SAleksandr Urakov     lldb_ymm1_x86_64,  // AMD64_YMM1
401758657e5SAleksandr Urakov     lldb_ymm2_x86_64,  // AMD64_YMM2
402758657e5SAleksandr Urakov     lldb_ymm3_x86_64,  // AMD64_YMM3
403758657e5SAleksandr Urakov     lldb_ymm4_x86_64,  // AMD64_YMM4
404758657e5SAleksandr Urakov     lldb_ymm5_x86_64,  // AMD64_YMM5
405758657e5SAleksandr Urakov     lldb_ymm6_x86_64,  // AMD64_YMM6
406758657e5SAleksandr Urakov     lldb_ymm7_x86_64,  // AMD64_YMM7
407758657e5SAleksandr Urakov     lldb_ymm8_x86_64,  // AMD64_YMM8
408758657e5SAleksandr Urakov     lldb_ymm9_x86_64,  // AMD64_YMM9
409758657e5SAleksandr Urakov     lldb_ymm10_x86_64, // AMD64_YMM10
410758657e5SAleksandr Urakov     lldb_ymm11_x86_64, // AMD64_YMM11
411758657e5SAleksandr Urakov     lldb_ymm12_x86_64, // AMD64_YMM12
412758657e5SAleksandr Urakov     lldb_ymm13_x86_64, // AMD64_YMM13
413758657e5SAleksandr Urakov     lldb_ymm14_x86_64, // AMD64_YMM14
414758657e5SAleksandr Urakov     lldb_ymm15_x86_64, // AMD64_YMM15
415758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
416758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
417758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
418758657e5SAleksandr Urakov     LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
419758657e5SAleksandr Urakov     lldb_bnd0_x86_64, // BND0
420758657e5SAleksandr Urakov     lldb_bnd1_x86_64, // BND1
421758657e5SAleksandr Urakov     lldb_bnd2_x86_64  // BND2
422758657e5SAleksandr Urakov };
423758657e5SAleksandr Urakov 
424758657e5SAleksandr Urakov uint32_t lldb_private::npdb::GetLLDBRegisterNumber(
425758657e5SAleksandr Urakov     llvm::Triple::ArchType arch_type, llvm::codeview::RegisterId register_id) {
426758657e5SAleksandr Urakov   switch (arch_type) {
427758657e5SAleksandr Urakov   case llvm::Triple::x86:
428758657e5SAleksandr Urakov     if (static_cast<uint16_t>(register_id) <
429758657e5SAleksandr Urakov         sizeof(g_code_view_to_lldb_registers_x86) /
430758657e5SAleksandr Urakov             sizeof(g_code_view_to_lldb_registers_x86[0]))
431758657e5SAleksandr Urakov       return g_code_view_to_lldb_registers_x86[static_cast<uint16_t>(
432758657e5SAleksandr Urakov           register_id)];
433758657e5SAleksandr Urakov 
434758657e5SAleksandr Urakov     switch (register_id) {
435758657e5SAleksandr Urakov     case llvm::codeview::RegisterId::MXCSR:
436758657e5SAleksandr Urakov       return lldb_mxcsr_i386;
437758657e5SAleksandr Urakov     case llvm::codeview::RegisterId::BND0:
438758657e5SAleksandr Urakov       return lldb_bnd0_i386;
439758657e5SAleksandr Urakov     case llvm::codeview::RegisterId::BND1:
440758657e5SAleksandr Urakov       return lldb_bnd1_i386;
441758657e5SAleksandr Urakov     case llvm::codeview::RegisterId::BND2:
442758657e5SAleksandr Urakov       return lldb_bnd2_i386;
443758657e5SAleksandr Urakov     default:
444758657e5SAleksandr Urakov       return LLDB_INVALID_REGNUM;
445758657e5SAleksandr Urakov     }
446758657e5SAleksandr Urakov   case llvm::Triple::x86_64:
447758657e5SAleksandr Urakov     if (static_cast<uint16_t>(register_id) <
448758657e5SAleksandr Urakov         sizeof(g_code_view_to_lldb_registers_x86_64) /
449758657e5SAleksandr Urakov             sizeof(g_code_view_to_lldb_registers_x86_64[0]))
450758657e5SAleksandr Urakov       return g_code_view_to_lldb_registers_x86_64[static_cast<uint16_t>(
451758657e5SAleksandr Urakov           register_id)];
452758657e5SAleksandr Urakov 
453758657e5SAleksandr Urakov     return LLDB_INVALID_REGNUM;
454758657e5SAleksandr Urakov   default:
455758657e5SAleksandr Urakov     return LLDB_INVALID_REGNUM;
456758657e5SAleksandr Urakov   }
457758657e5SAleksandr Urakov }
458