1336823Sdim//===-- RegisterInfos_ppc64.h -----------------------------------*- C++ -*-===// 2336823Sdim// 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 6336823Sdim// 7336823Sdim//===----------------------------------------------------------------------===// 8336823Sdim 9336823Sdim#ifdef DECLARE_REGISTER_INFOS_PPC64_STRUCT 10336823Sdim 11336823Sdim#include <stddef.h> 12336823Sdim 13336823Sdim// Computes the offset of the given GPR_PPC64 in the user data area. 14336823Sdim#define GPR_PPC64_OFFSET(regname) (offsetof(GPR_PPC64, regname)) 15336823Sdim#define FPR_PPC64_OFFSET(regname) (offsetof(FPR_PPC64, regname) \ 16336823Sdim + sizeof(GPR_PPC64)) 17336823Sdim#define VMX_PPC64_OFFSET(regname) (offsetof(VMX_PPC64, regname) \ 18336823Sdim + sizeof(GPR_PPC64) + sizeof(FPR_PPC64)) 19336823Sdim#define GPR_PPC64_SIZE(regname) (sizeof(((GPR_PPC64 *)NULL)->regname)) 20336823Sdim 21336823Sdim#include "Utility/PPC64_DWARF_Registers.h" 22336823Sdim#include "lldb-ppc64-register-enums.h" 23336823Sdim 24336823Sdim// Note that the size and offset will be updated by platform-specific classes. 25336823Sdim#define DEFINE_GPR_PPC64(reg, alt, lldb_kind) \ 26336823Sdim { \ 27336823Sdim #reg, alt, GPR_PPC64_SIZE(reg), GPR_PPC64_OFFSET(reg), lldb::eEncodingUint,\ 28336823Sdim lldb::eFormatHex, \ 29336823Sdim {ppc64_dwarf::dwarf_##reg##_ppc64, \ 30336823Sdim ppc64_dwarf::dwarf_##reg##_ppc64, \ 31336823Sdim lldb_kind, \ 32336823Sdim LLDB_INVALID_REGNUM, \ 33336823Sdim gpr_##reg##_ppc64 }, \ 34336823Sdim NULL, NULL, NULL, 0 \ 35336823Sdim } 36336823Sdim#define DEFINE_FPR_PPC64(reg, alt, lldb_kind) \ 37336823Sdim { \ 38336823Sdim#reg, alt, 8, FPR_PPC64_OFFSET(reg), lldb::eEncodingIEEE754, \ 39336823Sdim lldb::eFormatFloat, \ 40336823Sdim {ppc64_dwarf::dwarf_##reg##_ppc64, \ 41336823Sdim ppc64_dwarf::dwarf_##reg##_ppc64, lldb_kind, LLDB_INVALID_REGNUM, \ 42336823Sdim fpr_##reg##_ppc64 }, \ 43336823Sdim NULL, NULL, NULL, 0 \ 44336823Sdim } 45336823Sdim#define DEFINE_VMX_PPC64(reg, lldb_kind) \ 46336823Sdim { \ 47336823Sdim#reg, NULL, 16, VMX_PPC64_OFFSET(reg), lldb::eEncodingVector, \ 48336823Sdim lldb::eFormatVectorOfUInt32, \ 49336823Sdim {ppc64_dwarf::dwarf_##reg##_ppc64, \ 50336823Sdim ppc64_dwarf::dwarf_##reg##_ppc64, lldb_kind, LLDB_INVALID_REGNUM, \ 51336823Sdim vmx_##reg##_ppc64 }, \ 52336823Sdim NULL, NULL, NULL, 0 \ 53336823Sdim } 54336823Sdim 55336823Sdim// General purpose registers. 56336823Sdim// EH_Frame, Generic, Process Plugin 57336823Sdim#define PPC64_REGS \ 58336823Sdim DEFINE_GPR_PPC64(r0, NULL, LLDB_INVALID_REGNUM) \ 59336823Sdim , DEFINE_GPR_PPC64(r1, "sp", LLDB_REGNUM_GENERIC_SP), \ 60336823Sdim DEFINE_GPR_PPC64(r2, NULL, LLDB_INVALID_REGNUM), \ 61336823Sdim DEFINE_GPR_PPC64(r3, "arg1", LLDB_REGNUM_GENERIC_ARG1), \ 62336823Sdim DEFINE_GPR_PPC64(r4, "arg2", LLDB_REGNUM_GENERIC_ARG2), \ 63336823Sdim DEFINE_GPR_PPC64(r5, "arg3", LLDB_REGNUM_GENERIC_ARG3), \ 64336823Sdim DEFINE_GPR_PPC64(r6, "arg4", LLDB_REGNUM_GENERIC_ARG4), \ 65336823Sdim DEFINE_GPR_PPC64(r7, "arg5", LLDB_REGNUM_GENERIC_ARG5), \ 66336823Sdim DEFINE_GPR_PPC64(r8, "arg6", LLDB_REGNUM_GENERIC_ARG6), \ 67336823Sdim DEFINE_GPR_PPC64(r9, "arg7", LLDB_REGNUM_GENERIC_ARG7), \ 68336823Sdim DEFINE_GPR_PPC64(r10, "arg8", LLDB_REGNUM_GENERIC_ARG8), \ 69336823Sdim DEFINE_GPR_PPC64(r11, NULL, LLDB_INVALID_REGNUM), \ 70336823Sdim DEFINE_GPR_PPC64(r12, NULL, LLDB_INVALID_REGNUM), \ 71336823Sdim DEFINE_GPR_PPC64(r13, NULL, LLDB_INVALID_REGNUM), \ 72336823Sdim DEFINE_GPR_PPC64(r14, NULL, LLDB_INVALID_REGNUM), \ 73336823Sdim DEFINE_GPR_PPC64(r15, NULL, LLDB_INVALID_REGNUM), \ 74336823Sdim DEFINE_GPR_PPC64(r16, NULL, LLDB_INVALID_REGNUM), \ 75336823Sdim DEFINE_GPR_PPC64(r17, NULL, LLDB_INVALID_REGNUM), \ 76336823Sdim DEFINE_GPR_PPC64(r18, NULL, LLDB_INVALID_REGNUM), \ 77336823Sdim DEFINE_GPR_PPC64(r19, NULL, LLDB_INVALID_REGNUM), \ 78336823Sdim DEFINE_GPR_PPC64(r20, NULL, LLDB_INVALID_REGNUM), \ 79336823Sdim DEFINE_GPR_PPC64(r21, NULL, LLDB_INVALID_REGNUM), \ 80336823Sdim DEFINE_GPR_PPC64(r22, NULL, LLDB_INVALID_REGNUM), \ 81336823Sdim DEFINE_GPR_PPC64(r23, NULL, LLDB_INVALID_REGNUM), \ 82336823Sdim DEFINE_GPR_PPC64(r24, NULL, LLDB_INVALID_REGNUM), \ 83336823Sdim DEFINE_GPR_PPC64(r25, NULL, LLDB_INVALID_REGNUM), \ 84336823Sdim DEFINE_GPR_PPC64(r26, NULL, LLDB_INVALID_REGNUM), \ 85336823Sdim DEFINE_GPR_PPC64(r27, NULL, LLDB_INVALID_REGNUM), \ 86336823Sdim DEFINE_GPR_PPC64(r28, NULL, LLDB_INVALID_REGNUM), \ 87336823Sdim DEFINE_GPR_PPC64(r29, NULL, LLDB_INVALID_REGNUM), \ 88336823Sdim DEFINE_GPR_PPC64(r30, NULL, LLDB_INVALID_REGNUM), \ 89336823Sdim DEFINE_GPR_PPC64(r31, NULL, LLDB_INVALID_REGNUM), \ 90336823Sdim DEFINE_GPR_PPC64(cr, "cr", LLDB_REGNUM_GENERIC_FLAGS), \ 91336823Sdim DEFINE_GPR_PPC64(msr, "msr", LLDB_INVALID_REGNUM), \ 92336823Sdim DEFINE_GPR_PPC64(xer, "xer", LLDB_INVALID_REGNUM), \ 93336823Sdim DEFINE_GPR_PPC64(lr, "lr", LLDB_REGNUM_GENERIC_RA), \ 94336823Sdim DEFINE_GPR_PPC64(ctr, "ctr", LLDB_INVALID_REGNUM), \ 95336823Sdim DEFINE_GPR_PPC64(pc, "pc", LLDB_REGNUM_GENERIC_PC), \ 96336823Sdim DEFINE_FPR_PPC64(f0, NULL, LLDB_INVALID_REGNUM), \ 97336823Sdim DEFINE_FPR_PPC64(f1, NULL, LLDB_INVALID_REGNUM), \ 98336823Sdim DEFINE_FPR_PPC64(f2, NULL, LLDB_INVALID_REGNUM), \ 99336823Sdim DEFINE_FPR_PPC64(f3, NULL, LLDB_INVALID_REGNUM), \ 100336823Sdim DEFINE_FPR_PPC64(f4, NULL, LLDB_INVALID_REGNUM), \ 101336823Sdim DEFINE_FPR_PPC64(f5, NULL, LLDB_INVALID_REGNUM), \ 102336823Sdim DEFINE_FPR_PPC64(f6, NULL, LLDB_INVALID_REGNUM), \ 103336823Sdim DEFINE_FPR_PPC64(f7, NULL, LLDB_INVALID_REGNUM), \ 104336823Sdim DEFINE_FPR_PPC64(f8, NULL, LLDB_INVALID_REGNUM), \ 105336823Sdim DEFINE_FPR_PPC64(f9, NULL, LLDB_INVALID_REGNUM), \ 106336823Sdim DEFINE_FPR_PPC64(f10, NULL, LLDB_INVALID_REGNUM), \ 107336823Sdim DEFINE_FPR_PPC64(f11, NULL, LLDB_INVALID_REGNUM), \ 108336823Sdim DEFINE_FPR_PPC64(f12, NULL, LLDB_INVALID_REGNUM), \ 109336823Sdim DEFINE_FPR_PPC64(f13, NULL, LLDB_INVALID_REGNUM), \ 110336823Sdim DEFINE_FPR_PPC64(f14, NULL, LLDB_INVALID_REGNUM), \ 111336823Sdim DEFINE_FPR_PPC64(f15, NULL, LLDB_INVALID_REGNUM), \ 112336823Sdim DEFINE_FPR_PPC64(f16, NULL, LLDB_INVALID_REGNUM), \ 113336823Sdim DEFINE_FPR_PPC64(f17, NULL, LLDB_INVALID_REGNUM), \ 114336823Sdim DEFINE_FPR_PPC64(f18, NULL, LLDB_INVALID_REGNUM), \ 115336823Sdim DEFINE_FPR_PPC64(f19, NULL, LLDB_INVALID_REGNUM), \ 116336823Sdim DEFINE_FPR_PPC64(f20, NULL, LLDB_INVALID_REGNUM), \ 117336823Sdim DEFINE_FPR_PPC64(f21, NULL, LLDB_INVALID_REGNUM), \ 118336823Sdim DEFINE_FPR_PPC64(f22, NULL, LLDB_INVALID_REGNUM), \ 119336823Sdim DEFINE_FPR_PPC64(f23, NULL, LLDB_INVALID_REGNUM), \ 120336823Sdim DEFINE_FPR_PPC64(f24, NULL, LLDB_INVALID_REGNUM), \ 121336823Sdim DEFINE_FPR_PPC64(f25, NULL, LLDB_INVALID_REGNUM), \ 122336823Sdim DEFINE_FPR_PPC64(f26, NULL, LLDB_INVALID_REGNUM), \ 123336823Sdim DEFINE_FPR_PPC64(f27, NULL, LLDB_INVALID_REGNUM), \ 124336823Sdim DEFINE_FPR_PPC64(f28, NULL, LLDB_INVALID_REGNUM), \ 125336823Sdim DEFINE_FPR_PPC64(f29, NULL, LLDB_INVALID_REGNUM), \ 126336823Sdim DEFINE_FPR_PPC64(f30, NULL, LLDB_INVALID_REGNUM), \ 127336823Sdim DEFINE_FPR_PPC64(f31, NULL, LLDB_INVALID_REGNUM), \ 128336823Sdim {"fpscr", \ 129336823Sdim NULL, \ 130336823Sdim 8, \ 131336823Sdim FPR_PPC64_OFFSET(fpscr), \ 132336823Sdim lldb::eEncodingUint, \ 133336823Sdim lldb::eFormatHex, \ 134336823Sdim {ppc64_dwarf::dwarf_fpscr_ppc64, \ 135336823Sdim ppc64_dwarf::dwarf_fpscr_ppc64, LLDB_INVALID_REGNUM, \ 136336823Sdim LLDB_INVALID_REGNUM, fpr_fpscr_ppc64}, \ 137336823Sdim NULL, \ 138336823Sdim NULL, \ 139336823Sdim NULL, \ 140336823Sdim 0}, \ 141336823Sdim DEFINE_VMX_PPC64(vr0, LLDB_INVALID_REGNUM), \ 142336823Sdim DEFINE_VMX_PPC64(vr1, LLDB_INVALID_REGNUM), \ 143336823Sdim DEFINE_VMX_PPC64(vr2, LLDB_INVALID_REGNUM), \ 144336823Sdim DEFINE_VMX_PPC64(vr3, LLDB_INVALID_REGNUM), \ 145336823Sdim DEFINE_VMX_PPC64(vr4, LLDB_INVALID_REGNUM), \ 146336823Sdim DEFINE_VMX_PPC64(vr5, LLDB_INVALID_REGNUM), \ 147336823Sdim DEFINE_VMX_PPC64(vr6, LLDB_INVALID_REGNUM), \ 148336823Sdim DEFINE_VMX_PPC64(vr7, LLDB_INVALID_REGNUM), \ 149336823Sdim DEFINE_VMX_PPC64(vr8, LLDB_INVALID_REGNUM), \ 150336823Sdim DEFINE_VMX_PPC64(vr9, LLDB_INVALID_REGNUM), \ 151336823Sdim DEFINE_VMX_PPC64(vr10, LLDB_INVALID_REGNUM), \ 152336823Sdim DEFINE_VMX_PPC64(vr11, LLDB_INVALID_REGNUM), \ 153336823Sdim DEFINE_VMX_PPC64(vr12, LLDB_INVALID_REGNUM), \ 154336823Sdim DEFINE_VMX_PPC64(vr13, LLDB_INVALID_REGNUM), \ 155336823Sdim DEFINE_VMX_PPC64(vr14, LLDB_INVALID_REGNUM), \ 156336823Sdim DEFINE_VMX_PPC64(vr15, LLDB_INVALID_REGNUM), \ 157336823Sdim DEFINE_VMX_PPC64(vr16, LLDB_INVALID_REGNUM), \ 158336823Sdim DEFINE_VMX_PPC64(vr17, LLDB_INVALID_REGNUM), \ 159336823Sdim DEFINE_VMX_PPC64(vr18, LLDB_INVALID_REGNUM), \ 160336823Sdim DEFINE_VMX_PPC64(vr19, LLDB_INVALID_REGNUM), \ 161336823Sdim DEFINE_VMX_PPC64(vr20, LLDB_INVALID_REGNUM), \ 162336823Sdim DEFINE_VMX_PPC64(vr21, LLDB_INVALID_REGNUM), \ 163336823Sdim DEFINE_VMX_PPC64(vr22, LLDB_INVALID_REGNUM), \ 164336823Sdim DEFINE_VMX_PPC64(vr23, LLDB_INVALID_REGNUM), \ 165336823Sdim DEFINE_VMX_PPC64(vr24, LLDB_INVALID_REGNUM), \ 166336823Sdim DEFINE_VMX_PPC64(vr25, LLDB_INVALID_REGNUM), \ 167336823Sdim DEFINE_VMX_PPC64(vr26, LLDB_INVALID_REGNUM), \ 168336823Sdim DEFINE_VMX_PPC64(vr27, LLDB_INVALID_REGNUM), \ 169336823Sdim DEFINE_VMX_PPC64(vr28, LLDB_INVALID_REGNUM), \ 170336823Sdim DEFINE_VMX_PPC64(vr29, LLDB_INVALID_REGNUM), \ 171336823Sdim DEFINE_VMX_PPC64(vr30, LLDB_INVALID_REGNUM), \ 172336823Sdim DEFINE_VMX_PPC64(vr31, LLDB_INVALID_REGNUM), \ 173336823Sdim {"vscr", \ 174336823Sdim NULL, \ 175336823Sdim 4, \ 176336823Sdim VMX_PPC64_OFFSET(vscr), \ 177336823Sdim lldb::eEncodingUint, \ 178336823Sdim lldb::eFormatHex, \ 179336823Sdim {ppc64_dwarf::dwarf_vscr_ppc64, ppc64_dwarf::dwarf_vscr_ppc64, \ 180336823Sdim LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, vmx_vscr_ppc64}, \ 181336823Sdim NULL, \ 182336823Sdim NULL, \ 183336823Sdim NULL, \ 184336823Sdim 0}, \ 185336823Sdim {"vrsave", \ 186336823Sdim NULL, \ 187336823Sdim 4, \ 188336823Sdim VMX_PPC64_OFFSET(vrsave), \ 189336823Sdim lldb::eEncodingUint, \ 190336823Sdim lldb::eFormatHex, \ 191336823Sdim {ppc64_dwarf::dwarf_vrsave_ppc64, \ 192336823Sdim ppc64_dwarf::dwarf_vrsave_ppc64, LLDB_INVALID_REGNUM, \ 193336823Sdim LLDB_INVALID_REGNUM, vmx_vrsave_ppc64}, \ 194336823Sdim NULL, \ 195336823Sdim NULL, \ 196336823Sdim NULL, \ 197336823Sdim 0}, /* */ 198336823Sdim 199336823Sdimtypedef struct _GPR_PPC64 { 200336823Sdim uint64_t r0; 201336823Sdim uint64_t r1; 202336823Sdim uint64_t r2; 203336823Sdim uint64_t r3; 204336823Sdim uint64_t r4; 205336823Sdim uint64_t r5; 206336823Sdim uint64_t r6; 207336823Sdim uint64_t r7; 208336823Sdim uint64_t r8; 209336823Sdim uint64_t r9; 210336823Sdim uint64_t r10; 211336823Sdim uint64_t r11; 212336823Sdim uint64_t r12; 213336823Sdim uint64_t r13; 214336823Sdim uint64_t r14; 215336823Sdim uint64_t r15; 216336823Sdim uint64_t r16; 217336823Sdim uint64_t r17; 218336823Sdim uint64_t r18; 219336823Sdim uint64_t r19; 220336823Sdim uint64_t r20; 221336823Sdim uint64_t r21; 222336823Sdim uint64_t r22; 223336823Sdim uint64_t r23; 224336823Sdim uint64_t r24; 225336823Sdim uint64_t r25; 226336823Sdim uint64_t r26; 227336823Sdim uint64_t r27; 228336823Sdim uint64_t r28; 229336823Sdim uint64_t r29; 230336823Sdim uint64_t r30; 231336823Sdim uint64_t r31; 232336823Sdim uint64_t cr; 233336823Sdim uint64_t msr; 234336823Sdim uint64_t xer; 235336823Sdim uint64_t lr; 236336823Sdim uint64_t ctr; 237336823Sdim uint64_t pc; 238336823Sdim uint64_t pad[3]; 239336823Sdim} GPR_PPC64; 240336823Sdim 241336823Sdimtypedef struct _FPR_PPC64 { 242336823Sdim uint64_t f0; 243336823Sdim uint64_t f1; 244336823Sdim uint64_t f2; 245336823Sdim uint64_t f3; 246336823Sdim uint64_t f4; 247336823Sdim uint64_t f5; 248336823Sdim uint64_t f6; 249336823Sdim uint64_t f7; 250336823Sdim uint64_t f8; 251336823Sdim uint64_t f9; 252336823Sdim uint64_t f10; 253336823Sdim uint64_t f11; 254336823Sdim uint64_t f12; 255336823Sdim uint64_t f13; 256336823Sdim uint64_t f14; 257336823Sdim uint64_t f15; 258336823Sdim uint64_t f16; 259336823Sdim uint64_t f17; 260336823Sdim uint64_t f18; 261336823Sdim uint64_t f19; 262336823Sdim uint64_t f20; 263336823Sdim uint64_t f21; 264336823Sdim uint64_t f22; 265336823Sdim uint64_t f23; 266336823Sdim uint64_t f24; 267336823Sdim uint64_t f25; 268336823Sdim uint64_t f26; 269336823Sdim uint64_t f27; 270336823Sdim uint64_t f28; 271336823Sdim uint64_t f29; 272336823Sdim uint64_t f30; 273336823Sdim uint64_t f31; 274336823Sdim uint64_t fpscr; 275336823Sdim} FPR_PPC64; 276336823Sdim 277336823Sdimtypedef struct _VMX_PPC64 { 278336823Sdim uint32_t vr0[4]; 279336823Sdim uint32_t vr1[4]; 280336823Sdim uint32_t vr2[4]; 281336823Sdim uint32_t vr3[4]; 282336823Sdim uint32_t vr4[4]; 283336823Sdim uint32_t vr5[4]; 284336823Sdim uint32_t vr6[4]; 285336823Sdim uint32_t vr7[4]; 286336823Sdim uint32_t vr8[4]; 287336823Sdim uint32_t vr9[4]; 288336823Sdim uint32_t vr10[4]; 289336823Sdim uint32_t vr11[4]; 290336823Sdim uint32_t vr12[4]; 291336823Sdim uint32_t vr13[4]; 292336823Sdim uint32_t vr14[4]; 293336823Sdim uint32_t vr15[4]; 294336823Sdim uint32_t vr16[4]; 295336823Sdim uint32_t vr17[4]; 296336823Sdim uint32_t vr18[4]; 297336823Sdim uint32_t vr19[4]; 298336823Sdim uint32_t vr20[4]; 299336823Sdim uint32_t vr21[4]; 300336823Sdim uint32_t vr22[4]; 301336823Sdim uint32_t vr23[4]; 302336823Sdim uint32_t vr24[4]; 303336823Sdim uint32_t vr25[4]; 304336823Sdim uint32_t vr26[4]; 305336823Sdim uint32_t vr27[4]; 306336823Sdim uint32_t vr28[4]; 307336823Sdim uint32_t vr29[4]; 308336823Sdim uint32_t vr30[4]; 309336823Sdim uint32_t vr31[4]; 310336823Sdim uint32_t pad[2]; 311336823Sdim uint32_t vscr[2]; 312336823Sdim uint32_t vrsave; 313336823Sdim} VMX_PPC64; 314336823Sdim 315336823Sdim 316336823Sdimstatic lldb_private::RegisterInfo g_register_infos_ppc64[] = { 317336823Sdim PPC64_REGS 318336823Sdim}; 319336823Sdim 320336823Sdimstatic_assert((sizeof(g_register_infos_ppc64) / 321336823Sdim sizeof(g_register_infos_ppc64[0])) == 322336823Sdim k_num_registers_ppc64, 323336823Sdim "g_register_infos_powerpc64 has wrong number of register infos"); 324336823Sdim 325336823Sdim#undef DEFINE_FPR_PPC64 326336823Sdim#undef DEFINE_GPR_PPC64 327336823Sdim#undef DEFINE_VMX_PPC64 328336823Sdim 329336823Sdim#endif // DECLARE_REGISTER_INFOS_PPC64_STRUCT 330