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