1#ifndef CAPSTONE_PPC_H
2#define CAPSTONE_PPC_H
3
4/* Capstone Disassembly Engine */
5/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2014 */
6
7#ifdef __cplusplus
8extern "C" {
9#endif
10
11#if !defined(_MSC_VER) || !defined(_KERNEL_MODE)
12#include <stdint.h>
13#endif
14
15#include "platform.h"
16
17#ifdef _MSC_VER
18#pragma warning(disable:4201)
19#endif
20
21//> PPC branch codes for some branch instructions
22typedef enum ppc_bc {
23 PPC_BC_INVALID = 0,
24 PPC_BC_LT = (0 << 5) | 12,
25 PPC_BC_LE = (1 << 5) | 4,
26 PPC_BC_EQ = (2 << 5) | 12,
27 PPC_BC_GE = (0 << 5) | 4,
28 PPC_BC_GT = (1 << 5) | 12,
29 PPC_BC_NE = (2 << 5) | 4,
30 PPC_BC_UN = (3 << 5) | 12,
31 PPC_BC_NU = (3 << 5) | 4,
32
33 // extra conditions
34 PPC_BC_SO = (4 << 5) | 12, // summary overflow
35 PPC_BC_NS = (4 << 5) | 4, // not summary overflow
36} ppc_bc;
37
38//> PPC branch hint for some branch instructions
39typedef enum ppc_bh {
40 PPC_BH_INVALID = 0, // no hint
41 PPC_BH_PLUS, // PLUS hint
42 PPC_BH_MINUS, // MINUS hint
43} ppc_bh;
44
45//> PPC registers
46typedef enum ppc_reg {
47 PPC_REG_INVALID = 0,
48
49 PPC_REG_CARRY,
50 PPC_REG_CC,
51 PPC_REG_CR0,
52 PPC_REG_CR1,
53 PPC_REG_CR2,
54 PPC_REG_CR3,
55 PPC_REG_CR4,
56 PPC_REG_CR5,
57 PPC_REG_CR6,
58 PPC_REG_CR7,
59 PPC_REG_CTR,
60 PPC_REG_F0,
61 PPC_REG_F1,
62 PPC_REG_F2,
63 PPC_REG_F3,
64 PPC_REG_F4,
65 PPC_REG_F5,
66 PPC_REG_F6,
67 PPC_REG_F7,
68 PPC_REG_F8,
69 PPC_REG_F9,
70 PPC_REG_F10,
71 PPC_REG_F11,
72 PPC_REG_F12,
73 PPC_REG_F13,
74 PPC_REG_F14,
75 PPC_REG_F15,
76 PPC_REG_F16,
77 PPC_REG_F17,
78 PPC_REG_F18,
79 PPC_REG_F19,
80 PPC_REG_F20,
81 PPC_REG_F21,
82 PPC_REG_F22,
83 PPC_REG_F23,
84 PPC_REG_F24,
85 PPC_REG_F25,
86 PPC_REG_F26,
87 PPC_REG_F27,
88 PPC_REG_F28,
89 PPC_REG_F29,
90 PPC_REG_F30,
91 PPC_REG_F31,
92 PPC_REG_LR,
93 PPC_REG_R0,
94 PPC_REG_R1,
95 PPC_REG_R2,
96 PPC_REG_R3,
97 PPC_REG_R4,
98 PPC_REG_R5,
99 PPC_REG_R6,
100 PPC_REG_R7,
101 PPC_REG_R8,
102 PPC_REG_R9,
103 PPC_REG_R10,
104 PPC_REG_R11,
105 PPC_REG_R12,
106 PPC_REG_R13,
107 PPC_REG_R14,
108 PPC_REG_R15,
109 PPC_REG_R16,
110 PPC_REG_R17,
111 PPC_REG_R18,
112 PPC_REG_R19,
113 PPC_REG_R20,
114 PPC_REG_R21,
115 PPC_REG_R22,
116 PPC_REG_R23,
117 PPC_REG_R24,
118 PPC_REG_R25,
119 PPC_REG_R26,
120 PPC_REG_R27,
121 PPC_REG_R28,
122 PPC_REG_R29,
123 PPC_REG_R30,
124 PPC_REG_R31,
125 PPC_REG_V0,
126 PPC_REG_V1,
127 PPC_REG_V2,
128 PPC_REG_V3,
129 PPC_REG_V4,
130 PPC_REG_V5,
131 PPC_REG_V6,
132 PPC_REG_V7,
133 PPC_REG_V8,
134 PPC_REG_V9,
135 PPC_REG_V10,
136 PPC_REG_V11,
137 PPC_REG_V12,
138 PPC_REG_V13,
139 PPC_REG_V14,
140 PPC_REG_V15,
141 PPC_REG_V16,
142 PPC_REG_V17,
143 PPC_REG_V18,
144 PPC_REG_V19,
145 PPC_REG_V20,
146 PPC_REG_V21,
147 PPC_REG_V22,
148 PPC_REG_V23,
149 PPC_REG_V24,
150 PPC_REG_V25,
151 PPC_REG_V26,
152 PPC_REG_V27,
153 PPC_REG_V28,
154 PPC_REG_V29,
155 PPC_REG_V30,
156 PPC_REG_V31,
157 PPC_REG_VRSAVE,
158 PPC_REG_VS0,
159 PPC_REG_VS1,
160 PPC_REG_VS2,
161 PPC_REG_VS3,
162 PPC_REG_VS4,
163 PPC_REG_VS5,
164 PPC_REG_VS6,
165 PPC_REG_VS7,
166 PPC_REG_VS8,
167 PPC_REG_VS9,
168 PPC_REG_VS10,
169 PPC_REG_VS11,
170 PPC_REG_VS12,
171 PPC_REG_VS13,
172 PPC_REG_VS14,
173 PPC_REG_VS15,
174 PPC_REG_VS16,
175 PPC_REG_VS17,
176 PPC_REG_VS18,
177 PPC_REG_VS19,
178 PPC_REG_VS20,
179 PPC_REG_VS21,
180 PPC_REG_VS22,
181 PPC_REG_VS23,
182 PPC_REG_VS24,
183 PPC_REG_VS25,
184 PPC_REG_VS26,
185 PPC_REG_VS27,
186 PPC_REG_VS28,
187 PPC_REG_VS29,
188 PPC_REG_VS30,
189 PPC_REG_VS31,
190 PPC_REG_VS32,
191 PPC_REG_VS33,
192 PPC_REG_VS34,
193 PPC_REG_VS35,
194 PPC_REG_VS36,
195 PPC_REG_VS37,
196 PPC_REG_VS38,
197 PPC_REG_VS39,
198 PPC_REG_VS40,
199 PPC_REG_VS41,
200 PPC_REG_VS42,
201 PPC_REG_VS43,
202 PPC_REG_VS44,
203 PPC_REG_VS45,
204 PPC_REG_VS46,
205 PPC_REG_VS47,
206 PPC_REG_VS48,
207 PPC_REG_VS49,
208 PPC_REG_VS50,
209 PPC_REG_VS51,
210 PPC_REG_VS52,
211 PPC_REG_VS53,
212 PPC_REG_VS54,
213 PPC_REG_VS55,
214 PPC_REG_VS56,
215 PPC_REG_VS57,
216 PPC_REG_VS58,
217 PPC_REG_VS59,
218 PPC_REG_VS60,
219 PPC_REG_VS61,
220 PPC_REG_VS62,
221 PPC_REG_VS63,
222
223 // extra registers for PPCMapping.c
224 PPC_REG_RM,
225 PPC_REG_CTR8,
226 PPC_REG_LR8,
227 PPC_REG_CR1EQ,
228
229 PPC_REG_ENDING, // <-- mark the end of the list of registers
230} ppc_reg;
231
232//> Operand type for instruction's operands
233typedef enum ppc_op_type {
234 PPC_OP_INVALID = 0, // = CS_OP_INVALID (Uninitialized).
235 PPC_OP_REG, // = CS_OP_REG (Register operand).
236 PPC_OP_IMM, // = CS_OP_IMM (Immediate operand).
237 PPC_OP_MEM, // = CS_OP_MEM (Memory operand).
238 PPC_OP_CRX = 64, // Condition Register field
239} ppc_op_type;
240
241// Instruction's operand referring to memory
242// This is associated with PPC_OP_MEM operand type above
243typedef struct ppc_op_mem {
244 ppc_reg base; // base register
245 int32_t disp; // displacement/offset value
246} ppc_op_mem;
247
248typedef struct ppc_op_crx {
249 unsigned int scale;
250 ppc_reg reg;
251 ppc_bc cond;
252} ppc_op_crx;
253
254// Instruction operand
255typedef struct cs_ppc_op {
256 ppc_op_type type; // operand type
257 union {
258 ppc_reg reg; // register value for REG operand
259 int32_t imm; // immediate value for IMM operand
260 ppc_op_mem mem; // base/disp value for MEM operand
261 ppc_op_crx crx; // operand with condition register
262 };
263} cs_ppc_op;
264
265// Instruction structure
266typedef struct cs_ppc {
267 // branch code for branch instructions
268 ppc_bc bc;
269
270 // branch hint for branch instructions
271 ppc_bh bh;
272
273 // if update_cr0 = True, then this 'dot' insn updates CR0
274 bool update_cr0;
275
276 // Number of operands of this instruction,
277 // or 0 when instruction has no operand.
278 uint8_t op_count;
279 cs_ppc_op operands[8]; // operands for this instruction.
280} cs_ppc;
281
282
283//> PPC instruction
284typedef enum ppc_insn {
285 PPC_INS_INVALID = 0,
286
287 PPC_INS_ADD,
288 PPC_INS_ADDC,
289 PPC_INS_ADDE,
290 PPC_INS_ADDI,
291 PPC_INS_ADDIC,
292 PPC_INS_ADDIS,
293 PPC_INS_ADDME,
294 PPC_INS_ADDZE,
295 PPC_INS_AND,
296 PPC_INS_ANDC,
297 PPC_INS_ANDIS,
298 PPC_INS_ANDI,
299 PPC_INS_B,
300 PPC_INS_BA,
301 PPC_INS_BC,
302 PPC_INS_BCCTR,
303 PPC_INS_BCCTRL,
304 PPC_INS_BCL,
305 PPC_INS_BCLR,
306 PPC_INS_BCLRL,
307 PPC_INS_BCTR,
308 PPC_INS_BCTRL,
309 PPC_INS_BDNZ,
310 PPC_INS_BDNZA,
311 PPC_INS_BDNZL,
312 PPC_INS_BDNZLA,
313 PPC_INS_BDNZLR,
314 PPC_INS_BDNZLRL,
315 PPC_INS_BDZ,
316 PPC_INS_BDZA,
317 PPC_INS_BDZL,
318 PPC_INS_BDZLA,
319 PPC_INS_BDZLR,
320 PPC_INS_BDZLRL,
321 PPC_INS_BL,
322 PPC_INS_BLA,
323 PPC_INS_BLR,
324 PPC_INS_BLRL,
325 PPC_INS_BRINC,
326 PPC_INS_CMPD,
327 PPC_INS_CMPDI,
328 PPC_INS_CMPLD,
329 PPC_INS_CMPLDI,
330 PPC_INS_CMPLW,
331 PPC_INS_CMPLWI,
332 PPC_INS_CMPW,
333 PPC_INS_CMPWI,
334 PPC_INS_CNTLZD,
335 PPC_INS_CNTLZW,
336 PPC_INS_CREQV,
337 PPC_INS_CRXOR,
338 PPC_INS_CRAND,
339 PPC_INS_CRANDC,
340 PPC_INS_CRNAND,
341 PPC_INS_CRNOR,
342 PPC_INS_CROR,
343 PPC_INS_CRORC,
344 PPC_INS_DCBA,
345 PPC_INS_DCBF,
346 PPC_INS_DCBI,
347 PPC_INS_DCBST,
348 PPC_INS_DCBT,
349 PPC_INS_DCBTST,
350 PPC_INS_DCBZ,
351 PPC_INS_DCBZL,
352 PPC_INS_DCCCI,
353 PPC_INS_DIVD,
354 PPC_INS_DIVDU,
355 PPC_INS_DIVW,
356 PPC_INS_DIVWU,
357 PPC_INS_DSS,
358 PPC_INS_DSSALL,
359 PPC_INS_DST,
360 PPC_INS_DSTST,
361 PPC_INS_DSTSTT,
362 PPC_INS_DSTT,
363 PPC_INS_EIEIO,
364 PPC_INS_EQV,
365 PPC_INS_EVABS,
366 PPC_INS_EVADDIW,
367 PPC_INS_EVADDSMIAAW,
368 PPC_INS_EVADDSSIAAW,
369 PPC_INS_EVADDUMIAAW,
370 PPC_INS_EVADDUSIAAW,
371 PPC_INS_EVADDW,
372 PPC_INS_EVAND,
373 PPC_INS_EVANDC,
374 PPC_INS_EVCMPEQ,
375 PPC_INS_EVCMPGTS,
376 PPC_INS_EVCMPGTU,
377 PPC_INS_EVCMPLTS,
378 PPC_INS_EVCMPLTU,
379 PPC_INS_EVCNTLSW,
380 PPC_INS_EVCNTLZW,
381 PPC_INS_EVDIVWS,
382 PPC_INS_EVDIVWU,
383 PPC_INS_EVEQV,
384 PPC_INS_EVEXTSB,
385 PPC_INS_EVEXTSH,
386 PPC_INS_EVLDD,
387 PPC_INS_EVLDDX,
388 PPC_INS_EVLDH,
389 PPC_INS_EVLDHX,
390 PPC_INS_EVLDW,
391 PPC_INS_EVLDWX,
392 PPC_INS_EVLHHESPLAT,
393 PPC_INS_EVLHHESPLATX,
394 PPC_INS_EVLHHOSSPLAT,
395 PPC_INS_EVLHHOSSPLATX,
396 PPC_INS_EVLHHOUSPLAT,
397 PPC_INS_EVLHHOUSPLATX,
398 PPC_INS_EVLWHE,
399 PPC_INS_EVLWHEX,
400 PPC_INS_EVLWHOS,
401 PPC_INS_EVLWHOSX,
402 PPC_INS_EVLWHOU,
403 PPC_INS_EVLWHOUX,
404 PPC_INS_EVLWHSPLAT,
405 PPC_INS_EVLWHSPLATX,
406 PPC_INS_EVLWWSPLAT,
407 PPC_INS_EVLWWSPLATX,
408 PPC_INS_EVMERGEHI,
409 PPC_INS_EVMERGEHILO,
410 PPC_INS_EVMERGELO,
411 PPC_INS_EVMERGELOHI,
412 PPC_INS_EVMHEGSMFAA,
413 PPC_INS_EVMHEGSMFAN,
414 PPC_INS_EVMHEGSMIAA,
415 PPC_INS_EVMHEGSMIAN,
416 PPC_INS_EVMHEGUMIAA,
417 PPC_INS_EVMHEGUMIAN,
418 PPC_INS_EVMHESMF,
419 PPC_INS_EVMHESMFA,
420 PPC_INS_EVMHESMFAAW,
421 PPC_INS_EVMHESMFANW,
422 PPC_INS_EVMHESMI,
423 PPC_INS_EVMHESMIA,
424 PPC_INS_EVMHESMIAAW,
425 PPC_INS_EVMHESMIANW,
426 PPC_INS_EVMHESSF,
427 PPC_INS_EVMHESSFA,
428 PPC_INS_EVMHESSFAAW,
429 PPC_INS_EVMHESSFANW,
430 PPC_INS_EVMHESSIAAW,
431 PPC_INS_EVMHESSIANW,
432 PPC_INS_EVMHEUMI,
433 PPC_INS_EVMHEUMIA,
434 PPC_INS_EVMHEUMIAAW,
435 PPC_INS_EVMHEUMIANW,
436 PPC_INS_EVMHEUSIAAW,
437 PPC_INS_EVMHEUSIANW,
438 PPC_INS_EVMHOGSMFAA,
439 PPC_INS_EVMHOGSMFAN,
440 PPC_INS_EVMHOGSMIAA,
441 PPC_INS_EVMHOGSMIAN,
442 PPC_INS_EVMHOGUMIAA,
443 PPC_INS_EVMHOGUMIAN,
444 PPC_INS_EVMHOSMF,
445 PPC_INS_EVMHOSMFA,
446 PPC_INS_EVMHOSMFAAW,
447 PPC_INS_EVMHOSMFANW,
448 PPC_INS_EVMHOSMI,
449 PPC_INS_EVMHOSMIA,
450 PPC_INS_EVMHOSMIAAW,
451 PPC_INS_EVMHOSMIANW,
452 PPC_INS_EVMHOSSF,
453 PPC_INS_EVMHOSSFA,
454 PPC_INS_EVMHOSSFAAW,
455 PPC_INS_EVMHOSSFANW,
456 PPC_INS_EVMHOSSIAAW,
457 PPC_INS_EVMHOSSIANW,
458 PPC_INS_EVMHOUMI,
459 PPC_INS_EVMHOUMIA,
460 PPC_INS_EVMHOUMIAAW,
461 PPC_INS_EVMHOUMIANW,
462 PPC_INS_EVMHOUSIAAW,
463 PPC_INS_EVMHOUSIANW,
464 PPC_INS_EVMRA,
465 PPC_INS_EVMWHSMF,
466 PPC_INS_EVMWHSMFA,
467 PPC_INS_EVMWHSMI,
468 PPC_INS_EVMWHSMIA,
469 PPC_INS_EVMWHSSF,
470 PPC_INS_EVMWHSSFA,
471 PPC_INS_EVMWHUMI,
472 PPC_INS_EVMWHUMIA,
473 PPC_INS_EVMWLSMIAAW,
474 PPC_INS_EVMWLSMIANW,
475 PPC_INS_EVMWLSSIAAW,
476 PPC_INS_EVMWLSSIANW,
477 PPC_INS_EVMWLUMI,
478 PPC_INS_EVMWLUMIA,
479 PPC_INS_EVMWLUMIAAW,
480 PPC_INS_EVMWLUMIANW,
481 PPC_INS_EVMWLUSIAAW,
482 PPC_INS_EVMWLUSIANW,
483 PPC_INS_EVMWSMF,
484 PPC_INS_EVMWSMFA,
485 PPC_INS_EVMWSMFAA,
486 PPC_INS_EVMWSMFAN,
487 PPC_INS_EVMWSMI,
488 PPC_INS_EVMWSMIA,
489 PPC_INS_EVMWSMIAA,
490 PPC_INS_EVMWSMIAN,
491 PPC_INS_EVMWSSF,
492 PPC_INS_EVMWSSFA,
493 PPC_INS_EVMWSSFAA,
494 PPC_INS_EVMWSSFAN,
495 PPC_INS_EVMWUMI,
496 PPC_INS_EVMWUMIA,
497 PPC_INS_EVMWUMIAA,
498 PPC_INS_EVMWUMIAN,
499 PPC_INS_EVNAND,
500 PPC_INS_EVNEG,
501 PPC_INS_EVNOR,
502 PPC_INS_EVOR,
503 PPC_INS_EVORC,
504 PPC_INS_EVRLW,
505 PPC_INS_EVRLWI,
506 PPC_INS_EVRNDW,
507 PPC_INS_EVSLW,
508 PPC_INS_EVSLWI,
509 PPC_INS_EVSPLATFI,
510 PPC_INS_EVSPLATI,
511 PPC_INS_EVSRWIS,
512 PPC_INS_EVSRWIU,
513 PPC_INS_EVSRWS,
514 PPC_INS_EVSRWU,
515 PPC_INS_EVSTDD,
516 PPC_INS_EVSTDDX,
517 PPC_INS_EVSTDH,
518 PPC_INS_EVSTDHX,
519 PPC_INS_EVSTDW,
520 PPC_INS_EVSTDWX,
521 PPC_INS_EVSTWHE,
522 PPC_INS_EVSTWHEX,
523 PPC_INS_EVSTWHO,
524 PPC_INS_EVSTWHOX,
525 PPC_INS_EVSTWWE,
526 PPC_INS_EVSTWWEX,
527 PPC_INS_EVSTWWO,
528 PPC_INS_EVSTWWOX,
529 PPC_INS_EVSUBFSMIAAW,
530 PPC_INS_EVSUBFSSIAAW,
531 PPC_INS_EVSUBFUMIAAW,
532 PPC_INS_EVSUBFUSIAAW,
533 PPC_INS_EVSUBFW,
534 PPC_INS_EVSUBIFW,
535 PPC_INS_EVXOR,
536 PPC_INS_EXTSB,
537 PPC_INS_EXTSH,
538 PPC_INS_EXTSW,
539 PPC_INS_FABS,
540 PPC_INS_FADD,
541 PPC_INS_FADDS,
542 PPC_INS_FCFID,
543 PPC_INS_FCFIDS,
544 PPC_INS_FCFIDU,
545 PPC_INS_FCFIDUS,
546 PPC_INS_FCMPU,
547 PPC_INS_FCPSGN,
548 PPC_INS_FCTID,
549 PPC_INS_FCTIDUZ,
550 PPC_INS_FCTIDZ,
551 PPC_INS_FCTIW,
552 PPC_INS_FCTIWUZ,
553 PPC_INS_FCTIWZ,
554 PPC_INS_FDIV,
555 PPC_INS_FDIVS,
556 PPC_INS_FMADD,
557 PPC_INS_FMADDS,
558 PPC_INS_FMR,
559 PPC_INS_FMSUB,
560 PPC_INS_FMSUBS,
561 PPC_INS_FMUL,
562 PPC_INS_FMULS,
563 PPC_INS_FNABS,
564 PPC_INS_FNEG,
565 PPC_INS_FNMADD,
566 PPC_INS_FNMADDS,
567 PPC_INS_FNMSUB,
568 PPC_INS_FNMSUBS,
569 PPC_INS_FRE,
570 PPC_INS_FRES,
571 PPC_INS_FRIM,
572 PPC_INS_FRIN,
573 PPC_INS_FRIP,
574 PPC_INS_FRIZ,
575 PPC_INS_FRSP,
576 PPC_INS_FRSQRTE,
577 PPC_INS_FRSQRTES,
578 PPC_INS_FSEL,
579 PPC_INS_FSQRT,
580 PPC_INS_FSQRTS,
581 PPC_INS_FSUB,
582 PPC_INS_FSUBS,
583 PPC_INS_ICBI,
584 PPC_INS_ICCCI,
585 PPC_INS_ISEL,
586 PPC_INS_ISYNC,
587 PPC_INS_LA,
588 PPC_INS_LBZ,
589 PPC_INS_LBZU,
590 PPC_INS_LBZUX,
591 PPC_INS_LBZX,
592 PPC_INS_LD,
593 PPC_INS_LDARX,
594 PPC_INS_LDBRX,
595 PPC_INS_LDU,
596 PPC_INS_LDUX,
597 PPC_INS_LDX,
598 PPC_INS_LFD,
599 PPC_INS_LFDU,
600 PPC_INS_LFDUX,
601 PPC_INS_LFDX,
602 PPC_INS_LFIWAX,
603 PPC_INS_LFIWZX,
604 PPC_INS_LFS,
605 PPC_INS_LFSU,
606 PPC_INS_LFSUX,
607 PPC_INS_LFSX,
608 PPC_INS_LHA,
609 PPC_INS_LHAU,
610 PPC_INS_LHAUX,
611 PPC_INS_LHAX,
612 PPC_INS_LHBRX,
613 PPC_INS_LHZ,
614 PPC_INS_LHZU,
615 PPC_INS_LHZUX,
616 PPC_INS_LHZX,
617 PPC_INS_LI,
618 PPC_INS_LIS,
619 PPC_INS_LMW,
620 PPC_INS_LSWI,
621 PPC_INS_LVEBX,
622 PPC_INS_LVEHX,
623 PPC_INS_LVEWX,
624 PPC_INS_LVSL,
625 PPC_INS_LVSR,
626 PPC_INS_LVX,
627 PPC_INS_LVXL,
628 PPC_INS_LWA,
629 PPC_INS_LWARX,
630 PPC_INS_LWAUX,
631 PPC_INS_LWAX,
632 PPC_INS_LWBRX,
633 PPC_INS_LWZ,
634 PPC_INS_LWZU,
635 PPC_INS_LWZUX,
636 PPC_INS_LWZX,
637 PPC_INS_LXSDX,
638 PPC_INS_LXVD2X,
639 PPC_INS_LXVDSX,
640 PPC_INS_LXVW4X,
641 PPC_INS_MBAR,
642 PPC_INS_MCRF,
643 PPC_INS_MFCR,
644 PPC_INS_MFCTR,
645 PPC_INS_MFDCR,
646 PPC_INS_MFFS,
647 PPC_INS_MFLR,
648 PPC_INS_MFMSR,
649 PPC_INS_MFOCRF,
650 PPC_INS_MFSPR,
651 PPC_INS_MFSR,
652 PPC_INS_MFSRIN,
653 PPC_INS_MFTB,
654 PPC_INS_MFVSCR,
655 PPC_INS_MSYNC,
656 PPC_INS_MTCRF,
657 PPC_INS_MTCTR,
658 PPC_INS_MTDCR,
659 PPC_INS_MTFSB0,
660 PPC_INS_MTFSB1,
661 PPC_INS_MTFSF,
662 PPC_INS_MTLR,
663 PPC_INS_MTMSR,
664 PPC_INS_MTMSRD,
665 PPC_INS_MTOCRF,
666 PPC_INS_MTSPR,
667 PPC_INS_MTSR,
668 PPC_INS_MTSRIN,
669 PPC_INS_MTVSCR,
670 PPC_INS_MULHD,
671 PPC_INS_MULHDU,
672 PPC_INS_MULHW,
673 PPC_INS_MULHWU,
674 PPC_INS_MULLD,
675 PPC_INS_MULLI,
676 PPC_INS_MULLW,
677 PPC_INS_NAND,
678 PPC_INS_NEG,
679 PPC_INS_NOP,
680 PPC_INS_ORI,
681 PPC_INS_NOR,
682 PPC_INS_OR,
683 PPC_INS_ORC,
684 PPC_INS_ORIS,
685 PPC_INS_POPCNTD,
686 PPC_INS_POPCNTW,
687 PPC_INS_RFCI,
688 PPC_INS_RFDI,
689 PPC_INS_RFI,
690 PPC_INS_RFID,
691 PPC_INS_RFMCI,
692 PPC_INS_RLDCL,
693 PPC_INS_RLDCR,
694 PPC_INS_RLDIC,
695 PPC_INS_RLDICL,
696 PPC_INS_RLDICR,
697 PPC_INS_RLDIMI,
698 PPC_INS_RLWIMI,
699 PPC_INS_RLWINM,
700 PPC_INS_RLWNM,
701 PPC_INS_SC,
702 PPC_INS_SLBIA,
703 PPC_INS_SLBIE,
704 PPC_INS_SLBMFEE,
705 PPC_INS_SLBMTE,
706 PPC_INS_SLD,
707 PPC_INS_SLW,
708 PPC_INS_SRAD,
709 PPC_INS_SRADI,
710 PPC_INS_SRAW,
711 PPC_INS_SRAWI,
712 PPC_INS_SRD,
713 PPC_INS_SRW,
714 PPC_INS_STB,
715 PPC_INS_STBU,
716 PPC_INS_STBUX,
717 PPC_INS_STBX,
718 PPC_INS_STD,
719 PPC_INS_STDBRX,
720 PPC_INS_STDCX,
721 PPC_INS_STDU,
722 PPC_INS_STDUX,
723 PPC_INS_STDX,
724 PPC_INS_STFD,
725 PPC_INS_STFDU,
726 PPC_INS_STFDUX,
727 PPC_INS_STFDX,
728 PPC_INS_STFIWX,
729 PPC_INS_STFS,
730 PPC_INS_STFSU,
731 PPC_INS_STFSUX,
732 PPC_INS_STFSX,
733 PPC_INS_STH,
734 PPC_INS_STHBRX,
735 PPC_INS_STHU,
736 PPC_INS_STHUX,
737 PPC_INS_STHX,
738 PPC_INS_STMW,
739 PPC_INS_STSWI,
740 PPC_INS_STVEBX,
741 PPC_INS_STVEHX,
742 PPC_INS_STVEWX,
743 PPC_INS_STVX,
744 PPC_INS_STVXL,
745 PPC_INS_STW,
746 PPC_INS_STWBRX,
747 PPC_INS_STWCX,
748 PPC_INS_STWU,
749 PPC_INS_STWUX,
750 PPC_INS_STWX,
751 PPC_INS_STXSDX,
752 PPC_INS_STXVD2X,
753 PPC_INS_STXVW4X,
754 PPC_INS_SUBF,
755 PPC_INS_SUBFC,
756 PPC_INS_SUBFE,
757 PPC_INS_SUBFIC,
758 PPC_INS_SUBFME,
759 PPC_INS_SUBFZE,
760 PPC_INS_SYNC,
761 PPC_INS_TD,
762 PPC_INS_TDI,
763 PPC_INS_TLBIA,
764 PPC_INS_TLBIE,
765 PPC_INS_TLBIEL,
766 PPC_INS_TLBIVAX,
767 PPC_INS_TLBLD,
768 PPC_INS_TLBLI,
769 PPC_INS_TLBRE,
770 PPC_INS_TLBSX,
771 PPC_INS_TLBSYNC,
772 PPC_INS_TLBWE,
773 PPC_INS_TRAP,
774 PPC_INS_TW,
775 PPC_INS_TWI,
776 PPC_INS_VADDCUW,
777 PPC_INS_VADDFP,
778 PPC_INS_VADDSBS,
779 PPC_INS_VADDSHS,
780 PPC_INS_VADDSWS,
781 PPC_INS_VADDUBM,
782 PPC_INS_VADDUBS,
783 PPC_INS_VADDUHM,
784 PPC_INS_VADDUHS,
785 PPC_INS_VADDUWM,
786 PPC_INS_VADDUWS,
787 PPC_INS_VAND,
788 PPC_INS_VANDC,
789 PPC_INS_VAVGSB,
790 PPC_INS_VAVGSH,
791 PPC_INS_VAVGSW,
792 PPC_INS_VAVGUB,
793 PPC_INS_VAVGUH,
794 PPC_INS_VAVGUW,
795 PPC_INS_VCFSX,
796 PPC_INS_VCFUX,
797 PPC_INS_VCMPBFP,
798 PPC_INS_VCMPEQFP,
799 PPC_INS_VCMPEQUB,
800 PPC_INS_VCMPEQUH,
801 PPC_INS_VCMPEQUW,
802 PPC_INS_VCMPGEFP,
803 PPC_INS_VCMPGTFP,
804 PPC_INS_VCMPGTSB,
805 PPC_INS_VCMPGTSH,
806 PPC_INS_VCMPGTSW,
807 PPC_INS_VCMPGTUB,
808 PPC_INS_VCMPGTUH,
809 PPC_INS_VCMPGTUW,
810 PPC_INS_VCTSXS,
811 PPC_INS_VCTUXS,
812 PPC_INS_VEXPTEFP,
813 PPC_INS_VLOGEFP,
814 PPC_INS_VMADDFP,
815 PPC_INS_VMAXFP,
816 PPC_INS_VMAXSB,
817 PPC_INS_VMAXSH,
818 PPC_INS_VMAXSW,
819 PPC_INS_VMAXUB,
820 PPC_INS_VMAXUH,
821 PPC_INS_VMAXUW,
822 PPC_INS_VMHADDSHS,
823 PPC_INS_VMHRADDSHS,
824 PPC_INS_VMINFP,
825 PPC_INS_VMINSB,
826 PPC_INS_VMINSH,
827 PPC_INS_VMINSW,
828 PPC_INS_VMINUB,
829 PPC_INS_VMINUH,
830 PPC_INS_VMINUW,
831 PPC_INS_VMLADDUHM,
832 PPC_INS_VMRGHB,
833 PPC_INS_VMRGHH,
834 PPC_INS_VMRGHW,
835 PPC_INS_VMRGLB,
836 PPC_INS_VMRGLH,
837 PPC_INS_VMRGLW,
838 PPC_INS_VMSUMMBM,
839 PPC_INS_VMSUMSHM,
840 PPC_INS_VMSUMSHS,
841 PPC_INS_VMSUMUBM,
842 PPC_INS_VMSUMUHM,
843 PPC_INS_VMSUMUHS,
844 PPC_INS_VMULESB,
845 PPC_INS_VMULESH,
846 PPC_INS_VMULEUB,
847 PPC_INS_VMULEUH,
848 PPC_INS_VMULOSB,
849 PPC_INS_VMULOSH,
850 PPC_INS_VMULOUB,
851 PPC_INS_VMULOUH,
852 PPC_INS_VNMSUBFP,
853 PPC_INS_VNOR,
854 PPC_INS_VOR,
855 PPC_INS_VPERM,
856 PPC_INS_VPKPX,
857 PPC_INS_VPKSHSS,
858 PPC_INS_VPKSHUS,
859 PPC_INS_VPKSWSS,
860 PPC_INS_VPKSWUS,
861 PPC_INS_VPKUHUM,
862 PPC_INS_VPKUHUS,
863 PPC_INS_VPKUWUM,
864 PPC_INS_VPKUWUS,
865 PPC_INS_VREFP,
866 PPC_INS_VRFIM,
867 PPC_INS_VRFIN,
868 PPC_INS_VRFIP,
869 PPC_INS_VRFIZ,
870 PPC_INS_VRLB,
871 PPC_INS_VRLH,
872 PPC_INS_VRLW,
873 PPC_INS_VRSQRTEFP,
874 PPC_INS_VSEL,
875 PPC_INS_VSL,
876 PPC_INS_VSLB,
877 PPC_INS_VSLDOI,
878 PPC_INS_VSLH,
879 PPC_INS_VSLO,
880 PPC_INS_VSLW,
881 PPC_INS_VSPLTB,
882 PPC_INS_VSPLTH,
883 PPC_INS_VSPLTISB,
884 PPC_INS_VSPLTISH,
885 PPC_INS_VSPLTISW,
886 PPC_INS_VSPLTW,
887 PPC_INS_VSR,
888 PPC_INS_VSRAB,
889 PPC_INS_VSRAH,
890 PPC_INS_VSRAW,
891 PPC_INS_VSRB,
892 PPC_INS_VSRH,
893 PPC_INS_VSRO,
894 PPC_INS_VSRW,
895 PPC_INS_VSUBCUW,
896 PPC_INS_VSUBFP,
897 PPC_INS_VSUBSBS,
898 PPC_INS_VSUBSHS,
899 PPC_INS_VSUBSWS,
900 PPC_INS_VSUBUBM,
901 PPC_INS_VSUBUBS,
902 PPC_INS_VSUBUHM,
903 PPC_INS_VSUBUHS,
904 PPC_INS_VSUBUWM,
905 PPC_INS_VSUBUWS,
906 PPC_INS_VSUM2SWS,
907 PPC_INS_VSUM4SBS,
908 PPC_INS_VSUM4SHS,
909 PPC_INS_VSUM4UBS,
910 PPC_INS_VSUMSWS,
911 PPC_INS_VUPKHPX,
912 PPC_INS_VUPKHSB,
913 PPC_INS_VUPKHSH,
914 PPC_INS_VUPKLPX,
915 PPC_INS_VUPKLSB,
916 PPC_INS_VUPKLSH,
917 PPC_INS_VXOR,
918 PPC_INS_WAIT,
919 PPC_INS_WRTEE,
920 PPC_INS_WRTEEI,
921 PPC_INS_XOR,
922 PPC_INS_XORI,
923 PPC_INS_XORIS,
924 PPC_INS_XSABSDP,
925 PPC_INS_XSADDDP,
926 PPC_INS_XSCMPODP,
927 PPC_INS_XSCMPUDP,
928 PPC_INS_XSCPSGNDP,
929 PPC_INS_XSCVDPSP,
930 PPC_INS_XSCVDPSXDS,
931 PPC_INS_XSCVDPSXWS,
932 PPC_INS_XSCVDPUXDS,
933 PPC_INS_XSCVDPUXWS,
934 PPC_INS_XSCVSPDP,
935 PPC_INS_XSCVSXDDP,
936 PPC_INS_XSCVUXDDP,
937 PPC_INS_XSDIVDP,
938 PPC_INS_XSMADDADP,
939 PPC_INS_XSMADDMDP,
940 PPC_INS_XSMAXDP,
941 PPC_INS_XSMINDP,
942 PPC_INS_XSMSUBADP,
943 PPC_INS_XSMSUBMDP,
944 PPC_INS_XSMULDP,
945 PPC_INS_XSNABSDP,
946 PPC_INS_XSNEGDP,
947 PPC_INS_XSNMADDADP,
948 PPC_INS_XSNMADDMDP,
949 PPC_INS_XSNMSUBADP,
950 PPC_INS_XSNMSUBMDP,
951 PPC_INS_XSRDPI,
952 PPC_INS_XSRDPIC,
953 PPC_INS_XSRDPIM,
954 PPC_INS_XSRDPIP,
955 PPC_INS_XSRDPIZ,
956 PPC_INS_XSREDP,
957 PPC_INS_XSRSQRTEDP,
958 PPC_INS_XSSQRTDP,
959 PPC_INS_XSSUBDP,
960 PPC_INS_XSTDIVDP,
961 PPC_INS_XSTSQRTDP,
962 PPC_INS_XVABSDP,
963 PPC_INS_XVABSSP,
964 PPC_INS_XVADDDP,
965 PPC_INS_XVADDSP,
966 PPC_INS_XVCMPEQDP,
967 PPC_INS_XVCMPEQSP,
968 PPC_INS_XVCMPGEDP,
969 PPC_INS_XVCMPGESP,
970 PPC_INS_XVCMPGTDP,
971 PPC_INS_XVCMPGTSP,
972 PPC_INS_XVCPSGNDP,
973 PPC_INS_XVCPSGNSP,
974 PPC_INS_XVCVDPSP,
975 PPC_INS_XVCVDPSXDS,
976 PPC_INS_XVCVDPSXWS,
977 PPC_INS_XVCVDPUXDS,
978 PPC_INS_XVCVDPUXWS,
979 PPC_INS_XVCVSPDP,
980 PPC_INS_XVCVSPSXDS,
981 PPC_INS_XVCVSPSXWS,
982 PPC_INS_XVCVSPUXDS,
983 PPC_INS_XVCVSPUXWS,
984 PPC_INS_XVCVSXDDP,
985 PPC_INS_XVCVSXDSP,
986 PPC_INS_XVCVSXWDP,
987 PPC_INS_XVCVSXWSP,
988 PPC_INS_XVCVUXDDP,
989 PPC_INS_XVCVUXDSP,
990 PPC_INS_XVCVUXWDP,
991 PPC_INS_XVCVUXWSP,
992 PPC_INS_XVDIVDP,
993 PPC_INS_XVDIVSP,
994 PPC_INS_XVMADDADP,
995 PPC_INS_XVMADDASP,
996 PPC_INS_XVMADDMDP,
997 PPC_INS_XVMADDMSP,
998 PPC_INS_XVMAXDP,
999 PPC_INS_XVMAXSP,
1000 PPC_INS_XVMINDP,
1001 PPC_INS_XVMINSP,
1002 PPC_INS_XVMSUBADP,
1003 PPC_INS_XVMSUBASP,
1004 PPC_INS_XVMSUBMDP,
1005 PPC_INS_XVMSUBMSP,
1006 PPC_INS_XVMULDP,
1007 PPC_INS_XVMULSP,
1008 PPC_INS_XVNABSDP,
1009 PPC_INS_XVNABSSP,
1010 PPC_INS_XVNEGDP,
1011 PPC_INS_XVNEGSP,
1012 PPC_INS_XVNMADDADP,
1013 PPC_INS_XVNMADDASP,
1014 PPC_INS_XVNMADDMDP,
1015 PPC_INS_XVNMADDMSP,
1016 PPC_INS_XVNMSUBADP,
1017 PPC_INS_XVNMSUBASP,
1018 PPC_INS_XVNMSUBMDP,
1019 PPC_INS_XVNMSUBMSP,
1020 PPC_INS_XVRDPI,
1021 PPC_INS_XVRDPIC,
1022 PPC_INS_XVRDPIM,
1023 PPC_INS_XVRDPIP,
1024 PPC_INS_XVRDPIZ,
1025 PPC_INS_XVREDP,
1026 PPC_INS_XVRESP,
1027 PPC_INS_XVRSPI,
1028 PPC_INS_XVRSPIC,
1029 PPC_INS_XVRSPIM,
1030 PPC_INS_XVRSPIP,
1031 PPC_INS_XVRSPIZ,
1032 PPC_INS_XVRSQRTEDP,
1033 PPC_INS_XVRSQRTESP,
1034 PPC_INS_XVSQRTDP,
1035 PPC_INS_XVSQRTSP,
1036 PPC_INS_XVSUBDP,
1037 PPC_INS_XVSUBSP,
1038 PPC_INS_XVTDIVDP,
1039 PPC_INS_XVTDIVSP,
1040 PPC_INS_XVTSQRTDP,
1041 PPC_INS_XVTSQRTSP,
1042 PPC_INS_XXLAND,
1043 PPC_INS_XXLANDC,
1044 PPC_INS_XXLNOR,
1045 PPC_INS_XXLOR,
1046 PPC_INS_XXLXOR,
1047 PPC_INS_XXMRGHW,
1048 PPC_INS_XXMRGLW,
1049 PPC_INS_XXPERMDI,
1050 PPC_INS_XXSEL,
1051 PPC_INS_XXSLDWI,
1052 PPC_INS_XXSPLTW,
1053 PPC_INS_BCA,
1054 PPC_INS_BCLA,
1055
1056 // extra & alias instructions
1057 PPC_INS_SLWI,
1058 PPC_INS_SRWI,
1059 PPC_INS_SLDI,
1060
1061 PPC_INS_BTA,
1062 PPC_INS_CRSET,
1063 PPC_INS_CRNOT,
1064 PPC_INS_CRMOVE,
1065 PPC_INS_CRCLR,
1066 PPC_INS_MFBR0,
1067 PPC_INS_MFBR1,
1068 PPC_INS_MFBR2,
1069 PPC_INS_MFBR3,
1070 PPC_INS_MFBR4,
1071 PPC_INS_MFBR5,
1072 PPC_INS_MFBR6,
1073 PPC_INS_MFBR7,
1074 PPC_INS_MFXER,
1075 PPC_INS_MFRTCU,
1076 PPC_INS_MFRTCL,
1077 PPC_INS_MFDSCR,
1078 PPC_INS_MFDSISR,
1079 PPC_INS_MFDAR,
1080 PPC_INS_MFSRR2,
1081 PPC_INS_MFSRR3,
1082 PPC_INS_MFCFAR,
1083 PPC_INS_MFAMR,
1084 PPC_INS_MFPID,
1085 PPC_INS_MFTBLO,
1086 PPC_INS_MFTBHI,
1087 PPC_INS_MFDBATU,
1088 PPC_INS_MFDBATL,
1089 PPC_INS_MFIBATU,
1090 PPC_INS_MFIBATL,
1091 PPC_INS_MFDCCR,
1092 PPC_INS_MFICCR,
1093 PPC_INS_MFDEAR,
1094 PPC_INS_MFESR,
1095 PPC_INS_MFSPEFSCR,
1096 PPC_INS_MFTCR,
1097 PPC_INS_MFASR,
1098 PPC_INS_MFPVR,
1099 PPC_INS_MFTBU,
1100 PPC_INS_MTCR,
1101 PPC_INS_MTBR0,
1102 PPC_INS_MTBR1,
1103 PPC_INS_MTBR2,
1104 PPC_INS_MTBR3,
1105 PPC_INS_MTBR4,
1106 PPC_INS_MTBR5,
1107 PPC_INS_MTBR6,
1108 PPC_INS_MTBR7,
1109 PPC_INS_MTXER,
1110 PPC_INS_MTDSCR,
1111 PPC_INS_MTDSISR,
1112 PPC_INS_MTDAR,
1113 PPC_INS_MTSRR2,
1114 PPC_INS_MTSRR3,
1115 PPC_INS_MTCFAR,
1116 PPC_INS_MTAMR,
1117 PPC_INS_MTPID,
1118 PPC_INS_MTTBL,
1119 PPC_INS_MTTBU,
1120 PPC_INS_MTTBLO,
1121 PPC_INS_MTTBHI,
1122 PPC_INS_MTDBATU,
1123 PPC_INS_MTDBATL,
1124 PPC_INS_MTIBATU,
1125 PPC_INS_MTIBATL,
1126 PPC_INS_MTDCCR,
1127 PPC_INS_MTICCR,
1128 PPC_INS_MTDEAR,
1129 PPC_INS_MTESR,
1130 PPC_INS_MTSPEFSCR,
1131 PPC_INS_MTTCR,
1132 PPC_INS_NOT,
1133 PPC_INS_MR,
1134 PPC_INS_ROTLD,
1135 PPC_INS_ROTLDI,
1136 PPC_INS_CLRLDI,
1137 PPC_INS_ROTLWI,
1138 PPC_INS_CLRLWI,
1139 PPC_INS_ROTLW,
1140 PPC_INS_SUB,
1141 PPC_INS_SUBC,
1142 PPC_INS_LWSYNC,
1143 PPC_INS_PTESYNC,
1144 PPC_INS_TDLT,
1145 PPC_INS_TDEQ,
1146 PPC_INS_TDGT,
1147 PPC_INS_TDNE,
1148 PPC_INS_TDLLT,
1149 PPC_INS_TDLGT,
1150 PPC_INS_TDU,
1151 PPC_INS_TDLTI,
1152 PPC_INS_TDEQI,
1153 PPC_INS_TDGTI,
1154 PPC_INS_TDNEI,
1155 PPC_INS_TDLLTI,
1156 PPC_INS_TDLGTI,
1157 PPC_INS_TDUI,
1158 PPC_INS_TLBREHI,
1159 PPC_INS_TLBRELO,
1160 PPC_INS_TLBWEHI,
1161 PPC_INS_TLBWELO,
1162 PPC_INS_TWLT,
1163 PPC_INS_TWEQ,
1164 PPC_INS_TWGT,
1165 PPC_INS_TWNE,
1166 PPC_INS_TWLLT,
1167 PPC_INS_TWLGT,
1168 PPC_INS_TWU,
1169 PPC_INS_TWLTI,
1170 PPC_INS_TWEQI,
1171 PPC_INS_TWGTI,
1172 PPC_INS_TWNEI,
1173 PPC_INS_TWLLTI,
1174 PPC_INS_TWLGTI,
1175 PPC_INS_TWUI,
1176 PPC_INS_WAITRSV,
1177 PPC_INS_WAITIMPL,
1178 PPC_INS_XNOP,
1179 PPC_INS_XVMOVDP,
1180 PPC_INS_XVMOVSP,
1181 PPC_INS_XXSPLTD,
1182 PPC_INS_XXMRGHD,
1183 PPC_INS_XXMRGLD,
1184 PPC_INS_XXSWAPD,
1185 PPC_INS_BT,
1186 PPC_INS_BF,
1187 PPC_INS_BDNZT,
1188 PPC_INS_BDNZF,
1189 PPC_INS_BDZF,
1190 PPC_INS_BDZT,
1191 PPC_INS_BFA,
1192 PPC_INS_BDNZTA,
1193 PPC_INS_BDNZFA,
1194 PPC_INS_BDZTA,
1195 PPC_INS_BDZFA,
1196 PPC_INS_BTCTR,
1197 PPC_INS_BFCTR,
1198 PPC_INS_BTCTRL,
1199 PPC_INS_BFCTRL,
1200 PPC_INS_BTL,
1201 PPC_INS_BFL,
1202 PPC_INS_BDNZTL,
1203 PPC_INS_BDNZFL,
1204 PPC_INS_BDZTL,
1205 PPC_INS_BDZFL,
1206 PPC_INS_BTLA,
1207 PPC_INS_BFLA,
1208 PPC_INS_BDNZTLA,
1209 PPC_INS_BDNZFLA,
1210 PPC_INS_BDZTLA,
1211 PPC_INS_BDZFLA,
1212 PPC_INS_BTLR,
1213 PPC_INS_BFLR,
1214 PPC_INS_BDNZTLR,
1215 PPC_INS_BDZTLR,
1216 PPC_INS_BDZFLR,
1217 PPC_INS_BTLRL,
1218 PPC_INS_BFLRL,
1219 PPC_INS_BDNZTLRL,
1220 PPC_INS_BDNZFLRL,
1221 PPC_INS_BDZTLRL,
1222 PPC_INS_BDZFLRL,
1223
1224 PPC_INS_ENDING, // <-- mark the end of the list of instructions
1225} ppc_insn;
1226
1227//> Group of PPC instructions
1228typedef enum ppc_insn_group {
1229 PPC_GRP_INVALID = 0, // = CS_GRP_INVALID
1230
1231 //> Generic groups
1232 // all jump instructions (conditional+direct+indirect jumps)
1233 PPC_GRP_JUMP, // = CS_GRP_JUMP
1234
1235 //> Architecture-specific groups
1236 PPC_GRP_ALTIVEC = 128,
1237 PPC_GRP_MODE32,
1238 PPC_GRP_MODE64,
1239 PPC_GRP_BOOKE,
1240 PPC_GRP_NOTBOOKE,
1241 PPC_GRP_SPE,
1242 PPC_GRP_VSX,
1243 PPC_GRP_E500,
1244 PPC_GRP_PPC4XX,
1245 PPC_GRP_PPC6XX,
1246
1247 PPC_GRP_ENDING, // <-- mark the end of the list of groups
1248} ppc_insn_group;
1249
1250#ifdef __cplusplus
1251}
1252#endif
1253
1254#endif
1255