1 //===-- RegisterInfos_powerpc.h ---------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===---------------------------------------------------------------------===//
12 // Computes the offset of the given GPR in the user data area.
13 #define GPR_OFFSET(regname) \
14 (offsetof(GPR, regname))
15 #define FPR_OFFSET(regname) \
16 (offsetof(FPR, regname))
17 #define GPR_SIZE(regname) \
18 (sizeof(((GPR*)NULL)->regname))
20 #ifdef DECLARE_REGISTER_INFOS_POWERPC_STRUCT
22 // Note that the size and offset will be updated by platform-specific classes.
23 #define DEFINE_GPR(reg, alt, lldb_kind) \
24 { #reg, alt, GPR_SIZE(reg), GPR_OFFSET(reg), eEncodingUint, \
25 eFormatHex, { gcc_dwarf_##reg##_powerpc, gcc_dwarf_##reg##_powerpc, lldb_kind, gdb_##reg##_powerpc, gpr_##reg##_powerpc }, NULL, NULL }
26 #define DEFINE_FPR(reg, lldb_kind) \
27 { #reg, NULL, 8, FPR_OFFSET(reg), eEncodingIEEE754, \
28 eFormatFloat, { gcc_dwarf_##reg##_powerpc, gcc_dwarf_##reg##_powerpc, lldb_kind, gdb_##reg##_powerpc, fpr_##reg##_powerpc }, NULL, NULL }
30 // General purpose registers. GCC, DWARF, Generic, GDB
31 #define POWERPC_REGS \
32 DEFINE_GPR(r0, NULL, LLDB_INVALID_REGNUM), \
33 DEFINE_GPR(r1, "sp", LLDB_REGNUM_GENERIC_SP), \
34 DEFINE_GPR(r2, NULL, LLDB_INVALID_REGNUM), \
35 DEFINE_GPR(r3, "arg1",LLDB_REGNUM_GENERIC_ARG1), \
36 DEFINE_GPR(r4, "arg2",LLDB_REGNUM_GENERIC_ARG2), \
37 DEFINE_GPR(r5, "arg3",LLDB_REGNUM_GENERIC_ARG3), \
38 DEFINE_GPR(r6, "arg4",LLDB_REGNUM_GENERIC_ARG4), \
39 DEFINE_GPR(r7, "arg5",LLDB_REGNUM_GENERIC_ARG5), \
40 DEFINE_GPR(r8, "arg6",LLDB_REGNUM_GENERIC_ARG6), \
41 DEFINE_GPR(r9, "arg7",LLDB_REGNUM_GENERIC_ARG7), \
42 DEFINE_GPR(r10, "arg8",LLDB_REGNUM_GENERIC_ARG8), \
43 DEFINE_GPR(r11, NULL, LLDB_INVALID_REGNUM), \
44 DEFINE_GPR(r12, NULL, LLDB_INVALID_REGNUM), \
45 DEFINE_GPR(r13, NULL, LLDB_INVALID_REGNUM), \
46 DEFINE_GPR(r14, NULL, LLDB_INVALID_REGNUM), \
47 DEFINE_GPR(r15, NULL, LLDB_INVALID_REGNUM), \
48 DEFINE_GPR(r16, NULL, LLDB_INVALID_REGNUM), \
49 DEFINE_GPR(r17, NULL, LLDB_INVALID_REGNUM), \
50 DEFINE_GPR(r18, NULL, LLDB_INVALID_REGNUM), \
51 DEFINE_GPR(r19, NULL, LLDB_INVALID_REGNUM), \
52 DEFINE_GPR(r20, NULL, LLDB_INVALID_REGNUM), \
53 DEFINE_GPR(r21, NULL, LLDB_INVALID_REGNUM), \
54 DEFINE_GPR(r22, NULL, LLDB_INVALID_REGNUM), \
55 DEFINE_GPR(r23, NULL, LLDB_INVALID_REGNUM), \
56 DEFINE_GPR(r24, NULL, LLDB_INVALID_REGNUM), \
57 DEFINE_GPR(r25, NULL, LLDB_INVALID_REGNUM), \
58 DEFINE_GPR(r26, NULL, LLDB_INVALID_REGNUM), \
59 DEFINE_GPR(r27, NULL, LLDB_INVALID_REGNUM), \
60 DEFINE_GPR(r28, NULL, LLDB_INVALID_REGNUM), \
61 DEFINE_GPR(r29, NULL, LLDB_INVALID_REGNUM), \
62 DEFINE_GPR(r30, NULL, LLDB_INVALID_REGNUM), \
63 DEFINE_GPR(r31, NULL, LLDB_INVALID_REGNUM), \
64 DEFINE_GPR(lr, "lr", LLDB_REGNUM_GENERIC_RA), \
65 DEFINE_GPR(cr, "cr", LLDB_REGNUM_GENERIC_FLAGS), \
66 DEFINE_GPR(xer, "xer", LLDB_INVALID_REGNUM), \
67 DEFINE_GPR(ctr, "ctr", LLDB_INVALID_REGNUM), \
68 DEFINE_GPR(pc, "pc", LLDB_REGNUM_GENERIC_PC), \
69 DEFINE_FPR(f0, LLDB_INVALID_REGNUM), \
70 DEFINE_FPR(f1, LLDB_INVALID_REGNUM), \
71 DEFINE_FPR(f2, LLDB_INVALID_REGNUM), \
72 DEFINE_FPR(f3, LLDB_INVALID_REGNUM), \
73 DEFINE_FPR(f4, LLDB_INVALID_REGNUM), \
74 DEFINE_FPR(f5, LLDB_INVALID_REGNUM), \
75 DEFINE_FPR(f6, LLDB_INVALID_REGNUM), \
76 DEFINE_FPR(f7, LLDB_INVALID_REGNUM), \
77 DEFINE_FPR(f8, LLDB_INVALID_REGNUM), \
78 DEFINE_FPR(f9, LLDB_INVALID_REGNUM), \
79 DEFINE_FPR(f10, LLDB_INVALID_REGNUM), \
80 DEFINE_FPR(f11, LLDB_INVALID_REGNUM), \
81 DEFINE_FPR(f12, LLDB_INVALID_REGNUM), \
82 DEFINE_FPR(f13, LLDB_INVALID_REGNUM), \
83 DEFINE_FPR(f14, LLDB_INVALID_REGNUM), \
84 DEFINE_FPR(f15, LLDB_INVALID_REGNUM), \
85 DEFINE_FPR(f16, LLDB_INVALID_REGNUM), \
86 DEFINE_FPR(f17, LLDB_INVALID_REGNUM), \
87 DEFINE_FPR(f18, LLDB_INVALID_REGNUM), \
88 DEFINE_FPR(f19, LLDB_INVALID_REGNUM), \
89 DEFINE_FPR(f20, LLDB_INVALID_REGNUM), \
90 DEFINE_FPR(f21, LLDB_INVALID_REGNUM), \
91 DEFINE_FPR(f22, LLDB_INVALID_REGNUM), \
92 DEFINE_FPR(f23, LLDB_INVALID_REGNUM), \
93 DEFINE_FPR(f24, LLDB_INVALID_REGNUM), \
94 DEFINE_FPR(f25, LLDB_INVALID_REGNUM), \
95 DEFINE_FPR(f26, LLDB_INVALID_REGNUM), \
96 DEFINE_FPR(f27, LLDB_INVALID_REGNUM), \
97 DEFINE_FPR(f28, LLDB_INVALID_REGNUM), \
98 DEFINE_FPR(f29, LLDB_INVALID_REGNUM), \
99 DEFINE_FPR(f30, LLDB_INVALID_REGNUM), \
100 DEFINE_FPR(f31, LLDB_INVALID_REGNUM), \
101 { "fpscr", NULL, 8, FPR_OFFSET(fpscr), eEncodingUint, eFormatHex, { gcc_dwarf_fpscr_powerpc, gcc_dwarf_fpscr_powerpc, LLDB_INVALID_REGNUM, gdb_fpscr_powerpc, fpr_fpscr_powerpc }, NULL, NULL },
103 g_register_infos_powerpc64[] =
111 g_register_infos_powerpc32[] =
119 g_register_infos_powerpc64_32[] =
123 #define GPR_SIZE(reg) (sizeof(uint32_t))
125 #define GPR_OFFSET(regname) \
126 (offsetof(GPR, regname) + (sizeof(((GPR *)NULL)->regname) - GPR_SIZE(reg)))
131 static_assert((sizeof(g_register_infos_powerpc32) / sizeof(g_register_infos_powerpc32[0])) == k_num_registers_powerpc,
132 "g_register_infos_powerpc32 has wrong number of register infos");
133 static_assert((sizeof(g_register_infos_powerpc64) / sizeof(g_register_infos_powerpc64[0])) == k_num_registers_powerpc,
134 "g_register_infos_powerpc64 has wrong number of register infos");
135 static_assert(sizeof(g_register_infos_powerpc64_32) == sizeof(g_register_infos_powerpc64),
136 "g_register_infos_powerpc64_32 doesn't match size of g_register_infos_powerpc64");
141 #endif // DECLARE_REGISTER_INFOS_POWERPC_STRUCT