1278332Semaste//===-- RegisterContextFreeBSD_powerpc.cpp ----------------------*- C++ -*-===//
2278332Semaste//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6278332Semaste//
7278332Semaste//===---------------------------------------------------------------------===//
8278332Semaste
9314564Sdim#include "RegisterContextFreeBSD_powerpc.h"
10314564Sdim#include "RegisterContextPOSIX_powerpc.h"
11278332Semaste#include <vector>
12278332Semaste
13278332Semasteusing namespace lldb_private;
14278332Semasteusing namespace lldb;
15278332Semaste
16278332Semaste// http://svnweb.freebsd.org/base/head/sys/powerpc/include/reg.h
17314564Sdimtypedef struct _GPR64 {
18314564Sdim  uint64_t r0;
19314564Sdim  uint64_t r1;
20314564Sdim  uint64_t r2;
21314564Sdim  uint64_t r3;
22314564Sdim  uint64_t r4;
23314564Sdim  uint64_t r5;
24314564Sdim  uint64_t r6;
25314564Sdim  uint64_t r7;
26314564Sdim  uint64_t r8;
27314564Sdim  uint64_t r9;
28314564Sdim  uint64_t r10;
29314564Sdim  uint64_t r11;
30314564Sdim  uint64_t r12;
31314564Sdim  uint64_t r13;
32314564Sdim  uint64_t r14;
33314564Sdim  uint64_t r15;
34314564Sdim  uint64_t r16;
35314564Sdim  uint64_t r17;
36314564Sdim  uint64_t r18;
37314564Sdim  uint64_t r19;
38314564Sdim  uint64_t r20;
39314564Sdim  uint64_t r21;
40314564Sdim  uint64_t r22;
41314564Sdim  uint64_t r23;
42314564Sdim  uint64_t r24;
43314564Sdim  uint64_t r25;
44314564Sdim  uint64_t r26;
45314564Sdim  uint64_t r27;
46314564Sdim  uint64_t r28;
47314564Sdim  uint64_t r29;
48314564Sdim  uint64_t r30;
49314564Sdim  uint64_t r31;
50314564Sdim  uint64_t lr;
51314564Sdim  uint64_t cr;
52314564Sdim  uint64_t xer;
53314564Sdim  uint64_t ctr;
54314564Sdim  uint64_t pc;
55278332Semaste} GPR64;
56278332Semaste
57314564Sdimtypedef struct _GPR32 {
58314564Sdim  uint32_t r0;
59314564Sdim  uint32_t r1;
60314564Sdim  uint32_t r2;
61314564Sdim  uint32_t r3;
62314564Sdim  uint32_t r4;
63314564Sdim  uint32_t r5;
64314564Sdim  uint32_t r6;
65314564Sdim  uint32_t r7;
66314564Sdim  uint32_t r8;
67314564Sdim  uint32_t r9;
68314564Sdim  uint32_t r10;
69314564Sdim  uint32_t r11;
70314564Sdim  uint32_t r12;
71314564Sdim  uint32_t r13;
72314564Sdim  uint32_t r14;
73314564Sdim  uint32_t r15;
74314564Sdim  uint32_t r16;
75314564Sdim  uint32_t r17;
76314564Sdim  uint32_t r18;
77314564Sdim  uint32_t r19;
78314564Sdim  uint32_t r20;
79314564Sdim  uint32_t r21;
80314564Sdim  uint32_t r22;
81314564Sdim  uint32_t r23;
82314564Sdim  uint32_t r24;
83314564Sdim  uint32_t r25;
84314564Sdim  uint32_t r26;
85314564Sdim  uint32_t r27;
86314564Sdim  uint32_t r28;
87314564Sdim  uint32_t r29;
88314564Sdim  uint32_t r30;
89314564Sdim  uint32_t r31;
90314564Sdim  uint32_t lr;
91314564Sdim  uint32_t cr;
92314564Sdim  uint32_t xer;
93314564Sdim  uint32_t ctr;
94314564Sdim  uint32_t pc;
95278332Semaste} GPR32;
96278332Semaste
97314564Sdimtypedef struct _FPR {
98314564Sdim  uint64_t f0;
99314564Sdim  uint64_t f1;
100314564Sdim  uint64_t f2;
101314564Sdim  uint64_t f3;
102314564Sdim  uint64_t f4;
103314564Sdim  uint64_t f5;
104314564Sdim  uint64_t f6;
105314564Sdim  uint64_t f7;
106314564Sdim  uint64_t f8;
107314564Sdim  uint64_t f9;
108314564Sdim  uint64_t f10;
109314564Sdim  uint64_t f11;
110314564Sdim  uint64_t f12;
111314564Sdim  uint64_t f13;
112314564Sdim  uint64_t f14;
113314564Sdim  uint64_t f15;
114314564Sdim  uint64_t f16;
115314564Sdim  uint64_t f17;
116314564Sdim  uint64_t f18;
117314564Sdim  uint64_t f19;
118314564Sdim  uint64_t f20;
119314564Sdim  uint64_t f21;
120314564Sdim  uint64_t f22;
121314564Sdim  uint64_t f23;
122314564Sdim  uint64_t f24;
123314564Sdim  uint64_t f25;
124314564Sdim  uint64_t f26;
125314564Sdim  uint64_t f27;
126314564Sdim  uint64_t f28;
127314564Sdim  uint64_t f29;
128314564Sdim  uint64_t f30;
129314564Sdim  uint64_t f31;
130314564Sdim  uint64_t fpscr;
131278332Semaste} FPR;
132278332Semaste
133314564Sdimtypedef struct _VMX {
134314564Sdim  uint32_t v0[4];
135314564Sdim  uint32_t v1[4];
136314564Sdim  uint32_t v2[4];
137314564Sdim  uint32_t v3[4];
138314564Sdim  uint32_t v4[4];
139314564Sdim  uint32_t v5[4];
140314564Sdim  uint32_t v6[4];
141314564Sdim  uint32_t v7[4];
142314564Sdim  uint32_t v8[4];
143314564Sdim  uint32_t v9[4];
144314564Sdim  uint32_t v10[4];
145314564Sdim  uint32_t v11[4];
146314564Sdim  uint32_t v12[4];
147314564Sdim  uint32_t v13[4];
148314564Sdim  uint32_t v14[4];
149314564Sdim  uint32_t v15[4];
150314564Sdim  uint32_t v16[4];
151314564Sdim  uint32_t v17[4];
152314564Sdim  uint32_t v18[4];
153314564Sdim  uint32_t v19[4];
154314564Sdim  uint32_t v20[4];
155314564Sdim  uint32_t v21[4];
156314564Sdim  uint32_t v22[4];
157314564Sdim  uint32_t v23[4];
158314564Sdim  uint32_t v24[4];
159314564Sdim  uint32_t v25[4];
160314564Sdim  uint32_t v26[4];
161314564Sdim  uint32_t v27[4];
162314564Sdim  uint32_t v28[4];
163314564Sdim  uint32_t v29[4];
164314564Sdim  uint32_t v30[4];
165314564Sdim  uint32_t v31[4];
166314564Sdim  uint32_t pad[2];
167314564Sdim  uint32_t vrsave;
168314564Sdim  uint32_t vscr;
169288943Sdim} VMX;
170288943Sdim
171314564Sdim// Include RegisterInfos_powerpc to declare our g_register_infos_powerpc
172314564Sdim// structure.
173278332Semaste#define DECLARE_REGISTER_INFOS_POWERPC_STRUCT
174278332Semaste#include "RegisterInfos_powerpc.h"
175278332Semaste#undef DECLARE_REGISTER_INFOS_POWERPC_STRUCT
176278332Semaste
177314564SdimRegisterContextFreeBSD_powerpc::RegisterContextFreeBSD_powerpc(
178314564Sdim    const ArchSpec &target_arch)
179314564Sdim    : RegisterInfoInterface(target_arch) {}
180278332Semaste
181314564SdimRegisterContextFreeBSD_powerpc::~RegisterContextFreeBSD_powerpc() {}
182278332Semaste
183314564Sdimsize_t RegisterContextFreeBSD_powerpc::GetGPRSize() const {
184314564Sdim  // This is an 'abstract' base, so no GPR struct.
185314564Sdim  return 0;
186278332Semaste}
187278332Semaste
188314564Sdimconst RegisterInfo *RegisterContextFreeBSD_powerpc::GetRegisterInfo() const {
189314564Sdim  // assert (m_target_arch.GetCore() == ArchSpec::eCore_powerpc);
190314564Sdim  llvm_unreachable("Abstract class!");
191353358Sdim  return nullptr;
192278332Semaste}
193278332Semaste
194314564Sdimuint32_t RegisterContextFreeBSD_powerpc::GetRegisterCount() const { return 0; }
195278332Semaste
196314564SdimRegisterContextFreeBSD_powerpc32::RegisterContextFreeBSD_powerpc32(
197314564Sdim    const ArchSpec &target_arch)
198314564Sdim    : RegisterContextFreeBSD_powerpc(target_arch) {}
199278332Semaste
200314564SdimRegisterContextFreeBSD_powerpc32::~RegisterContextFreeBSD_powerpc32() {}
201278332Semaste
202314564Sdimsize_t RegisterContextFreeBSD_powerpc32::GetGPRSize() const {
203314564Sdim  return sizeof(GPR32);
204278332Semaste}
205278332Semaste
206314564Sdimconst RegisterInfo *RegisterContextFreeBSD_powerpc32::GetRegisterInfo() const {
207314564Sdim  // assert (m_target_arch.GetCore() == ArchSpec::eCore_powerpc);
208314564Sdim  return g_register_infos_powerpc32;
209278332Semaste}
210278332Semaste
211314564Sdimuint32_t RegisterContextFreeBSD_powerpc32::GetRegisterCount() const {
212314564Sdim  return static_cast<uint32_t>(sizeof(g_register_infos_powerpc32) /
213314564Sdim                               sizeof(g_register_infos_powerpc32[0]));
214278332Semaste}
215278332Semaste
216314564SdimRegisterContextFreeBSD_powerpc64::RegisterContextFreeBSD_powerpc64(
217314564Sdim    const ArchSpec &target_arch)
218314564Sdim    : RegisterContextFreeBSD_powerpc(target_arch) {}
219278332Semaste
220314564SdimRegisterContextFreeBSD_powerpc64::~RegisterContextFreeBSD_powerpc64() {}
221278332Semaste
222314564Sdimsize_t RegisterContextFreeBSD_powerpc64::GetGPRSize() const {
223314564Sdim  return sizeof(GPR64);
224278332Semaste}
225278332Semaste
226314564Sdimconst RegisterInfo *RegisterContextFreeBSD_powerpc64::GetRegisterInfo() const {
227314564Sdim  // assert (m_target_arch.GetCore() == ArchSpec::eCore_powerpc);
228314564Sdim  if (m_target_arch.GetMachine() == llvm::Triple::ppc)
229314564Sdim    return g_register_infos_powerpc64_32;
230314564Sdim  return g_register_infos_powerpc64;
231278332Semaste}
232278332Semaste
233314564Sdimuint32_t RegisterContextFreeBSD_powerpc64::GetRegisterCount() const {
234314564Sdim  return static_cast<uint32_t>(sizeof(g_register_infos_powerpc64) /
235314564Sdim                               sizeof(g_register_infos_powerpc64[0]));
236278332Semaste}
237