1//===-- RegisterInfos_x86_64_with_base_shared.cpp--------------------------===//
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 "RegisterInfos_x86_64_with_base_shared.h"
10
11#include "lldb/lldb-defines.h"
12#include <mutex>
13
14using namespace lldb;
15
16namespace lldb_private {
17
18uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_eax[] = {
19 lldb_eax_i386, LLDB_INVALID_REGNUM};
20uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_ebx[] = {
21 lldb_ebx_i386, LLDB_INVALID_REGNUM};
22uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_ecx[] = {
23 lldb_ecx_i386, LLDB_INVALID_REGNUM};
24uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_edx[] = {
25 lldb_edx_i386, LLDB_INVALID_REGNUM};
26uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_edi[] = {
27 lldb_edi_i386, LLDB_INVALID_REGNUM};
28uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_esi[] = {
29 lldb_esi_i386, LLDB_INVALID_REGNUM};
30uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_ebp[] = {
31 lldb_ebp_i386, LLDB_INVALID_REGNUM};
32uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_esp[] = {
33 lldb_esp_i386, LLDB_INVALID_REGNUM};
34
35uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_eax[] = {
36 lldb_eax_i386, lldb_ax_i386, lldb_ah_i386, lldb_al_i386,
37 LLDB_INVALID_REGNUM};
38uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_ebx[] = {
39 lldb_ebx_i386, lldb_bx_i386, lldb_bh_i386, lldb_bl_i386,
40 LLDB_INVALID_REGNUM};
41uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_ecx[] = {
42 lldb_ecx_i386, lldb_cx_i386, lldb_ch_i386, lldb_cl_i386,
43 LLDB_INVALID_REGNUM};
44uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_edx[] = {
45 lldb_edx_i386, lldb_dx_i386, lldb_dh_i386, lldb_dl_i386,
46 LLDB_INVALID_REGNUM};
47uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_edi[] = {
48 lldb_edi_i386, lldb_di_i386, LLDB_INVALID_REGNUM};
49uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_esi[] = {
50 lldb_esi_i386, lldb_si_i386, LLDB_INVALID_REGNUM};
51uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_ebp[] = {
52 lldb_ebp_i386, lldb_bp_i386, LLDB_INVALID_REGNUM};
53uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_esp[] = {
54 lldb_esp_i386, lldb_sp_i386, LLDB_INVALID_REGNUM};
55
56uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_rax[] = {
57 x86_64_with_base::lldb_rax, LLDB_INVALID_REGNUM};
58uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_rbx[] = {
59 x86_64_with_base::lldb_rbx, LLDB_INVALID_REGNUM};
60uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_rcx[] = {
61 x86_64_with_base::lldb_rcx, LLDB_INVALID_REGNUM};
62uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_rdx[] = {
63 x86_64_with_base::lldb_rdx, LLDB_INVALID_REGNUM};
64uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_rdi[] = {
65 x86_64_with_base::lldb_rdi, LLDB_INVALID_REGNUM};
66uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_rsi[] = {
67 x86_64_with_base::lldb_rsi, LLDB_INVALID_REGNUM};
68uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_rbp[] = {
69 x86_64_with_base::lldb_rbp, LLDB_INVALID_REGNUM};
70uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_rsp[] = {
71 x86_64_with_base::lldb_rsp, LLDB_INVALID_REGNUM};
72uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_r8[] = {
73 x86_64_with_base::lldb_r8, LLDB_INVALID_REGNUM};
74uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_r9[] = {
75 x86_64_with_base::lldb_r9, LLDB_INVALID_REGNUM};
76uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_r10[] = {
77 x86_64_with_base::lldb_r10, LLDB_INVALID_REGNUM};
78uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_r11[] = {
79 x86_64_with_base::lldb_r11, LLDB_INVALID_REGNUM};
80uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_r12[] = {
81 x86_64_with_base::lldb_r12, LLDB_INVALID_REGNUM};
82uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_r13[] = {
83 x86_64_with_base::lldb_r13, LLDB_INVALID_REGNUM};
84uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_r14[] = {
85 x86_64_with_base::lldb_r14, LLDB_INVALID_REGNUM};
86uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_r15[] = {
87 x86_64_with_base::lldb_r15, LLDB_INVALID_REGNUM};
88
89uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_rax[] = {
90 x86_64_with_base::lldb_rax, x86_64_with_base::lldb_eax,
91 x86_64_with_base::lldb_ax, x86_64_with_base::lldb_ah,
92 x86_64_with_base::lldb_al, LLDB_INVALID_REGNUM};
93uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_rbx[] = {
94 x86_64_with_base::lldb_rbx, x86_64_with_base::lldb_ebx,
95 x86_64_with_base::lldb_bx, x86_64_with_base::lldb_bh,
96 x86_64_with_base::lldb_bl, LLDB_INVALID_REGNUM};
97uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_rcx[] = {
98 x86_64_with_base::lldb_rcx, x86_64_with_base::lldb_ecx,
99 x86_64_with_base::lldb_cx, x86_64_with_base::lldb_ch,
100 x86_64_with_base::lldb_cl, LLDB_INVALID_REGNUM};
101uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_rdx[] = {
102 x86_64_with_base::lldb_rdx, x86_64_with_base::lldb_edx,
103 x86_64_with_base::lldb_dx, x86_64_with_base::lldb_dh,
104 x86_64_with_base::lldb_dl, LLDB_INVALID_REGNUM};
105uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_rdi[] = {
106 x86_64_with_base::lldb_rdi, x86_64_with_base::lldb_edi,
107 x86_64_with_base::lldb_di, x86_64_with_base::lldb_dil, LLDB_INVALID_REGNUM};
108uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_rsi[] = {
109 x86_64_with_base::lldb_rsi, x86_64_with_base::lldb_esi,
110 x86_64_with_base::lldb_si, x86_64_with_base::lldb_sil, LLDB_INVALID_REGNUM};
111uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_rbp[] = {
112 x86_64_with_base::lldb_rbp, x86_64_with_base::lldb_ebp,
113 x86_64_with_base::lldb_bp, x86_64_with_base::lldb_bpl, LLDB_INVALID_REGNUM};
114uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_rsp[] = {
115 x86_64_with_base::lldb_rsp, x86_64_with_base::lldb_esp,
116 x86_64_with_base::lldb_sp, x86_64_with_base::lldb_spl, LLDB_INVALID_REGNUM};
117uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_r8[] = {
118 x86_64_with_base::lldb_r8, x86_64_with_base::lldb_r8d,
119 x86_64_with_base::lldb_r8w, x86_64_with_base::lldb_r8l,
120 LLDB_INVALID_REGNUM};
121uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_r9[] = {
122 x86_64_with_base::lldb_r9, x86_64_with_base::lldb_r9d,
123 x86_64_with_base::lldb_r9w, x86_64_with_base::lldb_r9l,
124 LLDB_INVALID_REGNUM};
125uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_r10[] = {
126 x86_64_with_base::lldb_r10, x86_64_with_base::lldb_r10d,
127 x86_64_with_base::lldb_r10w, x86_64_with_base::lldb_r10l,
128 LLDB_INVALID_REGNUM};
129uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_r11[] = {
130 x86_64_with_base::lldb_r11, x86_64_with_base::lldb_r11d,
131 x86_64_with_base::lldb_r11w, x86_64_with_base::lldb_r11l,
132 LLDB_INVALID_REGNUM};
133uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_r12[] = {
134 x86_64_with_base::lldb_r12, x86_64_with_base::lldb_r12d,
135 x86_64_with_base::lldb_r12w, x86_64_with_base::lldb_r12l,
136 LLDB_INVALID_REGNUM};
137uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_r13[] = {
138 x86_64_with_base::lldb_r13, x86_64_with_base::lldb_r13d,
139 x86_64_with_base::lldb_r13w, x86_64_with_base::lldb_r13l,
140 LLDB_INVALID_REGNUM};
141uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_r14[] = {
142 x86_64_with_base::lldb_r14, x86_64_with_base::lldb_r14d,
143 x86_64_with_base::lldb_r14w, x86_64_with_base::lldb_r14l,
144 LLDB_INVALID_REGNUM};
145uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_r15[] = {
146 x86_64_with_base::lldb_r15, x86_64_with_base::lldb_r15d,
147 x86_64_with_base::lldb_r15w, x86_64_with_base::lldb_r15l,
148 LLDB_INVALID_REGNUM};
149
150uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_fip[] = {
151 x86_64_with_base::lldb_fip, LLDB_INVALID_REGNUM};
152uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_fdp[] = {
153 x86_64_with_base::lldb_fdp, LLDB_INVALID_REGNUM};
154
155uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_fip[] = {
156 x86_64_with_base::lldb_fip, x86_64_with_base::lldb_fioff,
157 x86_64_with_base::lldb_fiseg, LLDB_INVALID_REGNUM};
158uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_fdp[] = {
159 x86_64_with_base::lldb_fdp, x86_64_with_base::lldb_fooff,
160 x86_64_with_base::lldb_foseg, LLDB_INVALID_REGNUM};
161
162uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st0_32[] = {
163 lldb_st0_i386, LLDB_INVALID_REGNUM};
164uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st1_32[] = {
165 lldb_st1_i386, LLDB_INVALID_REGNUM};
166uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st2_32[] = {
167 lldb_st2_i386, LLDB_INVALID_REGNUM};
168uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st3_32[] = {
169 lldb_st3_i386, LLDB_INVALID_REGNUM};
170uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st4_32[] = {
171 lldb_st4_i386, LLDB_INVALID_REGNUM};
172uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st5_32[] = {
173 lldb_st5_i386, LLDB_INVALID_REGNUM};
174uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st6_32[] = {
175 lldb_st6_i386, LLDB_INVALID_REGNUM};
176uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st7_32[] = {
177 lldb_st7_i386, LLDB_INVALID_REGNUM};
178
179uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st0_32[] = {
180 lldb_st0_i386, lldb_mm0_i386, LLDB_INVALID_REGNUM};
181uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st1_32[] = {
182 lldb_st1_i386, lldb_mm1_i386, LLDB_INVALID_REGNUM};
183uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st2_32[] = {
184 lldb_st2_i386, lldb_mm2_i386, LLDB_INVALID_REGNUM};
185uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st3_32[] = {
186 lldb_st3_i386, lldb_mm3_i386, LLDB_INVALID_REGNUM};
187uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st4_32[] = {
188 lldb_st4_i386, lldb_mm4_i386, LLDB_INVALID_REGNUM};
189uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st5_32[] = {
190 lldb_st5_i386, lldb_mm5_i386, LLDB_INVALID_REGNUM};
191uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st6_32[] = {
192 lldb_st6_i386, lldb_mm6_i386, LLDB_INVALID_REGNUM};
193uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st7_32[] = {
194 lldb_st7_i386, lldb_mm7_i386, LLDB_INVALID_REGNUM};
195
196uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st0_64[] = {
197 x86_64_with_base::lldb_st0, LLDB_INVALID_REGNUM};
198uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st1_64[] = {
199 x86_64_with_base::lldb_st1, LLDB_INVALID_REGNUM};
200uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st2_64[] = {
201 x86_64_with_base::lldb_st2, LLDB_INVALID_REGNUM};
202uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st3_64[] = {
203 x86_64_with_base::lldb_st3, LLDB_INVALID_REGNUM};
204uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st4_64[] = {
205 x86_64_with_base::lldb_st4, LLDB_INVALID_REGNUM};
206uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st5_64[] = {
207 x86_64_with_base::lldb_st5, LLDB_INVALID_REGNUM};
208uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st6_64[] = {
209 x86_64_with_base::lldb_st6, LLDB_INVALID_REGNUM};
210uint32_t RegisterInfos_x86_64_with_base_shared::g_contained_st7_64[] = {
211 x86_64_with_base::lldb_st7, LLDB_INVALID_REGNUM};
212
213uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st0_64[] = {
214 x86_64_with_base::lldb_st0, x86_64_with_base::lldb_mm0,
215 LLDB_INVALID_REGNUM};
216uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st1_64[] = {
217 x86_64_with_base::lldb_st1, x86_64_with_base::lldb_mm1,
218 LLDB_INVALID_REGNUM};
219uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st2_64[] = {
220 x86_64_with_base::lldb_st2, x86_64_with_base::lldb_mm2,
221 LLDB_INVALID_REGNUM};
222uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st3_64[] = {
223 x86_64_with_base::lldb_st3, x86_64_with_base::lldb_mm3,
224 LLDB_INVALID_REGNUM};
225uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st4_64[] = {
226 x86_64_with_base::lldb_st4, x86_64_with_base::lldb_mm4,
227 LLDB_INVALID_REGNUM};
228uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st5_64[] = {
229 x86_64_with_base::lldb_st5, x86_64_with_base::lldb_mm5,
230 LLDB_INVALID_REGNUM};
231uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st6_64[] = {
232 x86_64_with_base::lldb_st6, x86_64_with_base::lldb_mm6,
233 LLDB_INVALID_REGNUM};
234uint32_t RegisterInfos_x86_64_with_base_shared::g_invalidate_st7_64[] = {
235 x86_64_with_base::lldb_st7, x86_64_with_base::lldb_mm7,
236 LLDB_INVALID_REGNUM};
237
238RegInfo &GetRegInfoShared(llvm::Triple::ArchType arch_type, bool with_base) {
239 static std::once_flag once_flag_x86, once_flag_x86_64,
240 once_flag_x86_64_with_base;
241 static RegInfo reg_info_x86, reg_info_x86_64, reg_info_x86_64_with_base, reg_info_invalid;
242
243 switch (arch_type) {
244 case llvm::Triple::x86:
245 std::call_once(once&: once_flag_x86, f: []() {
246 reg_info_x86.num_registers = k_num_registers_i386;
247 reg_info_x86.num_gpr_registers = k_num_gpr_registers_i386;
248 reg_info_x86.num_fpr_registers = k_num_fpr_registers_i386;
249 reg_info_x86.num_avx_registers = k_num_avx_registers_i386;
250 reg_info_x86.last_gpr = k_last_gpr_i386;
251 reg_info_x86.first_fpr = k_first_fpr_i386;
252 reg_info_x86.last_fpr = k_last_fpr_i386;
253 reg_info_x86.first_st = lldb_st0_i386;
254 reg_info_x86.last_st = lldb_st7_i386;
255 reg_info_x86.first_mm = lldb_mm0_i386;
256 reg_info_x86.last_mm = lldb_mm7_i386;
257 reg_info_x86.first_xmm = lldb_xmm0_i386;
258 reg_info_x86.last_xmm = lldb_xmm7_i386;
259 reg_info_x86.first_ymm = lldb_ymm0_i386;
260 reg_info_x86.last_ymm = lldb_ymm7_i386;
261 reg_info_x86.first_dr = lldb_dr0_i386;
262 reg_info_x86.gpr_flags = lldb_eflags_i386;
263 });
264
265 return reg_info_x86;
266 case llvm::Triple::x86_64:
267 if (with_base) {
268 std::call_once(once&: once_flag_x86_64_with_base, f: []() {
269 reg_info_x86_64_with_base.num_registers =
270 x86_64_with_base::k_num_registers;
271 reg_info_x86_64_with_base.num_gpr_registers =
272 x86_64_with_base::k_num_gpr_registers;
273 reg_info_x86_64_with_base.num_fpr_registers =
274 x86_64_with_base::k_num_fpr_registers;
275 reg_info_x86_64_with_base.num_avx_registers =
276 x86_64_with_base::k_num_avx_registers;
277 reg_info_x86_64_with_base.last_gpr = x86_64_with_base::k_last_gpr;
278 reg_info_x86_64_with_base.first_fpr = x86_64_with_base::k_first_fpr;
279 reg_info_x86_64_with_base.last_fpr = x86_64_with_base::k_last_fpr;
280 reg_info_x86_64_with_base.first_st = x86_64_with_base::lldb_st0;
281 reg_info_x86_64_with_base.last_st = x86_64_with_base::lldb_st7;
282 reg_info_x86_64_with_base.first_mm = x86_64_with_base::lldb_mm0;
283 reg_info_x86_64_with_base.last_mm = x86_64_with_base::lldb_mm7;
284 reg_info_x86_64_with_base.first_xmm = x86_64_with_base::lldb_xmm0;
285 reg_info_x86_64_with_base.last_xmm = x86_64_with_base::lldb_xmm15;
286 reg_info_x86_64_with_base.first_ymm = x86_64_with_base::lldb_ymm0;
287 reg_info_x86_64_with_base.last_ymm = x86_64_with_base::lldb_ymm15;
288 reg_info_x86_64_with_base.first_dr = x86_64_with_base::lldb_dr0;
289 reg_info_x86_64_with_base.gpr_flags = x86_64_with_base::lldb_rflags;
290 });
291
292 return reg_info_x86_64_with_base;
293 } else {
294 std::call_once(once&: once_flag_x86_64, f: []() {
295 reg_info_x86_64.num_registers = k_num_registers_x86_64;
296 reg_info_x86_64.num_gpr_registers = k_num_gpr_registers_x86_64;
297 reg_info_x86_64.num_fpr_registers = k_num_fpr_registers_x86_64;
298 reg_info_x86_64.num_avx_registers = k_num_avx_registers_x86_64;
299 reg_info_x86_64.last_gpr = k_last_gpr_x86_64;
300 reg_info_x86_64.first_fpr = k_first_fpr_x86_64;
301 reg_info_x86_64.last_fpr = k_last_fpr_x86_64;
302 reg_info_x86_64.first_st = lldb_st0_x86_64;
303 reg_info_x86_64.last_st = lldb_st7_x86_64;
304 reg_info_x86_64.first_mm = lldb_mm0_x86_64;
305 reg_info_x86_64.last_mm = lldb_mm7_x86_64;
306 reg_info_x86_64.first_xmm = lldb_xmm0_x86_64;
307 reg_info_x86_64.last_xmm = lldb_xmm15_x86_64;
308 reg_info_x86_64.first_ymm = lldb_ymm0_x86_64;
309 reg_info_x86_64.last_ymm = lldb_ymm15_x86_64;
310 reg_info_x86_64.first_dr = lldb_dr0_x86_64;
311 reg_info_x86_64.gpr_flags = lldb_rflags_x86_64;
312 });
313 return reg_info_x86_64;
314 }
315 default:
316 assert(false && "Unhandled target architecture.");
317 return reg_info_invalid;
318 }
319}
320
321} // namespace lldb_private
322

source code of lldb/source/Plugins/Process/Utility/RegisterInfos_x86_64_with_base_shared.cpp