powerpc instruction semantics
[dyninst.git] / external / rose / powerpcInstructionEnum.h
1 #ifndef ROSE_POWERPC_INSTRUCTION_ENUM_H
2 #define ROSE_POWERPC_INSTRUCTION_ENUM_H
3
4 #include <string>
5
6 // DQ (10/11/2008): Started work to support PowerPC Instruction Set for BGL Performance Tool
7 // JJW (10/12/2008): Cleaned up so automatic enum printer generator would work
8 enum PowerpcInstructionKind
9    {
10      powerpc_unknown_instruction = 0,
11      powerpc_add,  // Add 
12      powerpc_add_record,  // Add 
13      powerpc_addo,  // Add 
14      powerpc_addo_record,  // Add 
15      powerpc_addc, // Add Carrying 
16      powerpc_addc_record, // Add Carrying 
17      powerpc_addco, // Add Carrying 
18      powerpc_addco_record, // Add Carrying 
19      powerpc_adde,         // Add Extended 
20      powerpc_adde_record,  // Add Extended 
21      powerpc_addeo,        // Add Extended 
22      powerpc_addeo_record, // Add Extended 
23      powerpc_addi,       // Add Immediate 
24      powerpc_addic,      // Add Immediate Carrying 
25      powerpc_addic_record, // Add Immediate Carrying and Record 
26      powerpc_addis, // Add Immediate Shifted 
27      powerpc_addme, // Add to Minus One Extended 
28      powerpc_addme_record, // Add to Minus One Extended 
29      powerpc_addmeo, // Add to Minus One Extended 
30      powerpc_addmeo_record, // Add to Minus One Extended 
31      powerpc_addze, // Add to Zero Extended 
32      powerpc_addze_record, // Add to Zero Extended 
33      powerpc_addzeo, // Add to Zero Extended 
34      powerpc_addzeo_record, // Add to Zero Extended 
35      powerpc_and, // AND 
36      powerpc_and_record, // AND 
37      powerpc_andc, // AND with Complement 
38      powerpc_andc_record, // AND with Complement 
39      powerpc_andi_record, // AND Immediate 
40      powerpc_andis_record, // AND Immediate Shifted 
41      powerpc_b, // Branch 
42      powerpc_ba, // Branch 
43      powerpc_bl, // Branch 
44      powerpc_bla, // Branch 
45      powerpc_bc, // Branch Conditional 
46      powerpc_bca, // Branch Conditional 
47      powerpc_bcl, // Branch Conditional 
48      powerpc_bcla, // Branch Conditional 
49      powerpc_bcctr, // Branch Conditional to Count Register 
50      powerpc_bcctrl, // Branch Conditional to Count Register 
51      powerpc_bclr, // Branch Conditional Link Register 
52      powerpc_bclrl, // Branch Conditional Link Register 
53      powerpc_cmp, // Compare 
54      powerpc_cmpi, // Compare Immediate 
55      powerpc_cmpl, // Compare Logical 
56      powerpc_cmpli, // Compare Logical Immediate 
57      powerpc_cntlzd, // Count Leading Zeros Doubleword 
58      powerpc_cntlzd_record, // Count Leading Zeros Doubleword 
59      powerpc_cntlzw, // Count Leading Zeros Word 
60      powerpc_cntlzw_record, // Count Leading Zeros Word 
61      powerpc_crand, // Condition Register AND 
62      powerpc_crandc, // Condition Register AND with Complement 
63      powerpc_creqv, // Condition Register Equivalent 
64      powerpc_crnand, // Condition Register NAND 
65      powerpc_crnor, // Condition Register NOR 
66      powerpc_cror, // Condition Register OR 
67      powerpc_crorc, // Condition Register OR with Complement 
68      powerpc_crxor, // Condition Register XOR 
69      powerpc_dcbf, // Data Cache Block Flush 
70      powerpc_dcba, // Data Cache Block Allocate 
71      powerpc_dcbi, // Data Cache Block Invalidate 
72      powerpc_dcbst, // Data Cache Block Store 
73      powerpc_dcbt, // Data Cache Block Touch 
74      powerpc_dcbtst, // Data Cache Block Touch for Store 
75      powerpc_dcbz, // Data Cache Block Set to Zero 
76      powerpc_divd, // Divide Doubleword 
77      powerpc_divd_record, // Divide Doubleword 
78      powerpc_divdo, // Divide Doubleword 
79      powerpc_divdo_record, // Divide Doubleword 
80      powerpc_divdu, // Divide Doubleword Unsigned 
81      powerpc_divdu_record, // Divide Doubleword Unsigned 
82      powerpc_divduo, // Divide Doubleword Unsigned 
83      powerpc_divduo_record, // Divide Doubleword Unsigned 
84      powerpc_divw, // Divide Word 
85      powerpc_divw_record, // Divide Word 
86      powerpc_divwo, // Divide Word 
87      powerpc_divwo_record, // Divide Word 
88      powerpc_divwu, // Divide Word Unsigned 
89      powerpc_divwu_record, // Divide Word Unsigned 
90      powerpc_divwuo, // Divide Word Unsigned 
91      powerpc_divwuo_record, // Divide Word Unsigned 
92      powerpc_dst, // Data Stream Touch
93      powerpc_dstt, // Data Stream Touch
94      powerpc_dstst, // Data Stream Touch for store
95      powerpc_dststt, // Data Stream Touch for store
96      powerpc_dss, // Data Stream Stop
97      powerpc_dssall, // Data Stream Stop All
98      powerpc_eciwx, // External Control in Word Indexed (opt.) 
99      powerpc_ecowx, // External Control out Word Indexed (opt.) 
100      powerpc_eieio, // Enforce In-order Execution of I/O 
101      powerpc_eqv, // Equivalent 
102      powerpc_eqv_record, // Equivalent 
103      powerpc_extsb, // Extend Sign Byte 
104      powerpc_extsb_record, // Extend Sign Byte 
105      powerpc_extsh, // Extend Sign Halfword 
106      powerpc_extsh_record, // Extend Sign Halfword 
107      powerpc_extsw, // Extend Sign Word 
108      powerpc_extsw_record, // Extend Sign Word 
109      powerpc_fabs, // Floating Absolute Value 
110      powerpc_fabs_record, // Floating Absolute Value 
111      powerpc_fadd, // Floating Add 
112      powerpc_fadd_record, // Floating Add 
113      powerpc_fadds, // Floating Add Single 
114      powerpc_fadds_record, // Floating Add Single 
115      powerpc_fcfid, // Floating Convert from Integer Doubleword 
116      powerpc_fcfid_record, // Floating Convert from Integer Doubleword 
117      powerpc_fcmpo, // Floating Compare Ordered 
118      powerpc_fcmpu, // Floating Compare Unordered 
119      powerpc_fctid, // Floating Convert to Integer Doubleword 
120      powerpc_fctid_record, // Floating Convert to Integer Doubleword 
121      powerpc_fctidz, // Floating Convert to Integer Doubleword with Round Toward Zero 
122      powerpc_fctidz_record, // Floating Convert to Integer Doubleword with Round Toward Zero 
123      powerpc_fctiw, // Floating Convert to Integer Word 
124      powerpc_fctiw_record, // Floating Convert to Integer Word 
125      powerpc_fctiwz, // Floating Convert to Integer Word with Round to Zero 
126      powerpc_fctiwz_record, // Floating Convert to Integer Word with Round to Zero 
127      powerpc_fdiv, // Floating Divide 
128      powerpc_fdiv_record, // Floating Divide 
129      powerpc_fdivs, // Floating Divide Single 
130      powerpc_fdivs_record, // Floating Divide Single 
131      powerpc_fmadd, // Floating Multiply-Add 
132      powerpc_fmadd_record, // Floating Multiply-Add 
133      powerpc_fmadds, // Floating Multiply-Add Single 
134      powerpc_fmadds_record, // Floating Multiply-Add Single 
135      powerpc_fmr, // Floating Move Register 
136      powerpc_fmr_record, // Floating Move Register 
137      powerpc_fmsub, // Floating Multiply-Subtract 
138      powerpc_fmsub_record, // Floating Multiply-Subtract 
139      powerpc_fmsubs, // Floating Multiply-Subtract Single 
140      powerpc_fmsubs_record, // Floating Multiply-Subtract Single 
141      powerpc_fmul, // Floating Multiply 
142      powerpc_fmul_record, // Floating Multiply 
143      powerpc_fmuls, // Floating Multiply Single 
144      powerpc_fmuls_record, // Floating Multiply Single 
145      powerpc_fnabs, // Floating Negative Absolute Value 
146      powerpc_fnabs_record, // Floating Negative Absolute Value 
147      powerpc_fneg, // Floating Negate 
148      powerpc_fneg_record, // Floating Negate 
149      powerpc_fnmadd, // Floating Negative Multiply-Add 
150      powerpc_fnmadd_record, // Floating Negative Multiply-Add 
151      powerpc_fnmadds, // Floating Negative Multiply-Add Single 
152      powerpc_fnmadds_record, // Floating Negative Multiply-Add Single 
153      powerpc_fnmsub, // Floating Negative Multiply-Subtract 
154      powerpc_fnmsub_record, // Floating Negative Multiply-Subtract 
155      powerpc_fnmsubs, // Floating Negative Multiply-Subtract Single 
156      powerpc_fnmsubs_record, // Floating Negative Multiply-Subtract Single
157      powerpc_fpmul,  // FP2 Floating Parallel Multiply (BGL specific)
158      powerpc_fxmul,  // FP2 Floating Cross Multiply (BGL specific)
159      powerpc_fxpmul, // FP2 Floating Cross Copy-Primary Multiply (BGL specific)
160      powerpc_fxsmul, // FP2 Floating Cross Copy-Secondary Multiply (BGL specific)
161      powerpc_fpadd,  // FP2 Floating Parallel Add (BGL specific)
162      powerpc_fpsub,  // FP2 Floating Parallel Subtract (BGL specific)
163      powerpc_fpre,   // FP2 Floating Parallel Reciprocal Estimate (BGL specific)
164      powerpc_fprsqrte, // FP2 Floating Parallel Reciprocal Square Root Estimate (BGL specific)
165      powerpc_fpmr,
166      powerpc_fpabs,
167      powerpc_lfssx,
168      powerpc_fpneg,
169      powerpc_lfssux,
170      powerpc_fprsp,
171      powerpc_lfsdx,
172      powerpc_fpnabs,
173      powerpc_lfsdux,
174      powerpc_lfxsx,
175      powerpc_fsmr,
176      powerpc_lfxsux,
177      powerpc_lfxdx,
178      powerpc_fsabs,
179      powerpc_lfxdux,
180      powerpc_lfpsx,
181      powerpc_fsneg,
182      powerpc_lfpsux,
183      powerpc_lfpdx,
184      powerpc_fsnabs,
185      powerpc_lfpdux,
186      powerpc_stfpiwx,
187      powerpc_fxmr,
188      powerpc_fpctiw,
189      powerpc_stfssx,
190      powerpc_stfssux,
191      powerpc_fpctiwz,
192      powerpc_stfsdx,
193      powerpc_stfsdux,
194      powerpc_stfxsx,
195      powerpc_fsmtp,
196      powerpc_stfxsux,
197      powerpc_stfxdx,
198      powerpc_stfxdux,
199      powerpc_stfpsx,
200      powerpc_fsmfp,
201      powerpc_stfpsux,
202      powerpc_stfpdx,
203      powerpc_stfpdux,
204      powerpc_fpsel,
205      powerpc_fpmadd,
206      powerpc_fpmsub,
207      powerpc_fxmadd,
208      powerpc_fxcpmadd,
209      powerpc_fxcsmadd,
210      powerpc_fpnmadd,
211      powerpc_fxnmadd,
212      powerpc_fxcpnmadd,
213      powerpc_fxcsnmadd,
214      powerpc_fxcpnpma,
215      powerpc_fxmsub,
216      powerpc_fxcsnpma,
217      powerpc_fxcpmsub,
218      powerpc_fxcpnsma,
219      powerpc_fxcsmsub,
220      powerpc_fxcsnsma,
221      powerpc_fpnmsub,
222      powerpc_fxcxma,
223      powerpc_fxnmsub,
224      powerpc_fxcxnpma,
225      powerpc_fxcpnmsub,
226      powerpc_fxcxnsma,
227      powerpc_fxcsnmsub,
228      powerpc_fxcxnms, // Last FP2 specific enum value
229      powerpc_fre, // Floating Reciprocal Estimate Single (optional) 
230      powerpc_fre_record, // Floating Reciprocal Estimate Single (optional) 
231      powerpc_fres, // Floating Reciprocal Estimate Single (optional) 
232      powerpc_fres_record, // Floating Reciprocal Estimate Single (optional) 
233      powerpc_frsp, // Floating Round to Single Precision 
234      powerpc_frsp_record, // Floating Round to Single Precision 
235      powerpc_frsqrte, // Floating Reciprocal Square Root Estimate (optional) 
236      powerpc_frsqrte_record, // Floating Reciprocal Square Root Estimate (optional) 
237      powerpc_frsqrtes, // Floating Reciprocal Square Root Estimate (optional) 
238      powerpc_frsqrtes_record, // Floating Reciprocal Square Root Estimate (optional) 
239      powerpc_fsel, // Floating-Point Select (optional) 
240      powerpc_fsel_record, // Floating-Point Select (optional) 
241      powerpc_fsqrt, // Floating-Point Square Root (optional)
242      powerpc_fsqrt_record, // Floating-Point Square Root (optional)
243      powerpc_fsqrts, // Floating-Point Square Root (optional)
244      powerpc_fsqrts_record, // Floating-Point Square Root (optional)
245      powerpc_fsub, // Floating Subtract 
246      powerpc_fsub_record, // Floating Subtract 
247      powerpc_fsubs, // Floating Subtract Single 
248      powerpc_fsubs_record, // Floating Subtract Single 
249      powerpc_icbi, // Instruction Cache Block Invalidate 
250      powerpc_isync, // Instruction Synchronize 
251      powerpc_lbz, // Load Byte and Zero 
252      powerpc_lbzu, // Load Byte and Zero with Update 
253      powerpc_lbzux, // Load Byte and Zero with Update Indexed 
254      powerpc_lbzx, // Load Byte and Zero Indexed 
255      powerpc_ld, // Load Doubleword 
256      powerpc_ldarx, // Load Doubleword and Reserve Indexed 
257      powerpc_ldu, // Load Doubleword with Update 
258      powerpc_ldux, // Load Doubleword with Update Indexed 
259      powerpc_ldx, // Load Doubleword Indexed 
260      powerpc_lfd, // Load Floating-Point Double 
261      powerpc_lfdu, // Load Floating-Point Double with Update 
262      powerpc_lfdux, // Load Floating-Point Double with Update Indexed 
263      powerpc_lfdx, // Load Floating-Point Double Indexed 
264      powerpc_lfs, // Load Floating-Point Single 
265      powerpc_lfsu, // Load Floating-Point Single with Update 
266      powerpc_lfsux, // Load Floating-Point Single with Update Indexed 
267      powerpc_lfsx, // Load Floating-Point Single Indexed 
268      powerpc_lha, // Load Half Algebraic 
269      powerpc_lhau, // Load Half Algebraic with Update 
270      powerpc_lhaux, // Load Half Algebraic with Update Indexed 
271      powerpc_lhax, // Load Half Algebraic Indexed 
272      powerpc_lhbrx, // Load Half Byte-Reversed Indexed 
273      powerpc_lhz, // Load Half and Zero 
274      powerpc_lhzu, // Load Half and Zero with Update 
275      powerpc_lhzux, // Load Half and Zero with Update Indexed 
276      powerpc_lhzx, // Load Half and Zero Indexed 
277      powerpc_lmw, // Load Multiple Word 
278      powerpc_lswi, // Load String Word Immediate 
279      powerpc_lswx, // Load String Word Indexed 
280      powerpc_lwa, // Load Word Algebraic 
281      powerpc_lwarx, // Load Word and Reserve Indexed 
282      powerpc_lwaux, // Load Word Algebraic with Update Indexed 
283      powerpc_lwax, // Load Word Algebraic Indexed 
284      powerpc_lwbrx, // Load Word Byte-Reversed Indexed 
285      powerpc_lwz, // Load Word and Zero 
286      powerpc_lwzu, // Load Word with Zero Update 
287      powerpc_lwzux, // Load Word and Zero with Update Indexed 
288      powerpc_lwzx, // Load Word and Zero Indexed 
289      powerpc_mcrf, // Move Condition Register Field 
290      powerpc_mcrfs, // Move to Condition Register from FPSCR 
291      powerpc_mcrxr, // Move to Condition Register from XER 
292      powerpc_mfcr, // Move from Condition Register 
293      powerpc_mffs, // Move from FPSCR 
294      powerpc_mffs_record, // Move from FPSCR 
295      powerpc_mfmsr, // Move from Machine State Register 
296      powerpc_mfspr, // Move from Special-Purpose Register 
297      powerpc_mfsr, // Move from Segment Register 
298      powerpc_mfsrin, // Move from Segment Register Indirect 
299      powerpc_mftb, // Move from Time Base
300      powerpc_mtcrf, // Move to Condition Register Fields 
301      powerpc_mtfsb0, // Move to FPSCR Bit 0 
302      powerpc_mtfsb0_record, // Move to FPSCR Bit 0 
303      powerpc_mtfsb1, // Move to FPSCR Bit 1 
304      powerpc_mtfsb1_record, // Move to FPSCR Bit 1 
305      powerpc_mtfsf, // Move to FPSCR Fields 
306      powerpc_mtfsf_record, // Move to FPSCR Fields 
307      powerpc_mtfsfi, // Move to FPSCR Field Immediate 
308      powerpc_mtfsfi_record, // Move to FPSCR Field Immediate 
309      powerpc_mtmsr, // Move to Machine State Register 
310      powerpc_mtmsrd, // Move to Machine State Register 
311      powerpc_mtspr, // Move to Special-Purpose Register 
312      powerpc_mtsr, // Move to Segment Register 
313      powerpc_mtsrd, // Move to Segment Register 
314      powerpc_mtsrdin, // Move to Segment Register Indirect
315      powerpc_mtsrin, // Move to Segment Register Indirect 
316      powerpc_mulhd, // Multiply High Doubleword 
317      powerpc_mulhd_record, // Multiply High Doubleword 
318      powerpc_mulhdu, // Multiply High Doubleword Unsigned 
319      powerpc_mulhdu_record, // Multiply High Doubleword Unsigned 
320      powerpc_mulhw, // Multiply High Word 
321      powerpc_mulhw_record, // Multiply High Word 
322      powerpc_mulhwu, // Multiply High Word Unsigned 
323      powerpc_mulhwu_record, // Multiply High Word Unsigned 
324      powerpc_mulld, // Multiply Low Doubleword 
325      powerpc_mulld_record, // Multiply Low Doubleword 
326      powerpc_mulldo, // Multiply Low Doubleword 
327      powerpc_mulldo_record, // Multiply Low Doubleword 
328      powerpc_mulli, // Multiply Low Immediate 
329      powerpc_mullw, // Multiply Low Word 
330      powerpc_mullw_record, // Multiply Low Word 
331      powerpc_mullwo, // Multiply Low Word 
332      powerpc_mullwo_record, // Multiply Low Word 
333      powerpc_nand, // NAND 
334      powerpc_nand_record, // NAND 
335      powerpc_neg, // Negate 
336      powerpc_neg_record, // Negate 
337      powerpc_nego, // Negate 
338      powerpc_nego_record, // Negate 
339      powerpc_nor, // NOR 
340      powerpc_nor_record, // NOR 
341      powerpc_or, // OR 
342      powerpc_or_record, // OR 
343      powerpc_orc, // OR with Complement 
344      powerpc_orc_record, // OR with Complement 
345      powerpc_ori, // OR Immediate 
346      powerpc_oris, // OR Immediate Shifted 
347      powerpc_rfi, // Return from Interrupt 
348      powerpc_rfid, // Return from Interrupt 
349      powerpc_rldcl, // Rotate Left Doubleword then Clear Left 
350      powerpc_rldcl_record, // Rotate Left Doubleword then Clear Left 
351      powerpc_rldcr, // Rotate Left Doubleword then Clear Right 
352      powerpc_rldcr_record, // Rotate Left Doubleword then Clear Right 
353      powerpc_rldic, // Rotate Left Doubleword Immediate then Clear 
354      powerpc_rldic_record, // Rotate Left Doubleword Immediate then Clear 
355      powerpc_rldicl, // Rotate Left Doubleword Immediate then Clear Left 
356      powerpc_rldicl_record, // Rotate Left Doubleword Immediate then Clear Left 
357      powerpc_rldicr, // Rotate Left Doubleword Immediate then Clear Right 
358      powerpc_rldicr_record, // Rotate Left Doubleword Immediate then Clear Right 
359      powerpc_rldimi, // Rotate Left Doubleword Immediate then Mask Insert 
360      powerpc_rldimi_record, // Rotate Left Doubleword Immediate then Mask Insert 
361      powerpc_rlwimi, // Rotate Left Word Immediate then Mask Insert 
362      powerpc_rlwimi_record, // Rotate Left Word Immediate then Mask Insert 
363      powerpc_rlwinm, // Rotate Left Word Immediate then AND with Mask 
364      powerpc_rlwinm_record, // Rotate Left Word Immediate then AND with Mask 
365      powerpc_rlwnm, // Rotate Left Word then AND with Mask 
366      powerpc_rlwnm_record, // Rotate Left Word then AND with Mask 
367      powerpc_sc, // System Call 
368      powerpc_si, // Subtract Immediate
369      powerpc_slbia, // SLB Invalidate All 
370      powerpc_slbie, // SLB Invalidate Entry 
371      powerpc_sld, // Shift Left Doubleword 
372      powerpc_sld_record, // Shift Left Doubleword 
373      powerpc_slw, // Shift Left Word 
374      powerpc_slw_record, // Shift Left Word 
375      powerpc_srad, // Shift Right Algebraic Doubleword 
376      powerpc_srad_record, // Shift Right Algebraic Doubleword 
377      powerpc_sradi, // Shift Right Algebraic Doubleword Immediate 
378      powerpc_sradi_record, // Shift Right Algebraic Doubleword Immediate 
379      powerpc_srd, // Shift Right Doubleword 
380      powerpc_srd_record, // Shift Right Doubleword 
381      powerpc_sraw, // Shift Right Algebraic Word 
382      powerpc_sraw_record, // Shift Right Algebraic Word 
383      powerpc_srawi, // Shift Right Algebraic Word Immediate 
384      powerpc_srawi_record, // Shift Right Algebraic Word Immediate 
385      powerpc_srw, // Shift Right Word 
386      powerpc_srw_record, // Shift Right Word 
387      powerpc_stb, // Store Byte 
388      powerpc_stbu, // Store Byte with Update 
389      powerpc_stbux, // Store Byte with Update Indexed 
390      powerpc_stbx, // Store Byte Indexed 
391      powerpc_std, // Store Doubleword 
392      powerpc_stdcx_record, // Store Doubleword Conditional Indexed 
393      powerpc_stdu, // Store Doubleword with Update 
394      powerpc_stdux, // Store Doubleword with Update Indexed 
395      powerpc_stdx, // Store Doubleword Indexed 
396      powerpc_stfd, // Store Floating-Point Double 
397      powerpc_stfdu, // Store Floating-Point Double with Update 
398      powerpc_stfdux, // Store Floating-Point Double with Update Indexed 
399      powerpc_stfdx, // Store Floating-Point Double Indexed 
400      powerpc_stfiwx, // Store Floating-Point as Integer Word Indexed (optional) 
401      powerpc_stfs, // Store Floating-Point Single 
402      powerpc_stfsu, // Store Floating-Point Single with Update 
403      powerpc_stfsux, // Store Floating-Point Single with Update Indexed 
404      powerpc_stfsx, // Store Floating-Point Single Indexed 
405      powerpc_sth, // Store Half 
406      powerpc_sthbrx, // Store Half Byte-Reverse Indexed 
407      powerpc_sthu, // Store Half with Update 
408      powerpc_sthux, // Store Half with Update Indexed 
409      powerpc_sthx, // Store Half Indexed 
410      powerpc_stmw, // Store Multiple Word 
411      powerpc_stswi, // Store String Word Immediate 
412      powerpc_stswx, // Store String Word Indexed 
413      powerpc_stw, // Store 
414      powerpc_stwbrx, // Store Word Byte-Reversed Indexed 
415      powerpc_stwcx_record, // Store Word Conditional Indexed 
416      powerpc_stwu, // Store Word with Update 
417      powerpc_stwux, // Store Word with Update Indexed 
418      powerpc_stwx, // Store Word Indexed 
419      powerpc_subf, // Subtract from 
420      powerpc_subf_record, // Subtract from 
421      powerpc_subfo, // Subtract from 
422      powerpc_subfo_record, // Subtract from 
423      powerpc_subfc, // Subtract from Carrying 
424      powerpc_subfc_record, // Subtract from Carrying 
425      powerpc_subfco, // Subtract from Carrying 
426      powerpc_subfco_record, // Subtract from Carrying 
427      powerpc_subfe, // Subtract from Extended 
428      powerpc_subfe_record, // Subtract from Extended 
429      powerpc_subfeo, // Subtract from Extended 
430      powerpc_subfeo_record, // Subtract from Extended 
431      powerpc_subfic, // Subtract from Immediate Carrying 
432      powerpc_subfme, // Subtract from Minus One Extended 
433      powerpc_subfme_record, // Subtract from Minus One Extended 
434      powerpc_subfmeo, // Subtract from Minus One Extended 
435      powerpc_subfmeo_record, // Subtract from Minus One Extended 
436      powerpc_subfze, // Subtract from Zero Extended 
437      powerpc_subfze_record, // Subtract from Zero Extended 
438      powerpc_subfzeo, // Subtract from Zero Extended 
439      powerpc_subfzeo_record, // Subtract from Zero Extended 
440      powerpc_sync, // Synchronize 
441      powerpc_td, // Trap Doubleword 
442      powerpc_tdi, // Trap Doubleword Immediate 
443      powerpc_tlbia, // Translation Look-aside Buffer Invalidate All (optional) 
444      powerpc_tlbie, // Translation Look-aside Buffer Invalidate Entry (optional) 
445      powerpc_tlbsync, // Translation Look-aside Buffer Synchronize (optional) 
446      powerpc_tw, // Trap Word 
447      powerpc_twi, // Trap Word Immediate 
448      powerpc_xor, // XOR 
449      powerpc_xor_record, // XOR 
450      powerpc_xori, // XOR Immediate 
451      powerpc_xoris, // XOR Immediate Shift 
452      powerpc_last_instruction
453    };
454
455 enum PowerpcRegisterClass
456    {
457      powerpc_regclass_unknown,
458      powerpc_regclass_gpr, // General Purpose Register
459      powerpc_regclass_fpr, // Floating-Point Register
460      powerpc_regclass_cr,  // Condition Register (only particular fields or bits may be used)
461      powerpc_regclass_fpscr, // Floating point status and control register
462      powerpc_regclass_spr, // Special-purpose register (0..1023)
463      powerpc_regclass_tbr, // Time base register (0..1023)
464      powerpc_regclass_msr, // Machine state register
465      powerpc_regclass_sr, // Segment register
466      powerpc_last_register_class // last enum value
467 };
468
469 enum PowerpcConditionRegisterAccessGranularity {
470   powerpc_condreggranularity_whole, // Whole CR (or unknown or not using a CR)
471   powerpc_condreggranularity_field, // Four-bit field
472   powerpc_condreggranularity_bit // Single bit
473 };
474
475 enum PowerpcSpecialPurposeRegister { // These must match the processor's numbers
476   powerpc_spr_xer = 1,
477   powerpc_spr_lr = 8,
478   powerpc_spr_ctr = 9,
479   powerpc_spr_dsisr = 18,
480   powerpc_spr_dar = 19,
481   powerpc_spr_dec = 22 // FIXME: fill in the rest of these
482 };
483
484 enum PowerpcTimeBaseRegister { // These must match the processor's numbers
485   powerpc_tbr_tbl = 268,
486   powerpc_tbr_tbu = 269
487 };
488
489 std::string toString(PowerpcInstructionKind k);
490
491 #endif /* ROSE_POWERPC_INSTRUCTION_ENUM_H */