1 /// Types and constants of PowerPc architecture
2 module capstone.ppc;
3 
4 import std.variant;
5 import std.exception: enforce;
6 
7 import capstone.internal;
8 import capstone.utils;
9 
10 /** Instruction's operand referring to memory
11 
12 This is associated with the `PpcOpType.mem` operand type
13 */
14 struct PpcOpMem {
15 	PpcRegister base; // base register
16 	int disp;		  // displacement/offset value
17 }
18 
19 /** Instruction's operand referring to a conditional register
20 
21 This is associated with the `PpcOpType.crx` operand type
22 */
23 struct PpcOpCrx {
24 	uint scale;
25 	PpcRegister reg;
26 	PpcBc cond;
27 }
28 
29 /// Tagged union of possible operand types
30 alias PpcOpValue = TaggedUnion!(PpcRegister, "reg", uint, "imm", PpcOpMem, "mem", PpcOpCrx, "crx");
31 
32 /// Instruction's operand
33 struct PpcOp {
34     PpcOpType type;   /// Operand type
35     PpcOpValue value; /// Operand value of type `type`
36     alias value this; /// Convenient access to value (as in original bindings)
37 
38     package this(cs_ppc_op internal){
39         type = internal.type;
40         final switch(internal.type) {
41             case PpcOpType.invalid:
42                 break;
43             case PpcOpType.reg:
44                 value.reg = internal.reg;
45                 break;
46             case PpcOpType.imm:
47                 value.imm = internal.imm;
48                 break;
49             case PpcOpType.mem:
50                 value.mem = internal.mem;
51                 break;
52             case PpcOpType.crx:
53                 value.crx = internal.crx;
54                 break;
55         }
56     }
57 }
58 
59 /// Ppc-specific information about an instruction
60 struct PpcInstructionDetail {
61 	PpcBc bc;		  /// Branch code for branch instructions
62 	PpcBh bh;		  /// Branch hint for branch instructions
63 	bool updateCr0;	  /// If true, then this 'dot' instruction updates CR0
64     PpcOp[] operands; /// Operands for this instruction.
65 
66     package this(cs_arch_detail arch_detail){
67 		this(arch_detail.ppc);
68 	}
69     package this(cs_ppc internal){
70 		bc = internal.bc;
71 		bh = internal.bh;
72 		updateCr0 = internal.update_cr0;
73         foreach(op; internal.operands[0..internal.op_count])
74             operands ~= PpcOp(op);
75     }
76 }
77 
78 //=============================================================================
79 // Constants
80 //=============================================================================
81 
82 /// Operand type for instruction's operands
83 enum PpcOpType {
84 	invalid = 0, // Uninitialized
85 	reg, 		 // Register operand
86 	imm, 		 // Immediate operand
87 	mem, 		 // Memory operand
88 	crx = 64,	 // Condition Register field
89 }
90 
91 /// PPC branch codes for some branch instructions
92 enum PpcBc {
93 	invalid  = 0,
94 	lt       = (0 << 5) | 12,
95 	le       = (1 << 5) |  4,
96 	eq       = (2 << 5) | 12,
97 	ge       = (0 << 5) |  4,
98 	gt       = (1 << 5) | 12,
99 	ne       = (2 << 5) |  4,
100 	un       = (3 << 5) | 12,
101 	nu       = (3 << 5) |  4,
102 
103 	// Extra conditions
104 	so = (4 << 5) | 12,	/// Summary overflow
105 	ns = (4 << 5) | 4,	/// Not summary overflow
106 }
107 
108 /// PPC branch hint for some branch instructions
109 enum PpcBh {
110 	invalid = 0, /// No hint
111 	plus,		 /// PLUS hint
112 	minus,		 /// MINUS hint
113 }
114 
115 /// PPC registers
116 enum PpcRegister {
117 	invalid = 0,
118 
119 	carry,
120 	cc,
121 	cr0,
122 	cr1,
123 	cr2,
124 	cr3,
125 	cr4,
126 	cr5,
127 	cr6,
128 	cr7,
129 	ctr,
130 	f0,
131 	f1,
132 	f2,
133 	f3,
134 	f4,
135 	f5,
136 	f6,
137 	f7,
138 	f8,
139 	f9,
140 	f10,
141 	f11,
142 	f12,
143 	f13,
144 	f14,
145 	f15,
146 	f16,
147 	f17,
148 	f18,
149 	f19,
150 	f20,
151 	f21,
152 	f22,
153 	f23,
154 	f24,
155 	f25,
156 	f26,
157 	f27,
158 	f28,
159 	f29,
160 	f30,
161 	f31,
162 	lr,
163 	r0,
164 	r1,
165 	r2,
166 	r3,
167 	r4,
168 	r5,
169 	r6,
170 	r7,
171 	r8,
172 	r9,
173 	r10,
174 	r11,
175 	r12,
176 	r13,
177 	r14,
178 	r15,
179 	r16,
180 	r17,
181 	r18,
182 	r19,
183 	r20,
184 	r21,
185 	r22,
186 	r23,
187 	r24,
188 	r25,
189 	r26,
190 	r27,
191 	r28,
192 	r29,
193 	r30,
194 	r31,
195 	v0,
196 	v1,
197 	v2,
198 	v3,
199 	v4,
200 	v5,
201 	v6,
202 	v7,
203 	v8,
204 	v9,
205 	v10,
206 	v11,
207 	v12,
208 	v13,
209 	v14,
210 	v15,
211 	v16,
212 	v17,
213 	v18,
214 	v19,
215 	v20,
216 	v21,
217 	v22,
218 	v23,
219 	v24,
220 	v25,
221 	v26,
222 	v27,
223 	v28,
224 	v29,
225 	v30,
226 	v31,
227 	vrsave,
228 	vs0,
229 	vs1,
230 	vs2,
231 	vs3,
232 	vs4,
233 	vs5,
234 	vs6,
235 	vs7,
236 	vs8,
237 	vs9,
238 	vs10,
239 	vs11,
240 	vs12,
241 	vs13,
242 	vs14,
243 	vs15,
244 	vs16,
245 	vs17,
246 	vs18,
247 	vs19,
248 	vs20,
249 	vs21,
250 	vs22,
251 	vs23,
252 	vs24,
253 	vs25,
254 	vs26,
255 	vs27,
256 	vs28,
257 	vs29,
258 	vs30,
259 	vs31,
260 	vs32,
261 	vs33,
262 	vs34,
263 	vs35,
264 	vs36,
265 	vs37,
266 	vs38,
267 	vs39,
268 	vs40,
269 	vs41,
270 	vs42,
271 	vs43,
272 	vs44,
273 	vs45,
274 	vs46,
275 	vs47,
276 	vs48,
277 	vs49,
278 	vs50,
279 	vs51,
280 	vs52,
281 	vs53,
282 	vs54,
283 	vs55,
284 	vs56,
285 	vs57,
286 	vs58,
287 	vs59,
288 	vs60,
289 	vs61,
290 	vs62,
291 	vs63,
292 
293 	// Extra registers for PPCMapping.c
294 	rm,
295 	ctr8,
296 	lr8,
297 	cr1eq,
298 }
299 
300 /// PPC instruction
301 enum PpcInstructionId {
302 	invalid = 0,
303 
304 	add,
305 	addc,
306 	adde,
307 	addi,
308 	addic,
309 	addis,
310 	addme,
311 	addze,
312 	and,
313 	andc,
314 	andis,
315 	andi,
316 	b,
317 	ba,
318 	bc,
319 	bcctr,
320 	bcctrl,
321 	bcl,
322 	bclr,
323 	bclrl,
324 	bctr,
325 	bctrl,
326 	bdnz,
327 	bdnza,
328 	bdnzl,
329 	bdnzla,
330 	bdnzlr,
331 	bdnzlrl,
332 	bdz,
333 	bdza,
334 	bdzl,
335 	bdzla,
336 	bdzlr,
337 	bdzlrl,
338 	bl,
339 	bla,
340 	blr,
341 	blrl,
342 	brinc,
343 	cmpd,
344 	cmpdi,
345 	cmpld,
346 	cmpldi,
347 	cmplw,
348 	cmplwi,
349 	cmpw,
350 	cmpwi,
351 	cntlzd,
352 	cntlzw,
353 	creqv,
354 	crxor,
355 	crand,
356 	crandc,
357 	crnand,
358 	crnor,
359 	cror,
360 	crorc,
361 	dcba,
362 	dcbf,
363 	dcbi,
364 	dcbst,
365 	dcbt,
366 	dcbtst,
367 	dcbz,
368 	dcbzl,
369 	dccci,
370 	divd,
371 	divdu,
372 	divw,
373 	divwu,
374 	dss,
375 	dssall,
376 	dst,
377 	dstst,
378 	dststt,
379 	dstt,
380 	eieio,
381 	eqv,
382 	evabs,
383 	evaddiw,
384 	evaddsmiaaw,
385 	evaddssiaaw,
386 	evaddumiaaw,
387 	evaddusiaaw,
388 	evaddw,
389 	evand,
390 	evandc,
391 	evcmpeq,
392 	evcmpgts,
393 	evcmpgtu,
394 	evcmplts,
395 	evcmpltu,
396 	evcntlsw,
397 	evcntlzw,
398 	evdivws,
399 	evdivwu,
400 	eveqv,
401 	evextsb,
402 	evextsh,
403 	evldd,
404 	evlddx,
405 	evldh,
406 	evldhx,
407 	evldw,
408 	evldwx,
409 	evlhhesplat,
410 	evlhhesplatx,
411 	evlhhossplat,
412 	evlhhossplatx,
413 	evlhhousplat,
414 	evlhhousplatx,
415 	evlwhe,
416 	evlwhex,
417 	evlwhos,
418 	evlwhosx,
419 	evlwhou,
420 	evlwhoux,
421 	evlwhsplat,
422 	evlwhsplatx,
423 	evlwwsplat,
424 	evlwwsplatx,
425 	evmergehi,
426 	evmergehilo,
427 	evmergelo,
428 	evmergelohi,
429 	evmhegsmfaa,
430 	evmhegsmfan,
431 	evmhegsmiaa,
432 	evmhegsmian,
433 	evmhegumiaa,
434 	evmhegumian,
435 	evmhesmf,
436 	evmhesmfa,
437 	evmhesmfaaw,
438 	evmhesmfanw,
439 	evmhesmi,
440 	evmhesmia,
441 	evmhesmiaaw,
442 	evmhesmianw,
443 	evmhessf,
444 	evmhessfa,
445 	evmhessfaaw,
446 	evmhessfanw,
447 	evmhessiaaw,
448 	evmhessianw,
449 	evmheumi,
450 	evmheumia,
451 	evmheumiaaw,
452 	evmheumianw,
453 	evmheusiaaw,
454 	evmheusianw,
455 	evmhogsmfaa,
456 	evmhogsmfan,
457 	evmhogsmiaa,
458 	evmhogsmian,
459 	evmhogumiaa,
460 	evmhogumian,
461 	evmhosmf,
462 	evmhosmfa,
463 	evmhosmfaaw,
464 	evmhosmfanw,
465 	evmhosmi,
466 	evmhosmia,
467 	evmhosmiaaw,
468 	evmhosmianw,
469 	evmhossf,
470 	evmhossfa,
471 	evmhossfaaw,
472 	evmhossfanw,
473 	evmhossiaaw,
474 	evmhossianw,
475 	evmhoumi,
476 	evmhoumia,
477 	evmhoumiaaw,
478 	evmhoumianw,
479 	evmhousiaaw,
480 	evmhousianw,
481 	evmra,
482 	evmwhsmf,
483 	evmwhsmfa,
484 	evmwhsmi,
485 	evmwhsmia,
486 	evmwhssf,
487 	evmwhssfa,
488 	evmwhumi,
489 	evmwhumia,
490 	evmwlsmiaaw,
491 	evmwlsmianw,
492 	evmwlssiaaw,
493 	evmwlssianw,
494 	evmwlumi,
495 	evmwlumia,
496 	evmwlumiaaw,
497 	evmwlumianw,
498 	evmwlusiaaw,
499 	evmwlusianw,
500 	evmwsmf,
501 	evmwsmfa,
502 	evmwsmfaa,
503 	evmwsmfan,
504 	evmwsmi,
505 	evmwsmia,
506 	evmwsmiaa,
507 	evmwsmian,
508 	evmwssf,
509 	evmwssfa,
510 	evmwssfaa,
511 	evmwssfan,
512 	evmwumi,
513 	evmwumia,
514 	evmwumiaa,
515 	evmwumian,
516 	evnand,
517 	evneg,
518 	evnor,
519 	evor,
520 	evorc,
521 	evrlw,
522 	evrlwi,
523 	evrndw,
524 	evslw,
525 	evslwi,
526 	evsplatfi,
527 	evsplati,
528 	evsrwis,
529 	evsrwiu,
530 	evsrws,
531 	evsrwu,
532 	evstdd,
533 	evstddx,
534 	evstdh,
535 	evstdhx,
536 	evstdw,
537 	evstdwx,
538 	evstwhe,
539 	evstwhex,
540 	evstwho,
541 	evstwhox,
542 	evstwwe,
543 	evstwwex,
544 	evstwwo,
545 	evstwwox,
546 	evsubfsmiaaw,
547 	evsubfssiaaw,
548 	evsubfumiaaw,
549 	evsubfusiaaw,
550 	evsubfw,
551 	evsubifw,
552 	evxor,
553 	extsb,
554 	extsh,
555 	extsw,
556 	fabs,
557 	fadd,
558 	fadds,
559 	fcfid,
560 	fcfids,
561 	fcfidu,
562 	fcfidus,
563 	fcmpu,
564 	fcpsgn,
565 	fctid,
566 	fctiduz,
567 	fctidz,
568 	fctiw,
569 	fctiwuz,
570 	fctiwz,
571 	fdiv,
572 	fdivs,
573 	fmadd,
574 	fmadds,
575 	fmr,
576 	fmsub,
577 	fmsubs,
578 	fmul,
579 	fmuls,
580 	fnabs,
581 	fneg,
582 	fnmadd,
583 	fnmadds,
584 	fnmsub,
585 	fnmsubs,
586 	fre,
587 	fres,
588 	frim,
589 	frin,
590 	frip,
591 	friz,
592 	frsp,
593 	frsqrte,
594 	frsqrtes,
595 	fsel,
596 	fsqrt,
597 	fsqrts,
598 	fsub,
599 	fsubs,
600 	icbi,
601 	iccci,
602 	isel,
603 	isync,
604 	la,
605 	lbz,
606 	lbzu,
607 	lbzux,
608 	lbzx,
609 	ld,
610 	ldarx,
611 	ldbrx,
612 	ldu,
613 	ldux,
614 	ldx,
615 	lfd,
616 	lfdu,
617 	lfdux,
618 	lfdx,
619 	lfiwax,
620 	lfiwzx,
621 	lfs,
622 	lfsu,
623 	lfsux,
624 	lfsx,
625 	lha,
626 	lhau,
627 	lhaux,
628 	lhax,
629 	lhbrx,
630 	lhz,
631 	lhzu,
632 	lhzux,
633 	lhzx,
634 	li,
635 	lis,
636 	lmw,
637 	lswi,
638 	lvebx,
639 	lvehx,
640 	lvewx,
641 	lvsl,
642 	lvsr,
643 	lvx,
644 	lvxl,
645 	lwa,
646 	lwarx,
647 	lwaux,
648 	lwax,
649 	lwbrx,
650 	lwz,
651 	lwzu,
652 	lwzux,
653 	lwzx,
654 	lxsdx,
655 	lxvd2x,
656 	lxvdsx,
657 	lxvw4x,
658 	mbar,
659 	mcrf,
660 	mfcr,
661 	mfctr,
662 	mfdcr,
663 	mffs,
664 	mflr,
665 	mfmsr,
666 	mfocrf,
667 	mfspr,
668 	mfsr,
669 	mfsrin,
670 	mftb,
671 	mfvscr,
672 	msync,
673 	mtcrf,
674 	mtctr,
675 	mtdcr,
676 	mtfsb0,
677 	mtfsb1,
678 	mtfsf,
679 	mtlr,
680 	mtmsr,
681 	mtmsrd,
682 	mtocrf,
683 	mtspr,
684 	mtsr,
685 	mtsrin,
686 	mtvscr,
687 	mulhd,
688 	mulhdu,
689 	mulhw,
690 	mulhwu,
691 	mulld,
692 	mulli,
693 	mullw,
694 	nand,
695 	neg,
696 	nop,
697 	ori,
698 	nor,
699 	or,
700 	orc,
701 	oris,
702 	popcntd,
703 	popcntw,
704 	rfci,
705 	rfdi,
706 	rfi,
707 	rfid,
708 	rfmci,
709 	rldcl,
710 	rldcr,
711 	rldic,
712 	rldicl,
713 	rldicr,
714 	rldimi,
715 	rlwimi,
716 	rlwinm,
717 	rlwnm,
718 	sc,
719 	slbia,
720 	slbie,
721 	slbmfee,
722 	slbmte,
723 	sld,
724 	slw,
725 	srad,
726 	sradi,
727 	sraw,
728 	srawi,
729 	srd,
730 	srw,
731 	stb,
732 	stbu,
733 	stbux,
734 	stbx,
735 	std,
736 	stdbrx,
737 	stdcx,
738 	stdu,
739 	stdux,
740 	stdx,
741 	stfd,
742 	stfdu,
743 	stfdux,
744 	stfdx,
745 	stfiwx,
746 	stfs,
747 	stfsu,
748 	stfsux,
749 	stfsx,
750 	sth,
751 	sthbrx,
752 	sthu,
753 	sthux,
754 	sthx,
755 	stmw,
756 	stswi,
757 	stvebx,
758 	stvehx,
759 	stvewx,
760 	stvx,
761 	stvxl,
762 	stw,
763 	stwbrx,
764 	stwcx,
765 	stwu,
766 	stwux,
767 	stwx,
768 	stxsdx,
769 	stxvd2x,
770 	stxvw4x,
771 	subf,
772 	subfc,
773 	subfe,
774 	subfic,
775 	subfme,
776 	subfze,
777 	sync,
778 	td,
779 	tdi,
780 	tlbia,
781 	tlbie,
782 	tlbiel,
783 	tlbivax,
784 	tlbld,
785 	tlbli,
786 	tlbre,
787 	tlbsx,
788 	tlbsync,
789 	tlbwe,
790 	trap,
791 	tw,
792 	twi,
793 	vaddcuw,
794 	vaddfp,
795 	vaddsbs,
796 	vaddshs,
797 	vaddsws,
798 	vaddubm,
799 	vaddubs,
800 	vadduhm,
801 	vadduhs,
802 	vadduwm,
803 	vadduws,
804 	vand,
805 	vandc,
806 	vavgsb,
807 	vavgsh,
808 	vavgsw,
809 	vavgub,
810 	vavguh,
811 	vavguw,
812 	vcfsx,
813 	vcfux,
814 	vcmpbfp,
815 	vcmpeqfp,
816 	vcmpequb,
817 	vcmpequh,
818 	vcmpequw,
819 	vcmpgefp,
820 	vcmpgtfp,
821 	vcmpgtsb,
822 	vcmpgtsh,
823 	vcmpgtsw,
824 	vcmpgtub,
825 	vcmpgtuh,
826 	vcmpgtuw,
827 	vctsxs,
828 	vctuxs,
829 	vexptefp,
830 	vlogefp,
831 	vmaddfp,
832 	vmaxfp,
833 	vmaxsb,
834 	vmaxsh,
835 	vmaxsw,
836 	vmaxub,
837 	vmaxuh,
838 	vmaxuw,
839 	vmhaddshs,
840 	vmhraddshs,
841 	vminfp,
842 	vminsb,
843 	vminsh,
844 	vminsw,
845 	vminub,
846 	vminuh,
847 	vminuw,
848 	vmladduhm,
849 	vmrghb,
850 	vmrghh,
851 	vmrghw,
852 	vmrglb,
853 	vmrglh,
854 	vmrglw,
855 	vmsummbm,
856 	vmsumshm,
857 	vmsumshs,
858 	vmsumubm,
859 	vmsumuhm,
860 	vmsumuhs,
861 	vmulesb,
862 	vmulesh,
863 	vmuleub,
864 	vmuleuh,
865 	vmulosb,
866 	vmulosh,
867 	vmuloub,
868 	vmulouh,
869 	vnmsubfp,
870 	vnor,
871 	vor,
872 	vperm,
873 	vpkpx,
874 	vpkshss,
875 	vpkshus,
876 	vpkswss,
877 	vpkswus,
878 	vpkuhum,
879 	vpkuhus,
880 	vpkuwum,
881 	vpkuwus,
882 	vrefp,
883 	vrfim,
884 	vrfin,
885 	vrfip,
886 	vrfiz,
887 	vrlb,
888 	vrlh,
889 	vrlw,
890 	vrsqrtefp,
891 	vsel,
892 	vsl,
893 	vslb,
894 	vsldoi,
895 	vslh,
896 	vslo,
897 	vslw,
898 	vspltb,
899 	vsplth,
900 	vspltisb,
901 	vspltish,
902 	vspltisw,
903 	vspltw,
904 	vsr,
905 	vsrab,
906 	vsrah,
907 	vsraw,
908 	vsrb,
909 	vsrh,
910 	vsro,
911 	vsrw,
912 	vsubcuw,
913 	vsubfp,
914 	vsubsbs,
915 	vsubshs,
916 	vsubsws,
917 	vsububm,
918 	vsububs,
919 	vsubuhm,
920 	vsubuhs,
921 	vsubuwm,
922 	vsubuws,
923 	vsum2sws,
924 	vsum4sbs,
925 	vsum4shs,
926 	vsum4ubs,
927 	vsumsws,
928 	vupkhpx,
929 	vupkhsb,
930 	vupkhsh,
931 	vupklpx,
932 	vupklsb,
933 	vupklsh,
934 	vxor,
935 	wait,
936 	wrtee,
937 	wrteei,
938 	xor,
939 	xori,
940 	xoris,
941 	xsabsdp,
942 	xsadddp,
943 	xscmpodp,
944 	xscmpudp,
945 	xscpsgndp,
946 	xscvdpsp,
947 	xscvdpsxds,
948 	xscvdpsxws,
949 	xscvdpuxds,
950 	xscvdpuxws,
951 	xscvspdp,
952 	xscvsxddp,
953 	xscvuxddp,
954 	xsdivdp,
955 	xsmaddadp,
956 	xsmaddmdp,
957 	xsmaxdp,
958 	xsmindp,
959 	xsmsubadp,
960 	xsmsubmdp,
961 	xsmuldp,
962 	xsnabsdp,
963 	xsnegdp,
964 	xsnmaddadp,
965 	xsnmaddmdp,
966 	xsnmsubadp,
967 	xsnmsubmdp,
968 	xsrdpi,
969 	xsrdpic,
970 	xsrdpim,
971 	xsrdpip,
972 	xsrdpiz,
973 	xsredp,
974 	xsrsqrtedp,
975 	xssqrtdp,
976 	xssubdp,
977 	xstdivdp,
978 	xstsqrtdp,
979 	xvabsdp,
980 	xvabssp,
981 	xvadddp,
982 	xvaddsp,
983 	xvcmpeqdp,
984 	xvcmpeqsp,
985 	xvcmpgedp,
986 	xvcmpgesp,
987 	xvcmpgtdp,
988 	xvcmpgtsp,
989 	xvcpsgndp,
990 	xvcpsgnsp,
991 	xvcvdpsp,
992 	xvcvdpsxds,
993 	xvcvdpsxws,
994 	xvcvdpuxds,
995 	xvcvdpuxws,
996 	xvcvspdp,
997 	xvcvspsxds,
998 	xvcvspsxws,
999 	xvcvspuxds,
1000 	xvcvspuxws,
1001 	xvcvsxddp,
1002 	xvcvsxdsp,
1003 	xvcvsxwdp,
1004 	xvcvsxwsp,
1005 	xvcvuxddp,
1006 	xvcvuxdsp,
1007 	xvcvuxwdp,
1008 	xvcvuxwsp,
1009 	xvdivdp,
1010 	xvdivsp,
1011 	xvmaddadp,
1012 	xvmaddasp,
1013 	xvmaddmdp,
1014 	xvmaddmsp,
1015 	xvmaxdp,
1016 	xvmaxsp,
1017 	xvmindp,
1018 	xvminsp,
1019 	xvmsubadp,
1020 	xvmsubasp,
1021 	xvmsubmdp,
1022 	xvmsubmsp,
1023 	xvmuldp,
1024 	xvmulsp,
1025 	xvnabsdp,
1026 	xvnabssp,
1027 	xvnegdp,
1028 	xvnegsp,
1029 	xvnmaddadp,
1030 	xvnmaddasp,
1031 	xvnmaddmdp,
1032 	xvnmaddmsp,
1033 	xvnmsubadp,
1034 	xvnmsubasp,
1035 	xvnmsubmdp,
1036 	xvnmsubmsp,
1037 	xvrdpi,
1038 	xvrdpic,
1039 	xvrdpim,
1040 	xvrdpip,
1041 	xvrdpiz,
1042 	xvredp,
1043 	xvresp,
1044 	xvrspi,
1045 	xvrspic,
1046 	xvrspim,
1047 	xvrspip,
1048 	xvrspiz,
1049 	xvrsqrtedp,
1050 	xvrsqrtesp,
1051 	xvsqrtdp,
1052 	xvsqrtsp,
1053 	xvsubdp,
1054 	xvsubsp,
1055 	xvtdivdp,
1056 	xvtdivsp,
1057 	xvtsqrtdp,
1058 	xvtsqrtsp,
1059 	xxland,
1060 	xxlandc,
1061 	xxlnor,
1062 	xxlor,
1063 	xxlxor,
1064 	xxmrghw,
1065 	xxmrglw,
1066 	xxpermdi,
1067 	xxsel,
1068 	xxsldwi,
1069 	xxspltw,
1070 	bca,
1071 	bcla,
1072 
1073 	// Extra & alias instructions
1074 	slwi,
1075 	srwi,
1076 	sldi,
1077 
1078 	bta,
1079 	crset,
1080 	crnot,
1081 	crmove,
1082 	crclr,
1083 	mfbr0,
1084 	mfbr1,
1085 	mfbr2,
1086 	mfbr3,
1087 	mfbr4,
1088 	mfbr5,
1089 	mfbr6,
1090 	mfbr7,
1091 	mfxer,
1092 	mfrtcu,
1093 	mfrtcl,
1094 	mfdscr,
1095 	mfdsisr,
1096 	mfdar,
1097 	mfsrr2,
1098 	mfsrr3,
1099 	mfcfar,
1100 	mfamr,
1101 	mfpid,
1102 	mftblo,
1103 	mftbhi,
1104 	mfdbatu,
1105 	mfdbatl,
1106 	mfibatu,
1107 	mfibatl,
1108 	mfdccr,
1109 	mficcr,
1110 	mfdear,
1111 	mfesr,
1112 	mfspefscr,
1113 	mftcr,
1114 	mfasr,
1115 	mfpvr,
1116 	mftbu,
1117 	mtcr,
1118 	mtbr0,
1119 	mtbr1,
1120 	mtbr2,
1121 	mtbr3,
1122 	mtbr4,
1123 	mtbr5,
1124 	mtbr6,
1125 	mtbr7,
1126 	mtxer,
1127 	mtdscr,
1128 	mtdsisr,
1129 	mtdar,
1130 	mtsrr2,
1131 	mtsrr3,
1132 	mtcfar,
1133 	mtamr,
1134 	mtpid,
1135 	mttbl,
1136 	mttbu,
1137 	mttblo,
1138 	mttbhi,
1139 	mtdbatu,
1140 	mtdbatl,
1141 	mtibatu,
1142 	mtibatl,
1143 	mtdccr,
1144 	mticcr,
1145 	mtdear,
1146 	mtesr,
1147 	mtspefscr,
1148 	mttcr,
1149 	not,
1150 	mr,
1151 	rotld,
1152 	rotldi,
1153 	clrldi,
1154 	rotlwi,
1155 	clrlwi,
1156 	rotlw,
1157 	sub,
1158 	subc,
1159 	lwsync,
1160 	ptesync,
1161 	tdlt,
1162 	tdeq,
1163 	tdgt,
1164 	tdne,
1165 	tdllt,
1166 	tdlgt,
1167 	tdu,
1168 	tdlti,
1169 	tdeqi,
1170 	tdgti,
1171 	tdnei,
1172 	tdllti,
1173 	tdlgti,
1174 	tdui,
1175 	tlbrehi,
1176 	tlbrelo,
1177 	tlbwehi,
1178 	tlbwelo,
1179 	twlt,
1180 	tweq,
1181 	twgt,
1182 	twne,
1183 	twllt,
1184 	twlgt,
1185 	twu,
1186 	twlti,
1187 	tweqi,
1188 	twgti,
1189 	twnei,
1190 	twllti,
1191 	twlgti,
1192 	twui,
1193 	waitrsv,
1194 	waitimpl,
1195 	xnop,
1196 	xvmovdp,
1197 	xvmovsp,
1198 	xxspltd,
1199 	xxmrghd,
1200 	xxmrgld,
1201 	xxswapd,
1202 	bt,
1203 	bf,
1204 	bdnzt,
1205 	bdnzf,
1206 	bdzf,
1207 	bdzt,
1208 	bfa,
1209 	bdnzta,
1210 	bdnzfa,
1211 	bdzta,
1212 	bdzfa,
1213 	btctr,
1214 	bfctr,
1215 	btctrl,
1216 	bfctrl,
1217 	btl,
1218 	bfl,
1219 	bdnztl,
1220 	bdnzfl,
1221 	bdztl,
1222 	bdzfl,
1223 	btla,
1224 	bfla,
1225 	bdnztla,
1226 	bdnzfla,
1227 	bdztla,
1228 	bdzfla,
1229 	btlr,
1230 	bflr,
1231 	bdnztlr,
1232 	bdztlr,
1233 	bdzflr,
1234 	btlrl,
1235 	bflrl,
1236 	bdnztlrl,
1237 	bdnzflrl,
1238 	bdztlrl,
1239 	bdzflrl,
1240 }
1241 
1242 /// Group of PPC instructions
1243 enum PpcInstructionGroup {
1244 	invalid = 0, // = CS_GRP_INVALID
1245 
1246 	// Generic groups
1247 	// all jump instructions (conditional+direct+indirect jumps)
1248 	jump,	// = CS_GRP_JUMP
1249 
1250 	// Architecture-specific groups
1251 	altivec = 128,
1252 	mode32,
1253 	mode64,
1254 	booke,
1255 	notbooke,
1256 	spe,
1257 	vsx,
1258 	e500,
1259 	ppc4xx,
1260 	ppc6xx,
1261 }