]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Plugins/Process/Utility/RegisterInfos_powerpc.h
Update LLDB snapshot to upstream r225923 (git 2b588ecd)
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Plugins / Process / Utility / RegisterInfos_powerpc.h
1 //===-- RegisterInfos_powerpc.h ---------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===---------------------------------------------------------------------===//
9
10 #include <stddef.h>
11
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))
19
20 #ifdef DECLARE_REGISTER_INFOS_POWERPC_STRUCT
21
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 }
29
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 },
102 static RegisterInfo
103 g_register_infos_powerpc64[] =
104 {
105 #define GPR GPR64
106     POWERPC_REGS
107 #undef GPR
108 };
109
110 static RegisterInfo
111 g_register_infos_powerpc32[] =
112 {
113 #define GPR GPR32
114     POWERPC_REGS
115 #undef GPR
116 };
117
118 static RegisterInfo
119 g_register_infos_powerpc64_32[] =
120 {
121 #define GPR GPR64
122 #undef GPR_SIZE
123 #define GPR_SIZE(reg)   (sizeof(uint32_t))
124 #undef GPR_OFFSET
125 #define GPR_OFFSET(regname)                                                 \
126     (offsetof(GPR, regname) + (sizeof(((GPR *)NULL)->regname) - GPR_SIZE(reg)))
127     POWERPC_REGS
128 #undef GPR
129 };
130
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");
137
138 #undef DEFINE_FPR
139 #undef DEFINE_GPR
140
141 #endif // DECLARE_REGISTER_INFOS_POWERPC_STRUCT
142
143 #undef GPR_OFFSET
144