| //===-- RegisterInfos_ppc64.h -----------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifdef DECLARE_REGISTER_INFOS_PPC64_STRUCT |
| |
| // C Includes |
| #include <stddef.h> |
| |
| // Computes the offset of the given GPR_PPC64 in the user data area. |
| #define GPR_PPC64_OFFSET(regname) (offsetof(GPR_PPC64, regname)) |
| #define FPR_PPC64_OFFSET(regname) (offsetof(FPR_PPC64, regname) \ |
| + sizeof(GPR_PPC64)) |
| #define VMX_PPC64_OFFSET(regname) (offsetof(VMX_PPC64, regname) \ |
| + sizeof(GPR_PPC64) + sizeof(FPR_PPC64)) |
| #define GPR_PPC64_SIZE(regname) (sizeof(((GPR_PPC64 *)NULL)->regname)) |
| |
| #include "Utility/PPC64_DWARF_Registers.h" |
| #include "lldb-ppc64-register-enums.h" |
| |
| // Note that the size and offset will be updated by platform-specific classes. |
| #define DEFINE_GPR_PPC64(reg, alt, lldb_kind) \ |
| { \ |
| #reg, alt, GPR_PPC64_SIZE(reg), GPR_PPC64_OFFSET(reg), lldb::eEncodingUint,\ |
| lldb::eFormatHex, \ |
| {ppc64_dwarf::dwarf_##reg##_ppc64, \ |
| ppc64_dwarf::dwarf_##reg##_ppc64, \ |
| lldb_kind, \ |
| LLDB_INVALID_REGNUM, \ |
| gpr_##reg##_ppc64 }, \ |
| NULL, NULL, NULL, 0 \ |
| } |
| #define DEFINE_FPR_PPC64(reg, alt, lldb_kind) \ |
| { \ |
| #reg, alt, 8, FPR_PPC64_OFFSET(reg), lldb::eEncodingIEEE754, \ |
| lldb::eFormatFloat, \ |
| {ppc64_dwarf::dwarf_##reg##_ppc64, \ |
| ppc64_dwarf::dwarf_##reg##_ppc64, lldb_kind, LLDB_INVALID_REGNUM, \ |
| fpr_##reg##_ppc64 }, \ |
| NULL, NULL, NULL, 0 \ |
| } |
| #define DEFINE_VMX_PPC64(reg, lldb_kind) \ |
| { \ |
| #reg, NULL, 16, VMX_PPC64_OFFSET(reg), lldb::eEncodingVector, \ |
| lldb::eFormatVectorOfUInt32, \ |
| {ppc64_dwarf::dwarf_##reg##_ppc64, \ |
| ppc64_dwarf::dwarf_##reg##_ppc64, lldb_kind, LLDB_INVALID_REGNUM, \ |
| vmx_##reg##_ppc64 }, \ |
| NULL, NULL, NULL, 0 \ |
| } |
| |
| // General purpose registers. |
| // EH_Frame, Generic, Process Plugin |
| #define PPC64_REGS \ |
| DEFINE_GPR_PPC64(r0, NULL, LLDB_INVALID_REGNUM) \ |
| , DEFINE_GPR_PPC64(r1, "sp", LLDB_REGNUM_GENERIC_SP), \ |
| DEFINE_GPR_PPC64(r2, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r3, "arg1", LLDB_REGNUM_GENERIC_ARG1), \ |
| DEFINE_GPR_PPC64(r4, "arg2", LLDB_REGNUM_GENERIC_ARG2), \ |
| DEFINE_GPR_PPC64(r5, "arg3", LLDB_REGNUM_GENERIC_ARG3), \ |
| DEFINE_GPR_PPC64(r6, "arg4", LLDB_REGNUM_GENERIC_ARG4), \ |
| DEFINE_GPR_PPC64(r7, "arg5", LLDB_REGNUM_GENERIC_ARG5), \ |
| DEFINE_GPR_PPC64(r8, "arg6", LLDB_REGNUM_GENERIC_ARG6), \ |
| DEFINE_GPR_PPC64(r9, "arg7", LLDB_REGNUM_GENERIC_ARG7), \ |
| DEFINE_GPR_PPC64(r10, "arg8", LLDB_REGNUM_GENERIC_ARG8), \ |
| DEFINE_GPR_PPC64(r11, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r12, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r13, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r14, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r15, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r16, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r17, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r18, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r19, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r20, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r21, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r22, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r23, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r24, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r25, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r26, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r27, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r28, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r29, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r30, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(r31, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(cr, "cr", LLDB_REGNUM_GENERIC_FLAGS), \ |
| DEFINE_GPR_PPC64(msr, "msr", LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(xer, "xer", LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(lr, "lr", LLDB_REGNUM_GENERIC_RA), \ |
| DEFINE_GPR_PPC64(ctr, "ctr", LLDB_INVALID_REGNUM), \ |
| DEFINE_GPR_PPC64(pc, "pc", LLDB_REGNUM_GENERIC_PC), \ |
| DEFINE_FPR_PPC64(f0, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f1, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f2, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f3, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f4, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f5, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f6, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f7, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f8, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f9, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f10, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f11, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f12, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f13, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f14, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f15, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f16, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f17, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f18, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f19, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f20, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f21, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f22, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f23, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f24, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f25, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f26, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f27, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f28, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f29, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f30, NULL, LLDB_INVALID_REGNUM), \ |
| DEFINE_FPR_PPC64(f31, NULL, LLDB_INVALID_REGNUM), \ |
| {"fpscr", \ |
| NULL, \ |
| 8, \ |
| FPR_PPC64_OFFSET(fpscr), \ |
| lldb::eEncodingUint, \ |
| lldb::eFormatHex, \ |
| {ppc64_dwarf::dwarf_fpscr_ppc64, \ |
| ppc64_dwarf::dwarf_fpscr_ppc64, LLDB_INVALID_REGNUM, \ |
| LLDB_INVALID_REGNUM, fpr_fpscr_ppc64}, \ |
| NULL, \ |
| NULL, \ |
| NULL, \ |
| 0}, \ |
| DEFINE_VMX_PPC64(vr0, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr1, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr2, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr3, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr4, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr5, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr6, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr7, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr8, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr9, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr10, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr11, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr12, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr13, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr14, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr15, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr16, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr17, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr18, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr19, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr20, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr21, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr22, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr23, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr24, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr25, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr26, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr27, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr28, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr29, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr30, LLDB_INVALID_REGNUM), \ |
| DEFINE_VMX_PPC64(vr31, LLDB_INVALID_REGNUM), \ |
| {"vscr", \ |
| NULL, \ |
| 4, \ |
| VMX_PPC64_OFFSET(vscr), \ |
| lldb::eEncodingUint, \ |
| lldb::eFormatHex, \ |
| {ppc64_dwarf::dwarf_vscr_ppc64, ppc64_dwarf::dwarf_vscr_ppc64, \ |
| LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, vmx_vscr_ppc64}, \ |
| NULL, \ |
| NULL, \ |
| NULL, \ |
| 0}, \ |
| {"vrsave", \ |
| NULL, \ |
| 4, \ |
| VMX_PPC64_OFFSET(vrsave), \ |
| lldb::eEncodingUint, \ |
| lldb::eFormatHex, \ |
| {ppc64_dwarf::dwarf_vrsave_ppc64, \ |
| ppc64_dwarf::dwarf_vrsave_ppc64, LLDB_INVALID_REGNUM, \ |
| LLDB_INVALID_REGNUM, vmx_vrsave_ppc64}, \ |
| NULL, \ |
| NULL, \ |
| NULL, \ |
| 0}, /* */ |
| |
| typedef struct _GPR_PPC64 { |
| uint64_t r0; |
| uint64_t r1; |
| uint64_t r2; |
| uint64_t r3; |
| uint64_t r4; |
| uint64_t r5; |
| uint64_t r6; |
| uint64_t r7; |
| uint64_t r8; |
| uint64_t r9; |
| uint64_t r10; |
| uint64_t r11; |
| uint64_t r12; |
| uint64_t r13; |
| uint64_t r14; |
| uint64_t r15; |
| uint64_t r16; |
| uint64_t r17; |
| uint64_t r18; |
| uint64_t r19; |
| uint64_t r20; |
| uint64_t r21; |
| uint64_t r22; |
| uint64_t r23; |
| uint64_t r24; |
| uint64_t r25; |
| uint64_t r26; |
| uint64_t r27; |
| uint64_t r28; |
| uint64_t r29; |
| uint64_t r30; |
| uint64_t r31; |
| uint64_t cr; |
| uint64_t msr; |
| uint64_t xer; |
| uint64_t lr; |
| uint64_t ctr; |
| uint64_t pc; |
| uint64_t pad[3]; |
| } GPR_PPC64; |
| |
| typedef struct _FPR_PPC64 { |
| uint64_t f0; |
| uint64_t f1; |
| uint64_t f2; |
| uint64_t f3; |
| uint64_t f4; |
| uint64_t f5; |
| uint64_t f6; |
| uint64_t f7; |
| uint64_t f8; |
| uint64_t f9; |
| uint64_t f10; |
| uint64_t f11; |
| uint64_t f12; |
| uint64_t f13; |
| uint64_t f14; |
| uint64_t f15; |
| uint64_t f16; |
| uint64_t f17; |
| uint64_t f18; |
| uint64_t f19; |
| uint64_t f20; |
| uint64_t f21; |
| uint64_t f22; |
| uint64_t f23; |
| uint64_t f24; |
| uint64_t f25; |
| uint64_t f26; |
| uint64_t f27; |
| uint64_t f28; |
| uint64_t f29; |
| uint64_t f30; |
| uint64_t f31; |
| uint64_t fpscr; |
| } FPR_PPC64; |
| |
| typedef struct _VMX_PPC64 { |
| uint32_t vr0[4]; |
| uint32_t vr1[4]; |
| uint32_t vr2[4]; |
| uint32_t vr3[4]; |
| uint32_t vr4[4]; |
| uint32_t vr5[4]; |
| uint32_t vr6[4]; |
| uint32_t vr7[4]; |
| uint32_t vr8[4]; |
| uint32_t vr9[4]; |
| uint32_t vr10[4]; |
| uint32_t vr11[4]; |
| uint32_t vr12[4]; |
| uint32_t vr13[4]; |
| uint32_t vr14[4]; |
| uint32_t vr15[4]; |
| uint32_t vr16[4]; |
| uint32_t vr17[4]; |
| uint32_t vr18[4]; |
| uint32_t vr19[4]; |
| uint32_t vr20[4]; |
| uint32_t vr21[4]; |
| uint32_t vr22[4]; |
| uint32_t vr23[4]; |
| uint32_t vr24[4]; |
| uint32_t vr25[4]; |
| uint32_t vr26[4]; |
| uint32_t vr27[4]; |
| uint32_t vr28[4]; |
| uint32_t vr29[4]; |
| uint32_t vr30[4]; |
| uint32_t vr31[4]; |
| uint32_t pad[2]; |
| uint32_t vscr[2]; |
| uint32_t vrsave; |
| } VMX_PPC64; |
| |
| |
| static lldb_private::RegisterInfo g_register_infos_ppc64[] = { |
| PPC64_REGS |
| }; |
| |
| static_assert((sizeof(g_register_infos_ppc64) / |
| sizeof(g_register_infos_ppc64[0])) == |
| k_num_registers_ppc64, |
| "g_register_infos_powerpc64 has wrong number of register infos"); |
| |
| #undef DEFINE_FPR_PPC64 |
| #undef DEFINE_GPR_PPC64 |
| #undef DEFINE_VMX_PPC64 |
| |
| #endif // DECLARE_REGISTER_INFOS_PPC64_STRUCT |