1 //===------ SystemZDisassembler.cpp - Disassembler for PowerPC ------*- 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 /* Capstone Disassembly Engine */
11 /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015 */
12
13 #ifdef CAPSTONE_HAS_SYSZ
14
15 #include <stdio.h> // DEBUG
16 #include <stdlib.h>
17 #include <string.h>
18
19 #include "../../cs_priv.h"
20 #include "../../utils.h"
21
22 #include "SystemZDisassembler.h"
23
24 #include "../../MCInst.h"
25 #include "../../MCInstrDesc.h"
26 #include "../../MCFixedLenDisassembler.h"
27 #include "../../MCRegisterInfo.h"
28 #include "../../MCDisassembler.h"
29 #include "../../MathExtras.h"
30
31 #include "SystemZMCTargetDesc.h"
32
getFeatureBits(int mode)33 static uint64_t getFeatureBits(int mode)
34 {
35 // support everything
36 return (uint64_t)-1;
37 }
38
decodeRegisterClass(MCInst * Inst,uint64_t RegNo,const unsigned * Regs)39 static DecodeStatus decodeRegisterClass(MCInst *Inst, uint64_t RegNo, const unsigned *Regs)
40 {
41 //assert(RegNo < 16 && "Invalid register");
42 RegNo = Regs[RegNo];
43 if (RegNo == 0)
44 return MCDisassembler_Fail;
45
46 MCOperand_CreateReg0(Inst, (unsigned)RegNo);
47 return MCDisassembler_Success;
48 }
49
DecodeGR32BitRegisterClass(MCInst * Inst,uint64_t RegNo,uint64_t Address,const void * Decoder)50 static DecodeStatus DecodeGR32BitRegisterClass(MCInst *Inst, uint64_t RegNo,
51 uint64_t Address, const void *Decoder)
52 {
53 return decodeRegisterClass(Inst, RegNo, SystemZMC_GR32Regs);
54 }
55
DecodeGRH32BitRegisterClass(MCInst * Inst,uint64_t RegNo,uint64_t Address,const void * Decoder)56 static DecodeStatus DecodeGRH32BitRegisterClass(MCInst *Inst, uint64_t RegNo,
57 uint64_t Address, const void *Decoder)
58 {
59 return decodeRegisterClass(Inst, RegNo, SystemZMC_GRH32Regs);
60 }
61
DecodeGR64BitRegisterClass(MCInst * Inst,uint64_t RegNo,uint64_t Address,const void * Decoder)62 static DecodeStatus DecodeGR64BitRegisterClass(MCInst *Inst, uint64_t RegNo,
63 uint64_t Address, const void *Decoder)
64 {
65 return decodeRegisterClass(Inst, RegNo, SystemZMC_GR64Regs);
66 }
67
DecodeGR128BitRegisterClass(MCInst * Inst,uint64_t RegNo,uint64_t Address,const void * Decoder)68 static DecodeStatus DecodeGR128BitRegisterClass(MCInst *Inst, uint64_t RegNo,
69 uint64_t Address, const void *Decoder)
70 {
71 return decodeRegisterClass(Inst, RegNo, SystemZMC_GR128Regs);
72 }
73
DecodeADDR64BitRegisterClass(MCInst * Inst,uint64_t RegNo,uint64_t Address,const void * Decoder)74 static DecodeStatus DecodeADDR64BitRegisterClass(MCInst *Inst, uint64_t RegNo,
75 uint64_t Address, const void *Decoder)
76 {
77 return decodeRegisterClass(Inst, RegNo, SystemZMC_GR64Regs);
78 }
79
DecodeFP32BitRegisterClass(MCInst * Inst,uint64_t RegNo,uint64_t Address,const void * Decoder)80 static DecodeStatus DecodeFP32BitRegisterClass(MCInst *Inst, uint64_t RegNo,
81 uint64_t Address, const void *Decoder)
82 {
83 return decodeRegisterClass(Inst, RegNo, SystemZMC_FP32Regs);
84 }
85
DecodeFP64BitRegisterClass(MCInst * Inst,uint64_t RegNo,uint64_t Address,const void * Decoder)86 static DecodeStatus DecodeFP64BitRegisterClass(MCInst *Inst, uint64_t RegNo,
87 uint64_t Address, const void *Decoder)
88 {
89 return decodeRegisterClass(Inst, RegNo, SystemZMC_FP64Regs);
90 }
91
DecodeFP128BitRegisterClass(MCInst * Inst,uint64_t RegNo,uint64_t Address,const void * Decoder)92 static DecodeStatus DecodeFP128BitRegisterClass(MCInst *Inst, uint64_t RegNo,
93 uint64_t Address, const void *Decoder)
94 {
95 return decodeRegisterClass(Inst, RegNo, SystemZMC_FP128Regs);
96 }
97
DecodeVR32BitRegisterClass(MCInst * Inst,uint64_t RegNo,uint64_t Address,const void * Decoder)98 static DecodeStatus DecodeVR32BitRegisterClass(MCInst *Inst, uint64_t RegNo,
99 uint64_t Address, const void *Decoder)
100 {
101 return decodeRegisterClass(Inst, RegNo, SystemZMC_VR32Regs);
102 }
103
DecodeVR64BitRegisterClass(MCInst * Inst,uint64_t RegNo,uint64_t Address,const void * Decoder)104 static DecodeStatus DecodeVR64BitRegisterClass(MCInst *Inst, uint64_t RegNo,
105 uint64_t Address, const void *Decoder)
106 {
107 return decodeRegisterClass(Inst, RegNo, SystemZMC_VR64Regs);
108 }
109
DecodeVR128BitRegisterClass(MCInst * Inst,uint64_t RegNo,uint64_t Address,const void * Decoder)110 static DecodeStatus DecodeVR128BitRegisterClass(MCInst *Inst, uint64_t RegNo,
111 uint64_t Address, const void *Decoder)
112 {
113 return decodeRegisterClass(Inst, RegNo, SystemZMC_VR128Regs);
114 }
115
DecodeAR32BitRegisterClass(MCInst * Inst,uint64_t RegNo,uint64_t Address,const void * Decoder)116 static DecodeStatus DecodeAR32BitRegisterClass(MCInst *Inst, uint64_t RegNo,
117 uint64_t Address, const void *Decoder)
118 {
119 return decodeRegisterClass(Inst, RegNo, SystemZMC_AR32Regs);
120 }
121
DecodeCR64BitRegisterClass(MCInst * Inst,uint64_t RegNo,uint64_t Address,const void * Decoder)122 static DecodeStatus DecodeCR64BitRegisterClass(MCInst *Inst, uint64_t RegNo,
123 uint64_t Address, const void *Decoder)
124 {
125 return decodeRegisterClass(Inst, RegNo, SystemZMC_CR64Regs);
126 }
127
decodeUImmOperand(MCInst * Inst,uint64_t Imm)128 static DecodeStatus decodeUImmOperand(MCInst *Inst, uint64_t Imm)
129 {
130 //assert(isUInt<N>(Imm) && "Invalid immediate");
131 MCOperand_CreateImm0(Inst, Imm);
132 return MCDisassembler_Success;
133 }
134
decodeSImmOperand(MCInst * Inst,uint64_t Imm,unsigned N)135 static DecodeStatus decodeSImmOperand(MCInst *Inst, uint64_t Imm, unsigned N)
136 {
137 //assert(isUInt<N>(Imm) && "Invalid immediate");
138 MCOperand_CreateImm0(Inst, SignExtend64(Imm, N));
139 return MCDisassembler_Success;
140 }
141
decodeU1ImmOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)142 static DecodeStatus decodeU1ImmOperand(MCInst *Inst, uint64_t Imm,
143 uint64_t Address, const void *Decoder)
144 {
145 return decodeUImmOperand(Inst, Imm);
146 }
147
decodeU2ImmOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)148 static DecodeStatus decodeU2ImmOperand(MCInst *Inst, uint64_t Imm,
149 uint64_t Address, const void *Decoder)
150 {
151 return decodeUImmOperand(Inst, Imm);
152 }
153
decodeU3ImmOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)154 static DecodeStatus decodeU3ImmOperand(MCInst *Inst, uint64_t Imm,
155 uint64_t Address, const void *Decoder)
156 {
157 return decodeUImmOperand(Inst, Imm);
158 }
159
decodeU4ImmOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)160 static DecodeStatus decodeU4ImmOperand(MCInst *Inst, uint64_t Imm,
161 uint64_t Address, const void *Decoder)
162 {
163 return decodeUImmOperand(Inst, Imm);
164 }
165
decodeU6ImmOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)166 static DecodeStatus decodeU6ImmOperand(MCInst *Inst, uint64_t Imm,
167 uint64_t Address, const void *Decoder)
168 {
169 return decodeUImmOperand(Inst, Imm);
170 }
171
decodeU8ImmOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)172 static DecodeStatus decodeU8ImmOperand(MCInst *Inst, uint64_t Imm,
173 uint64_t Address, const void *Decoder)
174 {
175 return decodeUImmOperand(Inst, Imm);
176 }
177
decodeU12ImmOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)178 static DecodeStatus decodeU12ImmOperand(MCInst *Inst, uint64_t Imm,
179 uint64_t Address, const void *Decoder)
180 {
181 return decodeUImmOperand(Inst, Imm);
182 }
183
decodeU16ImmOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)184 static DecodeStatus decodeU16ImmOperand(MCInst *Inst, uint64_t Imm,
185 uint64_t Address, const void *Decoder)
186 {
187 return decodeUImmOperand(Inst, Imm);
188 }
189
decodeU32ImmOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)190 static DecodeStatus decodeU32ImmOperand(MCInst *Inst, uint64_t Imm,
191 uint64_t Address, const void *Decoder)
192 {
193 return decodeUImmOperand(Inst, Imm);
194 }
195
decodeS8ImmOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)196 static DecodeStatus decodeS8ImmOperand(MCInst *Inst, uint64_t Imm,
197 uint64_t Address, const void *Decoder)
198 {
199 return decodeSImmOperand(Inst, Imm, 8);
200 }
201
decodeS16ImmOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)202 static DecodeStatus decodeS16ImmOperand(MCInst *Inst, uint64_t Imm,
203 uint64_t Address, const void *Decoder)
204 {
205 return decodeSImmOperand(Inst, Imm, 16);
206 }
207
decodeS32ImmOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)208 static DecodeStatus decodeS32ImmOperand(MCInst *Inst, uint64_t Imm,
209 uint64_t Address, const void *Decoder)
210 {
211 return decodeSImmOperand(Inst, Imm, 32);
212 }
213
decodePCDBLOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,unsigned N)214 static DecodeStatus decodePCDBLOperand(MCInst *Inst, uint64_t Imm,
215 uint64_t Address, unsigned N)
216 {
217 //assert(isUInt<N>(Imm) && "Invalid PC-relative offset");
218 MCOperand_CreateImm0(Inst, SignExtend64(Imm, N) * 2 + Address);
219 return MCDisassembler_Success;
220 }
221
decodePC12DBLBranchOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)222 static DecodeStatus decodePC12DBLBranchOperand(MCInst *Inst, uint64_t Imm,
223 uint64_t Address,
224 const void *Decoder)
225 {
226 return decodePCDBLOperand(Inst, Imm, Address, 12);
227 }
228
decodePC16DBLBranchOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)229 static DecodeStatus decodePC16DBLBranchOperand(MCInst *Inst, uint64_t Imm,
230 uint64_t Address,
231 const void *Decoder)
232 {
233 return decodePCDBLOperand(Inst, Imm, Address, 16);
234 }
235
decodePC24DBLBranchOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)236 static DecodeStatus decodePC24DBLBranchOperand(MCInst *Inst, uint64_t Imm,
237 uint64_t Address,
238 const void *Decoder)
239 {
240 return decodePCDBLOperand(Inst, Imm, Address, 24);
241 }
242
decodePC32DBLBranchOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)243 static DecodeStatus decodePC32DBLBranchOperand(MCInst *Inst, uint64_t Imm,
244 uint64_t Address,
245 const void *Decoder)
246 {
247 return decodePCDBLOperand(Inst, Imm, Address, 32);
248 }
249
decodePC32DBLOperand(MCInst * Inst,uint64_t Imm,uint64_t Address,const void * Decoder)250 static DecodeStatus decodePC32DBLOperand(MCInst *Inst, uint64_t Imm,
251 uint64_t Address,
252 const void *Decoder)
253 {
254 return decodePCDBLOperand(Inst, Imm, Address, 32);
255 }
256
decodeBDAddr12Operand(MCInst * Inst,uint64_t Field,const unsigned * Regs)257 static DecodeStatus decodeBDAddr12Operand(MCInst *Inst, uint64_t Field,
258 const unsigned *Regs)
259 {
260 uint64_t Base = Field >> 12;
261 uint64_t Disp = Field & 0xfff;
262 //assert(Base < 16 && "Invalid BDAddr12");
263
264 MCOperand_CreateReg0(Inst, Base == 0 ? 0 : Regs[Base]);
265 MCOperand_CreateImm0(Inst, Disp);
266
267 return MCDisassembler_Success;
268 }
269
decodeBDAddr20Operand(MCInst * Inst,uint64_t Field,const unsigned * Regs)270 static DecodeStatus decodeBDAddr20Operand(MCInst *Inst, uint64_t Field,
271 const unsigned *Regs)
272 {
273 uint64_t Base = Field >> 20;
274 uint64_t Disp = ((Field << 12) & 0xff000) | ((Field >> 8) & 0xfff);
275 //assert(Base < 16 && "Invalid BDAddr20");
276
277 MCOperand_CreateReg0(Inst, Base == 0 ? 0 : Regs[Base]);
278 MCOperand_CreateImm0(Inst, SignExtend64(Disp, 20));
279 return MCDisassembler_Success;
280 }
281
decodeBDXAddr12Operand(MCInst * Inst,uint64_t Field,const unsigned * Regs)282 static DecodeStatus decodeBDXAddr12Operand(MCInst *Inst, uint64_t Field,
283 const unsigned *Regs)
284 {
285 uint64_t Index = Field >> 16;
286 uint64_t Base = (Field >> 12) & 0xf;
287 uint64_t Disp = Field & 0xfff;
288
289 //assert(Index < 16 && "Invalid BDXAddr12");
290 MCOperand_CreateReg0(Inst, Base == 0 ? 0 : Regs[Base]);
291 MCOperand_CreateImm0(Inst, Disp);
292 MCOperand_CreateReg0(Inst, Index == 0 ? 0 : Regs[Index]);
293
294 return MCDisassembler_Success;
295 }
296
decodeBDXAddr20Operand(MCInst * Inst,uint64_t Field,const unsigned * Regs)297 static DecodeStatus decodeBDXAddr20Operand(MCInst *Inst, uint64_t Field,
298 const unsigned *Regs)
299 {
300 uint64_t Index = Field >> 24;
301 uint64_t Base = (Field >> 20) & 0xf;
302 uint64_t Disp = ((Field & 0xfff00) >> 8) | ((Field & 0xff) << 12);
303
304 //assert(Index < 16 && "Invalid BDXAddr20");
305 MCOperand_CreateReg0(Inst, Base == 0 ? 0 : Regs[Base]);
306 MCOperand_CreateImm0(Inst, SignExtend64(Disp, 20));
307 MCOperand_CreateReg0(Inst, Index == 0 ? 0 : Regs[Index]);
308
309 return MCDisassembler_Success;
310 }
311
decodeBDLAddr12Len8Operand(MCInst * Inst,uint64_t Field,const unsigned * Regs)312 static DecodeStatus decodeBDLAddr12Len8Operand(MCInst *Inst, uint64_t Field,
313 const unsigned *Regs)
314 {
315 uint64_t Length = Field >> 16;
316 uint64_t Base = (Field >> 12) & 0xf;
317 uint64_t Disp = Field & 0xfff;
318 //assert(Length < 256 && "Invalid BDLAddr12Len8");
319
320 MCOperand_CreateReg0(Inst, Base == 0 ? 0 : Regs[Base]);
321 MCOperand_CreateImm0(Inst, Disp);
322 MCOperand_CreateImm0(Inst, Length + 1);
323
324 return MCDisassembler_Success;
325 }
326
decodeBDRAddr12Operand(MCInst * Inst,uint64_t Field,const unsigned * Regs)327 static DecodeStatus decodeBDRAddr12Operand(MCInst *Inst, uint64_t Field,
328 const unsigned *Regs)
329 {
330 uint64_t Length = Field >> 16;
331 uint64_t Base = (Field >> 12) & 0xf;
332 uint64_t Disp = Field & 0xfff;
333 //assert(Length < 16 && "Invalid BDRAddr12");
334
335 MCOperand_CreateReg0(Inst, Base == 0 ? 0 : Regs[Base]);
336 MCOperand_CreateImm0(Inst, Disp);
337 MCOperand_CreateReg0(Inst, Regs[Length]);
338
339 return MCDisassembler_Success;
340 }
341
decodeBDVAddr12Operand(MCInst * Inst,uint64_t Field,const unsigned * Regs)342 static DecodeStatus decodeBDVAddr12Operand(MCInst *Inst, uint64_t Field,
343 const unsigned *Regs)
344 {
345 uint64_t Index = Field >> 16;
346 uint64_t Base = (Field >> 12) & 0xf;
347 uint64_t Disp = Field & 0xfff;
348 //assert(Index < 32 && "Invalid BDVAddr12");
349
350 MCOperand_CreateReg0(Inst, Base == 0 ? 0 : Regs[Base]);
351 MCOperand_CreateImm0(Inst, Disp);
352 MCOperand_CreateReg0(Inst, SystemZMC_VR128Regs[Index]);
353
354 return MCDisassembler_Success;
355 }
356
decodeBDAddr32Disp12Operand(MCInst * Inst,uint64_t Field,uint64_t Address,const void * Decoder)357 static DecodeStatus decodeBDAddr32Disp12Operand(MCInst *Inst, uint64_t Field,
358 uint64_t Address, const void *Decoder)
359 {
360 return decodeBDAddr12Operand(Inst, Field, SystemZMC_GR32Regs);
361 }
362
decodeBDAddr32Disp20Operand(MCInst * Inst,uint64_t Field,uint64_t Address,const void * Decoder)363 static DecodeStatus decodeBDAddr32Disp20Operand(MCInst *Inst, uint64_t Field,
364 uint64_t Address, const void *Decoder)
365 {
366 return decodeBDAddr20Operand(Inst, Field, SystemZMC_GR32Regs);
367 }
368
decodeBDAddr64Disp12Operand(MCInst * Inst,uint64_t Field,uint64_t Address,const void * Decoder)369 static DecodeStatus decodeBDAddr64Disp12Operand(MCInst *Inst, uint64_t Field,
370 uint64_t Address, const void *Decoder)
371 {
372 return decodeBDAddr12Operand(Inst, Field, SystemZMC_GR64Regs);
373 }
374
decodeBDAddr64Disp20Operand(MCInst * Inst,uint64_t Field,uint64_t Address,const void * Decoder)375 static DecodeStatus decodeBDAddr64Disp20Operand(MCInst *Inst, uint64_t Field,
376 uint64_t Address, const void *Decoder)
377 {
378 return decodeBDAddr20Operand(Inst, Field, SystemZMC_GR64Regs);
379 }
380
decodeBDXAddr64Disp12Operand(MCInst * Inst,uint64_t Field,uint64_t Address,const void * Decoder)381 static DecodeStatus decodeBDXAddr64Disp12Operand(MCInst *Inst, uint64_t Field,
382 uint64_t Address, const void *Decoder)
383 {
384 return decodeBDXAddr12Operand(Inst, Field, SystemZMC_GR64Regs);
385 }
386
decodeBDXAddr64Disp20Operand(MCInst * Inst,uint64_t Field,uint64_t Address,const void * Decoder)387 static DecodeStatus decodeBDXAddr64Disp20Operand(MCInst *Inst, uint64_t Field,
388 uint64_t Address, const void *Decoder)
389 {
390 return decodeBDXAddr20Operand(Inst, Field, SystemZMC_GR64Regs);
391 }
392
decodeBDLAddr64Disp12Len4Operand(MCInst * Inst,uint64_t Field,uint64_t Address,const void * Decoder)393 static DecodeStatus decodeBDLAddr64Disp12Len4Operand(MCInst *Inst, uint64_t Field,
394 uint64_t Address, const void *Decoder)
395 {
396 return decodeBDLAddr12Len8Operand(Inst, Field, SystemZMC_GR64Regs);
397 }
398
decodeBDLAddr64Disp12Len8Operand(MCInst * Inst,uint64_t Field,uint64_t Address,const void * Decoder)399 static DecodeStatus decodeBDLAddr64Disp12Len8Operand(MCInst *Inst, uint64_t Field,
400 uint64_t Address, const void *Decoder)
401 {
402 return decodeBDLAddr12Len8Operand(Inst, Field, SystemZMC_GR64Regs);
403 }
404
decodeBDRAddr64Disp12Operand(MCInst * Inst,uint64_t Field,uint64_t Address,const void * Decoder)405 static DecodeStatus decodeBDRAddr64Disp12Operand(MCInst *Inst, uint64_t Field,
406 uint64_t Address, const void *Decoder)
407 {
408 return decodeBDRAddr12Operand(Inst, Field, SystemZMC_GR64Regs);
409 }
410
decodeBDVAddr64Disp12Operand(MCInst * Inst,uint64_t Field,uint64_t Address,const void * Decoder)411 static DecodeStatus decodeBDVAddr64Disp12Operand(MCInst *Inst, uint64_t Field,
412 uint64_t Address, const void *Decoder)
413 {
414 return decodeBDVAddr12Operand(Inst, Field, SystemZMC_GR64Regs);
415 }
416
417
418 #define GET_SUBTARGETINFO_ENUM
419 #include "SystemZGenSubtargetInfo.inc"
420 #include "SystemZGenDisassemblerTables.inc"
SystemZ_getInstruction(csh ud,const uint8_t * code,size_t code_len,MCInst * MI,uint16_t * size,uint64_t address,void * info)421 bool SystemZ_getInstruction(csh ud, const uint8_t *code, size_t code_len, MCInst *MI,
422 uint16_t *size, uint64_t address, void *info)
423 {
424 uint64_t Inst;
425 const uint8_t *Table;
426 uint16_t I;
427
428 // The top 2 bits of the first byte specify the size.
429 if (*code < 0x40) {
430 *size = 2;
431 Table = DecoderTable16;
432 } else if (*code < 0xc0) {
433 *size = 4;
434 Table = DecoderTable32;
435 } else {
436 *size = 6;
437 Table = DecoderTable48;
438 }
439
440 if (code_len < *size)
441 // short of input data
442 return false;
443
444 if (MI->flat_insn->detail) {
445 memset(MI->flat_insn->detail, 0, offsetof(cs_detail, sysz)+sizeof(cs_sysz));
446 }
447
448 // Construct the instruction.
449 Inst = 0;
450 for (I = 0; I < *size; ++I)
451 Inst = (Inst << 8) | code[I];
452
453 return decodeInstruction(Table, MI, Inst, address, info, 0);
454 }
455
456 #define GET_REGINFO_ENUM
457 #define GET_REGINFO_MC_DESC
458 #include "SystemZGenRegisterInfo.inc"
SystemZ_init(MCRegisterInfo * MRI)459 void SystemZ_init(MCRegisterInfo *MRI)
460 {
461 /*
462 InitMCRegisterInfo(SystemZRegDesc, 98, RA, PC,
463 SystemZMCRegisterClasses, 12,
464 SystemZRegUnitRoots,
465 49,
466 SystemZRegDiffLists,
467 SystemZRegStrings,
468 SystemZSubRegIdxLists,
469 7,
470 SystemZSubRegIdxRanges,
471 SystemZRegEncodingTable);
472 */
473
474 MCRegisterInfo_InitMCRegisterInfo(MRI, SystemZRegDesc, 194,
475 0, 0,
476 SystemZMCRegisterClasses, 21,
477 0, 0,
478 SystemZRegDiffLists,
479 0,
480 SystemZSubRegIdxLists, 7,
481 0);
482 }
483
484 #endif
485