/src/capstonev5/arch/SystemZ/SystemZMCTargetDesc.c
Line | Count | Source (jump to first uncovered line) |
1 | | //===-- SystemZMCTargetDesc.cpp - SystemZ target descriptions -------------===// |
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 | | /* Capstone Disassembly Engine */ |
11 | | /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */ |
12 | | |
13 | | #ifdef CAPSTONE_HAS_SYSZ |
14 | | |
15 | | #include <capstone/platform.h> |
16 | | #include "SystemZMCTargetDesc.h" |
17 | | |
18 | | #define GET_REGINFO_ENUM |
19 | | #include "SystemZGenRegisterInfo.inc" |
20 | | |
21 | | const unsigned SystemZMC_GR32Regs[16] = { |
22 | | SystemZ_R0L, SystemZ_R1L, SystemZ_R2L, SystemZ_R3L, |
23 | | SystemZ_R4L, SystemZ_R5L, SystemZ_R6L, SystemZ_R7L, |
24 | | SystemZ_R8L, SystemZ_R9L, SystemZ_R10L, SystemZ_R11L, |
25 | | SystemZ_R12L, SystemZ_R13L, SystemZ_R14L, SystemZ_R15L |
26 | | }; |
27 | | |
28 | | const unsigned SystemZMC_GRH32Regs[16] = { |
29 | | SystemZ_R0H, SystemZ_R1H, SystemZ_R2H, SystemZ_R3H, |
30 | | SystemZ_R4H, SystemZ_R5H, SystemZ_R6H, SystemZ_R7H, |
31 | | SystemZ_R8H, SystemZ_R9H, SystemZ_R10H, SystemZ_R11H, |
32 | | SystemZ_R12H, SystemZ_R13H, SystemZ_R14H, SystemZ_R15H |
33 | | }; |
34 | | |
35 | | const unsigned SystemZMC_GR64Regs[16] = { |
36 | | SystemZ_R0D, SystemZ_R1D, SystemZ_R2D, SystemZ_R3D, |
37 | | SystemZ_R4D, SystemZ_R5D, SystemZ_R6D, SystemZ_R7D, |
38 | | SystemZ_R8D, SystemZ_R9D, SystemZ_R10D, SystemZ_R11D, |
39 | | SystemZ_R12D, SystemZ_R13D, SystemZ_R14D, SystemZ_R15D |
40 | | }; |
41 | | |
42 | | const unsigned SystemZMC_GR128Regs[16] = { |
43 | | SystemZ_R0Q, 0, SystemZ_R2Q, 0, |
44 | | SystemZ_R4Q, 0, SystemZ_R6Q, 0, |
45 | | SystemZ_R8Q, 0, SystemZ_R10Q, 0, |
46 | | SystemZ_R12Q, 0, SystemZ_R14Q, 0 |
47 | | }; |
48 | | |
49 | | const unsigned SystemZMC_FP32Regs[16] = { |
50 | | SystemZ_F0S, SystemZ_F1S, SystemZ_F2S, SystemZ_F3S, |
51 | | SystemZ_F4S, SystemZ_F5S, SystemZ_F6S, SystemZ_F7S, |
52 | | SystemZ_F8S, SystemZ_F9S, SystemZ_F10S, SystemZ_F11S, |
53 | | SystemZ_F12S, SystemZ_F13S, SystemZ_F14S, SystemZ_F15S |
54 | | }; |
55 | | |
56 | | const unsigned SystemZMC_FP64Regs[16] = { |
57 | | SystemZ_F0D, SystemZ_F1D, SystemZ_F2D, SystemZ_F3D, |
58 | | SystemZ_F4D, SystemZ_F5D, SystemZ_F6D, SystemZ_F7D, |
59 | | SystemZ_F8D, SystemZ_F9D, SystemZ_F10D, SystemZ_F11D, |
60 | | SystemZ_F12D, SystemZ_F13D, SystemZ_F14D, SystemZ_F15D |
61 | | }; |
62 | | |
63 | | const unsigned SystemZMC_FP128Regs[16] = { |
64 | | SystemZ_F0Q, SystemZ_F1Q, 0, 0, |
65 | | SystemZ_F4Q, SystemZ_F5Q, 0, 0, |
66 | | SystemZ_F8Q, SystemZ_F9Q, 0, 0, |
67 | | SystemZ_F12Q, SystemZ_F13Q, 0, 0 |
68 | | }; |
69 | | |
70 | | const unsigned SystemZMC_VR32Regs[32] = { |
71 | | SystemZ_F0S, SystemZ_F1S, SystemZ_F2S, SystemZ_F3S, |
72 | | SystemZ_F4S, SystemZ_F5S, SystemZ_F6S, SystemZ_F7S, |
73 | | SystemZ_F8S, SystemZ_F9S, SystemZ_F10S, SystemZ_F11S, |
74 | | SystemZ_F12S, SystemZ_F13S, SystemZ_F14S, SystemZ_F15S, |
75 | | SystemZ_F16S, SystemZ_F17S, SystemZ_F18S, SystemZ_F19S, |
76 | | SystemZ_F20S, SystemZ_F21S, SystemZ_F22S, SystemZ_F23S, |
77 | | SystemZ_F24S, SystemZ_F25S, SystemZ_F26S, SystemZ_F27S, |
78 | | SystemZ_F28S, SystemZ_F29S, SystemZ_F30S, SystemZ_F31S |
79 | | }; |
80 | | |
81 | | const unsigned SystemZMC_VR64Regs[32] = { |
82 | | SystemZ_F0D, SystemZ_F1D, SystemZ_F2D, SystemZ_F3D, |
83 | | SystemZ_F4D, SystemZ_F5D, SystemZ_F6D, SystemZ_F7D, |
84 | | SystemZ_F8D, SystemZ_F9D, SystemZ_F10D, SystemZ_F11D, |
85 | | SystemZ_F12D, SystemZ_F13D, SystemZ_F14D, SystemZ_F15D, |
86 | | SystemZ_F16D, SystemZ_F17D, SystemZ_F18D, SystemZ_F19D, |
87 | | SystemZ_F20D, SystemZ_F21D, SystemZ_F22D, SystemZ_F23D, |
88 | | SystemZ_F24D, SystemZ_F25D, SystemZ_F26D, SystemZ_F27D, |
89 | | SystemZ_F28D, SystemZ_F29D, SystemZ_F30D, SystemZ_F31D |
90 | | }; |
91 | | |
92 | | const unsigned SystemZMC_VR128Regs[32] = { |
93 | | SystemZ_V0, SystemZ_V1, SystemZ_V2, SystemZ_V3, |
94 | | SystemZ_V4, SystemZ_V5, SystemZ_V6, SystemZ_V7, |
95 | | SystemZ_V8, SystemZ_V9, SystemZ_V10, SystemZ_V11, |
96 | | SystemZ_V12, SystemZ_V13, SystemZ_V14, SystemZ_V15, |
97 | | SystemZ_V16, SystemZ_V17, SystemZ_V18, SystemZ_V19, |
98 | | SystemZ_V20, SystemZ_V21, SystemZ_V22, SystemZ_V23, |
99 | | SystemZ_V24, SystemZ_V25, SystemZ_V26, SystemZ_V27, |
100 | | SystemZ_V28, SystemZ_V29, SystemZ_V30, SystemZ_V31 |
101 | | }; |
102 | | |
103 | | const unsigned SystemZMC_AR32Regs[16] = { |
104 | | SystemZ_A0, SystemZ_A1, SystemZ_A2, SystemZ_A3, |
105 | | SystemZ_A4, SystemZ_A5, SystemZ_A6, SystemZ_A7, |
106 | | SystemZ_A8, SystemZ_A9, SystemZ_A10, SystemZ_A11, |
107 | | SystemZ_A12, SystemZ_A13, SystemZ_A14, SystemZ_A15 |
108 | | }; |
109 | | |
110 | | const unsigned SystemZMC_CR64Regs[16] = { |
111 | | SystemZ_C0, SystemZ_C1, SystemZ_C2, SystemZ_C3, |
112 | | SystemZ_C4, SystemZ_C5, SystemZ_C6, SystemZ_C7, |
113 | | SystemZ_C8, SystemZ_C9, SystemZ_C10, SystemZ_C11, |
114 | | SystemZ_C12, SystemZ_C13, SystemZ_C14, SystemZ_C15 |
115 | | }; |
116 | | |
117 | | /* All register classes that have 0-15. */ |
118 | | #define DEF_REG16(N) \ |
119 | | [SystemZ_R ## N ## L] = N, \ |
120 | | [SystemZ_R ## N ## H] = N, \ |
121 | | [SystemZ_R ## N ## D] = N, \ |
122 | | [SystemZ_F ## N ## S] = N, \ |
123 | | [SystemZ_F ## N ## D] = N, \ |
124 | | [SystemZ_V ## N] = N, \ |
125 | | [SystemZ_A ## N] = N, \ |
126 | | [SystemZ_C ## N] = N |
127 | | |
128 | | /* All register classes that (also) have 16-31. */ |
129 | | #define DEF_REG32(N) \ |
130 | | [SystemZ_F ## N ## S] = N, \ |
131 | | [SystemZ_F ## N ## D] = N, \ |
132 | | [SystemZ_V ## N] = N |
133 | | |
134 | | static const uint8_t Map[SystemZ_NUM_TARGET_REGS] = { |
135 | | DEF_REG16(0), |
136 | | DEF_REG16(1), |
137 | | DEF_REG16(2), |
138 | | DEF_REG16(3), |
139 | | DEF_REG16(4), |
140 | | DEF_REG16(5), |
141 | | DEF_REG16(6), |
142 | | DEF_REG16(8), |
143 | | DEF_REG16(9), |
144 | | DEF_REG16(10), |
145 | | DEF_REG16(11), |
146 | | DEF_REG16(12), |
147 | | DEF_REG16(13), |
148 | | DEF_REG16(14), |
149 | | DEF_REG16(15), |
150 | | |
151 | | DEF_REG32(16), |
152 | | DEF_REG32(17), |
153 | | DEF_REG32(18), |
154 | | DEF_REG32(19), |
155 | | DEF_REG32(20), |
156 | | DEF_REG32(21), |
157 | | DEF_REG32(22), |
158 | | DEF_REG32(23), |
159 | | DEF_REG32(24), |
160 | | DEF_REG32(25), |
161 | | DEF_REG32(26), |
162 | | DEF_REG32(27), |
163 | | DEF_REG32(28), |
164 | | DEF_REG32(29), |
165 | | DEF_REG32(30), |
166 | | DEF_REG32(31), |
167 | | |
168 | | /* The float Q registers are non-sequential. */ |
169 | | [SystemZ_F0Q] = 0, |
170 | | [SystemZ_F1Q] = 1, |
171 | | [SystemZ_F4Q] = 4, |
172 | | [SystemZ_F5Q] = 5, |
173 | | [SystemZ_F8Q] = 8, |
174 | | [SystemZ_F9Q] = 9, |
175 | | [SystemZ_F12Q] = 12, |
176 | | [SystemZ_F13Q] = 13, |
177 | | |
178 | | /* The integer Q registers are all even. */ |
179 | | [SystemZ_R0Q] = 0, |
180 | | [SystemZ_R2Q] = 2, |
181 | | [SystemZ_R4Q] = 4, |
182 | | [SystemZ_R6Q] = 6, |
183 | | [SystemZ_R8Q] = 8, |
184 | | [SystemZ_R10Q] = 10, |
185 | | [SystemZ_R12Q] = 12, |
186 | | [SystemZ_R14Q] = 14, |
187 | | }; |
188 | | |
189 | | unsigned SystemZMC_getFirstReg(unsigned Reg) |
190 | 0 | { |
191 | | // assert(Reg < SystemZ_NUM_TARGET_REGS); |
192 | 0 | return Map[Reg]; |
193 | 0 | } |
194 | | |
195 | | #endif |