1 | //===-- RegisterInfos_s390x.h -----------------------------------*- C++ -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | #include <cstddef> |
10 | |
11 | #include "llvm/Support/Compiler.h" |
12 | |
13 | |
14 | #ifdef DECLARE_REGISTER_INFOS_S390X_STRUCT |
15 | |
16 | // Computes the offset of the given GPR in the user data area. |
17 | #define GPR_OFFSET(num) (16 + 8 * num) |
18 | // Computes the offset of the given ACR in the user data area. |
19 | #define ACR_OFFSET(num) (16 + 8 * 16 + 4 * num) |
20 | // Computes the offset of the given FPR in the extended data area. |
21 | #define FPR_OFFSET(num) (8 + 8 * num) |
22 | |
23 | // RegisterKind: EHFrame, DWARF, Generic, Process Plugin, LLDB |
24 | |
25 | #define DEFINE_GPR(name, size, offset, alt, generic) \ |
26 | { \ |
27 | #name, alt, size, offset, eEncodingUint, eFormatHex, \ |
28 | {dwarf_##name##_s390x, dwarf_##name##_s390x, generic, \ |
29 | LLDB_INVALID_REGNUM, lldb_##name##_s390x }, \ |
30 | NULL, NULL, NULL, \ |
31 | } |
32 | |
33 | #define DEFINE_GPR_NODWARF(name, size, offset, alt, generic) \ |
34 | { \ |
35 | #name, alt, size, offset, eEncodingUint, eFormatHex, \ |
36 | {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, generic, \ |
37 | LLDB_INVALID_REGNUM, lldb_##name##_s390x }, \ |
38 | NULL, NULL, NULL, \ |
39 | } |
40 | |
41 | #define DEFINE_FPR(name, size, offset) \ |
42 | { \ |
43 | #name, NULL, size, offset, eEncodingUint, eFormatHex, \ |
44 | {dwarf_##name##_s390x, dwarf_##name##_s390x, LLDB_INVALID_REGNUM, \ |
45 | LLDB_INVALID_REGNUM, lldb_##name##_s390x }, \ |
46 | NULL, NULL, NULL, \ |
47 | } |
48 | |
49 | #define DEFINE_FPR_NODWARF(name, size, offset) \ |
50 | { \ |
51 | #name, NULL, size, offset, eEncodingUint, eFormatHex, \ |
52 | {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, \ |
53 | LLDB_INVALID_REGNUM, lldb_##name##_s390x }, \ |
54 | NULL, NULL, NULL, \ |
55 | } |
56 | |
57 | static RegisterInfo g_register_infos_s390x[] = { |
58 | // General purpose registers. |
59 | DEFINE_GPR(r0, 8, GPR_OFFSET(0), nullptr, LLDB_INVALID_REGNUM), |
60 | DEFINE_GPR(r1, 8, GPR_OFFSET(1), nullptr, LLDB_INVALID_REGNUM), |
61 | DEFINE_GPR(r2, 8, GPR_OFFSET(2), nullptr, LLDB_REGNUM_GENERIC_ARG1), |
62 | DEFINE_GPR(r3, 8, GPR_OFFSET(3), nullptr, LLDB_REGNUM_GENERIC_ARG2), |
63 | DEFINE_GPR(r4, 8, GPR_OFFSET(4), nullptr, LLDB_REGNUM_GENERIC_ARG3), |
64 | DEFINE_GPR(r5, 8, GPR_OFFSET(5), nullptr, LLDB_REGNUM_GENERIC_ARG4), |
65 | DEFINE_GPR(r6, 8, GPR_OFFSET(6), nullptr, LLDB_REGNUM_GENERIC_ARG5), |
66 | DEFINE_GPR(r7, 8, GPR_OFFSET(7), nullptr, LLDB_INVALID_REGNUM), |
67 | DEFINE_GPR(r8, 8, GPR_OFFSET(8), nullptr, LLDB_INVALID_REGNUM), |
68 | DEFINE_GPR(r9, 8, GPR_OFFSET(9), nullptr, LLDB_INVALID_REGNUM), |
69 | DEFINE_GPR(r10, 8, GPR_OFFSET(10), nullptr, LLDB_INVALID_REGNUM), |
70 | DEFINE_GPR(r11, 8, GPR_OFFSET(11), nullptr, LLDB_REGNUM_GENERIC_FP), |
71 | DEFINE_GPR(r12, 8, GPR_OFFSET(12), nullptr, LLDB_INVALID_REGNUM), |
72 | DEFINE_GPR(r13, 8, GPR_OFFSET(13), nullptr, LLDB_INVALID_REGNUM), |
73 | DEFINE_GPR(r14, 8, GPR_OFFSET(14), nullptr, LLDB_INVALID_REGNUM), |
74 | DEFINE_GPR(r15, 8, GPR_OFFSET(15), nullptr, LLDB_REGNUM_GENERIC_SP), |
75 | DEFINE_GPR(acr0, 4, ACR_OFFSET(0), nullptr, LLDB_INVALID_REGNUM), |
76 | DEFINE_GPR(acr1, 4, ACR_OFFSET(1), nullptr, LLDB_INVALID_REGNUM), |
77 | DEFINE_GPR(acr2, 4, ACR_OFFSET(2), nullptr, LLDB_INVALID_REGNUM), |
78 | DEFINE_GPR(acr3, 4, ACR_OFFSET(3), nullptr, LLDB_INVALID_REGNUM), |
79 | DEFINE_GPR(acr4, 4, ACR_OFFSET(4), nullptr, LLDB_INVALID_REGNUM), |
80 | DEFINE_GPR(acr5, 4, ACR_OFFSET(5), nullptr, LLDB_INVALID_REGNUM), |
81 | DEFINE_GPR(acr6, 4, ACR_OFFSET(6), nullptr, LLDB_INVALID_REGNUM), |
82 | DEFINE_GPR(acr7, 4, ACR_OFFSET(7), nullptr, LLDB_INVALID_REGNUM), |
83 | DEFINE_GPR(acr8, 4, ACR_OFFSET(8), nullptr, LLDB_INVALID_REGNUM), |
84 | DEFINE_GPR(acr9, 4, ACR_OFFSET(9), nullptr, LLDB_INVALID_REGNUM), |
85 | DEFINE_GPR(acr10, 4, ACR_OFFSET(10), nullptr, LLDB_INVALID_REGNUM), |
86 | DEFINE_GPR(acr11, 4, ACR_OFFSET(11), nullptr, LLDB_INVALID_REGNUM), |
87 | DEFINE_GPR(acr12, 4, ACR_OFFSET(12), nullptr, LLDB_INVALID_REGNUM), |
88 | DEFINE_GPR(acr13, 4, ACR_OFFSET(13), nullptr, LLDB_INVALID_REGNUM), |
89 | DEFINE_GPR(acr14, 4, ACR_OFFSET(14), nullptr, LLDB_INVALID_REGNUM), |
90 | DEFINE_GPR(acr15, 4, ACR_OFFSET(15), nullptr, LLDB_INVALID_REGNUM), |
91 | DEFINE_GPR(pswm, 8, 0, nullptr, LLDB_REGNUM_GENERIC_FLAGS), |
92 | DEFINE_GPR(pswa, 8, 8, nullptr, LLDB_REGNUM_GENERIC_PC), |
93 | |
94 | // Floating point registers. |
95 | DEFINE_FPR(f0, 8, FPR_OFFSET(0)), DEFINE_FPR(f1, 8, FPR_OFFSET(1)), |
96 | DEFINE_FPR(f2, 8, FPR_OFFSET(2)), DEFINE_FPR(f3, 8, FPR_OFFSET(3)), |
97 | DEFINE_FPR(f4, 8, FPR_OFFSET(4)), DEFINE_FPR(f5, 8, FPR_OFFSET(5)), |
98 | DEFINE_FPR(f6, 8, FPR_OFFSET(6)), DEFINE_FPR(f7, 8, FPR_OFFSET(7)), |
99 | DEFINE_FPR(f8, 8, FPR_OFFSET(8)), DEFINE_FPR(f9, 8, FPR_OFFSET(9)), |
100 | DEFINE_FPR(f10, 8, FPR_OFFSET(10)), DEFINE_FPR(f11, 8, FPR_OFFSET(11)), |
101 | DEFINE_FPR(f12, 8, FPR_OFFSET(12)), DEFINE_FPR(f13, 8, FPR_OFFSET(13)), |
102 | DEFINE_FPR(f14, 8, FPR_OFFSET(14)), DEFINE_FPR(f15, 8, FPR_OFFSET(15)), |
103 | DEFINE_FPR_NODWARF(fpc, 4, 0), |
104 | |
105 | // Linux operating-specific info. |
106 | DEFINE_GPR_NODWARF(orig_r2, 8, 16 + 16 * 8 + 16 * 4, nullptr, |
107 | LLDB_INVALID_REGNUM), |
108 | DEFINE_GPR_NODWARF(last_break, 8, 0, nullptr, LLDB_INVALID_REGNUM), |
109 | DEFINE_GPR_NODWARF(system_call, 4, 0, nullptr, LLDB_INVALID_REGNUM), |
110 | }; |
111 | |
112 | static_assert((sizeof(g_register_infos_s390x) / |
113 | sizeof(g_register_infos_s390x[0])) == k_num_registers_s390x, |
114 | "g_register_infos_s390x has wrong number of register infos" ); |
115 | |
116 | #undef GPR_OFFSET |
117 | #undef ACR_OFFSET |
118 | #undef FPR_OFFSET |
119 | #undef DEFINE_GPR |
120 | #undef DEFINE_GPR_NODWARF |
121 | #undef DEFINE_FPR |
122 | #undef DEFINE_FPR_NODWARF |
123 | |
124 | #endif // DECLARE_REGISTER_INFOS_S390X_STRUCT |
125 | |