ROSE  0.9.9.139
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_slbia, // SLB Invalidate All
369  powerpc_slbie, // SLB Invalidate Entry
370  powerpc_sld, // Shift Left Doubleword
371  powerpc_sld_record, // Shift Left Doubleword
372  powerpc_slw, // Shift Left Word
373  powerpc_slw_record, // Shift Left Word
374  powerpc_srad, // Shift Right Algebraic Doubleword
375  powerpc_srad_record, // Shift Right Algebraic Doubleword
376  powerpc_sradi, // Shift Right Algebraic Doubleword Immediate
377  powerpc_sradi_record, // Shift Right Algebraic Doubleword Immediate
378  powerpc_srd, // Shift Right Doubleword
379  powerpc_srd_record, // Shift Right Doubleword
380  powerpc_sraw, // Shift Right Algebraic Word
381  powerpc_sraw_record, // Shift Right Algebraic Word
382  powerpc_srawi, // Shift Right Algebraic Word Immediate
383  powerpc_srawi_record, // Shift Right Algebraic Word Immediate
384  powerpc_srw, // Shift Right Word
385  powerpc_srw_record, // Shift Right Word
386  powerpc_stb, // Store Byte
387  powerpc_stbu, // Store Byte with Update
388  powerpc_stbux, // Store Byte with Update Indexed
389  powerpc_stbx, // Store Byte Indexed
390  powerpc_std, // Store Doubleword
391  powerpc_stdcx_record, // Store Doubleword Conditional Indexed
392  powerpc_stdu, // Store Doubleword with Update
393  powerpc_stdux, // Store Doubleword with Update Indexed
394  powerpc_stdx, // Store Doubleword Indexed
395  powerpc_stfd, // Store Floating-Point Double
396  powerpc_stfdu, // Store Floating-Point Double with Update
397  powerpc_stfdux, // Store Floating-Point Double with Update Indexed
398  powerpc_stfdx, // Store Floating-Point Double Indexed
399  powerpc_stfiwx, // Store Floating-Point as Integer Word Indexed (optional)
400  powerpc_stfs, // Store Floating-Point Single
401  powerpc_stfsu, // Store Floating-Point Single with Update
402  powerpc_stfsux, // Store Floating-Point Single with Update Indexed
403  powerpc_stfsx, // Store Floating-Point Single Indexed
404  powerpc_sth, // Store Half
405  powerpc_sthbrx, // Store Half Byte-Reverse Indexed
406  powerpc_sthu, // Store Half with Update
407  powerpc_sthux, // Store Half with Update Indexed
408  powerpc_sthx, // Store Half Indexed
409  powerpc_stmw, // Store Multiple Word
410  powerpc_stswi, // Store String Word Immediate
411  powerpc_stswx, // Store String Word Indexed
412  powerpc_stw, // Store
413  powerpc_stwbrx, // Store Word Byte-Reversed Indexed
414  powerpc_stwcx_record, // Store Word Conditional Indexed
415  powerpc_stwu, // Store Word with Update
416  powerpc_stwux, // Store Word with Update Indexed
417  powerpc_stwx, // Store Word Indexed
418  powerpc_subf, // Subtract from
419  powerpc_subf_record, // Subtract from
420  powerpc_subfo, // Subtract from
421  powerpc_subfo_record, // Subtract from
422  powerpc_subfc, // Subtract from Carrying
423  powerpc_subfc_record, // Subtract from Carrying
424  powerpc_subfco, // Subtract from Carrying
425  powerpc_subfco_record, // Subtract from Carrying
426  powerpc_subfe, // Subtract from Extended
427  powerpc_subfe_record, // Subtract from Extended
428  powerpc_subfeo, // Subtract from Extended
429  powerpc_subfeo_record, // Subtract from Extended
430  powerpc_subfic, // Subtract from Immediate Carrying
431  powerpc_subfme, // Subtract from Minus One Extended
432  powerpc_subfme_record, // Subtract from Minus One Extended
433  powerpc_subfmeo, // Subtract from Minus One Extended
434  powerpc_subfmeo_record, // Subtract from Minus One Extended
435  powerpc_subfze, // Subtract from Zero Extended
436  powerpc_subfze_record, // Subtract from Zero Extended
437  powerpc_subfzeo, // Subtract from Zero Extended
438  powerpc_subfzeo_record, // Subtract from Zero Extended
439  powerpc_sync, // Synchronize
440  powerpc_td, // Trap Doubleword
441  powerpc_tdi, // Trap Doubleword Immediate
442  powerpc_tlbia, // Translation Look-aside Buffer Invalidate All (optional)
443  powerpc_tlbie, // Translation Look-aside Buffer Invalidate Entry (optional)
444  powerpc_tlbsync, // Translation Look-aside Buffer Synchronize (optional)
445  powerpc_tw, // Trap Word
446  powerpc_twi, // Trap Word Immediate
447  powerpc_xor, // XOR
448  powerpc_xor_record, // XOR
449  powerpc_xori, // XOR Immediate
450  powerpc_xoris, // XOR Immediate Shift
451  powerpc_last_instruction
452  };
453 
454 enum PowerpcRegisterClass
455 {
456  powerpc_regclass_unknown,
457  powerpc_regclass_gpr, // General Purpose Register (0..31)
458  powerpc_regclass_fpr, // Floating-Point Register (0..31; 64 bits each)
459  powerpc_regclass_cr, // Condition Register (only particular fields or bits may be used)
460  powerpc_regclass_fpscr, // Floating point status and control register
461  powerpc_regclass_spr, // Special-purpose register (0..1023)
462  powerpc_regclass_tbr, // Time base register (0..1023)
463  powerpc_regclass_msr, // Machine state register
464  powerpc_regclass_sr, // Segment register
465  powerpc_regclass_iar, // instruction address (pseudo) register
466  powerpc_regclass_pvr, // processor version register
467  powerpc_last_register_class // last enum value
468 };
469 
470 enum PowerpcConditionRegisterAccessGranularity
471 {
472  powerpc_condreggranularity_whole, // Whole CR (or unknown or not using a CR)
473  powerpc_condreggranularity_field, // Four-bit field
474  powerpc_condreggranularity_bit // Single bit
475 };
476 
477 enum PowerpcSpecialPurposeRegister
478 { // These must match the processor's numbers
479  powerpc_spr_xer = 1, // fixed-point exception register
480  powerpc_spr_lr = 8, // link register
481  powerpc_spr_ctr = 9, // count register
482  powerpc_spr_dsisr = 18,
483  powerpc_spr_dar = 19,
484  powerpc_spr_dec = 22 // FIXME: fill in the rest of these
485 };
486 
487 enum PowerpcTimeBaseRegister
488 { // These must match the processor's numbers
489  powerpc_tbr_tbl = 268,
490  powerpc_tbr_tbu = 269
491 };
492 
493 #endif /* ROSE_POWERPC_INSTRUCTION_ENUM_H */