1 //===-- RegisterInfos_x86_64_with_base_shared.h -----------------*- 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 "Plugins/Process/Utility/lldb-x86-register-enums.h"
10 #include <stdint.h>
11 
12 #ifndef lldb_RegisterInfos_x86_64_with_base_shared_h
13 #define lldb_RegisterInfos_x86_64_with_base_shared_h
14 
15 #include "Plugins/Process/Utility/NativeRegisterContextRegisterInfo.h"
16 
17 namespace lldb_private {
18 
19 struct RegisterInfos_x86_64_with_base_shared {
20   static uint32_t g_contained_eax[];
21   static uint32_t g_contained_ebx[];
22   static uint32_t g_contained_ecx[];
23   static uint32_t g_contained_edx[];
24   static uint32_t g_contained_edi[];
25   static uint32_t g_contained_esi[];
26   static uint32_t g_contained_ebp[];
27   static uint32_t g_contained_esp[];
28 
29   static uint32_t g_invalidate_eax[];
30   static uint32_t g_invalidate_ebx[];
31   static uint32_t g_invalidate_ecx[];
32   static uint32_t g_invalidate_edx[];
33   static uint32_t g_invalidate_edi[];
34   static uint32_t g_invalidate_esi[];
35   static uint32_t g_invalidate_ebp[];
36   static uint32_t g_invalidate_esp[];
37 
38   static uint32_t g_contained_rax[];
39   static uint32_t g_contained_rbx[];
40   static uint32_t g_contained_rcx[];
41   static uint32_t g_contained_rdx[];
42   static uint32_t g_contained_rdi[];
43   static uint32_t g_contained_rsi[];
44   static uint32_t g_contained_rbp[];
45   static uint32_t g_contained_rsp[];
46   static uint32_t g_contained_r8[];
47   static uint32_t g_contained_r9[];
48   static uint32_t g_contained_r10[];
49   static uint32_t g_contained_r11[];
50   static uint32_t g_contained_r12[];
51   static uint32_t g_contained_r13[];
52   static uint32_t g_contained_r14[];
53   static uint32_t g_contained_r15[];
54 
55   static uint32_t g_invalidate_rax[];
56   static uint32_t g_invalidate_rbx[];
57   static uint32_t g_invalidate_rcx[];
58   static uint32_t g_invalidate_rdx[];
59   static uint32_t g_invalidate_rdi[];
60   static uint32_t g_invalidate_rsi[];
61   static uint32_t g_invalidate_rbp[];
62   static uint32_t g_invalidate_rsp[];
63   static uint32_t g_invalidate_r8[];
64   static uint32_t g_invalidate_r9[];
65   static uint32_t g_invalidate_r10[];
66   static uint32_t g_invalidate_r11[];
67   static uint32_t g_invalidate_r12[];
68   static uint32_t g_invalidate_r13[];
69   static uint32_t g_invalidate_r14[];
70   static uint32_t g_invalidate_r15[];
71 
72   static uint32_t g_contained_fip[];
73   static uint32_t g_contained_fdp[];
74 
75   static uint32_t g_invalidate_fip[];
76   static uint32_t g_invalidate_fdp[];
77 
78   static uint32_t g_contained_st0_32[];
79   static uint32_t g_contained_st1_32[];
80   static uint32_t g_contained_st2_32[];
81   static uint32_t g_contained_st3_32[];
82   static uint32_t g_contained_st4_32[];
83   static uint32_t g_contained_st5_32[];
84   static uint32_t g_contained_st6_32[];
85   static uint32_t g_contained_st7_32[];
86 
87   static uint32_t g_invalidate_st0_32[];
88   static uint32_t g_invalidate_st1_32[];
89   static uint32_t g_invalidate_st2_32[];
90   static uint32_t g_invalidate_st3_32[];
91   static uint32_t g_invalidate_st4_32[];
92   static uint32_t g_invalidate_st5_32[];
93   static uint32_t g_invalidate_st6_32[];
94   static uint32_t g_invalidate_st7_32[];
95 
96   static uint32_t g_contained_st0_64[];
97   static uint32_t g_contained_st1_64[];
98   static uint32_t g_contained_st2_64[];
99   static uint32_t g_contained_st3_64[];
100   static uint32_t g_contained_st4_64[];
101   static uint32_t g_contained_st5_64[];
102   static uint32_t g_contained_st6_64[];
103   static uint32_t g_contained_st7_64[];
104 
105   static uint32_t g_invalidate_st0_64[];
106   static uint32_t g_invalidate_st1_64[];
107   static uint32_t g_invalidate_st2_64[];
108   static uint32_t g_invalidate_st3_64[];
109   static uint32_t g_invalidate_st4_64[];
110   static uint32_t g_invalidate_st5_64[];
111   static uint32_t g_invalidate_st6_64[];
112   static uint32_t g_invalidate_st7_64[];
113 };
114 
115 struct RegInfo {
116   uint32_t num_registers;
117   uint32_t num_gpr_registers;
118   uint32_t num_fpr_registers;
119   uint32_t num_avx_registers;
120 
121   uint32_t last_gpr;
122   uint32_t first_fpr;
123   uint32_t last_fpr;
124 
125   uint32_t first_st;
126   uint32_t last_st;
127   uint32_t first_mm;
128   uint32_t last_mm;
129   uint32_t first_xmm;
130   uint32_t last_xmm;
131   uint32_t first_ymm;
132   uint32_t last_ymm;
133 
134   uint32_t first_dr;
135   uint32_t gpr_flags;
136 };
137 
138 RegInfo &GetRegInfoShared(llvm::Triple::ArchType arch_type, bool with_base);
139 
140 } // namespace lldb_private
141 
142 #endif // ifndef lldb_RegisterInfos_x86_64_with_base_shared_h
143