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