1*9a0e4156SSadaf Ebrahimi /* Capstone Disassembly Engine */
2*9a0e4156SSadaf Ebrahimi /* By Nguyen Anh Quynh <[email protected]>, 2013-2015 */
3*9a0e4156SSadaf Ebrahimi
4*9a0e4156SSadaf Ebrahimi #ifdef CAPSTONE_HAS_SYSZ
5*9a0e4156SSadaf Ebrahimi
6*9a0e4156SSadaf Ebrahimi #include <stdio.h> // debug
7*9a0e4156SSadaf Ebrahimi #include <string.h>
8*9a0e4156SSadaf Ebrahimi
9*9a0e4156SSadaf Ebrahimi #include "../../utils.h"
10*9a0e4156SSadaf Ebrahimi
11*9a0e4156SSadaf Ebrahimi #include "SystemZMapping.h"
12*9a0e4156SSadaf Ebrahimi
13*9a0e4156SSadaf Ebrahimi #define GET_INSTRINFO_ENUM
14*9a0e4156SSadaf Ebrahimi #include "SystemZGenInstrInfo.inc"
15*9a0e4156SSadaf Ebrahimi
16*9a0e4156SSadaf Ebrahimi #ifndef CAPSTONE_DIET
17*9a0e4156SSadaf Ebrahimi static const name_map reg_name_maps[] = {
18*9a0e4156SSadaf Ebrahimi { SYSZ_REG_INVALID, NULL },
19*9a0e4156SSadaf Ebrahimi
20*9a0e4156SSadaf Ebrahimi { SYSZ_REG_0, "0" },
21*9a0e4156SSadaf Ebrahimi { SYSZ_REG_1, "1" },
22*9a0e4156SSadaf Ebrahimi { SYSZ_REG_2, "2" },
23*9a0e4156SSadaf Ebrahimi { SYSZ_REG_3, "3" },
24*9a0e4156SSadaf Ebrahimi { SYSZ_REG_4, "4" },
25*9a0e4156SSadaf Ebrahimi { SYSZ_REG_5, "5" },
26*9a0e4156SSadaf Ebrahimi { SYSZ_REG_6, "6" },
27*9a0e4156SSadaf Ebrahimi { SYSZ_REG_7, "7" },
28*9a0e4156SSadaf Ebrahimi { SYSZ_REG_8, "8" },
29*9a0e4156SSadaf Ebrahimi { SYSZ_REG_9, "9" },
30*9a0e4156SSadaf Ebrahimi { SYSZ_REG_10, "10" },
31*9a0e4156SSadaf Ebrahimi { SYSZ_REG_11, "11" },
32*9a0e4156SSadaf Ebrahimi { SYSZ_REG_12, "12" },
33*9a0e4156SSadaf Ebrahimi { SYSZ_REG_13, "13" },
34*9a0e4156SSadaf Ebrahimi { SYSZ_REG_14, "14" },
35*9a0e4156SSadaf Ebrahimi { SYSZ_REG_15, "15" },
36*9a0e4156SSadaf Ebrahimi { SYSZ_REG_CC, "cc"},
37*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F0, "f0" },
38*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F1, "f1" },
39*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F2, "f2" },
40*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F3, "f3" },
41*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F4, "f4" },
42*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F5, "f5" },
43*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F6, "f6" },
44*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F7, "f7" },
45*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F8, "f8" },
46*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F9, "f9" },
47*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F10, "f10" },
48*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F11, "f11" },
49*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F12, "f12" },
50*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F13, "f13" },
51*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F14, "f14" },
52*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F15, "f15" },
53*9a0e4156SSadaf Ebrahimi { SYSZ_REG_R0L, "r0l" },
54*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A0, "a0" },
55*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A1, "a1" },
56*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A2, "a2" },
57*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A3, "a3" },
58*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A4, "a4" },
59*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A5, "a5" },
60*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A6, "a6" },
61*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A7, "a7" },
62*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A8, "a8" },
63*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A9, "a9" },
64*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A10, "a10" },
65*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A11, "a11" },
66*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A12, "a12" },
67*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A13, "a13" },
68*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A14, "a14" },
69*9a0e4156SSadaf Ebrahimi { SYSZ_REG_A15, "a15" },
70*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C0, "c0" },
71*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C1, "c1" },
72*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C2, "c2" },
73*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C3, "c3" },
74*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C4, "c4" },
75*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C5, "c5" },
76*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C6, "c6" },
77*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C7, "c7" },
78*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C8, "c8" },
79*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C9, "c9" },
80*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C10, "c10" },
81*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C11, "c11" },
82*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C12, "c12" },
83*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C13, "c13" },
84*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C14, "c14" },
85*9a0e4156SSadaf Ebrahimi { SYSZ_REG_C15, "c15" },
86*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V0, "v0" },
87*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V1, "v1" },
88*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V2, "v2" },
89*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V3, "v3" },
90*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V4, "v4" },
91*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V5, "v5" },
92*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V6, "v6" },
93*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V7, "v7" },
94*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V8, "v8" },
95*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V9, "v9" },
96*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V10, "v10" },
97*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V11, "v11" },
98*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V12, "v12" },
99*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V13, "v13" },
100*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V14, "v14" },
101*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V15, "v15" },
102*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V16, "v16" },
103*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V17, "v17" },
104*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V18, "v18" },
105*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V19, "v19" },
106*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V20, "v20" },
107*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V21, "v21" },
108*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V22, "v22" },
109*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V23, "v23" },
110*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V24, "v24" },
111*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V25, "v25" },
112*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V26, "v26" },
113*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V27, "v27" },
114*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V28, "v28" },
115*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V29, "v29" },
116*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V30, "v30" },
117*9a0e4156SSadaf Ebrahimi { SYSZ_REG_V31, "v31" },
118*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F16, "f16" },
119*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F17, "f17" },
120*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F18, "f18" },
121*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F19, "f19" },
122*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F20, "f20" },
123*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F21, "f21" },
124*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F22, "f22" },
125*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F23, "f23" },
126*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F24, "f24" },
127*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F25, "f25" },
128*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F26, "f26" },
129*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F27, "f27" },
130*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F28, "f28" },
131*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F29, "f29" },
132*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F30, "f30" },
133*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F31, "f31" },
134*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F0Q, "f0q" },
135*9a0e4156SSadaf Ebrahimi { SYSZ_REG_F4Q, "f4q" },
136*9a0e4156SSadaf Ebrahimi };
137*9a0e4156SSadaf Ebrahimi #endif
138*9a0e4156SSadaf Ebrahimi
SystemZ_reg_name(csh handle,unsigned int reg)139*9a0e4156SSadaf Ebrahimi const char *SystemZ_reg_name(csh handle, unsigned int reg)
140*9a0e4156SSadaf Ebrahimi {
141*9a0e4156SSadaf Ebrahimi #ifndef CAPSTONE_DIET
142*9a0e4156SSadaf Ebrahimi if (reg >= ARR_SIZE(reg_name_maps))
143*9a0e4156SSadaf Ebrahimi return NULL;
144*9a0e4156SSadaf Ebrahimi
145*9a0e4156SSadaf Ebrahimi return reg_name_maps[reg].name;
146*9a0e4156SSadaf Ebrahimi #else
147*9a0e4156SSadaf Ebrahimi return NULL;
148*9a0e4156SSadaf Ebrahimi #endif
149*9a0e4156SSadaf Ebrahimi }
150*9a0e4156SSadaf Ebrahimi
151*9a0e4156SSadaf Ebrahimi static const insn_map insns[] = {
152*9a0e4156SSadaf Ebrahimi // dummy item
153*9a0e4156SSadaf Ebrahimi {
154*9a0e4156SSadaf Ebrahimi 0, 0,
155*9a0e4156SSadaf Ebrahimi #ifndef CAPSTONE_DIET
156*9a0e4156SSadaf Ebrahimi { 0 }, { 0 }, { 0 }, 0, 0
157*9a0e4156SSadaf Ebrahimi #endif
158*9a0e4156SSadaf Ebrahimi },
159*9a0e4156SSadaf Ebrahimi
160*9a0e4156SSadaf Ebrahimi #include "SystemZMappingInsn.inc"
161*9a0e4156SSadaf Ebrahimi };
162*9a0e4156SSadaf Ebrahimi
163*9a0e4156SSadaf Ebrahimi // given internal insn id, return public instruction info
SystemZ_get_insn_id(cs_struct * h,cs_insn * insn,unsigned int id)164*9a0e4156SSadaf Ebrahimi void SystemZ_get_insn_id(cs_struct *h, cs_insn *insn, unsigned int id)
165*9a0e4156SSadaf Ebrahimi {
166*9a0e4156SSadaf Ebrahimi unsigned short i;
167*9a0e4156SSadaf Ebrahimi
168*9a0e4156SSadaf Ebrahimi i = insn_find(insns, ARR_SIZE(insns), id, &h->insn_cache);
169*9a0e4156SSadaf Ebrahimi if (i != 0) {
170*9a0e4156SSadaf Ebrahimi insn->id = insns[i].mapid;
171*9a0e4156SSadaf Ebrahimi
172*9a0e4156SSadaf Ebrahimi if (h->detail) {
173*9a0e4156SSadaf Ebrahimi #ifndef CAPSTONE_DIET
174*9a0e4156SSadaf Ebrahimi memcpy(insn->detail->regs_read, insns[i].regs_use, sizeof(insns[i].regs_use));
175*9a0e4156SSadaf Ebrahimi insn->detail->regs_read_count = (uint8_t)count_positive(insns[i].regs_use);
176*9a0e4156SSadaf Ebrahimi
177*9a0e4156SSadaf Ebrahimi memcpy(insn->detail->regs_write, insns[i].regs_mod, sizeof(insns[i].regs_mod));
178*9a0e4156SSadaf Ebrahimi insn->detail->regs_write_count = (uint8_t)count_positive(insns[i].regs_mod);
179*9a0e4156SSadaf Ebrahimi
180*9a0e4156SSadaf Ebrahimi memcpy(insn->detail->groups, insns[i].groups, sizeof(insns[i].groups));
181*9a0e4156SSadaf Ebrahimi insn->detail->groups_count = (uint8_t)count_positive8(insns[i].groups);
182*9a0e4156SSadaf Ebrahimi
183*9a0e4156SSadaf Ebrahimi if (insns[i].branch || insns[i].indirect_branch) {
184*9a0e4156SSadaf Ebrahimi // this insn also belongs to JUMP group. add JUMP group
185*9a0e4156SSadaf Ebrahimi insn->detail->groups[insn->detail->groups_count] = SYSZ_GRP_JUMP;
186*9a0e4156SSadaf Ebrahimi insn->detail->groups_count++;
187*9a0e4156SSadaf Ebrahimi }
188*9a0e4156SSadaf Ebrahimi #endif
189*9a0e4156SSadaf Ebrahimi }
190*9a0e4156SSadaf Ebrahimi }
191*9a0e4156SSadaf Ebrahimi }
192*9a0e4156SSadaf Ebrahimi
193*9a0e4156SSadaf Ebrahimi #ifndef CAPSTONE_DIET
194*9a0e4156SSadaf Ebrahimi static const name_map insn_name_maps[] = {
195*9a0e4156SSadaf Ebrahimi { SYSZ_INS_INVALID, NULL },
196*9a0e4156SSadaf Ebrahimi
197*9a0e4156SSadaf Ebrahimi #include "SystemZGenInsnNameMaps.inc"
198*9a0e4156SSadaf Ebrahimi };
199*9a0e4156SSadaf Ebrahimi
200*9a0e4156SSadaf Ebrahimi // special alias insn
201*9a0e4156SSadaf Ebrahimi static const name_map alias_insn_names[] = {
202*9a0e4156SSadaf Ebrahimi { 0, NULL }
203*9a0e4156SSadaf Ebrahimi };
204*9a0e4156SSadaf Ebrahimi #endif
205*9a0e4156SSadaf Ebrahimi
SystemZ_insn_name(csh handle,unsigned int id)206*9a0e4156SSadaf Ebrahimi const char *SystemZ_insn_name(csh handle, unsigned int id)
207*9a0e4156SSadaf Ebrahimi {
208*9a0e4156SSadaf Ebrahimi #ifndef CAPSTONE_DIET
209*9a0e4156SSadaf Ebrahimi unsigned int i;
210*9a0e4156SSadaf Ebrahimi
211*9a0e4156SSadaf Ebrahimi if (id >= SYSZ_INS_ENDING)
212*9a0e4156SSadaf Ebrahimi return NULL;
213*9a0e4156SSadaf Ebrahimi
214*9a0e4156SSadaf Ebrahimi // handle special alias first
215*9a0e4156SSadaf Ebrahimi for (i = 0; i < ARR_SIZE(alias_insn_names); i++) {
216*9a0e4156SSadaf Ebrahimi if (alias_insn_names[i].id == id)
217*9a0e4156SSadaf Ebrahimi return alias_insn_names[i].name;
218*9a0e4156SSadaf Ebrahimi }
219*9a0e4156SSadaf Ebrahimi
220*9a0e4156SSadaf Ebrahimi return insn_name_maps[id].name;
221*9a0e4156SSadaf Ebrahimi #else
222*9a0e4156SSadaf Ebrahimi return NULL;
223*9a0e4156SSadaf Ebrahimi #endif
224*9a0e4156SSadaf Ebrahimi }
225*9a0e4156SSadaf Ebrahimi
226*9a0e4156SSadaf Ebrahimi #ifndef CAPSTONE_DIET
227*9a0e4156SSadaf Ebrahimi static const name_map group_name_maps[] = {
228*9a0e4156SSadaf Ebrahimi // generic groups
229*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_INVALID, NULL },
230*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_JUMP, "jump" },
231*9a0e4156SSadaf Ebrahimi
232*9a0e4156SSadaf Ebrahimi // architecture-specific groups
233*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_DFPPACKEDCONVERSION, "dfppackedconversion" },
234*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_DFPZONEDCONVERSION, "dfpzonedconversion" },
235*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_DISTINCTOPS, "distinctops" },
236*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_ENHANCEDDAT2, "enhanceddat2" },
237*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_EXECUTIONHINT, "executionhint" },
238*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_FPEXTENSION, "fpextension" },
239*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_GUARDEDSTORAGE, "guardedstorage" },
240*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_HIGHWORD, "highword" },
241*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_INSERTREFERENCEBITSMULTIPLE, "insertreferencebitsmultiple" },
242*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_INTERLOCKEDACCESS1, "interlockedaccess1" },
243*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_LOADANDTRAP, "loadandtrap" },
244*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_LOADANDZERORIGHTMOSTBYTE, "loadandzerorightmostbyte" },
245*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_LOADSTOREONCOND, "loadstoreoncond" },
246*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_LOADSTOREONCOND2, "loadstoreoncond2" },
247*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_MESSAGESECURITYASSIST3, "messagesecurityassist3" },
248*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_MESSAGESECURITYASSIST4, "messagesecurityassist4" },
249*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_MESSAGESECURITYASSIST5, "messagesecurityassist5" },
250*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_MESSAGESECURITYASSIST7, "messagesecurityassist7" },
251*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_MESSAGESECURITYASSIST8, "messagesecurityassist8" },
252*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_MISCELLANEOUSEXTENSIONS, "miscellaneousextensions" },
253*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_MISCELLANEOUSEXTENSIONS2, "miscellaneousextensions2" },
254*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_POPULATIONCOUNT, "populationcount" },
255*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_PROCESSORASSIST, "processorassist" },
256*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_RESETREFERENCEBITSMULTIPLE, "resetreferencebitsmultiple" },
257*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_TRANSACTIONALEXECUTION, "transactionalexecution" },
258*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_VECTOR, "vector" },
259*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_VECTORENHANCEMENTS1, "vectorenhancements1" },
260*9a0e4156SSadaf Ebrahimi { SYSZ_GRP_VECTORPACKEDDECIMAL, "vectorpackeddecimal" },
261*9a0e4156SSadaf Ebrahimi };
262*9a0e4156SSadaf Ebrahimi #endif
263*9a0e4156SSadaf Ebrahimi
SystemZ_group_name(csh handle,unsigned int id)264*9a0e4156SSadaf Ebrahimi const char *SystemZ_group_name(csh handle, unsigned int id)
265*9a0e4156SSadaf Ebrahimi {
266*9a0e4156SSadaf Ebrahimi #ifndef CAPSTONE_DIET
267*9a0e4156SSadaf Ebrahimi return id2name(group_name_maps, ARR_SIZE(group_name_maps), id);
268*9a0e4156SSadaf Ebrahimi #else
269*9a0e4156SSadaf Ebrahimi return NULL;
270*9a0e4156SSadaf Ebrahimi #endif
271*9a0e4156SSadaf Ebrahimi }
272*9a0e4156SSadaf Ebrahimi
273*9a0e4156SSadaf Ebrahimi // map internal raw register to 'public' register
SystemZ_map_register(unsigned int r)274*9a0e4156SSadaf Ebrahimi sysz_reg SystemZ_map_register(unsigned int r)
275*9a0e4156SSadaf Ebrahimi {
276*9a0e4156SSadaf Ebrahimi static const unsigned int map[] = { 0,
277*9a0e4156SSadaf Ebrahimi /* SystemZ_CC = 1 */ SYSZ_REG_CC,
278*9a0e4156SSadaf Ebrahimi /* SystemZ_A0 = 2 */ SYSZ_REG_A0,
279*9a0e4156SSadaf Ebrahimi /* SystemZ_A1 = 3 */ SYSZ_REG_A1,
280*9a0e4156SSadaf Ebrahimi /* SystemZ_A2 = 4 */ SYSZ_REG_A2,
281*9a0e4156SSadaf Ebrahimi /* SystemZ_A3 = 5 */ SYSZ_REG_A3,
282*9a0e4156SSadaf Ebrahimi /* SystemZ_A4 = 6 */ SYSZ_REG_A4,
283*9a0e4156SSadaf Ebrahimi /* SystemZ_A5 = 7 */ SYSZ_REG_A5,
284*9a0e4156SSadaf Ebrahimi /* SystemZ_A6 = 8 */ SYSZ_REG_A6,
285*9a0e4156SSadaf Ebrahimi /* SystemZ_A7 = 9 */ SYSZ_REG_A7,
286*9a0e4156SSadaf Ebrahimi /* SystemZ_A8 = 10 */ SYSZ_REG_A8,
287*9a0e4156SSadaf Ebrahimi /* SystemZ_A9 = 11 */ SYSZ_REG_A9,
288*9a0e4156SSadaf Ebrahimi /* SystemZ_A10 = 12 */ SYSZ_REG_A10,
289*9a0e4156SSadaf Ebrahimi /* SystemZ_A11 = 13 */ SYSZ_REG_A11,
290*9a0e4156SSadaf Ebrahimi /* SystemZ_A12 = 14 */ SYSZ_REG_A12,
291*9a0e4156SSadaf Ebrahimi /* SystemZ_A13 = 15 */ SYSZ_REG_A13,
292*9a0e4156SSadaf Ebrahimi /* SystemZ_A14 = 16 */ SYSZ_REG_A14,
293*9a0e4156SSadaf Ebrahimi /* SystemZ_A15 = 17 */ SYSZ_REG_A15,
294*9a0e4156SSadaf Ebrahimi /* SystemZ_C0 = 18 */ SYSZ_REG_C0,
295*9a0e4156SSadaf Ebrahimi /* SystemZ_C1 = 19 */ SYSZ_REG_C1,
296*9a0e4156SSadaf Ebrahimi /* SystemZ_C2 = 20 */ SYSZ_REG_C2,
297*9a0e4156SSadaf Ebrahimi /* SystemZ_C3 = 21 */ SYSZ_REG_C3,
298*9a0e4156SSadaf Ebrahimi /* SystemZ_C4 = 22 */ SYSZ_REG_C4,
299*9a0e4156SSadaf Ebrahimi /* SystemZ_C5 = 23 */ SYSZ_REG_C5,
300*9a0e4156SSadaf Ebrahimi /* SystemZ_C6 = 24 */ SYSZ_REG_C6,
301*9a0e4156SSadaf Ebrahimi /* SystemZ_C7 = 25 */ SYSZ_REG_C7,
302*9a0e4156SSadaf Ebrahimi /* SystemZ_C8 = 26 */ SYSZ_REG_C8,
303*9a0e4156SSadaf Ebrahimi /* SystemZ_C9 = 27 */ SYSZ_REG_C9,
304*9a0e4156SSadaf Ebrahimi /* SystemZ_C10 = 28 */ SYSZ_REG_C10,
305*9a0e4156SSadaf Ebrahimi /* SystemZ_C11 = 29 */ SYSZ_REG_C11,
306*9a0e4156SSadaf Ebrahimi /* SystemZ_C12 = 30 */ SYSZ_REG_C12,
307*9a0e4156SSadaf Ebrahimi /* SystemZ_C13 = 31 */ SYSZ_REG_C13,
308*9a0e4156SSadaf Ebrahimi /* SystemZ_C14 = 32 */ SYSZ_REG_C14,
309*9a0e4156SSadaf Ebrahimi /* SystemZ_C15 = 33 */ SYSZ_REG_C15,
310*9a0e4156SSadaf Ebrahimi /* SystemZ_V0 = 34 */ SYSZ_REG_V0,
311*9a0e4156SSadaf Ebrahimi /* SystemZ_V1 = 35 */ SYSZ_REG_V1,
312*9a0e4156SSadaf Ebrahimi /* SystemZ_V2 = 36 */ SYSZ_REG_V2,
313*9a0e4156SSadaf Ebrahimi /* SystemZ_V3 = 37 */ SYSZ_REG_V3,
314*9a0e4156SSadaf Ebrahimi /* SystemZ_V4 = 38 */ SYSZ_REG_V4,
315*9a0e4156SSadaf Ebrahimi /* SystemZ_V5 = 39 */ SYSZ_REG_V5,
316*9a0e4156SSadaf Ebrahimi /* SystemZ_V6 = 40 */ SYSZ_REG_V6,
317*9a0e4156SSadaf Ebrahimi /* SystemZ_V7 = 41 */ SYSZ_REG_V7,
318*9a0e4156SSadaf Ebrahimi /* SystemZ_V8 = 42 */ SYSZ_REG_V8,
319*9a0e4156SSadaf Ebrahimi /* SystemZ_V9 = 43 */ SYSZ_REG_V9,
320*9a0e4156SSadaf Ebrahimi /* SystemZ_V10 = 44 */ SYSZ_REG_V10,
321*9a0e4156SSadaf Ebrahimi /* SystemZ_V11 = 45 */ SYSZ_REG_V11,
322*9a0e4156SSadaf Ebrahimi /* SystemZ_V12 = 46 */ SYSZ_REG_V12,
323*9a0e4156SSadaf Ebrahimi /* SystemZ_V13 = 47 */ SYSZ_REG_V13,
324*9a0e4156SSadaf Ebrahimi /* SystemZ_V14 = 48 */ SYSZ_REG_V14,
325*9a0e4156SSadaf Ebrahimi /* SystemZ_V15 = 49 */ SYSZ_REG_V15,
326*9a0e4156SSadaf Ebrahimi /* SystemZ_V16 = 50 */ SYSZ_REG_V16,
327*9a0e4156SSadaf Ebrahimi /* SystemZ_V17 = 51 */ SYSZ_REG_V17,
328*9a0e4156SSadaf Ebrahimi /* SystemZ_V18 = 52 */ SYSZ_REG_V18,
329*9a0e4156SSadaf Ebrahimi /* SystemZ_V19 = 53 */ SYSZ_REG_V19,
330*9a0e4156SSadaf Ebrahimi /* SystemZ_V20 = 54 */ SYSZ_REG_V20,
331*9a0e4156SSadaf Ebrahimi /* SystemZ_V21 = 55 */ SYSZ_REG_V21,
332*9a0e4156SSadaf Ebrahimi /* SystemZ_V22 = 56 */ SYSZ_REG_V22,
333*9a0e4156SSadaf Ebrahimi /* SystemZ_V23 = 57 */ SYSZ_REG_V23,
334*9a0e4156SSadaf Ebrahimi /* SystemZ_V24 = 58 */ SYSZ_REG_V24,
335*9a0e4156SSadaf Ebrahimi /* SystemZ_V25 = 59 */ SYSZ_REG_V25,
336*9a0e4156SSadaf Ebrahimi /* SystemZ_V26 = 60 */ SYSZ_REG_V26,
337*9a0e4156SSadaf Ebrahimi /* SystemZ_V27 = 61 */ SYSZ_REG_V27,
338*9a0e4156SSadaf Ebrahimi /* SystemZ_V28 = 62 */ SYSZ_REG_V28,
339*9a0e4156SSadaf Ebrahimi /* SystemZ_V29 = 63 */ SYSZ_REG_V29,
340*9a0e4156SSadaf Ebrahimi /* SystemZ_V30 = 64 */ SYSZ_REG_V30,
341*9a0e4156SSadaf Ebrahimi /* SystemZ_V31 = 65 */ SYSZ_REG_V31,
342*9a0e4156SSadaf Ebrahimi /* SystemZ_F0D = 66 */ SYSZ_REG_F0,
343*9a0e4156SSadaf Ebrahimi /* SystemZ_F1D = 67 */ SYSZ_REG_F1,
344*9a0e4156SSadaf Ebrahimi /* SystemZ_F2D = 68 */ SYSZ_REG_F2,
345*9a0e4156SSadaf Ebrahimi /* SystemZ_F3D = 69 */ SYSZ_REG_F3,
346*9a0e4156SSadaf Ebrahimi /* SystemZ_F4D = 70 */ SYSZ_REG_F4,
347*9a0e4156SSadaf Ebrahimi /* SystemZ_F5D = 71 */ SYSZ_REG_F5,
348*9a0e4156SSadaf Ebrahimi /* SystemZ_F6D = 72 */ SYSZ_REG_F6,
349*9a0e4156SSadaf Ebrahimi /* SystemZ_F7D = 73 */ SYSZ_REG_F7,
350*9a0e4156SSadaf Ebrahimi /* SystemZ_F8D = 74 */ SYSZ_REG_F8,
351*9a0e4156SSadaf Ebrahimi /* SystemZ_F9D = 75 */ SYSZ_REG_F9,
352*9a0e4156SSadaf Ebrahimi /* SystemZ_F10D = 76 */ SYSZ_REG_F10,
353*9a0e4156SSadaf Ebrahimi /* SystemZ_F11D = 77 */ SYSZ_REG_F11,
354*9a0e4156SSadaf Ebrahimi /* SystemZ_F12D = 78 */ SYSZ_REG_F12,
355*9a0e4156SSadaf Ebrahimi /* SystemZ_F13D = 79 */ SYSZ_REG_F13,
356*9a0e4156SSadaf Ebrahimi /* SystemZ_F14D = 80 */ SYSZ_REG_F14,
357*9a0e4156SSadaf Ebrahimi /* SystemZ_F15D = 81 */ SYSZ_REG_F15,
358*9a0e4156SSadaf Ebrahimi /* SystemZ_F16D = 82 */ SYSZ_REG_F16,
359*9a0e4156SSadaf Ebrahimi /* SystemZ_F17D = 83 */ SYSZ_REG_F17,
360*9a0e4156SSadaf Ebrahimi /* SystemZ_F18D = 84 */ SYSZ_REG_F18,
361*9a0e4156SSadaf Ebrahimi /* SystemZ_F19D = 85 */ SYSZ_REG_F19,
362*9a0e4156SSadaf Ebrahimi /* SystemZ_F20D = 86 */ SYSZ_REG_F20,
363*9a0e4156SSadaf Ebrahimi /* SystemZ_F21D = 87 */ SYSZ_REG_F21,
364*9a0e4156SSadaf Ebrahimi /* SystemZ_F22D = 88 */ SYSZ_REG_F22,
365*9a0e4156SSadaf Ebrahimi /* SystemZ_F23D = 89 */ SYSZ_REG_F23,
366*9a0e4156SSadaf Ebrahimi /* SystemZ_F24D = 90 */ SYSZ_REG_F24,
367*9a0e4156SSadaf Ebrahimi /* SystemZ_F25D = 91 */ SYSZ_REG_F25,
368*9a0e4156SSadaf Ebrahimi /* SystemZ_F26D = 92 */ SYSZ_REG_F26,
369*9a0e4156SSadaf Ebrahimi /* SystemZ_F27D = 93 */ SYSZ_REG_F27,
370*9a0e4156SSadaf Ebrahimi /* SystemZ_F28D = 94 */ SYSZ_REG_F28,
371*9a0e4156SSadaf Ebrahimi /* SystemZ_F29D = 95 */ SYSZ_REG_F29,
372*9a0e4156SSadaf Ebrahimi /* SystemZ_F30D = 96 */ SYSZ_REG_F30,
373*9a0e4156SSadaf Ebrahimi /* SystemZ_F31D = 97 */ SYSZ_REG_F31,
374*9a0e4156SSadaf Ebrahimi /* SystemZ_F0Q = 98 */ SYSZ_REG_F0,
375*9a0e4156SSadaf Ebrahimi /* SystemZ_F1Q = 99 */ SYSZ_REG_F1,
376*9a0e4156SSadaf Ebrahimi /* SystemZ_F4Q = 100 */ SYSZ_REG_F4,
377*9a0e4156SSadaf Ebrahimi /* SystemZ_F5Q = 101 */ SYSZ_REG_F5,
378*9a0e4156SSadaf Ebrahimi /* SystemZ_F8Q = 102 */ SYSZ_REG_F8,
379*9a0e4156SSadaf Ebrahimi /* SystemZ_F9Q = 103 */ SYSZ_REG_F9,
380*9a0e4156SSadaf Ebrahimi /* SystemZ_F12Q = 104 */ SYSZ_REG_F12,
381*9a0e4156SSadaf Ebrahimi /* SystemZ_F13Q = 105 */ SYSZ_REG_F13,
382*9a0e4156SSadaf Ebrahimi /* SystemZ_F0S = 106 */ SYSZ_REG_F0,
383*9a0e4156SSadaf Ebrahimi /* SystemZ_F1S = 107 */ SYSZ_REG_F1,
384*9a0e4156SSadaf Ebrahimi /* SystemZ_F2S = 108 */ SYSZ_REG_F2,
385*9a0e4156SSadaf Ebrahimi /* SystemZ_F3S = 109 */ SYSZ_REG_F3,
386*9a0e4156SSadaf Ebrahimi /* SystemZ_F4S = 110 */ SYSZ_REG_F4,
387*9a0e4156SSadaf Ebrahimi /* SystemZ_F5S = 111 */ SYSZ_REG_F5,
388*9a0e4156SSadaf Ebrahimi /* SystemZ_F6S = 112 */ SYSZ_REG_F6,
389*9a0e4156SSadaf Ebrahimi /* SystemZ_F7S = 113 */ SYSZ_REG_F7,
390*9a0e4156SSadaf Ebrahimi /* SystemZ_F8S = 114 */ SYSZ_REG_F8,
391*9a0e4156SSadaf Ebrahimi /* SystemZ_F9S = 115 */ SYSZ_REG_F9,
392*9a0e4156SSadaf Ebrahimi /* SystemZ_F10S = 116 */ SYSZ_REG_F10,
393*9a0e4156SSadaf Ebrahimi /* SystemZ_F11S = 117 */ SYSZ_REG_F11,
394*9a0e4156SSadaf Ebrahimi /* SystemZ_F12S = 118 */ SYSZ_REG_F12,
395*9a0e4156SSadaf Ebrahimi /* SystemZ_F13S = 119 */ SYSZ_REG_F13,
396*9a0e4156SSadaf Ebrahimi /* SystemZ_F14S = 120 */ SYSZ_REG_F14,
397*9a0e4156SSadaf Ebrahimi /* SystemZ_F15S = 121 */ SYSZ_REG_F15,
398*9a0e4156SSadaf Ebrahimi /* SystemZ_F16S = 122 */ SYSZ_REG_F16,
399*9a0e4156SSadaf Ebrahimi /* SystemZ_F17S = 123 */ SYSZ_REG_F17,
400*9a0e4156SSadaf Ebrahimi /* SystemZ_F18S = 124 */ SYSZ_REG_F18,
401*9a0e4156SSadaf Ebrahimi /* SystemZ_F19S = 125 */ SYSZ_REG_F19,
402*9a0e4156SSadaf Ebrahimi /* SystemZ_F20S = 126 */ SYSZ_REG_F20,
403*9a0e4156SSadaf Ebrahimi /* SystemZ_F21S = 127 */ SYSZ_REG_F21,
404*9a0e4156SSadaf Ebrahimi /* SystemZ_F22S = 128 */ SYSZ_REG_F22,
405*9a0e4156SSadaf Ebrahimi /* SystemZ_F23S = 129 */ SYSZ_REG_F23,
406*9a0e4156SSadaf Ebrahimi /* SystemZ_F24S = 130 */ SYSZ_REG_F24,
407*9a0e4156SSadaf Ebrahimi /* SystemZ_F25S = 131 */ SYSZ_REG_F25,
408*9a0e4156SSadaf Ebrahimi /* SystemZ_F26S = 132 */ SYSZ_REG_F26,
409*9a0e4156SSadaf Ebrahimi /* SystemZ_F27S = 133 */ SYSZ_REG_F27,
410*9a0e4156SSadaf Ebrahimi /* SystemZ_F28S = 134 */ SYSZ_REG_F28,
411*9a0e4156SSadaf Ebrahimi /* SystemZ_F29S = 135 */ SYSZ_REG_F29,
412*9a0e4156SSadaf Ebrahimi /* SystemZ_F30S = 136 */ SYSZ_REG_F30,
413*9a0e4156SSadaf Ebrahimi /* SystemZ_F31S = 137 */ SYSZ_REG_F31,
414*9a0e4156SSadaf Ebrahimi /* SystemZ_R0D = 138 */ SYSZ_REG_0,
415*9a0e4156SSadaf Ebrahimi /* SystemZ_R1D = 139 */ SYSZ_REG_1,
416*9a0e4156SSadaf Ebrahimi /* SystemZ_R2D = 140 */ SYSZ_REG_2,
417*9a0e4156SSadaf Ebrahimi /* SystemZ_R3D = 141 */ SYSZ_REG_3,
418*9a0e4156SSadaf Ebrahimi /* SystemZ_R4D = 142 */ SYSZ_REG_4,
419*9a0e4156SSadaf Ebrahimi /* SystemZ_R5D = 143 */ SYSZ_REG_5,
420*9a0e4156SSadaf Ebrahimi /* SystemZ_R6D = 144 */ SYSZ_REG_6,
421*9a0e4156SSadaf Ebrahimi /* SystemZ_R7D = 145 */ SYSZ_REG_7,
422*9a0e4156SSadaf Ebrahimi /* SystemZ_R8D = 146 */ SYSZ_REG_8,
423*9a0e4156SSadaf Ebrahimi /* SystemZ_R9D = 147 */ SYSZ_REG_9,
424*9a0e4156SSadaf Ebrahimi /* SystemZ_R10D = 148 */ SYSZ_REG_10,
425*9a0e4156SSadaf Ebrahimi /* SystemZ_R11D = 149 */ SYSZ_REG_11,
426*9a0e4156SSadaf Ebrahimi /* SystemZ_R12D = 150 */ SYSZ_REG_12,
427*9a0e4156SSadaf Ebrahimi /* SystemZ_R13D = 151 */ SYSZ_REG_13,
428*9a0e4156SSadaf Ebrahimi /* SystemZ_R14D = 152 */ SYSZ_REG_14,
429*9a0e4156SSadaf Ebrahimi /* SystemZ_R15D = 153 */ SYSZ_REG_15,
430*9a0e4156SSadaf Ebrahimi /* SystemZ_R0H = 154 */ SYSZ_REG_0,
431*9a0e4156SSadaf Ebrahimi /* SystemZ_R1H = 155 */ SYSZ_REG_1,
432*9a0e4156SSadaf Ebrahimi /* SystemZ_R2H = 156 */ SYSZ_REG_2,
433*9a0e4156SSadaf Ebrahimi /* SystemZ_R3H = 157 */ SYSZ_REG_3,
434*9a0e4156SSadaf Ebrahimi /* SystemZ_R4H = 158 */ SYSZ_REG_4,
435*9a0e4156SSadaf Ebrahimi /* SystemZ_R5H = 159 */ SYSZ_REG_5,
436*9a0e4156SSadaf Ebrahimi /* SystemZ_R6H = 160 */ SYSZ_REG_6,
437*9a0e4156SSadaf Ebrahimi /* SystemZ_R7H = 161 */ SYSZ_REG_7,
438*9a0e4156SSadaf Ebrahimi /* SystemZ_R8H = 162 */ SYSZ_REG_8,
439*9a0e4156SSadaf Ebrahimi /* SystemZ_R9H = 163 */ SYSZ_REG_9,
440*9a0e4156SSadaf Ebrahimi /* SystemZ_R10H = 164 */ SYSZ_REG_10,
441*9a0e4156SSadaf Ebrahimi /* SystemZ_R11H = 165 */ SYSZ_REG_11,
442*9a0e4156SSadaf Ebrahimi /* SystemZ_R12H = 166 */ SYSZ_REG_12,
443*9a0e4156SSadaf Ebrahimi /* SystemZ_R13H = 167 */ SYSZ_REG_13,
444*9a0e4156SSadaf Ebrahimi /* SystemZ_R14H = 168 */ SYSZ_REG_14,
445*9a0e4156SSadaf Ebrahimi /* SystemZ_R15H = 169 */ SYSZ_REG_15,
446*9a0e4156SSadaf Ebrahimi /* SystemZ_R0L = 170 */ SYSZ_REG_0,
447*9a0e4156SSadaf Ebrahimi /* SystemZ_R1L = 171 */ SYSZ_REG_1,
448*9a0e4156SSadaf Ebrahimi /* SystemZ_R2L = 172 */ SYSZ_REG_2,
449*9a0e4156SSadaf Ebrahimi /* SystemZ_R3L = 173 */ SYSZ_REG_3,
450*9a0e4156SSadaf Ebrahimi /* SystemZ_R4L = 174 */ SYSZ_REG_4,
451*9a0e4156SSadaf Ebrahimi /* SystemZ_R5L = 175 */ SYSZ_REG_5,
452*9a0e4156SSadaf Ebrahimi /* SystemZ_R6L = 176 */ SYSZ_REG_6,
453*9a0e4156SSadaf Ebrahimi /* SystemZ_R7L = 177 */ SYSZ_REG_7,
454*9a0e4156SSadaf Ebrahimi /* SystemZ_R8L = 178 */ SYSZ_REG_8,
455*9a0e4156SSadaf Ebrahimi /* SystemZ_R9L = 179 */ SYSZ_REG_9,
456*9a0e4156SSadaf Ebrahimi /* SystemZ_R10L = 180 */ SYSZ_REG_10,
457*9a0e4156SSadaf Ebrahimi /* SystemZ_R11L = 181 */ SYSZ_REG_11,
458*9a0e4156SSadaf Ebrahimi /* SystemZ_R12L = 182 */ SYSZ_REG_12,
459*9a0e4156SSadaf Ebrahimi /* SystemZ_R13L = 183 */ SYSZ_REG_13,
460*9a0e4156SSadaf Ebrahimi /* SystemZ_R14L = 184 */ SYSZ_REG_14,
461*9a0e4156SSadaf Ebrahimi /* SystemZ_R15L = 185 */ SYSZ_REG_15,
462*9a0e4156SSadaf Ebrahimi /* SystemZ_R0Q = 186 */ SYSZ_REG_0,
463*9a0e4156SSadaf Ebrahimi /* SystemZ_R2Q = 187 */ SYSZ_REG_2,
464*9a0e4156SSadaf Ebrahimi /* SystemZ_R4Q = 188 */ SYSZ_REG_4,
465*9a0e4156SSadaf Ebrahimi /* SystemZ_R6Q = 189 */ SYSZ_REG_6,
466*9a0e4156SSadaf Ebrahimi /* SystemZ_R8Q = 190 */ SYSZ_REG_8,
467*9a0e4156SSadaf Ebrahimi /* SystemZ_R10Q = 191 */ SYSZ_REG_10,
468*9a0e4156SSadaf Ebrahimi /* SystemZ_R12Q = 192 */ SYSZ_REG_12,
469*9a0e4156SSadaf Ebrahimi /* SystemZ_R14Q = 193 */ SYSZ_REG_14,
470*9a0e4156SSadaf Ebrahimi };
471*9a0e4156SSadaf Ebrahimi
472*9a0e4156SSadaf Ebrahimi if (r < ARR_SIZE(map))
473*9a0e4156SSadaf Ebrahimi return map[r];
474*9a0e4156SSadaf Ebrahimi
475*9a0e4156SSadaf Ebrahimi // cannot find this register
476*9a0e4156SSadaf Ebrahimi return 0;
477*9a0e4156SSadaf Ebrahimi }
478*9a0e4156SSadaf Ebrahimi
479*9a0e4156SSadaf Ebrahimi #endif
480