ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/kpx_cpu/ppc-dis.c
Revision: 1.1
Committed: 2012-06-16T02:16:40Z (11 years, 11 months ago) by asvitkine
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Log Message:
Dump PPC disassembly on crash

File Contents

# User Rev Content
1 asvitkine 1.1 /* ppc-dis.c -- Disassemble PowerPC instructions
2     Copyright 1994, 1995, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
3     Free Software Foundation, Inc.
4     Written by Ian Lance Taylor, Cygnus Support
5    
6     This file is part of GDB, GAS, and the GNU binutils.
7    
8     GDB, GAS, and the GNU binutils are free software; you can redistribute
9     them and/or modify them under the terms of the GNU General Public
10     License as published by the Free Software Foundation; either version
11     2, or (at your option) any later version.
12    
13     GDB, GAS, and the GNU binutils are distributed in the hope that they
14     will be useful, but WITHOUT ANY WARRANTY; without even the implied
15     warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
16     the GNU General Public License for more details.
17    
18     You should have received a copy of the GNU General Public License
19     along with this file; see the file COPYING. If not,
20     see <http://www.gnu.org/licenses/>. */
21    
22     #include <string.h>
23     #include <errno.h>
24    
25     #include "dis-asm.h"
26    
27     #define BFD_DEFAULT_TARGET_SIZE 64
28    
29     /* ppc.h -- Header file for PowerPC opcode table
30     Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
31     2007 Free Software Foundation, Inc.
32     Written by Ian Lance Taylor, Cygnus Support
33    
34     This file is part of GDB, GAS, and the GNU binutils.
35    
36     GDB, GAS, and the GNU binutils are free software; you can redistribute
37     them and/or modify them under the terms of the GNU General Public
38     License as published by the Free Software Foundation; either version
39     1, or (at your option) any later version.
40    
41     GDB, GAS, and the GNU binutils are distributed in the hope that they
42     will be useful, but WITHOUT ANY WARRANTY; without even the implied
43     warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
44     the GNU General Public License for more details.
45    
46     You should have received a copy of the GNU General Public License
47     along with this file; see the file COPYING. If not,
48     see <http://www.gnu.org/licenses/>. */
49    
50     /* The opcode table is an array of struct powerpc_opcode. */
51    
52     struct powerpc_opcode
53     {
54     /* The opcode name. */
55     const char *name;
56    
57     /* The opcode itself. Those bits which will be filled in with
58     operands are zeroes. */
59     unsigned long opcode;
60    
61     /* The opcode mask. This is used by the disassembler. This is a
62     mask containing ones indicating those bits which must match the
63     opcode field, and zeroes indicating those bits which need not
64     match (and are presumably filled in by operands). */
65     unsigned long mask;
66    
67     /* One bit flags for the opcode. These are used to indicate which
68     specific processors support the instructions. The defined values
69     are listed below. */
70     unsigned long flags;
71    
72     /* An array of operand codes. Each code is an index into the
73     operand table. They appear in the order which the operands must
74     appear in assembly code, and are terminated by a zero. */
75     unsigned char operands[8];
76     };
77    
78     /* The table itself is sorted by major opcode number, and is otherwise
79     in the order in which the disassembler should consider
80     instructions. */
81     extern const struct powerpc_opcode powerpc_opcodes[];
82     extern const int powerpc_num_opcodes;
83    
84     /* Values defined for the flags field of a struct powerpc_opcode. */
85    
86     /* Opcode is defined for the PowerPC architecture. */
87     #define PPC_OPCODE_PPC 1
88    
89     /* Opcode is defined for the POWER (RS/6000) architecture. */
90     #define PPC_OPCODE_POWER 2
91    
92     /* Opcode is defined for the POWER2 (Rios 2) architecture. */
93     #define PPC_OPCODE_POWER2 4
94    
95     /* Opcode is only defined on 32 bit architectures. */
96     #define PPC_OPCODE_32 8
97    
98     /* Opcode is only defined on 64 bit architectures. */
99     #define PPC_OPCODE_64 0x10
100    
101     /* Opcode is supported by the Motorola PowerPC 601 processor. The 601
102     is assumed to support all PowerPC (PPC_OPCODE_PPC) instructions,
103     but it also supports many additional POWER instructions. */
104     #define PPC_OPCODE_601 0x20
105    
106     /* Opcode is supported in both the Power and PowerPC architectures
107     (ie, compiler's -mcpu=common or assembler's -mcom). */
108     #define PPC_OPCODE_COMMON 0x40
109    
110     /* Opcode is supported for any Power or PowerPC platform (this is
111     for the assembler's -many option, and it eliminates duplicates). */
112     #define PPC_OPCODE_ANY 0x80
113    
114     /* Opcode is supported as part of the 64-bit bridge. */
115     #define PPC_OPCODE_64_BRIDGE 0x100
116    
117     /* Opcode is supported by Altivec Vector Unit */
118     #define PPC_OPCODE_ALTIVEC 0x200
119    
120     /* Opcode is supported by PowerPC 403 processor. */
121     #define PPC_OPCODE_403 0x400
122    
123     /* Opcode is supported by PowerPC BookE processor. */
124     #define PPC_OPCODE_BOOKE 0x800
125    
126     /* Opcode is only supported by 64-bit PowerPC BookE processor. */
127     #define PPC_OPCODE_BOOKE64 0x1000
128    
129     /* Opcode is supported by PowerPC 440 processor. */
130     #define PPC_OPCODE_440 0x2000
131    
132     /* Opcode is only supported by Power4 architecture. */
133     #define PPC_OPCODE_POWER4 0x4000
134    
135     /* Opcode isn't supported by Power4 architecture. */
136     #define PPC_OPCODE_NOPOWER4 0x8000
137    
138     /* Opcode is only supported by POWERPC Classic architecture. */
139     #define PPC_OPCODE_CLASSIC 0x10000
140    
141     /* Opcode is only supported by e500x2 Core. */
142     #define PPC_OPCODE_SPE 0x20000
143    
144     /* Opcode is supported by e500x2 Integer select APU. */
145     #define PPC_OPCODE_ISEL 0x40000
146    
147     /* Opcode is an e500 SPE floating point instruction. */
148     #define PPC_OPCODE_EFS 0x80000
149    
150     /* Opcode is supported by branch locking APU. */
151     #define PPC_OPCODE_BRLOCK 0x100000
152    
153     /* Opcode is supported by performance monitor APU. */
154     #define PPC_OPCODE_PMR 0x200000
155    
156     /* Opcode is supported by cache locking APU. */
157     #define PPC_OPCODE_CACHELCK 0x400000
158    
159     /* Opcode is supported by machine check APU. */
160     #define PPC_OPCODE_RFMCI 0x800000
161    
162     /* Opcode is only supported by Power5 architecture. */
163     #define PPC_OPCODE_POWER5 0x1000000
164    
165     /* Opcode is supported by PowerPC e300 family. */
166     #define PPC_OPCODE_E300 0x2000000
167    
168     /* Opcode is only supported by Power6 architecture. */
169     #define PPC_OPCODE_POWER6 0x4000000
170    
171     /* Opcode is only supported by PowerPC Cell family. */
172     #define PPC_OPCODE_CELL 0x8000000
173    
174     /* A macro to extract the major opcode from an instruction. */
175     #define PPC_OP(i) (((i) >> 26) & 0x3f)
176    
177     /* The operands table is an array of struct powerpc_operand. */
178    
179     struct powerpc_operand
180     {
181     /* A bitmask of bits in the operand. */
182     unsigned int bitm;
183    
184     /* How far the operand is left shifted in the instruction.
185     -1 to indicate that BITM and SHIFT cannot be used to determine
186     where the operand goes in the insn. */
187     int shift;
188    
189     /* Insertion function. This is used by the assembler. To insert an
190     operand value into an instruction, check this field.
191    
192     If it is NULL, execute
193     i |= (op & o->bitm) << o->shift;
194     (i is the instruction which we are filling in, o is a pointer to
195     this structure, and op is the operand value).
196    
197     If this field is not NULL, then simply call it with the
198     instruction and the operand value. It will return the new value
199     of the instruction. If the ERRMSG argument is not NULL, then if
200     the operand value is illegal, *ERRMSG will be set to a warning
201     string (the operand will be inserted in any case). If the
202     operand value is legal, *ERRMSG will be unchanged (most operands
203     can accept any value). */
204     unsigned long (*insert)
205     (unsigned long instruction, long op, int dialect, const char **errmsg);
206    
207     /* Extraction function. This is used by the disassembler. To
208     extract this operand type from an instruction, check this field.
209    
210     If it is NULL, compute
211     op = (i >> o->shift) & o->bitm;
212     if ((o->flags & PPC_OPERAND_SIGNED) != 0)
213     sign_extend (op);
214     (i is the instruction, o is a pointer to this structure, and op
215     is the result).
216    
217     If this field is not NULL, then simply call it with the
218     instruction value. It will return the value of the operand. If
219     the INVALID argument is not NULL, *INVALID will be set to
220     non-zero if this operand type can not actually be extracted from
221     this operand (i.e., the instruction does not match). If the
222     operand is valid, *INVALID will not be changed. */
223     long (*extract) (unsigned long instruction, int dialect, int *invalid);
224    
225     /* One bit syntax flags. */
226     unsigned long flags;
227     };
228    
229     /* Elements in the table are retrieved by indexing with values from
230     the operands field of the powerpc_opcodes table. */
231    
232     extern const struct powerpc_operand powerpc_operands[];
233     extern const unsigned int num_powerpc_operands;
234    
235     /* Values defined for the flags field of a struct powerpc_operand. */
236    
237     /* This operand takes signed values. */
238     #define PPC_OPERAND_SIGNED (0x1)
239    
240     /* This operand takes signed values, but also accepts a full positive
241     range of values when running in 32 bit mode. That is, if bits is
242     16, it takes any value from -0x8000 to 0xffff. In 64 bit mode,
243     this flag is ignored. */
244     #define PPC_OPERAND_SIGNOPT (0x2)
245    
246     /* This operand does not actually exist in the assembler input. This
247     is used to support extended mnemonics such as mr, for which two
248     operands fields are identical. The assembler should call the
249     insert function with any op value. The disassembler should call
250     the extract function, ignore the return value, and check the value
251     placed in the valid argument. */
252     #define PPC_OPERAND_FAKE (0x4)
253    
254     /* The next operand should be wrapped in parentheses rather than
255     separated from this one by a comma. This is used for the load and
256     store instructions which want their operands to look like
257     reg,displacement(reg)
258     */
259     #define PPC_OPERAND_PARENS (0x8)
260    
261     /* This operand may use the symbolic names for the CR fields, which
262     are
263     lt 0 gt 1 eq 2 so 3 un 3
264     cr0 0 cr1 1 cr2 2 cr3 3
265     cr4 4 cr5 5 cr6 6 cr7 7
266     These may be combined arithmetically, as in cr2*4+gt. These are
267     only supported on the PowerPC, not the POWER. */
268     #define PPC_OPERAND_CR (0x10)
269    
270     /* This operand names a register. The disassembler uses this to print
271     register names with a leading 'r'. */
272     #define PPC_OPERAND_GPR (0x20)
273    
274     /* Like PPC_OPERAND_GPR, but don't print a leading 'r' for r0. */
275     #define PPC_OPERAND_GPR_0 (0x40)
276    
277     /* This operand names a floating point register. The disassembler
278     prints these with a leading 'f'. */
279     #define PPC_OPERAND_FPR (0x80)
280    
281     /* This operand is a relative branch displacement. The disassembler
282     prints these symbolically if possible. */
283     #define PPC_OPERAND_RELATIVE (0x100)
284    
285     /* This operand is an absolute branch address. The disassembler
286     prints these symbolically if possible. */
287     #define PPC_OPERAND_ABSOLUTE (0x200)
288    
289     /* This operand is optional, and is zero if omitted. This is used for
290     example, in the optional BF field in the comparison instructions. The
291     assembler must count the number of operands remaining on the line,
292     and the number of operands remaining for the opcode, and decide
293     whether this operand is present or not. The disassembler should
294     print this operand out only if it is not zero. */
295     #define PPC_OPERAND_OPTIONAL (0x400)
296    
297     /* This flag is only used with PPC_OPERAND_OPTIONAL. If this operand
298     is omitted, then for the next operand use this operand value plus
299     1, ignoring the next operand field for the opcode. This wretched
300     hack is needed because the Power rotate instructions can take
301     either 4 or 5 operands. The disassembler should print this operand
302     out regardless of the PPC_OPERAND_OPTIONAL field. */
303     #define PPC_OPERAND_NEXT (0x800)
304    
305     /* This operand should be regarded as a negative number for the
306     purposes of overflow checking (i.e., the normal most negative
307     number is disallowed and one more than the normal most positive
308     number is allowed). This flag will only be set for a signed
309     operand. */
310     #define PPC_OPERAND_NEGATIVE (0x1000)
311    
312     /* This operand names a vector unit register. The disassembler
313     prints these with a leading 'v'. */
314     #define PPC_OPERAND_VR (0x2000)
315    
316     /* This operand is for the DS field in a DS form instruction. */
317     #define PPC_OPERAND_DS (0x4000)
318    
319     /* This operand is for the DQ field in a DQ form instruction. */
320     #define PPC_OPERAND_DQ (0x8000)
321    
322     /* Valid range of operand is 0..n rather than 0..n-1. */
323     #define PPC_OPERAND_PLUS1 (0x10000)
324    
325     /* The POWER and PowerPC assemblers use a few macros. We keep them
326     with the operands table for simplicity. The macro table is an
327     array of struct powerpc_macro. */
328    
329     struct powerpc_macro
330     {
331     /* The macro name. */
332     const char *name;
333    
334     /* The number of operands the macro takes. */
335     unsigned int operands;
336    
337     /* One bit flags for the opcode. These are used to indicate which
338     specific processors support the instructions. The values are the
339     same as those for the struct powerpc_opcode flags field. */
340     unsigned long flags;
341    
342     /* A format string to turn the macro into a normal instruction.
343     Each %N in the string is replaced with operand number N (zero
344     based). */
345     const char *format;
346     };
347    
348     extern const struct powerpc_macro powerpc_macros[];
349     extern const int powerpc_num_macros;
350    
351     /* ppc-opc.c -- PowerPC opcode list
352     Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004,
353     2005, 2006, 2007 Free Software Foundation, Inc.
354     Written by Ian Lance Taylor, Cygnus Support
355    
356     This file is part of GDB, GAS, and the GNU binutils.
357    
358     GDB, GAS, and the GNU binutils are free software; you can redistribute
359     them and/or modify them under the terms of the GNU General Public
360     License as published by the Free Software Foundation; either version
361     2, or (at your option) any later version.
362    
363     GDB, GAS, and the GNU binutils are distributed in the hope that they
364     will be useful, but WITHOUT ANY WARRANTY; without even the implied
365     warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
366     the GNU General Public License for more details.
367    
368     You should have received a copy of the GNU General Public License
369     along with this file; see the file COPYING.
370     If not, see <http://www.gnu.org/licenses/>. */
371    
372     /* This file holds the PowerPC opcode table. The opcode table
373     includes almost all of the extended instruction mnemonics. This
374     permits the disassembler to use them, and simplifies the assembler
375     logic, at the cost of increasing the table size. The table is
376     strictly constant data, so the compiler should be able to put it in
377     the .text section.
378    
379     This file also holds the operand table. All knowledge about
380     inserting operands into instructions and vice-versa is kept in this
381     file. */
382    
383     /* Local insertion and extraction functions. */
384    
385     static unsigned long insert_bat (unsigned long, long, int, const char **);
386     static long extract_bat (unsigned long, int, int *);
387     static unsigned long insert_bba (unsigned long, long, int, const char **);
388     static long extract_bba (unsigned long, int, int *);
389     static unsigned long insert_bdm (unsigned long, long, int, const char **);
390     static long extract_bdm (unsigned long, int, int *);
391     static unsigned long insert_bdp (unsigned long, long, int, const char **);
392     static long extract_bdp (unsigned long, int, int *);
393     static unsigned long insert_bo (unsigned long, long, int, const char **);
394     static long extract_bo (unsigned long, int, int *);
395     static unsigned long insert_boe (unsigned long, long, int, const char **);
396     static long extract_boe (unsigned long, int, int *);
397     static unsigned long insert_fxm (unsigned long, long, int, const char **);
398     static long extract_fxm (unsigned long, int, int *);
399     static unsigned long insert_mbe (unsigned long, long, int, const char **);
400     static long extract_mbe (unsigned long, int, int *);
401     static unsigned long insert_mb6 (unsigned long, long, int, const char **);
402     static long extract_mb6 (unsigned long, int, int *);
403     static long extract_nb (unsigned long, int, int *);
404     static unsigned long insert_nsi (unsigned long, long, int, const char **);
405     static long extract_nsi (unsigned long, int, int *);
406     static unsigned long insert_ral (unsigned long, long, int, const char **);
407     static unsigned long insert_ram (unsigned long, long, int, const char **);
408     static unsigned long insert_raq (unsigned long, long, int, const char **);
409     static unsigned long insert_ras (unsigned long, long, int, const char **);
410     static unsigned long insert_rbs (unsigned long, long, int, const char **);
411     static long extract_rbs (unsigned long, int, int *);
412     static unsigned long insert_sh6 (unsigned long, long, int, const char **);
413     static long extract_sh6 (unsigned long, int, int *);
414     static unsigned long insert_spr (unsigned long, long, int, const char **);
415     static long extract_spr (unsigned long, int, int *);
416     static unsigned long insert_sprg (unsigned long, long, int, const char **);
417     static long extract_sprg (unsigned long, int, int *);
418     static unsigned long insert_tbr (unsigned long, long, int, const char **);
419     static long extract_tbr (unsigned long, int, int *);
420    
421     /* The operands table.
422    
423     The fields are bitm, shift, insert, extract, flags.
424    
425     We used to put parens around the various additions, like the one
426     for BA just below. However, that caused trouble with feeble
427     compilers with a limit on depth of a parenthesized expression, like
428     (reportedly) the compiler in Microsoft Developer Studio 5. So we
429     omit the parens, since the macros are never used in a context where
430     the addition will be ambiguous. */
431    
432     const struct powerpc_operand powerpc_operands[] =
433     {
434     /* The zero index is used to indicate the end of the list of
435     operands. */
436     #define UNUSED 0
437     { 0, 0, NULL, NULL, 0 },
438    
439     /* The BA field in an XL form instruction. */
440     #define BA UNUSED + 1
441     /* The BI field in a B form or XL form instruction. */
442     #define BI BA
443     #define BI_MASK (0x1f << 16)
444     { 0x1f, 16, NULL, NULL, PPC_OPERAND_CR },
445    
446     /* The BA field in an XL form instruction when it must be the same
447     as the BT field in the same instruction. */
448     #define BAT BA + 1
449     { 0x1f, 16, insert_bat, extract_bat, PPC_OPERAND_FAKE },
450    
451     /* The BB field in an XL form instruction. */
452     #define BB BAT + 1
453     #define BB_MASK (0x1f << 11)
454     { 0x1f, 11, NULL, NULL, PPC_OPERAND_CR },
455    
456     /* The BB field in an XL form instruction when it must be the same
457     as the BA field in the same instruction. */
458     #define BBA BB + 1
459     { 0x1f, 11, insert_bba, extract_bba, PPC_OPERAND_FAKE },
460    
461     /* The BD field in a B form instruction. The lower two bits are
462     forced to zero. */
463     #define BD BBA + 1
464     { 0xfffc, 0, NULL, NULL, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
465    
466     /* The BD field in a B form instruction when absolute addressing is
467     used. */
468     #define BDA BD + 1
469     { 0xfffc, 0, NULL, NULL, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
470    
471     /* The BD field in a B form instruction when the - modifier is used.
472     This sets the y bit of the BO field appropriately. */
473     #define BDM BDA + 1
474     { 0xfffc, 0, insert_bdm, extract_bdm,
475     PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
476    
477     /* The BD field in a B form instruction when the - modifier is used
478     and absolute address is used. */
479     #define BDMA BDM + 1
480     { 0xfffc, 0, insert_bdm, extract_bdm,
481     PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
482    
483     /* The BD field in a B form instruction when the + modifier is used.
484     This sets the y bit of the BO field appropriately. */
485     #define BDP BDMA + 1
486     { 0xfffc, 0, insert_bdp, extract_bdp,
487     PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
488    
489     /* The BD field in a B form instruction when the + modifier is used
490     and absolute addressing is used. */
491     #define BDPA BDP + 1
492     { 0xfffc, 0, insert_bdp, extract_bdp,
493     PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
494    
495     /* The BF field in an X or XL form instruction. */
496     #define BF BDPA + 1
497     /* The CRFD field in an X form instruction. */
498     #define CRFD BF
499     { 0x7, 23, NULL, NULL, PPC_OPERAND_CR },
500    
501     /* The BF field in an X or XL form instruction. */
502     #define BFF BF + 1
503     { 0x7, 23, NULL, NULL, 0 },
504    
505     /* An optional BF field. This is used for comparison instructions,
506     in which an omitted BF field is taken as zero. */
507     #define OBF BFF + 1
508     { 0x7, 23, NULL, NULL, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
509    
510     /* The BFA field in an X or XL form instruction. */
511     #define BFA OBF + 1
512     { 0x7, 18, NULL, NULL, PPC_OPERAND_CR },
513    
514     /* The BO field in a B form instruction. Certain values are
515     illegal. */
516     #define BO BFA + 1
517     #define BO_MASK (0x1f << 21)
518     { 0x1f, 21, insert_bo, extract_bo, 0 },
519    
520     /* The BO field in a B form instruction when the + or - modifier is
521     used. This is like the BO field, but it must be even. */
522     #define BOE BO + 1
523     { 0x1e, 21, insert_boe, extract_boe, 0 },
524    
525     #define BH BOE + 1
526     { 0x3, 11, NULL, NULL, PPC_OPERAND_OPTIONAL },
527    
528     /* The BT field in an X or XL form instruction. */
529     #define BT BH + 1
530     { 0x1f, 21, NULL, NULL, PPC_OPERAND_CR },
531    
532     /* The condition register number portion of the BI field in a B form
533     or XL form instruction. This is used for the extended
534     conditional branch mnemonics, which set the lower two bits of the
535     BI field. This field is optional. */
536     #define CR BT + 1
537     { 0x7, 18, NULL, NULL, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
538    
539     /* The CRB field in an X form instruction. */
540     #define CRB CR + 1
541     /* The MB field in an M form instruction. */
542     #define MB CRB
543     #define MB_MASK (0x1f << 6)
544     { 0x1f, 6, NULL, NULL, 0 },
545    
546     /* The CRFS field in an X form instruction. */
547     #define CRFS CRB + 1
548     { 0x7, 0, NULL, NULL, PPC_OPERAND_CR },
549    
550     /* The CT field in an X form instruction. */
551     #define CT CRFS + 1
552     /* The MO field in an mbar instruction. */
553     #define MO CT
554     { 0x1f, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
555    
556     /* The D field in a D form instruction. This is a displacement off
557     a register, and implies that the next operand is a register in
558     parentheses. */
559     #define D CT + 1
560     { 0xffff, 0, NULL, NULL, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
561    
562     /* The DE field in a DE form instruction. This is like D, but is 12
563     bits only. */
564     #define DE D + 1
565     { 0xfff, 4, NULL, NULL, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
566    
567     /* The DES field in a DES form instruction. This is like DS, but is 14
568     bits only (12 stored.) */
569     #define DES DE + 1
570     { 0x3ffc, 2, NULL, NULL, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
571    
572     /* The DQ field in a DQ form instruction. This is like D, but the
573     lower four bits are forced to zero. */
574     #define DQ DES + 1
575     { 0xfff0, 0, NULL, NULL,
576     PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DQ },
577    
578     /* The DS field in a DS form instruction. This is like D, but the
579     lower two bits are forced to zero. */
580     #undef DS
581     #define DS DQ + 1
582     { 0xfffc, 0, NULL, NULL,
583     PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DS },
584    
585     /* The E field in a wrteei instruction. */
586     #define E DS + 1
587     { 0x1, 15, NULL, NULL, 0 },
588    
589     /* The FL1 field in a POWER SC form instruction. */
590     #define FL1 E + 1
591     /* The U field in an X form instruction. */
592     #define U FL1
593     { 0xf, 12, NULL, NULL, 0 },
594    
595     /* The FL2 field in a POWER SC form instruction. */
596     #define FL2 FL1 + 1
597     { 0x7, 2, NULL, NULL, 0 },
598    
599     /* The FLM field in an XFL form instruction. */
600     #define FLM FL2 + 1
601     { 0xff, 17, NULL, NULL, 0 },
602    
603     /* The FRA field in an X or A form instruction. */
604     #define FRA FLM + 1
605     #define FRA_MASK (0x1f << 16)
606     { 0x1f, 16, NULL, NULL, PPC_OPERAND_FPR },
607    
608     /* The FRB field in an X or A form instruction. */
609     #define FRB FRA + 1
610     #define FRB_MASK (0x1f << 11)
611     { 0x1f, 11, NULL, NULL, PPC_OPERAND_FPR },
612    
613     /* The FRC field in an A form instruction. */
614     #define FRC FRB + 1
615     #define FRC_MASK (0x1f << 6)
616     { 0x1f, 6, NULL, NULL, PPC_OPERAND_FPR },
617    
618     /* The FRS field in an X form instruction or the FRT field in a D, X
619     or A form instruction. */
620     #define FRS FRC + 1
621     #define FRT FRS
622     { 0x1f, 21, NULL, NULL, PPC_OPERAND_FPR },
623    
624     /* The FXM field in an XFX instruction. */
625     #define FXM FRS + 1
626     { 0xff, 12, insert_fxm, extract_fxm, 0 },
627    
628     /* Power4 version for mfcr. */
629     #define FXM4 FXM + 1
630     { 0xff, 12, insert_fxm, extract_fxm, PPC_OPERAND_OPTIONAL },
631    
632     /* The L field in a D or X form instruction. */
633     #define L FXM4 + 1
634     { 0x1, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
635    
636     /* The LEV field in a POWER SVC form instruction. */
637     #define SVC_LEV L + 1
638     { 0x7f, 5, NULL, NULL, 0 },
639    
640     /* The LEV field in an SC form instruction. */
641     #define LEV SVC_LEV + 1
642     { 0x7f, 5, NULL, NULL, PPC_OPERAND_OPTIONAL },
643    
644     /* The LI field in an I form instruction. The lower two bits are
645     forced to zero. */
646     #define LI LEV + 1
647     { 0x3fffffc, 0, NULL, NULL, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
648    
649     /* The LI field in an I form instruction when used as an absolute
650     address. */
651     #define LIA LI + 1
652     { 0x3fffffc, 0, NULL, NULL, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
653    
654     /* The LS field in an X (sync) form instruction. */
655     #define LS LIA + 1
656     { 0x3, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
657    
658     /* The ME field in an M form instruction. */
659     #define ME LS + 1
660     #define ME_MASK (0x1f << 1)
661     { 0x1f, 1, NULL, NULL, 0 },
662    
663     /* The MB and ME fields in an M form instruction expressed a single
664     operand which is a bitmask indicating which bits to select. This
665     is a two operand form using PPC_OPERAND_NEXT. See the
666     description in opcode/ppc.h for what this means. */
667     #define MBE ME + 1
668     { 0x1f, 6, NULL, NULL, PPC_OPERAND_OPTIONAL | PPC_OPERAND_NEXT },
669     { -1, 0, insert_mbe, extract_mbe, 0 },
670    
671     /* The MB or ME field in an MD or MDS form instruction. The high
672     bit is wrapped to the low end. */
673     #define MB6 MBE + 2
674     #define ME6 MB6
675     #define MB6_MASK (0x3f << 5)
676     { 0x3f, 5, insert_mb6, extract_mb6, 0 },
677    
678     /* The NB field in an X form instruction. The value 32 is stored as
679     0. */
680     #define NB MB6 + 1
681     { 0x1f, 11, NULL, extract_nb, PPC_OPERAND_PLUS1 },
682    
683     /* The NSI field in a D form instruction. This is the same as the
684     SI field, only negated. */
685     #define NSI NB + 1
686     { 0xffff, 0, insert_nsi, extract_nsi,
687     PPC_OPERAND_NEGATIVE | PPC_OPERAND_SIGNED },
688    
689     /* The RA field in an D, DS, DQ, X, XO, M, or MDS form instruction. */
690     #define RA NSI + 1
691     #define RA_MASK (0x1f << 16)
692     { 0x1f, 16, NULL, NULL, PPC_OPERAND_GPR },
693    
694     /* As above, but 0 in the RA field means zero, not r0. */
695     #define RA0 RA + 1
696     { 0x1f, 16, NULL, NULL, PPC_OPERAND_GPR_0 },
697    
698     /* The RA field in the DQ form lq instruction, which has special
699     value restrictions. */
700     #define RAQ RA0 + 1
701     { 0x1f, 16, insert_raq, NULL, PPC_OPERAND_GPR_0 },
702    
703     /* The RA field in a D or X form instruction which is an updating
704     load, which means that the RA field may not be zero and may not
705     equal the RT field. */
706     #define RAL RAQ + 1
707     { 0x1f, 16, insert_ral, NULL, PPC_OPERAND_GPR_0 },
708    
709     /* The RA field in an lmw instruction, which has special value
710     restrictions. */
711     #define RAM RAL + 1
712     { 0x1f, 16, insert_ram, NULL, PPC_OPERAND_GPR_0 },
713    
714     /* The RA field in a D or X form instruction which is an updating
715     store or an updating floating point load, which means that the RA
716     field may not be zero. */
717     #define RAS RAM + 1
718     { 0x1f, 16, insert_ras, NULL, PPC_OPERAND_GPR_0 },
719    
720     /* The RA field of the tlbwe instruction, which is optional. */
721     #define RAOPT RAS + 1
722     { 0x1f, 16, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL },
723    
724     /* The RB field in an X, XO, M, or MDS form instruction. */
725     #define RB RAOPT + 1
726     #define RB_MASK (0x1f << 11)
727     { 0x1f, 11, NULL, NULL, PPC_OPERAND_GPR },
728    
729     /* The RB field in an X form instruction when it must be the same as
730     the RS field in the instruction. This is used for extended
731     mnemonics like mr. */
732     #define RBS RB + 1
733     { 0x1f, 11, insert_rbs, extract_rbs, PPC_OPERAND_FAKE },
734    
735     /* The RS field in a D, DS, X, XFX, XS, M, MD or MDS form
736     instruction or the RT field in a D, DS, X, XFX or XO form
737     instruction. */
738     #define RS RBS + 1
739     #define RT RS
740     #define RT_MASK (0x1f << 21)
741     { 0x1f, 21, NULL, NULL, PPC_OPERAND_GPR },
742    
743     /* The RS and RT fields of the DS form stq instruction, which have
744     special value restrictions. */
745     #define RSQ RS + 1
746     #define RTQ RSQ
747     { 0x1e, 21, NULL, NULL, PPC_OPERAND_GPR_0 },
748    
749     /* The RS field of the tlbwe instruction, which is optional. */
750     #define RSO RSQ + 1
751     #define RTO RSO
752     { 0x1f, 21, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL },
753    
754     /* The SH field in an X or M form instruction. */
755     #define SH RSO + 1
756     #define SH_MASK (0x1f << 11)
757     /* The other UIMM field in a EVX form instruction. */
758     #define EVUIMM SH
759     { 0x1f, 11, NULL, NULL, 0 },
760    
761     /* The SH field in an MD form instruction. This is split. */
762     #define SH6 SH + 1
763     #define SH6_MASK ((0x1f << 11) | (1 << 1))
764     { 0x3f, -1, insert_sh6, extract_sh6, 0 },
765    
766     /* The SH field of the tlbwe instruction, which is optional. */
767     #define SHO SH6 + 1
768     { 0x1f, 11, NULL, NULL, PPC_OPERAND_OPTIONAL },
769    
770     /* The SI field in a D form instruction. */
771     #define SI SHO + 1
772     { 0xffff, 0, NULL, NULL, PPC_OPERAND_SIGNED },
773    
774     /* The SI field in a D form instruction when we accept a wide range
775     of positive values. */
776     #define SISIGNOPT SI + 1
777     { 0xffff, 0, NULL, NULL, PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT },
778    
779     /* The SPR field in an XFX form instruction. This is flipped--the
780     lower 5 bits are stored in the upper 5 and vice- versa. */
781     #define SPR SISIGNOPT + 1
782     #define PMR SPR
783     #define SPR_MASK (0x3ff << 11)
784     { 0x3ff, 11, insert_spr, extract_spr, 0 },
785    
786     /* The BAT index number in an XFX form m[ft]ibat[lu] instruction. */
787     #define SPRBAT SPR + 1
788     #define SPRBAT_MASK (0x3 << 17)
789     { 0x3, 17, NULL, NULL, 0 },
790    
791     /* The SPRG register number in an XFX form m[ft]sprg instruction. */
792     #define SPRG SPRBAT + 1
793     { 0x1f, 16, insert_sprg, extract_sprg, 0 },
794    
795     /* The SR field in an X form instruction. */
796     #define SR SPRG + 1
797     { 0xf, 16, NULL, NULL, 0 },
798    
799     /* The STRM field in an X AltiVec form instruction. */
800     #define STRM SR + 1
801     { 0x3, 21, NULL, NULL, 0 },
802    
803     /* The SV field in a POWER SC form instruction. */
804     #define SV STRM + 1
805     { 0x3fff, 2, NULL, NULL, 0 },
806    
807     /* The TBR field in an XFX form instruction. This is like the SPR
808     field, but it is optional. */
809     #define TBR SV + 1
810     { 0x3ff, 11, insert_tbr, extract_tbr, PPC_OPERAND_OPTIONAL },
811    
812     /* The TO field in a D or X form instruction. */
813     #define TO TBR + 1
814     #define TO_MASK (0x1f << 21)
815     { 0x1f, 21, NULL, NULL, 0 },
816    
817     /* The UI field in a D form instruction. */
818     #define UI TO + 1
819     { 0xffff, 0, NULL, NULL, 0 },
820    
821     /* The VA field in a VA, VX or VXR form instruction. */
822     #define VA UI + 1
823     { 0x1f, 16, NULL, NULL, PPC_OPERAND_VR },
824    
825     /* The VB field in a VA, VX or VXR form instruction. */
826     #define VB VA + 1
827     { 0x1f, 11, NULL, NULL, PPC_OPERAND_VR },
828    
829     /* The VC field in a VA form instruction. */
830     #define VC VB + 1
831     { 0x1f, 6, NULL, NULL, PPC_OPERAND_VR },
832    
833     /* The VD or VS field in a VA, VX, VXR or X form instruction. */
834     #define VD VC + 1
835     #define VS VD
836     { 0x1f, 21, NULL, NULL, PPC_OPERAND_VR },
837    
838     /* The SIMM field in a VX form instruction. */
839     #define SIMM VD + 1
840     { 0x1f, 16, NULL, NULL, PPC_OPERAND_SIGNED},
841    
842     /* The UIMM field in a VX form instruction, and TE in Z form. */
843     #define UIMM SIMM + 1
844     #define TE UIMM
845     { 0x1f, 16, NULL, NULL, 0 },
846    
847     /* The SHB field in a VA form instruction. */
848     #define SHB UIMM + 1
849     { 0xf, 6, NULL, NULL, 0 },
850    
851     /* The other UIMM field in a half word EVX form instruction. */
852     #define EVUIMM_2 SHB + 1
853     { 0x3e, 10, NULL, NULL, PPC_OPERAND_PARENS },
854    
855     /* The other UIMM field in a word EVX form instruction. */
856     #define EVUIMM_4 EVUIMM_2 + 1
857     { 0x7c, 9, NULL, NULL, PPC_OPERAND_PARENS },
858    
859     /* The other UIMM field in a double EVX form instruction. */
860     #define EVUIMM_8 EVUIMM_4 + 1
861     { 0xf8, 8, NULL, NULL, PPC_OPERAND_PARENS },
862    
863     /* The WS field. */
864     #define WS EVUIMM_8 + 1
865     { 0x7, 11, NULL, NULL, 0 },
866    
867     /* The L field in an mtmsrd or A form instruction or W in an X form. */
868     #define A_L WS + 1
869     #define W A_L
870     { 0x1, 16, NULL, NULL, PPC_OPERAND_OPTIONAL },
871    
872     #define RMC A_L + 1
873     { 0x3, 9, NULL, NULL, 0 },
874    
875     #define R RMC + 1
876     { 0x1, 16, NULL, NULL, 0 },
877    
878     #define SP R + 1
879     { 0x3, 19, NULL, NULL, 0 },
880    
881     #define S SP + 1
882     { 0x1, 20, NULL, NULL, 0 },
883    
884     /* SH field starting at bit position 16. */
885     #define SH16 S + 1
886     /* The DCM and DGM fields in a Z form instruction. */
887     #define DCM SH16
888     #define DGM DCM
889     { 0x3f, 10, NULL, NULL, 0 },
890    
891     /* The EH field in larx instruction. */
892     #define EH SH16 + 1
893     { 0x1, 0, NULL, NULL, PPC_OPERAND_OPTIONAL },
894    
895     /* The L field in an mtfsf or XFL form instruction. */
896     #define XFL_L EH + 1
897     { 0x1, 25, NULL, NULL, PPC_OPERAND_OPTIONAL},
898     };
899    
900     const unsigned int num_powerpc_operands = (sizeof (powerpc_operands)
901     / sizeof (powerpc_operands[0]));
902    
903     /* The functions used to insert and extract complicated operands. */
904    
905     /* The BA field in an XL form instruction when it must be the same as
906     the BT field in the same instruction. This operand is marked FAKE.
907     The insertion function just copies the BT field into the BA field,
908     and the extraction function just checks that the fields are the
909     same. */
910    
911     static unsigned long
912     insert_bat (unsigned long insn,
913     long value ATTRIBUTE_UNUSED,
914     int dialect ATTRIBUTE_UNUSED,
915     const char **errmsg ATTRIBUTE_UNUSED)
916     {
917     return insn | (((insn >> 21) & 0x1f) << 16);
918     }
919    
920     static long
921     extract_bat (unsigned long insn,
922     int dialect ATTRIBUTE_UNUSED,
923     int *invalid)
924     {
925     if (((insn >> 21) & 0x1f) != ((insn >> 16) & 0x1f))
926     *invalid = 1;
927     return 0;
928     }
929    
930     /* The BB field in an XL form instruction when it must be the same as
931     the BA field in the same instruction. This operand is marked FAKE.
932     The insertion function just copies the BA field into the BB field,
933     and the extraction function just checks that the fields are the
934     same. */
935    
936     static unsigned long
937     insert_bba (unsigned long insn,
938     long value ATTRIBUTE_UNUSED,
939     int dialect ATTRIBUTE_UNUSED,
940     const char **errmsg ATTRIBUTE_UNUSED)
941     {
942     return insn | (((insn >> 16) & 0x1f) << 11);
943     }
944    
945     static long
946     extract_bba (unsigned long insn,
947     int dialect ATTRIBUTE_UNUSED,
948     int *invalid)
949     {
950     if (((insn >> 16) & 0x1f) != ((insn >> 11) & 0x1f))
951     *invalid = 1;
952     return 0;
953     }
954    
955     /* The BD field in a B form instruction when the - modifier is used.
956     This modifier means that the branch is not expected to be taken.
957     For chips built to versions of the architecture prior to version 2
958     (ie. not Power4 compatible), we set the y bit of the BO field to 1
959     if the offset is negative. When extracting, we require that the y
960     bit be 1 and that the offset be positive, since if the y bit is 0
961     we just want to print the normal form of the instruction.
962     Power4 compatible targets use two bits, "a", and "t", instead of
963     the "y" bit. "at" == 00 => no hint, "at" == 01 => unpredictable,
964     "at" == 10 => not taken, "at" == 11 => taken. The "t" bit is 00001
965     in BO field, the "a" bit is 00010 for branch on CR(BI) and 01000
966     for branch on CTR. We only handle the taken/not-taken hint here.
967     Note that we don't relax the conditions tested here when
968     disassembling with -Many because insns using extract_bdm and
969     extract_bdp always occur in pairs. One or the other will always
970     be valid. */
971    
972     static unsigned long
973     insert_bdm (unsigned long insn,
974     long value,
975     int dialect,
976     const char **errmsg ATTRIBUTE_UNUSED)
977     {
978     if ((dialect & PPC_OPCODE_POWER4) == 0)
979     {
980     if ((value & 0x8000) != 0)
981     insn |= 1 << 21;
982     }
983     else
984     {
985     if ((insn & (0x14 << 21)) == (0x04 << 21))
986     insn |= 0x02 << 21;
987     else if ((insn & (0x14 << 21)) == (0x10 << 21))
988     insn |= 0x08 << 21;
989     }
990     return insn | (value & 0xfffc);
991     }
992    
993     static long
994     extract_bdm (unsigned long insn,
995     int dialect,
996     int *invalid)
997     {
998     if ((dialect & PPC_OPCODE_POWER4) == 0)
999     {
1000     if (((insn & (1 << 21)) == 0) != ((insn & (1 << 15)) == 0))
1001     *invalid = 1;
1002     }
1003     else
1004     {
1005     if ((insn & (0x17 << 21)) != (0x06 << 21)
1006     && (insn & (0x1d << 21)) != (0x18 << 21))
1007     *invalid = 1;
1008     }
1009    
1010     return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
1011     }
1012    
1013     /* The BD field in a B form instruction when the + modifier is used.
1014     This is like BDM, above, except that the branch is expected to be
1015     taken. */
1016    
1017     static unsigned long
1018     insert_bdp (unsigned long insn,
1019     long value,
1020     int dialect,
1021     const char **errmsg ATTRIBUTE_UNUSED)
1022     {
1023     if ((dialect & PPC_OPCODE_POWER4) == 0)
1024     {
1025     if ((value & 0x8000) == 0)
1026     insn |= 1 << 21;
1027     }
1028     else
1029     {
1030     if ((insn & (0x14 << 21)) == (0x04 << 21))
1031     insn |= 0x03 << 21;
1032     else if ((insn & (0x14 << 21)) == (0x10 << 21))
1033     insn |= 0x09 << 21;
1034     }
1035     return insn | (value & 0xfffc);
1036     }
1037    
1038     static long
1039     extract_bdp (unsigned long insn,
1040     int dialect,
1041     int *invalid)
1042     {
1043     if ((dialect & PPC_OPCODE_POWER4) == 0)
1044     {
1045     if (((insn & (1 << 21)) == 0) == ((insn & (1 << 15)) == 0))
1046     *invalid = 1;
1047     }
1048     else
1049     {
1050     if ((insn & (0x17 << 21)) != (0x07 << 21)
1051     && (insn & (0x1d << 21)) != (0x19 << 21))
1052     *invalid = 1;
1053     }
1054    
1055     return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
1056     }
1057    
1058     /* Check for legal values of a BO field. */
1059    
1060     static int
1061     valid_bo (long value, int dialect, int extract)
1062     {
1063     if ((dialect & PPC_OPCODE_POWER4) == 0)
1064     {
1065     int valid;
1066     /* Certain encodings have bits that are required to be zero.
1067     These are (z must be zero, y may be anything):
1068     001zy
1069     011zy
1070     1z00y
1071     1z01y
1072     1z1zz
1073     */
1074     switch (value & 0x14)
1075     {
1076     default:
1077     case 0:
1078     valid = 1;
1079     break;
1080     case 0x4:
1081     valid = (value & 0x2) == 0;
1082     break;
1083     case 0x10:
1084     valid = (value & 0x8) == 0;
1085     break;
1086     case 0x14:
1087     valid = value == 0x14;
1088     break;
1089     }
1090     /* When disassembling with -Many, accept power4 encodings too. */
1091     if (valid
1092     || (dialect & PPC_OPCODE_ANY) == 0
1093     || !extract)
1094     return valid;
1095     }
1096    
1097     /* Certain encodings have bits that are required to be zero.
1098     These are (z must be zero, a & t may be anything):
1099     0000z
1100     0001z
1101     0100z
1102     0101z
1103     001at
1104     011at
1105     1a00t
1106     1a01t
1107     1z1zz
1108     */
1109     if ((value & 0x14) == 0)
1110     return (value & 0x1) == 0;
1111     else if ((value & 0x14) == 0x14)
1112     return value == 0x14;
1113     else
1114     return 1;
1115     }
1116    
1117     /* The BO field in a B form instruction. Warn about attempts to set
1118     the field to an illegal value. */
1119    
1120     static unsigned long
1121     insert_bo (unsigned long insn,
1122     long value,
1123     int dialect,
1124     const char **errmsg)
1125     {
1126     if (!valid_bo (value, dialect, 0))
1127     *errmsg = _("invalid conditional option");
1128     return insn | ((value & 0x1f) << 21);
1129     }
1130    
1131     static long
1132     extract_bo (unsigned long insn,
1133     int dialect,
1134     int *invalid)
1135     {
1136     long value;
1137    
1138     value = (insn >> 21) & 0x1f;
1139     if (!valid_bo (value, dialect, 1))
1140     *invalid = 1;
1141     return value;
1142     }
1143    
1144     /* The BO field in a B form instruction when the + or - modifier is
1145     used. This is like the BO field, but it must be even. When
1146     extracting it, we force it to be even. */
1147    
1148     static unsigned long
1149     insert_boe (unsigned long insn,
1150     long value,
1151     int dialect,
1152     const char **errmsg)
1153     {
1154     if (!valid_bo (value, dialect, 0))
1155     *errmsg = _("invalid conditional option");
1156     else if ((value & 1) != 0)
1157     *errmsg = _("attempt to set y bit when using + or - modifier");
1158    
1159     return insn | ((value & 0x1f) << 21);
1160     }
1161    
1162     static long
1163     extract_boe (unsigned long insn,
1164     int dialect,
1165     int *invalid)
1166     {
1167     long value;
1168    
1169     value = (insn >> 21) & 0x1f;
1170     if (!valid_bo (value, dialect, 1))
1171     *invalid = 1;
1172     return value & 0x1e;
1173     }
1174    
1175     /* FXM mask in mfcr and mtcrf instructions. */
1176    
1177     static unsigned long
1178     insert_fxm (unsigned long insn,
1179     long value,
1180     int dialect,
1181     const char **errmsg)
1182     {
1183     /* If we're handling the mfocrf and mtocrf insns ensure that exactly
1184     one bit of the mask field is set. */
1185     if ((insn & (1 << 20)) != 0)
1186     {
1187     if (value == 0 || (value & -value) != value)
1188     {
1189     *errmsg = _("invalid mask field");
1190     value = 0;
1191     }
1192     }
1193    
1194     /* If the optional field on mfcr is missing that means we want to use
1195     the old form of the instruction that moves the whole cr. In that
1196     case we'll have VALUE zero. There doesn't seem to be a way to
1197     distinguish this from the case where someone writes mfcr %r3,0. */
1198     else if (value == 0)
1199     ;
1200    
1201     /* If only one bit of the FXM field is set, we can use the new form
1202     of the instruction, which is faster. Unlike the Power4 branch hint
1203     encoding, this is not backward compatible. Do not generate the
1204     new form unless -mpower4 has been given, or -many and the two
1205     operand form of mfcr was used. */
1206     else if ((value & -value) == value
1207     && ((dialect & PPC_OPCODE_POWER4) != 0
1208     || ((dialect & PPC_OPCODE_ANY) != 0
1209     && (insn & (0x3ff << 1)) == 19 << 1)))
1210     insn |= 1 << 20;
1211    
1212     /* Any other value on mfcr is an error. */
1213     else if ((insn & (0x3ff << 1)) == 19 << 1)
1214     {
1215     *errmsg = _("ignoring invalid mfcr mask");
1216     value = 0;
1217     }
1218    
1219     return insn | ((value & 0xff) << 12);
1220     }
1221    
1222     static long
1223     extract_fxm (unsigned long insn,
1224     int dialect ATTRIBUTE_UNUSED,
1225     int *invalid)
1226     {
1227     long mask = (insn >> 12) & 0xff;
1228    
1229     /* Is this a Power4 insn? */
1230     if ((insn & (1 << 20)) != 0)
1231     {
1232     /* Exactly one bit of MASK should be set. */
1233     if (mask == 0 || (mask & -mask) != mask)
1234     *invalid = 1;
1235     }
1236    
1237     /* Check that non-power4 form of mfcr has a zero MASK. */
1238     else if ((insn & (0x3ff << 1)) == 19 << 1)
1239     {
1240     if (mask != 0)
1241     *invalid = 1;
1242     }
1243    
1244     return mask;
1245     }
1246    
1247     /* The MB and ME fields in an M form instruction expressed as a single
1248     operand which is itself a bitmask. The extraction function always
1249     marks it as invalid, since we never want to recognize an
1250     instruction which uses a field of this type. */
1251    
1252     static unsigned long
1253     insert_mbe (unsigned long insn,
1254     long value,
1255     int dialect ATTRIBUTE_UNUSED,
1256     const char **errmsg)
1257     {
1258     unsigned long uval, mask;
1259     int mb, me, mx, count, last;
1260    
1261     uval = value;
1262    
1263     if (uval == 0)
1264     {
1265     *errmsg = _("illegal bitmask");
1266     return insn;
1267     }
1268    
1269     mb = 0;
1270     me = 32;
1271     if ((uval & 1) != 0)
1272     last = 1;
1273     else
1274     last = 0;
1275     count = 0;
1276    
1277     /* mb: location of last 0->1 transition */
1278     /* me: location of last 1->0 transition */
1279     /* count: # transitions */
1280    
1281     for (mx = 0, mask = 1L << 31; mx < 32; ++mx, mask >>= 1)
1282     {
1283     if ((uval & mask) && !last)
1284     {
1285     ++count;
1286     mb = mx;
1287     last = 1;
1288     }
1289     else if (!(uval & mask) && last)
1290     {
1291     ++count;
1292     me = mx;
1293     last = 0;
1294     }
1295     }
1296     if (me == 0)
1297     me = 32;
1298    
1299     if (count != 2 && (count != 0 || ! last))
1300     *errmsg = _("illegal bitmask");
1301    
1302     return insn | (mb << 6) | ((me - 1) << 1);
1303     }
1304    
1305     static long
1306     extract_mbe (unsigned long insn,
1307     int dialect ATTRIBUTE_UNUSED,
1308     int *invalid)
1309     {
1310     long ret;
1311     int mb, me;
1312     int i;
1313    
1314     *invalid = 1;
1315    
1316     mb = (insn >> 6) & 0x1f;
1317     me = (insn >> 1) & 0x1f;
1318     if (mb < me + 1)
1319     {
1320     ret = 0;
1321     for (i = mb; i <= me; i++)
1322     ret |= 1L << (31 - i);
1323     }
1324     else if (mb == me + 1)
1325     ret = ~0;
1326     else /* (mb > me + 1) */
1327     {
1328     ret = ~0;
1329     for (i = me + 1; i < mb; i++)
1330     ret &= ~(1L << (31 - i));
1331     }
1332     return ret;
1333     }
1334    
1335     /* The MB or ME field in an MD or MDS form instruction. The high bit
1336     is wrapped to the low end. */
1337    
1338     static unsigned long
1339     insert_mb6 (unsigned long insn,
1340     long value,
1341     int dialect ATTRIBUTE_UNUSED,
1342     const char **errmsg ATTRIBUTE_UNUSED)
1343     {
1344     return insn | ((value & 0x1f) << 6) | (value & 0x20);
1345     }
1346    
1347     static long
1348     extract_mb6 (unsigned long insn,
1349     int dialect ATTRIBUTE_UNUSED,
1350     int *invalid ATTRIBUTE_UNUSED)
1351     {
1352     return ((insn >> 6) & 0x1f) | (insn & 0x20);
1353     }
1354    
1355     /* The NB field in an X form instruction. The value 32 is stored as
1356     0. */
1357    
1358     static long
1359     extract_nb (unsigned long insn,
1360     int dialect ATTRIBUTE_UNUSED,
1361     int *invalid ATTRIBUTE_UNUSED)
1362     {
1363     long ret;
1364    
1365     ret = (insn >> 11) & 0x1f;
1366     if (ret == 0)
1367     ret = 32;
1368     return ret;
1369     }
1370    
1371     /* The NSI field in a D form instruction. This is the same as the SI
1372     field, only negated. The extraction function always marks it as
1373     invalid, since we never want to recognize an instruction which uses
1374     a field of this type. */
1375    
1376     static unsigned long
1377     insert_nsi (unsigned long insn,
1378     long value,
1379     int dialect ATTRIBUTE_UNUSED,
1380     const char **errmsg ATTRIBUTE_UNUSED)
1381     {
1382     return insn | (-value & 0xffff);
1383     }
1384    
1385     static long
1386     extract_nsi (unsigned long insn,
1387     int dialect ATTRIBUTE_UNUSED,
1388     int *invalid)
1389     {
1390     *invalid = 1;
1391     return -(((insn & 0xffff) ^ 0x8000) - 0x8000);
1392     }
1393    
1394     /* The RA field in a D or X form instruction which is an updating
1395     load, which means that the RA field may not be zero and may not
1396     equal the RT field. */
1397    
1398     static unsigned long
1399     insert_ral (unsigned long insn,
1400     long value,
1401     int dialect ATTRIBUTE_UNUSED,
1402     const char **errmsg)
1403     {
1404     if (value == 0
1405     || (unsigned long) value == ((insn >> 21) & 0x1f))
1406     *errmsg = "invalid register operand when updating";
1407     return insn | ((value & 0x1f) << 16);
1408     }
1409    
1410     /* The RA field in an lmw instruction, which has special value
1411     restrictions. */
1412    
1413     static unsigned long
1414     insert_ram (unsigned long insn,
1415     long value,
1416     int dialect ATTRIBUTE_UNUSED,
1417     const char **errmsg)
1418     {
1419     if ((unsigned long) value >= ((insn >> 21) & 0x1f))
1420     *errmsg = _("index register in load range");
1421     return insn | ((value & 0x1f) << 16);
1422     }
1423    
1424     /* The RA field in the DQ form lq instruction, which has special
1425     value restrictions. */
1426    
1427     static unsigned long
1428     insert_raq (unsigned long insn,
1429     long value,
1430     int dialect ATTRIBUTE_UNUSED,
1431     const char **errmsg)
1432     {
1433     long rtvalue = (insn & RT_MASK) >> 21;
1434    
1435     if (value == rtvalue)
1436     *errmsg = _("source and target register operands must be different");
1437     return insn | ((value & 0x1f) << 16);
1438     }
1439    
1440     /* The RA field in a D or X form instruction which is an updating
1441     store or an updating floating point load, which means that the RA
1442     field may not be zero. */
1443    
1444     static unsigned long
1445     insert_ras (unsigned long insn,
1446     long value,
1447     int dialect ATTRIBUTE_UNUSED,
1448     const char **errmsg)
1449     {
1450     if (value == 0)
1451     *errmsg = _("invalid register operand when updating");
1452     return insn | ((value & 0x1f) << 16);
1453     }
1454    
1455     /* The RB field in an X form instruction when it must be the same as
1456     the RS field in the instruction. This is used for extended
1457     mnemonics like mr. This operand is marked FAKE. The insertion
1458     function just copies the BT field into the BA field, and the
1459     extraction function just checks that the fields are the same. */
1460    
1461     static unsigned long
1462     insert_rbs (unsigned long insn,
1463     long value ATTRIBUTE_UNUSED,
1464     int dialect ATTRIBUTE_UNUSED,
1465     const char **errmsg ATTRIBUTE_UNUSED)
1466     {
1467     return insn | (((insn >> 21) & 0x1f) << 11);
1468     }
1469    
1470     static long
1471     extract_rbs (unsigned long insn,
1472     int dialect ATTRIBUTE_UNUSED,
1473     int *invalid)
1474     {
1475     if (((insn >> 21) & 0x1f) != ((insn >> 11) & 0x1f))
1476     *invalid = 1;
1477     return 0;
1478     }
1479    
1480     /* The SH field in an MD form instruction. This is split. */
1481    
1482     static unsigned long
1483     insert_sh6 (unsigned long insn,
1484     long value,
1485     int dialect ATTRIBUTE_UNUSED,
1486     const char **errmsg ATTRIBUTE_UNUSED)
1487     {
1488     return insn | ((value & 0x1f) << 11) | ((value & 0x20) >> 4);
1489     }
1490    
1491     static long
1492     extract_sh6 (unsigned long insn,
1493     int dialect ATTRIBUTE_UNUSED,
1494     int *invalid ATTRIBUTE_UNUSED)
1495     {
1496     return ((insn >> 11) & 0x1f) | ((insn << 4) & 0x20);
1497     }
1498    
1499     /* The SPR field in an XFX form instruction. This is flipped--the
1500     lower 5 bits are stored in the upper 5 and vice- versa. */
1501    
1502     static unsigned long
1503     insert_spr (unsigned long insn,
1504     long value,
1505     int dialect ATTRIBUTE_UNUSED,
1506     const char **errmsg ATTRIBUTE_UNUSED)
1507     {
1508     return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6);
1509     }
1510    
1511     static long
1512     extract_spr (unsigned long insn,
1513     int dialect ATTRIBUTE_UNUSED,
1514     int *invalid ATTRIBUTE_UNUSED)
1515     {
1516     return ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
1517     }
1518    
1519     /* Some dialects have 8 SPRG registers instead of the standard 4. */
1520    
1521     static unsigned long
1522     insert_sprg (unsigned long insn,
1523     long value,
1524     int dialect,
1525     const char **errmsg)
1526     {
1527     /* This check uses PPC_OPCODE_403 because PPC405 is later defined
1528     as a synonym. If ever a 405 specific dialect is added this
1529     check should use that instead. */
1530     if (value > 7
1531     || (value > 3
1532     && (dialect & (PPC_OPCODE_BOOKE | PPC_OPCODE_403)) == 0))
1533     *errmsg = _("invalid sprg number");
1534    
1535     /* If this is mfsprg4..7 then use spr 260..263 which can be read in
1536     user mode. Anything else must use spr 272..279. */
1537     if (value <= 3 || (insn & 0x100) != 0)
1538     value |= 0x10;
1539    
1540     return insn | ((value & 0x17) << 16);
1541     }
1542    
1543     static long
1544     extract_sprg (unsigned long insn,
1545     int dialect,
1546     int *invalid)
1547     {
1548     unsigned long val = (insn >> 16) & 0x1f;
1549    
1550     /* mfsprg can use 260..263 and 272..279. mtsprg only uses spr 272..279
1551     If not BOOKE or 405, then both use only 272..275. */
1552     if (val <= 3
1553     || (val < 0x10 && (insn & 0x100) != 0)
1554     || (val - 0x10 > 3
1555     && (dialect & (PPC_OPCODE_BOOKE | PPC_OPCODE_403)) == 0))
1556     *invalid = 1;
1557     return val & 7;
1558     }
1559    
1560     /* The TBR field in an XFX instruction. This is just like SPR, but it
1561     is optional. When TBR is omitted, it must be inserted as 268 (the
1562     magic number of the TB register). These functions treat 0
1563     (indicating an omitted optional operand) as 268. This means that
1564     ``mftb 4,0'' is not handled correctly. This does not matter very
1565     much, since the architecture manual does not define mftb as
1566     accepting any values other than 268 or 269. */
1567    
1568     #define TB (268)
1569    
1570     static unsigned long
1571     insert_tbr (unsigned long insn,
1572     long value,
1573     int dialect ATTRIBUTE_UNUSED,
1574     const char **errmsg ATTRIBUTE_UNUSED)
1575     {
1576     if (value == 0)
1577     value = TB;
1578     return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6);
1579     }
1580    
1581     static long
1582     extract_tbr (unsigned long insn,
1583     int dialect ATTRIBUTE_UNUSED,
1584     int *invalid ATTRIBUTE_UNUSED)
1585     {
1586     long ret;
1587    
1588     ret = ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
1589     if (ret == TB)
1590     ret = 0;
1591     return ret;
1592     }
1593    
1594     /* Macros used to form opcodes. */
1595    
1596     /* The main opcode. */
1597     #define OP(x) ((((unsigned long)(x)) & 0x3f) << 26)
1598     #define OP_MASK OP (0x3f)
1599    
1600     /* The main opcode combined with a trap code in the TO field of a D
1601     form instruction. Used for extended mnemonics for the trap
1602     instructions. */
1603     #define OPTO(x,to) (OP (x) | ((((unsigned long)(to)) & 0x1f) << 21))
1604     #define OPTO_MASK (OP_MASK | TO_MASK)
1605    
1606     /* The main opcode combined with a comparison size bit in the L field
1607     of a D form or X form instruction. Used for extended mnemonics for
1608     the comparison instructions. */
1609     #define OPL(x,l) (OP (x) | ((((unsigned long)(l)) & 1) << 21))
1610     #define OPL_MASK OPL (0x3f,1)
1611    
1612     /* An A form instruction. */
1613     #define A(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1) | (((unsigned long)(rc)) & 1))
1614     #define A_MASK A (0x3f, 0x1f, 1)
1615    
1616     /* An A_MASK with the FRB field fixed. */
1617     #define AFRB_MASK (A_MASK | FRB_MASK)
1618    
1619     /* An A_MASK with the FRC field fixed. */
1620     #define AFRC_MASK (A_MASK | FRC_MASK)
1621    
1622     /* An A_MASK with the FRA and FRC fields fixed. */
1623     #define AFRAFRC_MASK (A_MASK | FRA_MASK | FRC_MASK)
1624    
1625     /* An AFRAFRC_MASK, but with L bit clear. */
1626     #define AFRALFRC_MASK (AFRAFRC_MASK & ~((unsigned long) 1 << 16))
1627    
1628     /* A B form instruction. */
1629     #define B(op, aa, lk) (OP (op) | ((((unsigned long)(aa)) & 1) << 1) | ((lk) & 1))
1630     #define B_MASK B (0x3f, 1, 1)
1631    
1632     /* A B form instruction setting the BO field. */
1633     #define BBO(op, bo, aa, lk) (B ((op), (aa), (lk)) | ((((unsigned long)(bo)) & 0x1f) << 21))
1634     #define BBO_MASK BBO (0x3f, 0x1f, 1, 1)
1635    
1636     /* A BBO_MASK with the y bit of the BO field removed. This permits
1637     matching a conditional branch regardless of the setting of the y
1638     bit. Similarly for the 'at' bits used for power4 branch hints. */
1639     #define Y_MASK (((unsigned long) 1) << 21)
1640     #define AT1_MASK (((unsigned long) 3) << 21)
1641     #define AT2_MASK (((unsigned long) 9) << 21)
1642     #define BBOY_MASK (BBO_MASK &~ Y_MASK)
1643     #define BBOAT_MASK (BBO_MASK &~ AT1_MASK)
1644    
1645     /* A B form instruction setting the BO field and the condition bits of
1646     the BI field. */
1647     #define BBOCB(op, bo, cb, aa, lk) \
1648     (BBO ((op), (bo), (aa), (lk)) | ((((unsigned long)(cb)) & 0x3) << 16))
1649     #define BBOCB_MASK BBOCB (0x3f, 0x1f, 0x3, 1, 1)
1650    
1651     /* A BBOCB_MASK with the y bit of the BO field removed. */
1652     #define BBOYCB_MASK (BBOCB_MASK &~ Y_MASK)
1653     #define BBOATCB_MASK (BBOCB_MASK &~ AT1_MASK)
1654     #define BBOAT2CB_MASK (BBOCB_MASK &~ AT2_MASK)
1655    
1656     /* A BBOYCB_MASK in which the BI field is fixed. */
1657     #define BBOYBI_MASK (BBOYCB_MASK | BI_MASK)
1658     #define BBOATBI_MASK (BBOAT2CB_MASK | BI_MASK)
1659    
1660     /* An Context form instruction. */
1661     #define CTX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7))
1662     #define CTX_MASK CTX(0x3f, 0x7)
1663    
1664     /* An User Context form instruction. */
1665     #define UCTX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1f))
1666     #define UCTX_MASK UCTX(0x3f, 0x1f)
1667    
1668     /* The main opcode mask with the RA field clear. */
1669     #define DRA_MASK (OP_MASK | RA_MASK)
1670    
1671     /* A DS form instruction. */
1672     #define DSO(op, xop) (OP (op) | ((xop) & 0x3))
1673     #define DS_MASK DSO (0x3f, 3)
1674    
1675     /* A DE form instruction. */
1676     #define DEO(op, xop) (OP (op) | ((xop) & 0xf))
1677     #define DE_MASK DEO (0x3e, 0xf)
1678    
1679     /* An EVSEL form instruction. */
1680     #define EVSEL(op, xop) (OP (op) | (((unsigned long)(xop)) & 0xff) << 3)
1681     #define EVSEL_MASK EVSEL(0x3f, 0xff)
1682    
1683     /* An M form instruction. */
1684     #define M(op, rc) (OP (op) | ((rc) & 1))
1685     #define M_MASK M (0x3f, 1)
1686    
1687     /* An M form instruction with the ME field specified. */
1688     #define MME(op, me, rc) (M ((op), (rc)) | ((((unsigned long)(me)) & 0x1f) << 1))
1689    
1690     /* An M_MASK with the MB and ME fields fixed. */
1691     #define MMBME_MASK (M_MASK | MB_MASK | ME_MASK)
1692    
1693     /* An M_MASK with the SH and ME fields fixed. */
1694     #define MSHME_MASK (M_MASK | SH_MASK | ME_MASK)
1695    
1696     /* An MD form instruction. */
1697     #define MD(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x7) << 2) | ((rc) & 1))
1698     #define MD_MASK MD (0x3f, 0x7, 1)
1699    
1700     /* An MD_MASK with the MB field fixed. */
1701     #define MDMB_MASK (MD_MASK | MB6_MASK)
1702    
1703     /* An MD_MASK with the SH field fixed. */
1704     #define MDSH_MASK (MD_MASK | SH6_MASK)
1705    
1706     /* An MDS form instruction. */
1707     #define MDS(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0xf) << 1) | ((rc) & 1))
1708     #define MDS_MASK MDS (0x3f, 0xf, 1)
1709    
1710     /* An MDS_MASK with the MB field fixed. */
1711     #define MDSMB_MASK (MDS_MASK | MB6_MASK)
1712    
1713     /* An SC form instruction. */
1714     #define SC(op, sa, lk) (OP (op) | ((((unsigned long)(sa)) & 1) << 1) | ((lk) & 1))
1715     #define SC_MASK (OP_MASK | (((unsigned long)0x3ff) << 16) | (((unsigned long)1) << 1) | 1)
1716    
1717     /* An VX form instruction. */
1718     #define VX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7ff))
1719    
1720     /* The mask for an VX form instruction. */
1721     #define VX_MASK VX(0x3f, 0x7ff)
1722    
1723     /* An VA form instruction. */
1724     #define VXA(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x03f))
1725    
1726     /* The mask for an VA form instruction. */
1727     #define VXA_MASK VXA(0x3f, 0x3f)
1728    
1729     /* An VXR form instruction. */
1730     #define VXR(op, xop, rc) (OP (op) | (((rc) & 1) << 10) | (((unsigned long)(xop)) & 0x3ff))
1731    
1732     /* The mask for a VXR form instruction. */
1733     #define VXR_MASK VXR(0x3f, 0x3ff, 1)
1734    
1735     /* An X form instruction. */
1736     #define X(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))
1737    
1738     /* A Z form instruction. */
1739     #define Z(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 1))
1740    
1741     /* An X form instruction with the RC bit specified. */
1742     #define XRC(op, xop, rc) (X ((op), (xop)) | ((rc) & 1))
1743    
1744     /* A Z form instruction with the RC bit specified. */
1745     #define ZRC(op, xop, rc) (Z ((op), (xop)) | ((rc) & 1))
1746    
1747     /* The mask for an X form instruction. */
1748     #define X_MASK XRC (0x3f, 0x3ff, 1)
1749    
1750     /* The mask for a Z form instruction. */
1751     #define Z_MASK ZRC (0x3f, 0x1ff, 1)
1752     #define Z2_MASK ZRC (0x3f, 0xff, 1)
1753    
1754     /* An X_MASK with the RA field fixed. */
1755     #define XRA_MASK (X_MASK | RA_MASK)
1756    
1757     /* An XRA_MASK with the W field clear. */
1758     #define XWRA_MASK (XRA_MASK & ~((unsigned long) 1 << 16))
1759    
1760     /* An X_MASK with the RB field fixed. */
1761     #define XRB_MASK (X_MASK | RB_MASK)
1762    
1763     /* An X_MASK with the RT field fixed. */
1764     #define XRT_MASK (X_MASK | RT_MASK)
1765    
1766     /* An XRT_MASK mask with the L bits clear. */
1767     #define XLRT_MASK (XRT_MASK & ~((unsigned long) 0x3 << 21))
1768    
1769     /* An X_MASK with the RA and RB fields fixed. */
1770     #define XRARB_MASK (X_MASK | RA_MASK | RB_MASK)
1771    
1772     /* An XRARB_MASK, but with the L bit clear. */
1773     #define XRLARB_MASK (XRARB_MASK & ~((unsigned long) 1 << 16))
1774    
1775     /* An X_MASK with the RT and RA fields fixed. */
1776     #define XRTRA_MASK (X_MASK | RT_MASK | RA_MASK)
1777    
1778     /* An XRTRA_MASK, but with L bit clear. */
1779     #define XRTLRA_MASK (XRTRA_MASK & ~((unsigned long) 1 << 21))
1780    
1781     /* An X form instruction with the L bit specified. */
1782     #define XOPL(op, xop, l) (X ((op), (xop)) | ((((unsigned long)(l)) & 1) << 21))
1783    
1784     /* The mask for an X form comparison instruction. */
1785     #define XCMP_MASK (X_MASK | (((unsigned long)1) << 22))
1786    
1787     /* The mask for an X form comparison instruction with the L field
1788     fixed. */
1789     #define XCMPL_MASK (XCMP_MASK | (((unsigned long)1) << 21))
1790    
1791     /* An X form trap instruction with the TO field specified. */
1792     #define XTO(op, xop, to) (X ((op), (xop)) | ((((unsigned long)(to)) & 0x1f) << 21))
1793     #define XTO_MASK (X_MASK | TO_MASK)
1794    
1795     /* An X form tlb instruction with the SH field specified. */
1796     #define XTLB(op, xop, sh) (X ((op), (xop)) | ((((unsigned long)(sh)) & 0x1f) << 11))
1797     #define XTLB_MASK (X_MASK | SH_MASK)
1798    
1799     /* An X form sync instruction. */
1800     #define XSYNC(op, xop, l) (X ((op), (xop)) | ((((unsigned long)(l)) & 3) << 21))
1801    
1802     /* An X form sync instruction with everything filled in except the LS field. */
1803     #define XSYNC_MASK (0xff9fffff)
1804    
1805     /* An X_MASK, but with the EH bit clear. */
1806     #define XEH_MASK (X_MASK & ~((unsigned long )1))
1807    
1808     /* An X form AltiVec dss instruction. */
1809     #define XDSS(op, xop, a) (X ((op), (xop)) | ((((unsigned long)(a)) & 1) << 25))
1810     #define XDSS_MASK XDSS(0x3f, 0x3ff, 1)
1811    
1812     /* An XFL form instruction. */
1813     #define XFL(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1) | (((unsigned long)(rc)) & 1))
1814     #define XFL_MASK XFL (0x3f, 0x3ff, 1)
1815    
1816     /* An X form isel instruction. */
1817     #define XISEL(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1))
1818     #define XISEL_MASK XISEL(0x3f, 0x1f)
1819    
1820     /* An XL form instruction with the LK field set to 0. */
1821     #define XL(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))
1822    
1823     /* An XL form instruction which uses the LK field. */
1824     #define XLLK(op, xop, lk) (XL ((op), (xop)) | ((lk) & 1))
1825    
1826     /* The mask for an XL form instruction. */
1827     #define XL_MASK XLLK (0x3f, 0x3ff, 1)
1828    
1829     /* An XL form instruction which explicitly sets the BO field. */
1830     #define XLO(op, bo, xop, lk) \
1831     (XLLK ((op), (xop), (lk)) | ((((unsigned long)(bo)) & 0x1f) << 21))
1832     #define XLO_MASK (XL_MASK | BO_MASK)
1833    
1834     /* An XL form instruction which explicitly sets the y bit of the BO
1835     field. */
1836     #define XLYLK(op, xop, y, lk) (XLLK ((op), (xop), (lk)) | ((((unsigned long)(y)) & 1) << 21))
1837     #define XLYLK_MASK (XL_MASK | Y_MASK)
1838    
1839     /* An XL form instruction which sets the BO field and the condition
1840     bits of the BI field. */
1841     #define XLOCB(op, bo, cb, xop, lk) \
1842     (XLO ((op), (bo), (xop), (lk)) | ((((unsigned long)(cb)) & 3) << 16))
1843     #define XLOCB_MASK XLOCB (0x3f, 0x1f, 0x3, 0x3ff, 1)
1844    
1845     /* An XL_MASK or XLYLK_MASK or XLOCB_MASK with the BB field fixed. */
1846     #define XLBB_MASK (XL_MASK | BB_MASK)
1847     #define XLYBB_MASK (XLYLK_MASK | BB_MASK)
1848     #define XLBOCBBB_MASK (XLOCB_MASK | BB_MASK)
1849    
1850     /* A mask for branch instructions using the BH field. */
1851     #define XLBH_MASK (XL_MASK | (0x1c << 11))
1852    
1853     /* An XL_MASK with the BO and BB fields fixed. */
1854     #define XLBOBB_MASK (XL_MASK | BO_MASK | BB_MASK)
1855    
1856     /* An XL_MASK with the BO, BI and BB fields fixed. */
1857     #define XLBOBIBB_MASK (XL_MASK | BO_MASK | BI_MASK | BB_MASK)
1858    
1859     /* An XO form instruction. */
1860     #define XO(op, xop, oe, rc) \
1861     (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 1) | ((((unsigned long)(oe)) & 1) << 10) | (((unsigned long)(rc)) & 1))
1862     #define XO_MASK XO (0x3f, 0x1ff, 1, 1)
1863    
1864     /* An XO_MASK with the RB field fixed. */
1865     #define XORB_MASK (XO_MASK | RB_MASK)
1866    
1867     /* An XS form instruction. */
1868     #define XS(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 2) | (((unsigned long)(rc)) & 1))
1869     #define XS_MASK XS (0x3f, 0x1ff, 1)
1870    
1871     /* A mask for the FXM version of an XFX form instruction. */
1872     #define XFXFXM_MASK (X_MASK | (1 << 11) | (1 << 20))
1873    
1874     /* An XFX form instruction with the FXM field filled in. */
1875     #define XFXM(op, xop, fxm, p4) \
1876     (X ((op), (xop)) | ((((unsigned long)(fxm)) & 0xff) << 12) \
1877     | ((unsigned long)(p4) << 20))
1878    
1879     /* An XFX form instruction with the SPR field filled in. */
1880     #define XSPR(op, xop, spr) \
1881     (X ((op), (xop)) | ((((unsigned long)(spr)) & 0x1f) << 16) | ((((unsigned long)(spr)) & 0x3e0) << 6))
1882     #define XSPR_MASK (X_MASK | SPR_MASK)
1883    
1884     /* An XFX form instruction with the SPR field filled in except for the
1885     SPRBAT field. */
1886     #define XSPRBAT_MASK (XSPR_MASK &~ SPRBAT_MASK)
1887    
1888     /* An XFX form instruction with the SPR field filled in except for the
1889     SPRG field. */
1890     #define XSPRG_MASK (XSPR_MASK & ~(0x1f << 16))
1891    
1892     /* An X form instruction with everything filled in except the E field. */
1893     #define XE_MASK (0xffff7fff)
1894    
1895     /* An X form user context instruction. */
1896     #define XUC(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1f))
1897     #define XUC_MASK XUC(0x3f, 0x1f)
1898    
1899     /* The BO encodings used in extended conditional branch mnemonics. */
1900     #define BODNZF (0x0)
1901     #define BODNZFP (0x1)
1902     #define BODZF (0x2)
1903     #define BODZFP (0x3)
1904     #define BODNZT (0x8)
1905     #define BODNZTP (0x9)
1906     #define BODZT (0xa)
1907     #define BODZTP (0xb)
1908    
1909     #define BOF (0x4)
1910     #define BOFP (0x5)
1911     #define BOFM4 (0x6)
1912     #define BOFP4 (0x7)
1913     #define BOT (0xc)
1914     #define BOTP (0xd)
1915     #define BOTM4 (0xe)
1916     #define BOTP4 (0xf)
1917    
1918     #define BODNZ (0x10)
1919     #define BODNZP (0x11)
1920     #define BODZ (0x12)
1921     #define BODZP (0x13)
1922     #define BODNZM4 (0x18)
1923     #define BODNZP4 (0x19)
1924     #define BODZM4 (0x1a)
1925     #define BODZP4 (0x1b)
1926    
1927     #define BOU (0x14)
1928    
1929     /* The BI condition bit encodings used in extended conditional branch
1930     mnemonics. */
1931     #define CBLT (0)
1932     #define CBGT (1)
1933     #define CBEQ (2)
1934     #define CBSO (3)
1935    
1936     /* The TO encodings used in extended trap mnemonics. */
1937     #define TOLGT (0x1)
1938     #define TOLLT (0x2)
1939     #define TOEQ (0x4)
1940     #define TOLGE (0x5)
1941     #define TOLNL (0x5)
1942     #define TOLLE (0x6)
1943     #define TOLNG (0x6)
1944     #define TOGT (0x8)
1945     #define TOGE (0xc)
1946     #define TONL (0xc)
1947     #define TOLT (0x10)
1948     #define TOLE (0x14)
1949     #define TONG (0x14)
1950     #define TONE (0x18)
1951     #define TOU (0x1f)
1952    
1953     /* Smaller names for the flags so each entry in the opcodes table will
1954     fit on a single line. */
1955     #undef PPC
1956     #define PPC PPC_OPCODE_PPC
1957     #define PPCCOM PPC_OPCODE_PPC | PPC_OPCODE_COMMON
1958     #define NOPOWER4 PPC_OPCODE_NOPOWER4 | PPCCOM
1959     #define POWER4 PPC_OPCODE_POWER4
1960     #define POWER5 PPC_OPCODE_POWER5
1961     #define POWER6 PPC_OPCODE_POWER6
1962     #define CELL PPC_OPCODE_CELL
1963     #define PPC32 PPC_OPCODE_32 | PPC_OPCODE_PPC
1964     #define PPC64 PPC_OPCODE_64 | PPC_OPCODE_PPC
1965     #define PPC403 PPC_OPCODE_403
1966     #define PPC405 PPC403
1967     #define PPC440 PPC_OPCODE_440
1968     #define PPC750 PPC
1969     #define PPC860 PPC
1970     #define PPCVEC PPC_OPCODE_ALTIVEC
1971     #define POWER PPC_OPCODE_POWER
1972     #define POWER2 PPC_OPCODE_POWER | PPC_OPCODE_POWER2
1973     #define PPCPWR2 PPC_OPCODE_PPC | PPC_OPCODE_POWER | PPC_OPCODE_POWER2
1974     #define POWER32 PPC_OPCODE_POWER | PPC_OPCODE_32
1975     #define COM PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON
1976     #define COM32 PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_32
1977     #define M601 PPC_OPCODE_POWER | PPC_OPCODE_601
1978     #define PWRCOM PPC_OPCODE_POWER | PPC_OPCODE_601 | PPC_OPCODE_COMMON
1979     #define MFDEC1 PPC_OPCODE_POWER
1980     #define MFDEC2 PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE
1981     #define BOOKE PPC_OPCODE_BOOKE
1982     #define BOOKE64 PPC_OPCODE_BOOKE64
1983     #define CLASSIC PPC_OPCODE_CLASSIC
1984     #define PPCE300 PPC_OPCODE_E300
1985     #define PPCSPE PPC_OPCODE_SPE
1986     #define PPCISEL PPC_OPCODE_ISEL
1987     #define PPCEFS PPC_OPCODE_EFS
1988     #define PPCBRLK PPC_OPCODE_BRLOCK
1989     #define PPCPMR PPC_OPCODE_PMR
1990     #define PPCCHLK PPC_OPCODE_CACHELCK
1991     #define PPCCHLK64 PPC_OPCODE_CACHELCK | PPC_OPCODE_BOOKE64
1992     #define PPCRFMCI PPC_OPCODE_RFMCI
1993    
1994     /* The opcode table.
1995    
1996     The format of the opcode table is:
1997    
1998     NAME OPCODE MASK FLAGS { OPERANDS }
1999    
2000     NAME is the name of the instruction.
2001     OPCODE is the instruction opcode.
2002     MASK is the opcode mask; this is used to tell the disassembler
2003     which bits in the actual opcode must match OPCODE.
2004     FLAGS are flags indicated what processors support the instruction.
2005     OPERANDS is the list of operands.
2006    
2007     The disassembler reads the table in order and prints the first
2008     instruction which matches, so this table is sorted to put more
2009     specific instructions before more general instructions. It is also
2010     sorted by major opcode. */
2011    
2012     const struct powerpc_opcode powerpc_opcodes[] = {
2013     { "attn", X(0,256), X_MASK, POWER4, { 0 } },
2014     { "tdlgti", OPTO(2,TOLGT), OPTO_MASK, PPC64, { RA, SI } },
2015     { "tdllti", OPTO(2,TOLLT), OPTO_MASK, PPC64, { RA, SI } },
2016     { "tdeqi", OPTO(2,TOEQ), OPTO_MASK, PPC64, { RA, SI } },
2017     { "tdlgei", OPTO(2,TOLGE), OPTO_MASK, PPC64, { RA, SI } },
2018     { "tdlnli", OPTO(2,TOLNL), OPTO_MASK, PPC64, { RA, SI } },
2019     { "tdllei", OPTO(2,TOLLE), OPTO_MASK, PPC64, { RA, SI } },
2020     { "tdlngi", OPTO(2,TOLNG), OPTO_MASK, PPC64, { RA, SI } },
2021     { "tdgti", OPTO(2,TOGT), OPTO_MASK, PPC64, { RA, SI } },
2022     { "tdgei", OPTO(2,TOGE), OPTO_MASK, PPC64, { RA, SI } },
2023     { "tdnli", OPTO(2,TONL), OPTO_MASK, PPC64, { RA, SI } },
2024     { "tdlti", OPTO(2,TOLT), OPTO_MASK, PPC64, { RA, SI } },
2025     { "tdlei", OPTO(2,TOLE), OPTO_MASK, PPC64, { RA, SI } },
2026     { "tdngi", OPTO(2,TONG), OPTO_MASK, PPC64, { RA, SI } },
2027     { "tdnei", OPTO(2,TONE), OPTO_MASK, PPC64, { RA, SI } },
2028     { "tdi", OP(2), OP_MASK, PPC64, { TO, RA, SI } },
2029    
2030     { "twlgti", OPTO(3,TOLGT), OPTO_MASK, PPCCOM, { RA, SI } },
2031     { "tlgti", OPTO(3,TOLGT), OPTO_MASK, PWRCOM, { RA, SI } },
2032     { "twllti", OPTO(3,TOLLT), OPTO_MASK, PPCCOM, { RA, SI } },
2033     { "tllti", OPTO(3,TOLLT), OPTO_MASK, PWRCOM, { RA, SI } },
2034     { "tweqi", OPTO(3,TOEQ), OPTO_MASK, PPCCOM, { RA, SI } },
2035     { "teqi", OPTO(3,TOEQ), OPTO_MASK, PWRCOM, { RA, SI } },
2036     { "twlgei", OPTO(3,TOLGE), OPTO_MASK, PPCCOM, { RA, SI } },
2037     { "tlgei", OPTO(3,TOLGE), OPTO_MASK, PWRCOM, { RA, SI } },
2038     { "twlnli", OPTO(3,TOLNL), OPTO_MASK, PPCCOM, { RA, SI } },
2039     { "tlnli", OPTO(3,TOLNL), OPTO_MASK, PWRCOM, { RA, SI } },
2040     { "twllei", OPTO(3,TOLLE), OPTO_MASK, PPCCOM, { RA, SI } },
2041     { "tllei", OPTO(3,TOLLE), OPTO_MASK, PWRCOM, { RA, SI } },
2042     { "twlngi", OPTO(3,TOLNG), OPTO_MASK, PPCCOM, { RA, SI } },
2043     { "tlngi", OPTO(3,TOLNG), OPTO_MASK, PWRCOM, { RA, SI } },
2044     { "twgti", OPTO(3,TOGT), OPTO_MASK, PPCCOM, { RA, SI } },
2045     { "tgti", OPTO(3,TOGT), OPTO_MASK, PWRCOM, { RA, SI } },
2046     { "twgei", OPTO(3,TOGE), OPTO_MASK, PPCCOM, { RA, SI } },
2047     { "tgei", OPTO(3,TOGE), OPTO_MASK, PWRCOM, { RA, SI } },
2048     { "twnli", OPTO(3,TONL), OPTO_MASK, PPCCOM, { RA, SI } },
2049     { "tnli", OPTO(3,TONL), OPTO_MASK, PWRCOM, { RA, SI } },
2050     { "twlti", OPTO(3,TOLT), OPTO_MASK, PPCCOM, { RA, SI } },
2051     { "tlti", OPTO(3,TOLT), OPTO_MASK, PWRCOM, { RA, SI } },
2052     { "twlei", OPTO(3,TOLE), OPTO_MASK, PPCCOM, { RA, SI } },
2053     { "tlei", OPTO(3,TOLE), OPTO_MASK, PWRCOM, { RA, SI } },
2054     { "twngi", OPTO(3,TONG), OPTO_MASK, PPCCOM, { RA, SI } },
2055     { "tngi", OPTO(3,TONG), OPTO_MASK, PWRCOM, { RA, SI } },
2056     { "twnei", OPTO(3,TONE), OPTO_MASK, PPCCOM, { RA, SI } },
2057     { "tnei", OPTO(3,TONE), OPTO_MASK, PWRCOM, { RA, SI } },
2058     { "twi", OP(3), OP_MASK, PPCCOM, { TO, RA, SI } },
2059     { "ti", OP(3), OP_MASK, PWRCOM, { TO, RA, SI } },
2060    
2061     { "macchw", XO(4,172,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2062     { "macchw.", XO(4,172,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2063     { "macchwo", XO(4,172,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2064     { "macchwo.", XO(4,172,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2065     { "macchws", XO(4,236,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2066     { "macchws.", XO(4,236,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2067     { "macchwso", XO(4,236,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2068     { "macchwso.", XO(4,236,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2069     { "macchwsu", XO(4,204,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2070     { "macchwsu.", XO(4,204,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2071     { "macchwsuo", XO(4,204,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2072     { "macchwsuo.", XO(4,204,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2073     { "macchwu", XO(4,140,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2074     { "macchwu.", XO(4,140,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2075     { "macchwuo", XO(4,140,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2076     { "macchwuo.", XO(4,140,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2077     { "machhw", XO(4,44,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2078     { "machhw.", XO(4,44,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2079     { "machhwo", XO(4,44,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2080     { "machhwo.", XO(4,44,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2081     { "machhws", XO(4,108,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2082     { "machhws.", XO(4,108,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2083     { "machhwso", XO(4,108,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2084     { "machhwso.", XO(4,108,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2085     { "machhwsu", XO(4,76,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2086     { "machhwsu.", XO(4,76,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2087     { "machhwsuo", XO(4,76,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2088     { "machhwsuo.", XO(4,76,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2089     { "machhwu", XO(4,12,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2090     { "machhwu.", XO(4,12,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2091     { "machhwuo", XO(4,12,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2092     { "machhwuo.", XO(4,12,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2093     { "maclhw", XO(4,428,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2094     { "maclhw.", XO(4,428,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2095     { "maclhwo", XO(4,428,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2096     { "maclhwo.", XO(4,428,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2097     { "maclhws", XO(4,492,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2098     { "maclhws.", XO(4,492,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2099     { "maclhwso", XO(4,492,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2100     { "maclhwso.", XO(4,492,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2101     { "maclhwsu", XO(4,460,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2102     { "maclhwsu.", XO(4,460,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2103     { "maclhwsuo", XO(4,460,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2104     { "maclhwsuo.", XO(4,460,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2105     { "maclhwu", XO(4,396,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2106     { "maclhwu.", XO(4,396,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2107     { "maclhwuo", XO(4,396,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2108     { "maclhwuo.", XO(4,396,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2109     { "mulchw", XRC(4,168,0), X_MASK, PPC405|PPC440, { RT, RA, RB } },
2110     { "mulchw.", XRC(4,168,1), X_MASK, PPC405|PPC440, { RT, RA, RB } },
2111     { "mulchwu", XRC(4,136,0), X_MASK, PPC405|PPC440, { RT, RA, RB } },
2112     { "mulchwu.", XRC(4,136,1), X_MASK, PPC405|PPC440, { RT, RA, RB } },
2113     { "mulhhw", XRC(4,40,0), X_MASK, PPC405|PPC440, { RT, RA, RB } },
2114     { "mulhhw.", XRC(4,40,1), X_MASK, PPC405|PPC440, { RT, RA, RB } },
2115     { "mulhhwu", XRC(4,8,0), X_MASK, PPC405|PPC440, { RT, RA, RB } },
2116     { "mulhhwu.", XRC(4,8,1), X_MASK, PPC405|PPC440, { RT, RA, RB } },
2117     { "mullhw", XRC(4,424,0), X_MASK, PPC405|PPC440, { RT, RA, RB } },
2118     { "mullhw.", XRC(4,424,1), X_MASK, PPC405|PPC440, { RT, RA, RB } },
2119     { "mullhwu", XRC(4,392,0), X_MASK, PPC405|PPC440, { RT, RA, RB } },
2120     { "mullhwu.", XRC(4,392,1), X_MASK, PPC405|PPC440, { RT, RA, RB } },
2121     { "nmacchw", XO(4,174,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2122     { "nmacchw.", XO(4,174,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2123     { "nmacchwo", XO(4,174,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2124     { "nmacchwo.", XO(4,174,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2125     { "nmacchws", XO(4,238,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2126     { "nmacchws.", XO(4,238,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2127     { "nmacchwso", XO(4,238,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2128     { "nmacchwso.", XO(4,238,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2129     { "nmachhw", XO(4,46,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2130     { "nmachhw.", XO(4,46,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2131     { "nmachhwo", XO(4,46,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2132     { "nmachhwo.", XO(4,46,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2133     { "nmachhws", XO(4,110,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2134     { "nmachhws.", XO(4,110,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2135     { "nmachhwso", XO(4,110,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2136     { "nmachhwso.", XO(4,110,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2137     { "nmaclhw", XO(4,430,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2138     { "nmaclhw.", XO(4,430,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2139     { "nmaclhwo", XO(4,430,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2140     { "nmaclhwo.", XO(4,430,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2141     { "nmaclhws", XO(4,494,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2142     { "nmaclhws.", XO(4,494,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2143     { "nmaclhwso", XO(4,494,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2144     { "nmaclhwso.", XO(4,494,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
2145     { "mfvscr", VX(4, 1540), VX_MASK, PPCVEC, { VD } },
2146     { "mtvscr", VX(4, 1604), VX_MASK, PPCVEC, { VB } },
2147    
2148     /* Double-precision opcodes. */
2149     /* Some of these conflict with AltiVec, so move them before, since
2150     PPCVEC includes the PPC_OPCODE_PPC set. */
2151     { "efscfd", VX(4, 719), VX_MASK, PPCEFS, { RS, RB } },
2152     { "efdabs", VX(4, 740), VX_MASK, PPCEFS, { RS, RA } },
2153     { "efdnabs", VX(4, 741), VX_MASK, PPCEFS, { RS, RA } },
2154     { "efdneg", VX(4, 742), VX_MASK, PPCEFS, { RS, RA } },
2155     { "efdadd", VX(4, 736), VX_MASK, PPCEFS, { RS, RA, RB } },
2156     { "efdsub", VX(4, 737), VX_MASK, PPCEFS, { RS, RA, RB } },
2157     { "efdmul", VX(4, 744), VX_MASK, PPCEFS, { RS, RA, RB } },
2158     { "efddiv", VX(4, 745), VX_MASK, PPCEFS, { RS, RA, RB } },
2159     { "efdcmpgt", VX(4, 748), VX_MASK, PPCEFS, { CRFD, RA, RB } },
2160     { "efdcmplt", VX(4, 749), VX_MASK, PPCEFS, { CRFD, RA, RB } },
2161     { "efdcmpeq", VX(4, 750), VX_MASK, PPCEFS, { CRFD, RA, RB } },
2162     { "efdtstgt", VX(4, 764), VX_MASK, PPCEFS, { CRFD, RA, RB } },
2163     { "efdtstlt", VX(4, 765), VX_MASK, PPCEFS, { CRFD, RA, RB } },
2164     { "efdtsteq", VX(4, 766), VX_MASK, PPCEFS, { CRFD, RA, RB } },
2165     { "efdcfsi", VX(4, 753), VX_MASK, PPCEFS, { RS, RB } },
2166     { "efdcfsid", VX(4, 739), VX_MASK, PPCEFS, { RS, RB } },
2167     { "efdcfui", VX(4, 752), VX_MASK, PPCEFS, { RS, RB } },
2168     { "efdcfuid", VX(4, 738), VX_MASK, PPCEFS, { RS, RB } },
2169     { "efdcfsf", VX(4, 755), VX_MASK, PPCEFS, { RS, RB } },
2170     { "efdcfuf", VX(4, 754), VX_MASK, PPCEFS, { RS, RB } },
2171     { "efdctsi", VX(4, 757), VX_MASK, PPCEFS, { RS, RB } },
2172     { "efdctsidz",VX(4, 747), VX_MASK, PPCEFS, { RS, RB } },
2173     { "efdctsiz", VX(4, 762), VX_MASK, PPCEFS, { RS, RB } },
2174     { "efdctui", VX(4, 756), VX_MASK, PPCEFS, { RS, RB } },
2175     { "efdctuidz",VX(4, 746), VX_MASK, PPCEFS, { RS, RB } },
2176     { "efdctuiz", VX(4, 760), VX_MASK, PPCEFS, { RS, RB } },
2177     { "efdctsf", VX(4, 759), VX_MASK, PPCEFS, { RS, RB } },
2178     { "efdctuf", VX(4, 758), VX_MASK, PPCEFS, { RS, RB } },
2179     { "efdcfs", VX(4, 751), VX_MASK, PPCEFS, { RS, RB } },
2180     /* End of double-precision opcodes. */
2181    
2182     { "vaddcuw", VX(4, 384), VX_MASK, PPCVEC, { VD, VA, VB } },
2183     { "vaddfp", VX(4, 10), VX_MASK, PPCVEC, { VD, VA, VB } },
2184     { "vaddsbs", VX(4, 768), VX_MASK, PPCVEC, { VD, VA, VB } },
2185     { "vaddshs", VX(4, 832), VX_MASK, PPCVEC, { VD, VA, VB } },
2186     { "vaddsws", VX(4, 896), VX_MASK, PPCVEC, { VD, VA, VB } },
2187     { "vaddubm", VX(4, 0), VX_MASK, PPCVEC, { VD, VA, VB } },
2188     { "vaddubs", VX(4, 512), VX_MASK, PPCVEC, { VD, VA, VB } },
2189     { "vadduhm", VX(4, 64), VX_MASK, PPCVEC, { VD, VA, VB } },
2190     { "vadduhs", VX(4, 576), VX_MASK, PPCVEC, { VD, VA, VB } },
2191     { "vadduwm", VX(4, 128), VX_MASK, PPCVEC, { VD, VA, VB } },
2192     { "vadduws", VX(4, 640), VX_MASK, PPCVEC, { VD, VA, VB } },
2193     { "vand", VX(4, 1028), VX_MASK, PPCVEC, { VD, VA, VB } },
2194     { "vandc", VX(4, 1092), VX_MASK, PPCVEC, { VD, VA, VB } },
2195     { "vavgsb", VX(4, 1282), VX_MASK, PPCVEC, { VD, VA, VB } },
2196     { "vavgsh", VX(4, 1346), VX_MASK, PPCVEC, { VD, VA, VB } },
2197     { "vavgsw", VX(4, 1410), VX_MASK, PPCVEC, { VD, VA, VB } },
2198     { "vavgub", VX(4, 1026), VX_MASK, PPCVEC, { VD, VA, VB } },
2199     { "vavguh", VX(4, 1090), VX_MASK, PPCVEC, { VD, VA, VB } },
2200     { "vavguw", VX(4, 1154), VX_MASK, PPCVEC, { VD, VA, VB } },
2201     { "vcfsx", VX(4, 842), VX_MASK, PPCVEC, { VD, VB, UIMM } },
2202     { "vcfux", VX(4, 778), VX_MASK, PPCVEC, { VD, VB, UIMM } },
2203     { "vcmpbfp", VXR(4, 966, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
2204     { "vcmpbfp.", VXR(4, 966, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
2205     { "vcmpeqfp", VXR(4, 198, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
2206     { "vcmpeqfp.", VXR(4, 198, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
2207     { "vcmpequb", VXR(4, 6, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
2208     { "vcmpequb.", VXR(4, 6, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
2209     { "vcmpequh", VXR(4, 70, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
2210     { "vcmpequh.", VXR(4, 70, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
2211     { "vcmpequw", VXR(4, 134, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
2212     { "vcmpequw.", VXR(4, 134, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
2213     { "vcmpgefp", VXR(4, 454, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
2214     { "vcmpgefp.", VXR(4, 454, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
2215     { "vcmpgtfp", VXR(4, 710, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
2216     { "vcmpgtfp.", VXR(4, 710, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
2217     { "vcmpgtsb", VXR(4, 774, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
2218     { "vcmpgtsb.", VXR(4, 774, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
2219     { "vcmpgtsh", VXR(4, 838, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
2220     { "vcmpgtsh.", VXR(4, 838, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
2221     { "vcmpgtsw", VXR(4, 902, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
2222     { "vcmpgtsw.", VXR(4, 902, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
2223     { "vcmpgtub", VXR(4, 518, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
2224     { "vcmpgtub.", VXR(4, 518, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
2225     { "vcmpgtuh", VXR(4, 582, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
2226     { "vcmpgtuh.", VXR(4, 582, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
2227     { "vcmpgtuw", VXR(4, 646, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
2228     { "vcmpgtuw.", VXR(4, 646, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
2229     { "vctsxs", VX(4, 970), VX_MASK, PPCVEC, { VD, VB, UIMM } },
2230     { "vctuxs", VX(4, 906), VX_MASK, PPCVEC, { VD, VB, UIMM } },
2231     { "vexptefp", VX(4, 394), VX_MASK, PPCVEC, { VD, VB } },
2232     { "vlogefp", VX(4, 458), VX_MASK, PPCVEC, { VD, VB } },
2233     { "vmaddfp", VXA(4, 46), VXA_MASK, PPCVEC, { VD, VA, VC, VB } },
2234     { "vmaxfp", VX(4, 1034), VX_MASK, PPCVEC, { VD, VA, VB } },
2235     { "vmaxsb", VX(4, 258), VX_MASK, PPCVEC, { VD, VA, VB } },
2236     { "vmaxsh", VX(4, 322), VX_MASK, PPCVEC, { VD, VA, VB } },
2237     { "vmaxsw", VX(4, 386), VX_MASK, PPCVEC, { VD, VA, VB } },
2238     { "vmaxub", VX(4, 2), VX_MASK, PPCVEC, { VD, VA, VB } },
2239     { "vmaxuh", VX(4, 66), VX_MASK, PPCVEC, { VD, VA, VB } },
2240     { "vmaxuw", VX(4, 130), VX_MASK, PPCVEC, { VD, VA, VB } },
2241     { "vmhaddshs", VXA(4, 32), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
2242     { "vmhraddshs", VXA(4, 33), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
2243     { "vminfp", VX(4, 1098), VX_MASK, PPCVEC, { VD, VA, VB } },
2244     { "vminsb", VX(4, 770), VX_MASK, PPCVEC, { VD, VA, VB } },
2245     { "vminsh", VX(4, 834), VX_MASK, PPCVEC, { VD, VA, VB } },
2246     { "vminsw", VX(4, 898), VX_MASK, PPCVEC, { VD, VA, VB } },
2247     { "vminub", VX(4, 514), VX_MASK, PPCVEC, { VD, VA, VB } },
2248     { "vminuh", VX(4, 578), VX_MASK, PPCVEC, { VD, VA, VB } },
2249     { "vminuw", VX(4, 642), VX_MASK, PPCVEC, { VD, VA, VB } },
2250     { "vmladduhm", VXA(4, 34), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
2251     { "vmrghb", VX(4, 12), VX_MASK, PPCVEC, { VD, VA, VB } },
2252     { "vmrghh", VX(4, 76), VX_MASK, PPCVEC, { VD, VA, VB } },
2253     { "vmrghw", VX(4, 140), VX_MASK, PPCVEC, { VD, VA, VB } },
2254     { "vmrglb", VX(4, 268), VX_MASK, PPCVEC, { VD, VA, VB } },
2255     { "vmrglh", VX(4, 332), VX_MASK, PPCVEC, { VD, VA, VB } },
2256     { "vmrglw", VX(4, 396), VX_MASK, PPCVEC, { VD, VA, VB } },
2257     { "vmsummbm", VXA(4, 37), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
2258     { "vmsumshm", VXA(4, 40), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
2259     { "vmsumshs", VXA(4, 41), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
2260     { "vmsumubm", VXA(4, 36), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
2261     { "vmsumuhm", VXA(4, 38), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
2262     { "vmsumuhs", VXA(4, 39), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
2263     { "vmulesb", VX(4, 776), VX_MASK, PPCVEC, { VD, VA, VB } },
2264     { "vmulesh", VX(4, 840), VX_MASK, PPCVEC, { VD, VA, VB } },
2265     { "vmuleub", VX(4, 520), VX_MASK, PPCVEC, { VD, VA, VB } },
2266     { "vmuleuh", VX(4, 584), VX_MASK, PPCVEC, { VD, VA, VB } },
2267     { "vmulosb", VX(4, 264), VX_MASK, PPCVEC, { VD, VA, VB } },
2268     { "vmulosh", VX(4, 328), VX_MASK, PPCVEC, { VD, VA, VB } },
2269     { "vmuloub", VX(4, 8), VX_MASK, PPCVEC, { VD, VA, VB } },
2270     { "vmulouh", VX(4, 72), VX_MASK, PPCVEC, { VD, VA, VB } },
2271     { "vnmsubfp", VXA(4, 47), VXA_MASK, PPCVEC, { VD, VA, VC, VB } },
2272     { "vnor", VX(4, 1284), VX_MASK, PPCVEC, { VD, VA, VB } },
2273     { "vor", VX(4, 1156), VX_MASK, PPCVEC, { VD, VA, VB } },
2274     { "vperm", VXA(4, 43), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
2275     { "vpkpx", VX(4, 782), VX_MASK, PPCVEC, { VD, VA, VB } },
2276     { "vpkshss", VX(4, 398), VX_MASK, PPCVEC, { VD, VA, VB } },
2277     { "vpkshus", VX(4, 270), VX_MASK, PPCVEC, { VD, VA, VB } },
2278     { "vpkswss", VX(4, 462), VX_MASK, PPCVEC, { VD, VA, VB } },
2279     { "vpkswus", VX(4, 334), VX_MASK, PPCVEC, { VD, VA, VB } },
2280     { "vpkuhum", VX(4, 14), VX_MASK, PPCVEC, { VD, VA, VB } },
2281     { "vpkuhus", VX(4, 142), VX_MASK, PPCVEC, { VD, VA, VB } },
2282     { "vpkuwum", VX(4, 78), VX_MASK, PPCVEC, { VD, VA, VB } },
2283     { "vpkuwus", VX(4, 206), VX_MASK, PPCVEC, { VD, VA, VB } },
2284     { "vrefp", VX(4, 266), VX_MASK, PPCVEC, { VD, VB } },
2285     { "vrfim", VX(4, 714), VX_MASK, PPCVEC, { VD, VB } },
2286     { "vrfin", VX(4, 522), VX_MASK, PPCVEC, { VD, VB } },
2287     { "vrfip", VX(4, 650), VX_MASK, PPCVEC, { VD, VB } },
2288     { "vrfiz", VX(4, 586), VX_MASK, PPCVEC, { VD, VB } },
2289     { "vrlb", VX(4, 4), VX_MASK, PPCVEC, { VD, VA, VB } },
2290     { "vrlh", VX(4, 68), VX_MASK, PPCVEC, { VD, VA, VB } },
2291     { "vrlw", VX(4, 132), VX_MASK, PPCVEC, { VD, VA, VB } },
2292     { "vrsqrtefp", VX(4, 330), VX_MASK, PPCVEC, { VD, VB } },
2293     { "vsel", VXA(4, 42), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
2294     { "vsl", VX(4, 452), VX_MASK, PPCVEC, { VD, VA, VB } },
2295     { "vslb", VX(4, 260), VX_MASK, PPCVEC, { VD, VA, VB } },
2296     { "vsldoi", VXA(4, 44), VXA_MASK, PPCVEC, { VD, VA, VB, SHB } },
2297     { "vslh", VX(4, 324), VX_MASK, PPCVEC, { VD, VA, VB } },
2298     { "vslo", VX(4, 1036), VX_MASK, PPCVEC, { VD, VA, VB } },
2299     { "vslw", VX(4, 388), VX_MASK, PPCVEC, { VD, VA, VB } },
2300     { "vspltb", VX(4, 524), VX_MASK, PPCVEC, { VD, VB, UIMM } },
2301     { "vsplth", VX(4, 588), VX_MASK, PPCVEC, { VD, VB, UIMM } },
2302     { "vspltisb", VX(4, 780), VX_MASK, PPCVEC, { VD, SIMM } },
2303     { "vspltish", VX(4, 844), VX_MASK, PPCVEC, { VD, SIMM } },
2304     { "vspltisw", VX(4, 908), VX_MASK, PPCVEC, { VD, SIMM } },
2305     { "vspltw", VX(4, 652), VX_MASK, PPCVEC, { VD, VB, UIMM } },
2306     { "vsr", VX(4, 708), VX_MASK, PPCVEC, { VD, VA, VB } },
2307     { "vsrab", VX(4, 772), VX_MASK, PPCVEC, { VD, VA, VB } },
2308     { "vsrah", VX(4, 836), VX_MASK, PPCVEC, { VD, VA, VB } },
2309     { "vsraw", VX(4, 900), VX_MASK, PPCVEC, { VD, VA, VB } },
2310     { "vsrb", VX(4, 516), VX_MASK, PPCVEC, { VD, VA, VB } },
2311     { "vsrh", VX(4, 580), VX_MASK, PPCVEC, { VD, VA, VB } },
2312     { "vsro", VX(4, 1100), VX_MASK, PPCVEC, { VD, VA, VB } },
2313     { "vsrw", VX(4, 644), VX_MASK, PPCVEC, { VD, VA, VB } },
2314     { "vsubcuw", VX(4, 1408), VX_MASK, PPCVEC, { VD, VA, VB } },
2315     { "vsubfp", VX(4, 74), VX_MASK, PPCVEC, { VD, VA, VB } },
2316     { "vsubsbs", VX(4, 1792), VX_MASK, PPCVEC, { VD, VA, VB } },
2317     { "vsubshs", VX(4, 1856), VX_MASK, PPCVEC, { VD, VA, VB } },
2318     { "vsubsws", VX(4, 1920), VX_MASK, PPCVEC, { VD, VA, VB } },
2319     { "vsububm", VX(4, 1024), VX_MASK, PPCVEC, { VD, VA, VB } },
2320     { "vsububs", VX(4, 1536), VX_MASK, PPCVEC, { VD, VA, VB } },
2321     { "vsubuhm", VX(4, 1088), VX_MASK, PPCVEC, { VD, VA, VB } },
2322     { "vsubuhs", VX(4, 1600), VX_MASK, PPCVEC, { VD, VA, VB } },
2323     { "vsubuwm", VX(4, 1152), VX_MASK, PPCVEC, { VD, VA, VB } },
2324     { "vsubuws", VX(4, 1664), VX_MASK, PPCVEC, { VD, VA, VB } },
2325     { "vsumsws", VX(4, 1928), VX_MASK, PPCVEC, { VD, VA, VB } },
2326     { "vsum2sws", VX(4, 1672), VX_MASK, PPCVEC, { VD, VA, VB } },
2327     { "vsum4sbs", VX(4, 1800), VX_MASK, PPCVEC, { VD, VA, VB } },
2328     { "vsum4shs", VX(4, 1608), VX_MASK, PPCVEC, { VD, VA, VB } },
2329     { "vsum4ubs", VX(4, 1544), VX_MASK, PPCVEC, { VD, VA, VB } },
2330     { "vupkhpx", VX(4, 846), VX_MASK, PPCVEC, { VD, VB } },
2331     { "vupkhsb", VX(4, 526), VX_MASK, PPCVEC, { VD, VB } },
2332     { "vupkhsh", VX(4, 590), VX_MASK, PPCVEC, { VD, VB } },
2333     { "vupklpx", VX(4, 974), VX_MASK, PPCVEC, { VD, VB } },
2334     { "vupklsb", VX(4, 654), VX_MASK, PPCVEC, { VD, VB } },
2335     { "vupklsh", VX(4, 718), VX_MASK, PPCVEC, { VD, VB } },
2336     { "vxor", VX(4, 1220), VX_MASK, PPCVEC, { VD, VA, VB } },
2337    
2338     { "evaddw", VX(4, 512), VX_MASK, PPCSPE, { RS, RA, RB } },
2339     { "evaddiw", VX(4, 514), VX_MASK, PPCSPE, { RS, RB, UIMM } },
2340     { "evsubfw", VX(4, 516), VX_MASK, PPCSPE, { RS, RA, RB } },
2341     { "evsubw", VX(4, 516), VX_MASK, PPCSPE, { RS, RB, RA } },
2342     { "evsubifw", VX(4, 518), VX_MASK, PPCSPE, { RS, UIMM, RB } },
2343     { "evsubiw", VX(4, 518), VX_MASK, PPCSPE, { RS, RB, UIMM } },
2344     { "evabs", VX(4, 520), VX_MASK, PPCSPE, { RS, RA } },
2345     { "evneg", VX(4, 521), VX_MASK, PPCSPE, { RS, RA } },
2346     { "evextsb", VX(4, 522), VX_MASK, PPCSPE, { RS, RA } },
2347     { "evextsh", VX(4, 523), VX_MASK, PPCSPE, { RS, RA } },
2348     { "evrndw", VX(4, 524), VX_MASK, PPCSPE, { RS, RA } },
2349     { "evcntlzw", VX(4, 525), VX_MASK, PPCSPE, { RS, RA } },
2350     { "evcntlsw", VX(4, 526), VX_MASK, PPCSPE, { RS, RA } },
2351    
2352     { "brinc", VX(4, 527), VX_MASK, PPCSPE, { RS, RA, RB } },
2353    
2354     { "evand", VX(4, 529), VX_MASK, PPCSPE, { RS, RA, RB } },
2355     { "evandc", VX(4, 530), VX_MASK, PPCSPE, { RS, RA, RB } },
2356     { "evmr", VX(4, 535), VX_MASK, PPCSPE, { RS, RA, BBA } },
2357     { "evor", VX(4, 535), VX_MASK, PPCSPE, { RS, RA, RB } },
2358     { "evorc", VX(4, 539), VX_MASK, PPCSPE, { RS, RA, RB } },
2359     { "evxor", VX(4, 534), VX_MASK, PPCSPE, { RS, RA, RB } },
2360     { "eveqv", VX(4, 537), VX_MASK, PPCSPE, { RS, RA, RB } },
2361     { "evnand", VX(4, 542), VX_MASK, PPCSPE, { RS, RA, RB } },
2362     { "evnot", VX(4, 536), VX_MASK, PPCSPE, { RS, RA, BBA } },
2363     { "evnor", VX(4, 536), VX_MASK, PPCSPE, { RS, RA, RB } },
2364    
2365     { "evrlw", VX(4, 552), VX_MASK, PPCSPE, { RS, RA, RB } },
2366     { "evrlwi", VX(4, 554), VX_MASK, PPCSPE, { RS, RA, EVUIMM } },
2367     { "evslw", VX(4, 548), VX_MASK, PPCSPE, { RS, RA, RB } },
2368     { "evslwi", VX(4, 550), VX_MASK, PPCSPE, { RS, RA, EVUIMM } },
2369     { "evsrws", VX(4, 545), VX_MASK, PPCSPE, { RS, RA, RB } },
2370     { "evsrwu", VX(4, 544), VX_MASK, PPCSPE, { RS, RA, RB } },
2371     { "evsrwis", VX(4, 547), VX_MASK, PPCSPE, { RS, RA, EVUIMM } },
2372     { "evsrwiu", VX(4, 546), VX_MASK, PPCSPE, { RS, RA, EVUIMM } },
2373     { "evsplati", VX(4, 553), VX_MASK, PPCSPE, { RS, SIMM } },
2374     { "evsplatfi", VX(4, 555), VX_MASK, PPCSPE, { RS, SIMM } },
2375     { "evmergehi", VX(4, 556), VX_MASK, PPCSPE, { RS, RA, RB } },
2376     { "evmergelo", VX(4, 557), VX_MASK, PPCSPE, { RS, RA, RB } },
2377     { "evmergehilo",VX(4,558), VX_MASK, PPCSPE, { RS, RA, RB } },
2378     { "evmergelohi",VX(4,559), VX_MASK, PPCSPE, { RS, RA, RB } },
2379    
2380     { "evcmpgts", VX(4, 561), VX_MASK, PPCSPE, { CRFD, RA, RB } },
2381     { "evcmpgtu", VX(4, 560), VX_MASK, PPCSPE, { CRFD, RA, RB } },
2382     { "evcmplts", VX(4, 563), VX_MASK, PPCSPE, { CRFD, RA, RB } },
2383     { "evcmpltu", VX(4, 562), VX_MASK, PPCSPE, { CRFD, RA, RB } },
2384     { "evcmpeq", VX(4, 564), VX_MASK, PPCSPE, { CRFD, RA, RB } },
2385     { "evsel", EVSEL(4,79),EVSEL_MASK, PPCSPE, { RS, RA, RB, CRFS } },
2386    
2387     { "evldd", VX(4, 769), VX_MASK, PPCSPE, { RS, EVUIMM_8, RA } },
2388     { "evlddx", VX(4, 768), VX_MASK, PPCSPE, { RS, RA, RB } },
2389     { "evldw", VX(4, 771), VX_MASK, PPCSPE, { RS, EVUIMM_8, RA } },
2390     { "evldwx", VX(4, 770), VX_MASK, PPCSPE, { RS, RA, RB } },
2391     { "evldh", VX(4, 773), VX_MASK, PPCSPE, { RS, EVUIMM_8, RA } },
2392     { "evldhx", VX(4, 772), VX_MASK, PPCSPE, { RS, RA, RB } },
2393     { "evlwhe", VX(4, 785), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
2394     { "evlwhex", VX(4, 784), VX_MASK, PPCSPE, { RS, RA, RB } },
2395     { "evlwhou", VX(4, 789), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
2396     { "evlwhoux", VX(4, 788), VX_MASK, PPCSPE, { RS, RA, RB } },
2397     { "evlwhos", VX(4, 791), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
2398     { "evlwhosx", VX(4, 790), VX_MASK, PPCSPE, { RS, RA, RB } },
2399     { "evlwwsplat",VX(4, 793), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
2400     { "evlwwsplatx",VX(4, 792), VX_MASK, PPCSPE, { RS, RA, RB } },
2401     { "evlwhsplat",VX(4, 797), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
2402     { "evlwhsplatx",VX(4, 796), VX_MASK, PPCSPE, { RS, RA, RB } },
2403     { "evlhhesplat",VX(4, 777), VX_MASK, PPCSPE, { RS, EVUIMM_2, RA } },
2404     { "evlhhesplatx",VX(4, 776), VX_MASK, PPCSPE, { RS, RA, RB } },
2405     { "evlhhousplat",VX(4, 781), VX_MASK, PPCSPE, { RS, EVUIMM_2, RA } },
2406     { "evlhhousplatx",VX(4, 780), VX_MASK, PPCSPE, { RS, RA, RB } },
2407     { "evlhhossplat",VX(4, 783), VX_MASK, PPCSPE, { RS, EVUIMM_2, RA } },
2408     { "evlhhossplatx",VX(4, 782), VX_MASK, PPCSPE, { RS, RA, RB } },
2409    
2410     { "evstdd", VX(4, 801), VX_MASK, PPCSPE, { RS, EVUIMM_8, RA } },
2411     { "evstddx", VX(4, 800), VX_MASK, PPCSPE, { RS, RA, RB } },
2412     { "evstdw", VX(4, 803), VX_MASK, PPCSPE, { RS, EVUIMM_8, RA } },
2413     { "evstdwx", VX(4, 802), VX_MASK, PPCSPE, { RS, RA, RB } },
2414     { "evstdh", VX(4, 805), VX_MASK, PPCSPE, { RS, EVUIMM_8, RA } },
2415     { "evstdhx", VX(4, 804), VX_MASK, PPCSPE, { RS, RA, RB } },
2416     { "evstwwe", VX(4, 825), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
2417     { "evstwwex", VX(4, 824), VX_MASK, PPCSPE, { RS, RA, RB } },
2418     { "evstwwo", VX(4, 829), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
2419     { "evstwwox", VX(4, 828), VX_MASK, PPCSPE, { RS, RA, RB } },
2420     { "evstwhe", VX(4, 817), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
2421     { "evstwhex", VX(4, 816), VX_MASK, PPCSPE, { RS, RA, RB } },
2422     { "evstwho", VX(4, 821), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
2423     { "evstwhox", VX(4, 820), VX_MASK, PPCSPE, { RS, RA, RB } },
2424    
2425     { "evfsabs", VX(4, 644), VX_MASK, PPCSPE, { RS, RA } },
2426     { "evfsnabs", VX(4, 645), VX_MASK, PPCSPE, { RS, RA } },
2427     { "evfsneg", VX(4, 646), VX_MASK, PPCSPE, { RS, RA } },
2428     { "evfsadd", VX(4, 640), VX_MASK, PPCSPE, { RS, RA, RB } },
2429     { "evfssub", VX(4, 641), VX_MASK, PPCSPE, { RS, RA, RB } },
2430     { "evfsmul", VX(4, 648), VX_MASK, PPCSPE, { RS, RA, RB } },
2431     { "evfsdiv", VX(4, 649), VX_MASK, PPCSPE, { RS, RA, RB } },
2432     { "evfscmpgt", VX(4, 652), VX_MASK, PPCSPE, { CRFD, RA, RB } },
2433     { "evfscmplt", VX(4, 653), VX_MASK, PPCSPE, { CRFD, RA, RB } },
2434     { "evfscmpeq", VX(4, 654), VX_MASK, PPCSPE, { CRFD, RA, RB } },
2435     { "evfststgt", VX(4, 668), VX_MASK, PPCSPE, { CRFD, RA, RB } },
2436     { "evfststlt", VX(4, 669), VX_MASK, PPCSPE, { CRFD, RA, RB } },
2437     { "evfststeq", VX(4, 670), VX_MASK, PPCSPE, { CRFD, RA, RB } },
2438     { "evfscfui", VX(4, 656), VX_MASK, PPCSPE, { RS, RB } },
2439     { "evfsctuiz", VX(4, 664), VX_MASK, PPCSPE, { RS, RB } },
2440     { "evfscfsi", VX(4, 657), VX_MASK, PPCSPE, { RS, RB } },
2441     { "evfscfuf", VX(4, 658), VX_MASK, PPCSPE, { RS, RB } },
2442     { "evfscfsf", VX(4, 659), VX_MASK, PPCSPE, { RS, RB } },
2443     { "evfsctui", VX(4, 660), VX_MASK, PPCSPE, { RS, RB } },
2444     { "evfsctsi", VX(4, 661), VX_MASK, PPCSPE, { RS, RB } },
2445     { "evfsctsiz", VX(4, 666), VX_MASK, PPCSPE, { RS, RB } },
2446     { "evfsctuf", VX(4, 662), VX_MASK, PPCSPE, { RS, RB } },
2447     { "evfsctsf", VX(4, 663), VX_MASK, PPCSPE, { RS, RB } },
2448    
2449     { "efsabs", VX(4, 708), VX_MASK, PPCEFS, { RS, RA } },
2450     { "efsnabs", VX(4, 709), VX_MASK, PPCEFS, { RS, RA } },
2451     { "efsneg", VX(4, 710), VX_MASK, PPCEFS, { RS, RA } },
2452     { "efsadd", VX(4, 704), VX_MASK, PPCEFS, { RS, RA, RB } },
2453     { "efssub", VX(4, 705), VX_MASK, PPCEFS, { RS, RA, RB } },
2454     { "efsmul", VX(4, 712), VX_MASK, PPCEFS, { RS, RA, RB } },
2455     { "efsdiv", VX(4, 713), VX_MASK, PPCEFS, { RS, RA, RB } },
2456     { "efscmpgt", VX(4, 716), VX_MASK, PPCEFS, { CRFD, RA, RB } },
2457     { "efscmplt", VX(4, 717), VX_MASK, PPCEFS, { CRFD, RA, RB } },
2458     { "efscmpeq", VX(4, 718), VX_MASK, PPCEFS, { CRFD, RA, RB } },
2459     { "efststgt", VX(4, 732), VX_MASK, PPCEFS, { CRFD, RA, RB } },
2460     { "efststlt", VX(4, 733), VX_MASK, PPCEFS, { CRFD, RA, RB } },
2461     { "efststeq", VX(4, 734), VX_MASK, PPCEFS, { CRFD, RA, RB } },
2462     { "efscfui", VX(4, 720), VX_MASK, PPCEFS, { RS, RB } },
2463     { "efsctuiz", VX(4, 728), VX_MASK, PPCEFS, { RS, RB } },
2464     { "efscfsi", VX(4, 721), VX_MASK, PPCEFS, { RS, RB } },
2465     { "efscfuf", VX(4, 722), VX_MASK, PPCEFS, { RS, RB } },
2466     { "efscfsf", VX(4, 723), VX_MASK, PPCEFS, { RS, RB } },
2467     { "efsctui", VX(4, 724), VX_MASK, PPCEFS, { RS, RB } },
2468     { "efsctsi", VX(4, 725), VX_MASK, PPCEFS, { RS, RB } },
2469     { "efsctsiz", VX(4, 730), VX_MASK, PPCEFS, { RS, RB } },
2470     { "efsctuf", VX(4, 726), VX_MASK, PPCEFS, { RS, RB } },
2471     { "efsctsf", VX(4, 727), VX_MASK, PPCEFS, { RS, RB } },
2472    
2473     { "evmhossf", VX(4, 1031), VX_MASK, PPCSPE, { RS, RA, RB } },
2474     { "evmhossfa", VX(4, 1063), VX_MASK, PPCSPE, { RS, RA, RB } },
2475     { "evmhosmf", VX(4, 1039), VX_MASK, PPCSPE, { RS, RA, RB } },
2476     { "evmhosmfa", VX(4, 1071), VX_MASK, PPCSPE, { RS, RA, RB } },
2477     { "evmhosmi", VX(4, 1037), VX_MASK, PPCSPE, { RS, RA, RB } },
2478     { "evmhosmia", VX(4, 1069), VX_MASK, PPCSPE, { RS, RA, RB } },
2479     { "evmhoumi", VX(4, 1036), VX_MASK, PPCSPE, { RS, RA, RB } },
2480     { "evmhoumia", VX(4, 1068), VX_MASK, PPCSPE, { RS, RA, RB } },
2481     { "evmhessf", VX(4, 1027), VX_MASK, PPCSPE, { RS, RA, RB } },
2482     { "evmhessfa", VX(4, 1059), VX_MASK, PPCSPE, { RS, RA, RB } },
2483     { "evmhesmf", VX(4, 1035), VX_MASK, PPCSPE, { RS, RA, RB } },
2484     { "evmhesmfa", VX(4, 1067), VX_MASK, PPCSPE, { RS, RA, RB } },
2485     { "evmhesmi", VX(4, 1033), VX_MASK, PPCSPE, { RS, RA, RB } },
2486     { "evmhesmia", VX(4, 1065), VX_MASK, PPCSPE, { RS, RA, RB } },
2487     { "evmheumi", VX(4, 1032), VX_MASK, PPCSPE, { RS, RA, RB } },
2488     { "evmheumia", VX(4, 1064), VX_MASK, PPCSPE, { RS, RA, RB } },
2489    
2490     { "evmhossfaaw",VX(4, 1287), VX_MASK, PPCSPE, { RS, RA, RB } },
2491     { "evmhossiaaw",VX(4, 1285), VX_MASK, PPCSPE, { RS, RA, RB } },
2492     { "evmhosmfaaw",VX(4, 1295), VX_MASK, PPCSPE, { RS, RA, RB } },
2493     { "evmhosmiaaw",VX(4, 1293), VX_MASK, PPCSPE, { RS, RA, RB } },
2494     { "evmhousiaaw",VX(4, 1284), VX_MASK, PPCSPE, { RS, RA, RB } },
2495     { "evmhoumiaaw",VX(4, 1292), VX_MASK, PPCSPE, { RS, RA, RB } },
2496     { "evmhessfaaw",VX(4, 1283), VX_MASK, PPCSPE, { RS, RA, RB } },
2497     { "evmhessiaaw",VX(4, 1281), VX_MASK, PPCSPE, { RS, RA, RB } },
2498     { "evmhesmfaaw",VX(4, 1291), VX_MASK, PPCSPE, { RS, RA, RB } },
2499     { "evmhesmiaaw",VX(4, 1289), VX_MASK, PPCSPE, { RS, RA, RB } },
2500     { "evmheusiaaw",VX(4, 1280), VX_MASK, PPCSPE, { RS, RA, RB } },
2501     { "evmheumiaaw",VX(4, 1288), VX_MASK, PPCSPE, { RS, RA, RB } },
2502    
2503     { "evmhossfanw",VX(4, 1415), VX_MASK, PPCSPE, { RS, RA, RB } },
2504     { "evmhossianw",VX(4, 1413), VX_MASK, PPCSPE, { RS, RA, RB } },
2505     { "evmhosmfanw",VX(4, 1423), VX_MASK, PPCSPE, { RS, RA, RB } },
2506     { "evmhosmianw",VX(4, 1421), VX_MASK, PPCSPE, { RS, RA, RB } },
2507     { "evmhousianw",VX(4, 1412), VX_MASK, PPCSPE, { RS, RA, RB } },
2508     { "evmhoumianw",VX(4, 1420), VX_MASK, PPCSPE, { RS, RA, RB } },
2509     { "evmhessfanw",VX(4, 1411), VX_MASK, PPCSPE, { RS, RA, RB } },
2510     { "evmhessianw",VX(4, 1409), VX_MASK, PPCSPE, { RS, RA, RB } },
2511     { "evmhesmfanw",VX(4, 1419), VX_MASK, PPCSPE, { RS, RA, RB } },
2512     { "evmhesmianw",VX(4, 1417), VX_MASK, PPCSPE, { RS, RA, RB } },
2513     { "evmheusianw",VX(4, 1408), VX_MASK, PPCSPE, { RS, RA, RB } },
2514     { "evmheumianw",VX(4, 1416), VX_MASK, PPCSPE, { RS, RA, RB } },
2515    
2516     { "evmhogsmfaa",VX(4, 1327), VX_MASK, PPCSPE, { RS, RA, RB } },
2517     { "evmhogsmiaa",VX(4, 1325), VX_MASK, PPCSPE, { RS, RA, RB } },
2518     { "evmhogumiaa",VX(4, 1324), VX_MASK, PPCSPE, { RS, RA, RB } },
2519     { "evmhegsmfaa",VX(4, 1323), VX_MASK, PPCSPE, { RS, RA, RB } },
2520     { "evmhegsmiaa",VX(4, 1321), VX_MASK, PPCSPE, { RS, RA, RB } },
2521     { "evmhegumiaa",VX(4, 1320), VX_MASK, PPCSPE, { RS, RA, RB } },
2522    
2523     { "evmhogsmfan",VX(4, 1455), VX_MASK, PPCSPE, { RS, RA, RB } },
2524     { "evmhogsmian",VX(4, 1453), VX_MASK, PPCSPE, { RS, RA, RB } },
2525     { "evmhogumian",VX(4, 1452), VX_MASK, PPCSPE, { RS, RA, RB } },
2526     { "evmhegsmfan",VX(4, 1451), VX_MASK, PPCSPE, { RS, RA, RB } },
2527     { "evmhegsmian",VX(4, 1449), VX_MASK, PPCSPE, { RS, RA, RB } },
2528     { "evmhegumian",VX(4, 1448), VX_MASK, PPCSPE, { RS, RA, RB } },
2529    
2530     { "evmwhssf", VX(4, 1095), VX_MASK, PPCSPE, { RS, RA, RB } },
2531     { "evmwhssfa", VX(4, 1127), VX_MASK, PPCSPE, { RS, RA, RB } },
2532     { "evmwhsmf", VX(4, 1103), VX_MASK, PPCSPE, { RS, RA, RB } },
2533     { "evmwhsmfa", VX(4, 1135), VX_MASK, PPCSPE, { RS, RA, RB } },
2534     { "evmwhsmi", VX(4, 1101), VX_MASK, PPCSPE, { RS, RA, RB } },
2535     { "evmwhsmia", VX(4, 1133), VX_MASK, PPCSPE, { RS, RA, RB } },
2536     { "evmwhumi", VX(4, 1100), VX_MASK, PPCSPE, { RS, RA, RB } },
2537     { "evmwhumia", VX(4, 1132), VX_MASK, PPCSPE, { RS, RA, RB } },
2538    
2539     { "evmwlumi", VX(4, 1096), VX_MASK, PPCSPE, { RS, RA, RB } },
2540     { "evmwlumia", VX(4, 1128), VX_MASK, PPCSPE, { RS, RA, RB } },
2541    
2542     { "evmwlssiaaw",VX(4, 1345), VX_MASK, PPCSPE, { RS, RA, RB } },
2543     { "evmwlsmiaaw",VX(4, 1353), VX_MASK, PPCSPE, { RS, RA, RB } },
2544     { "evmwlusiaaw",VX(4, 1344), VX_MASK, PPCSPE, { RS, RA, RB } },
2545     { "evmwlumiaaw",VX(4, 1352), VX_MASK, PPCSPE, { RS, RA, RB } },
2546    
2547     { "evmwlssianw",VX(4, 1473), VX_MASK, PPCSPE, { RS, RA, RB } },
2548     { "evmwlsmianw",VX(4, 1481), VX_MASK, PPCSPE, { RS, RA, RB } },
2549     { "evmwlusianw",VX(4, 1472), VX_MASK, PPCSPE, { RS, RA, RB } },
2550     { "evmwlumianw",VX(4, 1480), VX_MASK, PPCSPE, { RS, RA, RB } },
2551    
2552     { "evmwssf", VX(4, 1107), VX_MASK, PPCSPE, { RS, RA, RB } },
2553     { "evmwssfa", VX(4, 1139), VX_MASK, PPCSPE, { RS, RA, RB } },
2554     { "evmwsmf", VX(4, 1115), VX_MASK, PPCSPE, { RS, RA, RB } },
2555     { "evmwsmfa", VX(4, 1147), VX_MASK, PPCSPE, { RS, RA, RB } },
2556     { "evmwsmi", VX(4, 1113), VX_MASK, PPCSPE, { RS, RA, RB } },
2557     { "evmwsmia", VX(4, 1145), VX_MASK, PPCSPE, { RS, RA, RB } },
2558     { "evmwumi", VX(4, 1112), VX_MASK, PPCSPE, { RS, RA, RB } },
2559     { "evmwumia", VX(4, 1144), VX_MASK, PPCSPE, { RS, RA, RB } },
2560    
2561     { "evmwssfaa", VX(4, 1363), VX_MASK, PPCSPE, { RS, RA, RB } },
2562     { "evmwsmfaa", VX(4, 1371), VX_MASK, PPCSPE, { RS, RA, RB } },
2563     { "evmwsmiaa", VX(4, 1369), VX_MASK, PPCSPE, { RS, RA, RB } },
2564     { "evmwumiaa", VX(4, 1368), VX_MASK, PPCSPE, { RS, RA, RB } },
2565    
2566     { "evmwssfan", VX(4, 1491), VX_MASK, PPCSPE, { RS, RA, RB } },
2567     { "evmwsmfan", VX(4, 1499), VX_MASK, PPCSPE, { RS, RA, RB } },
2568     { "evmwsmian", VX(4, 1497), VX_MASK, PPCSPE, { RS, RA, RB } },
2569     { "evmwumian", VX(4, 1496), VX_MASK, PPCSPE, { RS, RA, RB } },
2570    
2571     { "evaddssiaaw",VX(4, 1217), VX_MASK, PPCSPE, { RS, RA } },
2572     { "evaddsmiaaw",VX(4, 1225), VX_MASK, PPCSPE, { RS, RA } },
2573     { "evaddusiaaw",VX(4, 1216), VX_MASK, PPCSPE, { RS, RA } },
2574     { "evaddumiaaw",VX(4, 1224), VX_MASK, PPCSPE, { RS, RA } },
2575    
2576     { "evsubfssiaaw",VX(4, 1219), VX_MASK, PPCSPE, { RS, RA } },
2577     { "evsubfsmiaaw",VX(4, 1227), VX_MASK, PPCSPE, { RS, RA } },
2578     { "evsubfusiaaw",VX(4, 1218), VX_MASK, PPCSPE, { RS, RA } },
2579     { "evsubfumiaaw",VX(4, 1226), VX_MASK, PPCSPE, { RS, RA } },
2580    
2581     { "evmra", VX(4, 1220), VX_MASK, PPCSPE, { RS, RA } },
2582    
2583     { "evdivws", VX(4, 1222), VX_MASK, PPCSPE, { RS, RA, RB } },
2584     { "evdivwu", VX(4, 1223), VX_MASK, PPCSPE, { RS, RA, RB } },
2585    
2586     { "mulli", OP(7), OP_MASK, PPCCOM, { RT, RA, SI } },
2587     { "muli", OP(7), OP_MASK, PWRCOM, { RT, RA, SI } },
2588    
2589     { "subfic", OP(8), OP_MASK, PPCCOM, { RT, RA, SI } },
2590     { "sfi", OP(8), OP_MASK, PWRCOM, { RT, RA, SI } },
2591    
2592     { "dozi", OP(9), OP_MASK, M601, { RT, RA, SI } },
2593    
2594     { "bce", B(9,0,0), B_MASK, BOOKE64, { BO, BI, BD } },
2595     { "bcel", B(9,0,1), B_MASK, BOOKE64, { BO, BI, BD } },
2596     { "bcea", B(9,1,0), B_MASK, BOOKE64, { BO, BI, BDA } },
2597     { "bcela", B(9,1,1), B_MASK, BOOKE64, { BO, BI, BDA } },
2598    
2599     { "cmplwi", OPL(10,0), OPL_MASK, PPCCOM, { OBF, RA, UI } },
2600     { "cmpldi", OPL(10,1), OPL_MASK, PPC64, { OBF, RA, UI } },
2601     { "cmpli", OP(10), OP_MASK, PPC, { BF, L, RA, UI } },
2602     { "cmpli", OP(10), OP_MASK, PWRCOM, { BF, RA, UI } },
2603    
2604     { "cmpwi", OPL(11,0), OPL_MASK, PPCCOM, { OBF, RA, SI } },
2605     { "cmpdi", OPL(11,1), OPL_MASK, PPC64, { OBF, RA, SI } },
2606     { "cmpi", OP(11), OP_MASK, PPC, { BF, L, RA, SI } },
2607     { "cmpi", OP(11), OP_MASK, PWRCOM, { BF, RA, SI } },
2608    
2609     { "addic", OP(12), OP_MASK, PPCCOM, { RT, RA, SI } },
2610     { "ai", OP(12), OP_MASK, PWRCOM, { RT, RA, SI } },
2611     { "subic", OP(12), OP_MASK, PPCCOM, { RT, RA, NSI } },
2612    
2613     { "addic.", OP(13), OP_MASK, PPCCOM, { RT, RA, SI } },
2614     { "ai.", OP(13), OP_MASK, PWRCOM, { RT, RA, SI } },
2615     { "subic.", OP(13), OP_MASK, PPCCOM, { RT, RA, NSI } },
2616    
2617     { "li", OP(14), DRA_MASK, PPCCOM, { RT, SI } },
2618     { "lil", OP(14), DRA_MASK, PWRCOM, { RT, SI } },
2619     { "addi", OP(14), OP_MASK, PPCCOM, { RT, RA0, SI } },
2620     { "cal", OP(14), OP_MASK, PWRCOM, { RT, D, RA0 } },
2621     { "subi", OP(14), OP_MASK, PPCCOM, { RT, RA0, NSI } },
2622     { "la", OP(14), OP_MASK, PPCCOM, { RT, D, RA0 } },
2623    
2624     { "lis", OP(15), DRA_MASK, PPCCOM, { RT, SISIGNOPT } },
2625     { "liu", OP(15), DRA_MASK, PWRCOM, { RT, SISIGNOPT } },
2626     { "addis", OP(15), OP_MASK, PPCCOM, { RT,RA0,SISIGNOPT } },
2627     { "cau", OP(15), OP_MASK, PWRCOM, { RT,RA0,SISIGNOPT } },
2628     { "subis", OP(15), OP_MASK, PPCCOM, { RT, RA0, NSI } },
2629    
2630     { "bdnz-", BBO(16,BODNZ,0,0), BBOATBI_MASK, PPCCOM, { BDM } },
2631     { "bdnz+", BBO(16,BODNZ,0,0), BBOATBI_MASK, PPCCOM, { BDP } },
2632     { "bdnz", BBO(16,BODNZ,0,0), BBOATBI_MASK, PPCCOM, { BD } },
2633     { "bdn", BBO(16,BODNZ,0,0), BBOATBI_MASK, PWRCOM, { BD } },
2634     { "bdnzl-", BBO(16,BODNZ,0,1), BBOATBI_MASK, PPCCOM, { BDM } },
2635     { "bdnzl+", BBO(16,BODNZ,0,1), BBOATBI_MASK, PPCCOM, { BDP } },
2636     { "bdnzl", BBO(16,BODNZ,0,1), BBOATBI_MASK, PPCCOM, { BD } },
2637     { "bdnl", BBO(16,BODNZ,0,1), BBOATBI_MASK, PWRCOM, { BD } },
2638     { "bdnza-", BBO(16,BODNZ,1,0), BBOATBI_MASK, PPCCOM, { BDMA } },
2639     { "bdnza+", BBO(16,BODNZ,1,0), BBOATBI_MASK, PPCCOM, { BDPA } },
2640     { "bdnza", BBO(16,BODNZ,1,0), BBOATBI_MASK, PPCCOM, { BDA } },
2641     { "bdna", BBO(16,BODNZ,1,0), BBOATBI_MASK, PWRCOM, { BDA } },
2642     { "bdnzla-", BBO(16,BODNZ,1,1), BBOATBI_MASK, PPCCOM, { BDMA } },
2643     { "bdnzla+", BBO(16,BODNZ,1,1), BBOATBI_MASK, PPCCOM, { BDPA } },
2644     { "bdnzla", BBO(16,BODNZ,1,1), BBOATBI_MASK, PPCCOM, { BDA } },
2645     { "bdnla", BBO(16,BODNZ,1,1), BBOATBI_MASK, PWRCOM, { BDA } },
2646     { "bdz-", BBO(16,BODZ,0,0), BBOATBI_MASK, PPCCOM, { BDM } },
2647     { "bdz+", BBO(16,BODZ,0,0), BBOATBI_MASK, PPCCOM, { BDP } },
2648     { "bdz", BBO(16,BODZ,0,0), BBOATBI_MASK, COM, { BD } },
2649     { "bdzl-", BBO(16,BODZ,0,1), BBOATBI_MASK, PPCCOM, { BDM } },
2650     { "bdzl+", BBO(16,BODZ,0,1), BBOATBI_MASK, PPCCOM, { BDP } },
2651     { "bdzl", BBO(16,BODZ,0,1), BBOATBI_MASK, COM, { BD } },
2652     { "bdza-", BBO(16,BODZ,1,0), BBOATBI_MASK, PPCCOM, { BDMA } },
2653     { "bdza+", BBO(16,BODZ,1,0), BBOATBI_MASK, PPCCOM, { BDPA } },
2654     { "bdza", BBO(16,BODZ,1,0), BBOATBI_MASK, COM, { BDA } },
2655     { "bdzla-", BBO(16,BODZ,1,1), BBOATBI_MASK, PPCCOM, { BDMA } },
2656     { "bdzla+", BBO(16,BODZ,1,1), BBOATBI_MASK, PPCCOM, { BDPA } },
2657     { "bdzla", BBO(16,BODZ,1,1), BBOATBI_MASK, COM, { BDA } },
2658     { "blt-", BBOCB(16,BOT,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2659     { "blt+", BBOCB(16,BOT,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2660     { "blt", BBOCB(16,BOT,CBLT,0,0), BBOATCB_MASK, COM, { CR, BD } },
2661     { "bltl-", BBOCB(16,BOT,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2662     { "bltl+", BBOCB(16,BOT,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2663     { "bltl", BBOCB(16,BOT,CBLT,0,1), BBOATCB_MASK, COM, { CR, BD } },
2664     { "blta-", BBOCB(16,BOT,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2665     { "blta+", BBOCB(16,BOT,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2666     { "blta", BBOCB(16,BOT,CBLT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
2667     { "bltla-", BBOCB(16,BOT,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2668     { "bltla+", BBOCB(16,BOT,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2669     { "bltla", BBOCB(16,BOT,CBLT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
2670     { "bgt-", BBOCB(16,BOT,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2671     { "bgt+", BBOCB(16,BOT,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2672     { "bgt", BBOCB(16,BOT,CBGT,0,0), BBOATCB_MASK, COM, { CR, BD } },
2673     { "bgtl-", BBOCB(16,BOT,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2674     { "bgtl+", BBOCB(16,BOT,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2675     { "bgtl", BBOCB(16,BOT,CBGT,0,1), BBOATCB_MASK, COM, { CR, BD } },
2676     { "bgta-", BBOCB(16,BOT,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2677     { "bgta+", BBOCB(16,BOT,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2678     { "bgta", BBOCB(16,BOT,CBGT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
2679     { "bgtla-", BBOCB(16,BOT,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2680     { "bgtla+", BBOCB(16,BOT,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2681     { "bgtla", BBOCB(16,BOT,CBGT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
2682     { "beq-", BBOCB(16,BOT,CBEQ,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2683     { "beq+", BBOCB(16,BOT,CBEQ,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2684     { "beq", BBOCB(16,BOT,CBEQ,0,0), BBOATCB_MASK, COM, { CR, BD } },
2685     { "beql-", BBOCB(16,BOT,CBEQ,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2686     { "beql+", BBOCB(16,BOT,CBEQ,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2687     { "beql", BBOCB(16,BOT,CBEQ,0,1), BBOATCB_MASK, COM, { CR, BD } },
2688     { "beqa-", BBOCB(16,BOT,CBEQ,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2689     { "beqa+", BBOCB(16,BOT,CBEQ,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2690     { "beqa", BBOCB(16,BOT,CBEQ,1,0), BBOATCB_MASK, COM, { CR, BDA } },
2691     { "beqla-", BBOCB(16,BOT,CBEQ,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2692     { "beqla+", BBOCB(16,BOT,CBEQ,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2693     { "beqla", BBOCB(16,BOT,CBEQ,1,1), BBOATCB_MASK, COM, { CR, BDA } },
2694     { "bso-", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2695     { "bso+", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2696     { "bso", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, COM, { CR, BD } },
2697     { "bsol-", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2698     { "bsol+", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2699     { "bsol", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, COM, { CR, BD } },
2700     { "bsoa-", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2701     { "bsoa+", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2702     { "bsoa", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, COM, { CR, BDA } },
2703     { "bsola-", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2704     { "bsola+", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2705     { "bsola", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, COM, { CR, BDA } },
2706     { "bun-", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2707     { "bun+", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2708     { "bun", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BD } },
2709     { "bunl-", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2710     { "bunl+", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2711     { "bunl", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BD } },
2712     { "buna-", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2713     { "buna+", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2714     { "buna", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDA } },
2715     { "bunla-", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2716     { "bunla+", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2717     { "bunla", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDA } },
2718     { "bge-", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2719     { "bge+", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2720     { "bge", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, COM, { CR, BD } },
2721     { "bgel-", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2722     { "bgel+", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2723     { "bgel", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, COM, { CR, BD } },
2724     { "bgea-", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2725     { "bgea+", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2726     { "bgea", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
2727     { "bgela-", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2728     { "bgela+", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2729     { "bgela", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
2730     { "bnl-", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2731     { "bnl+", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2732     { "bnl", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, COM, { CR, BD } },
2733     { "bnll-", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2734     { "bnll+", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2735     { "bnll", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, COM, { CR, BD } },
2736     { "bnla-", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2737     { "bnla+", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2738     { "bnla", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
2739     { "bnlla-", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2740     { "bnlla+", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2741     { "bnlla", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
2742     { "ble-", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2743     { "ble+", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2744     { "ble", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, COM, { CR, BD } },
2745     { "blel-", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2746     { "blel+", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2747     { "blel", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, COM, { CR, BD } },
2748     { "blea-", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2749     { "blea+", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2750     { "blea", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
2751     { "blela-", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2752     { "blela+", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2753     { "blela", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
2754     { "bng-", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2755     { "bng+", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2756     { "bng", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, COM, { CR, BD } },
2757     { "bngl-", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2758     { "bngl+", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2759     { "bngl", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, COM, { CR, BD } },
2760     { "bnga-", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2761     { "bnga+", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2762     { "bnga", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
2763     { "bngla-", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2764     { "bngla+", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2765     { "bngla", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
2766     { "bne-", BBOCB(16,BOF,CBEQ,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2767     { "bne+", BBOCB(16,BOF,CBEQ,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2768     { "bne", BBOCB(16,BOF,CBEQ,0,0), BBOATCB_MASK, COM, { CR, BD } },
2769     { "bnel-", BBOCB(16,BOF,CBEQ,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2770     { "bnel+", BBOCB(16,BOF,CBEQ,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2771     { "bnel", BBOCB(16,BOF,CBEQ,0,1), BBOATCB_MASK, COM, { CR, BD } },
2772     { "bnea-", BBOCB(16,BOF,CBEQ,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2773     { "bnea+", BBOCB(16,BOF,CBEQ,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2774     { "bnea", BBOCB(16,BOF,CBEQ,1,0), BBOATCB_MASK, COM, { CR, BDA } },
2775     { "bnela-", BBOCB(16,BOF,CBEQ,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2776     { "bnela+", BBOCB(16,BOF,CBEQ,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2777     { "bnela", BBOCB(16,BOF,CBEQ,1,1), BBOATCB_MASK, COM, { CR, BDA } },
2778     { "bns-", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2779     { "bns+", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2780     { "bns", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, COM, { CR, BD } },
2781     { "bnsl-", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2782     { "bnsl+", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2783     { "bnsl", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, COM, { CR, BD } },
2784     { "bnsa-", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2785     { "bnsa+", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2786     { "bnsa", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, COM, { CR, BDA } },
2787     { "bnsla-", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2788     { "bnsla+", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2789     { "bnsla", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, COM, { CR, BDA } },
2790     { "bnu-", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2791     { "bnu+", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2792     { "bnu", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BD } },
2793     { "bnul-", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
2794     { "bnul+", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
2795     { "bnul", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BD } },
2796     { "bnua-", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2797     { "bnua+", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2798     { "bnua", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDA } },
2799     { "bnula-", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
2800     { "bnula+", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
2801     { "bnula", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDA } },
2802     { "bdnzt-", BBO(16,BODNZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
2803     { "bdnzt+", BBO(16,BODNZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
2804     { "bdnzt", BBO(16,BODNZT,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
2805     { "bdnztl-", BBO(16,BODNZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
2806     { "bdnztl+", BBO(16,BODNZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
2807     { "bdnztl", BBO(16,BODNZT,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
2808     { "bdnzta-", BBO(16,BODNZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
2809     { "bdnzta+", BBO(16,BODNZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
2810     { "bdnzta", BBO(16,BODNZT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
2811     { "bdnztla-",BBO(16,BODNZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
2812     { "bdnztla+",BBO(16,BODNZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
2813     { "bdnztla", BBO(16,BODNZT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
2814     { "bdnzf-", BBO(16,BODNZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
2815     { "bdnzf+", BBO(16,BODNZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
2816     { "bdnzf", BBO(16,BODNZF,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
2817     { "bdnzfl-", BBO(16,BODNZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
2818     { "bdnzfl+", BBO(16,BODNZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
2819     { "bdnzfl", BBO(16,BODNZF,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
2820     { "bdnzfa-", BBO(16,BODNZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
2821     { "bdnzfa+", BBO(16,BODNZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
2822     { "bdnzfa", BBO(16,BODNZF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
2823     { "bdnzfla-",BBO(16,BODNZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
2824     { "bdnzfla+",BBO(16,BODNZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
2825     { "bdnzfla", BBO(16,BODNZF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
2826     { "bt-", BBO(16,BOT,0,0), BBOAT_MASK, PPCCOM, { BI, BDM } },
2827     { "bt+", BBO(16,BOT,0,0), BBOAT_MASK, PPCCOM, { BI, BDP } },
2828     { "bt", BBO(16,BOT,0,0), BBOAT_MASK, PPCCOM, { BI, BD } },
2829     { "bbt", BBO(16,BOT,0,0), BBOAT_MASK, PWRCOM, { BI, BD } },
2830     { "btl-", BBO(16,BOT,0,1), BBOAT_MASK, PPCCOM, { BI, BDM } },
2831     { "btl+", BBO(16,BOT,0,1), BBOAT_MASK, PPCCOM, { BI, BDP } },
2832     { "btl", BBO(16,BOT,0,1), BBOAT_MASK, PPCCOM, { BI, BD } },
2833     { "bbtl", BBO(16,BOT,0,1), BBOAT_MASK, PWRCOM, { BI, BD } },
2834     { "bta-", BBO(16,BOT,1,0), BBOAT_MASK, PPCCOM, { BI, BDMA } },
2835     { "bta+", BBO(16,BOT,1,0), BBOAT_MASK, PPCCOM, { BI, BDPA } },
2836     { "bta", BBO(16,BOT,1,0), BBOAT_MASK, PPCCOM, { BI, BDA } },
2837     { "bbta", BBO(16,BOT,1,0), BBOAT_MASK, PWRCOM, { BI, BDA } },
2838     { "btla-", BBO(16,BOT,1,1), BBOAT_MASK, PPCCOM, { BI, BDMA } },
2839     { "btla+", BBO(16,BOT,1,1), BBOAT_MASK, PPCCOM, { BI, BDPA } },
2840     { "btla", BBO(16,BOT,1,1), BBOAT_MASK, PPCCOM, { BI, BDA } },
2841     { "bbtla", BBO(16,BOT,1,1), BBOAT_MASK, PWRCOM, { BI, BDA } },
2842     { "bf-", BBO(16,BOF,0,0), BBOAT_MASK, PPCCOM, { BI, BDM } },
2843     { "bf+", BBO(16,BOF,0,0), BBOAT_MASK, PPCCOM, { BI, BDP } },
2844     { "bf", BBO(16,BOF,0,0), BBOAT_MASK, PPCCOM, { BI, BD } },
2845     { "bbf", BBO(16,BOF,0,0), BBOAT_MASK, PWRCOM, { BI, BD } },
2846     { "bfl-", BBO(16,BOF,0,1), BBOAT_MASK, PPCCOM, { BI, BDM } },
2847     { "bfl+", BBO(16,BOF,0,1), BBOAT_MASK, PPCCOM, { BI, BDP } },
2848     { "bfl", BBO(16,BOF,0,1), BBOAT_MASK, PPCCOM, { BI, BD } },
2849     { "bbfl", BBO(16,BOF,0,1), BBOAT_MASK, PWRCOM, { BI, BD } },
2850     { "bfa-", BBO(16,BOF,1,0), BBOAT_MASK, PPCCOM, { BI, BDMA } },
2851     { "bfa+", BBO(16,BOF,1,0), BBOAT_MASK, PPCCOM, { BI, BDPA } },
2852     { "bfa", BBO(16,BOF,1,0), BBOAT_MASK, PPCCOM, { BI, BDA } },
2853     { "bbfa", BBO(16,BOF,1,0), BBOAT_MASK, PWRCOM, { BI, BDA } },
2854     { "bfla-", BBO(16,BOF,1,1), BBOAT_MASK, PPCCOM, { BI, BDMA } },
2855     { "bfla+", BBO(16,BOF,1,1), BBOAT_MASK, PPCCOM, { BI, BDPA } },
2856     { "bfla", BBO(16,BOF,1,1), BBOAT_MASK, PPCCOM, { BI, BDA } },
2857     { "bbfla", BBO(16,BOF,1,1), BBOAT_MASK, PWRCOM, { BI, BDA } },
2858     { "bdzt-", BBO(16,BODZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
2859     { "bdzt+", BBO(16,BODZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
2860     { "bdzt", BBO(16,BODZT,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
2861     { "bdztl-", BBO(16,BODZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
2862     { "bdztl+", BBO(16,BODZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
2863     { "bdztl", BBO(16,BODZT,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
2864     { "bdzta-", BBO(16,BODZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
2865     { "bdzta+", BBO(16,BODZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
2866     { "bdzta", BBO(16,BODZT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
2867     { "bdztla-", BBO(16,BODZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
2868     { "bdztla+", BBO(16,BODZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
2869     { "bdztla", BBO(16,BODZT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
2870     { "bdzf-", BBO(16,BODZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
2871     { "bdzf+", BBO(16,BODZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
2872     { "bdzf", BBO(16,BODZF,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
2873     { "bdzfl-", BBO(16,BODZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
2874     { "bdzfl+", BBO(16,BODZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
2875     { "bdzfl", BBO(16,BODZF,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
2876     { "bdzfa-", BBO(16,BODZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
2877     { "bdzfa+", BBO(16,BODZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
2878     { "bdzfa", BBO(16,BODZF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
2879     { "bdzfla-", BBO(16,BODZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
2880     { "bdzfla+", BBO(16,BODZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
2881     { "bdzfla", BBO(16,BODZF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
2882     { "bc-", B(16,0,0), B_MASK, PPCCOM, { BOE, BI, BDM } },
2883     { "bc+", B(16,0,0), B_MASK, PPCCOM, { BOE, BI, BDP } },
2884     { "bc", B(16,0,0), B_MASK, COM, { BO, BI, BD } },
2885     { "bcl-", B(16,0,1), B_MASK, PPCCOM, { BOE, BI, BDM } },
2886     { "bcl+", B(16,0,1), B_MASK, PPCCOM, { BOE, BI, BDP } },
2887     { "bcl", B(16,0,1), B_MASK, COM, { BO, BI, BD } },
2888     { "bca-", B(16,1,0), B_MASK, PPCCOM, { BOE, BI, BDMA } },
2889     { "bca+", B(16,1,0), B_MASK, PPCCOM, { BOE, BI, BDPA } },
2890     { "bca", B(16,1,0), B_MASK, COM, { BO, BI, BDA } },
2891     { "bcla-", B(16,1,1), B_MASK, PPCCOM, { BOE, BI, BDMA } },
2892     { "bcla+", B(16,1,1), B_MASK, PPCCOM, { BOE, BI, BDPA } },
2893     { "bcla", B(16,1,1), B_MASK, COM, { BO, BI, BDA } },
2894    
2895     { "sc", SC(17,1,0), SC_MASK, PPC, { LEV } },
2896     { "svc", SC(17,0,0), SC_MASK, POWER, { SVC_LEV, FL1, FL2 } },
2897     { "svcl", SC(17,0,1), SC_MASK, POWER, { SVC_LEV, FL1, FL2 } },
2898     { "svca", SC(17,1,0), SC_MASK, PWRCOM, { SV } },
2899     { "svcla", SC(17,1,1), SC_MASK, POWER, { SV } },
2900    
2901     { "b", B(18,0,0), B_MASK, COM, { LI } },
2902     { "bl", B(18,0,1), B_MASK, COM, { LI } },
2903     { "ba", B(18,1,0), B_MASK, COM, { LIA } },
2904     { "bla", B(18,1,1), B_MASK, COM, { LIA } },
2905    
2906     { "mcrf", XL(19,0), XLBB_MASK|(3 << 21)|(3 << 16), COM, { BF, BFA } },
2907    
2908     { "blr", XLO(19,BOU,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
2909     { "br", XLO(19,BOU,16,0), XLBOBIBB_MASK, PWRCOM, { 0 } },
2910     { "blrl", XLO(19,BOU,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
2911     { "brl", XLO(19,BOU,16,1), XLBOBIBB_MASK, PWRCOM, { 0 } },
2912     { "bdnzlr", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
2913     { "bdnzlr-", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
2914     { "bdnzlr-", XLO(19,BODNZM4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
2915     { "bdnzlr+", XLO(19,BODNZP,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
2916     { "bdnzlr+", XLO(19,BODNZP4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
2917     { "bdnzlrl", XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
2918     { "bdnzlrl-",XLO(19,BODNZ,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
2919     { "bdnzlrl-",XLO(19,BODNZM4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
2920     { "bdnzlrl+",XLO(19,BODNZP,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
2921     { "bdnzlrl+",XLO(19,BODNZP4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
2922     { "bdzlr", XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
2923     { "bdzlr-", XLO(19,BODZ,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
2924     { "bdzlr-", XLO(19,BODZM4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
2925     { "bdzlr+", XLO(19,BODZP,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
2926     { "bdzlr+", XLO(19,BODZP4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
2927     { "bdzlrl", XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
2928     { "bdzlrl-", XLO(19,BODZ,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
2929     { "bdzlrl-", XLO(19,BODZM4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
2930     { "bdzlrl+", XLO(19,BODZP,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
2931     { "bdzlrl+", XLO(19,BODZP4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
2932     { "bltlr", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
2933     { "bltlr-", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
2934     { "bltlr-", XLOCB(19,BOTM4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
2935     { "bltlr+", XLOCB(19,BOTP,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
2936     { "bltlr+", XLOCB(19,BOTP4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
2937     { "bltr", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
2938     { "bltlrl", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
2939     { "bltlrl-", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
2940     { "bltlrl-", XLOCB(19,BOTM4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
2941     { "bltlrl+", XLOCB(19,BOTP,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
2942     { "bltlrl+", XLOCB(19,BOTP4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
2943     { "bltrl", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
2944     { "bgtlr", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
2945     { "bgtlr-", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
2946     { "bgtlr-", XLOCB(19,BOTM4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
2947     { "bgtlr+", XLOCB(19,BOTP,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
2948     { "bgtlr+", XLOCB(19,BOTP4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
2949     { "bgtr", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
2950     { "bgtlrl", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
2951     { "bgtlrl-", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
2952     { "bgtlrl-", XLOCB(19,BOTM4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
2953     { "bgtlrl+", XLOCB(19,BOTP,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
2954     { "bgtlrl+", XLOCB(19,BOTP4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
2955     { "bgtrl", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
2956     { "beqlr", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
2957     { "beqlr-", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
2958     { "beqlr-", XLOCB(19,BOTM4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
2959     { "beqlr+", XLOCB(19,BOTP,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
2960     { "beqlr+", XLOCB(19,BOTP4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
2961     { "beqr", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
2962     { "beqlrl", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
2963     { "beqlrl-", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
2964     { "beqlrl-", XLOCB(19,BOTM4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
2965     { "beqlrl+", XLOCB(19,BOTP,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
2966     { "beqlrl+", XLOCB(19,BOTP4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
2967     { "beqrl", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
2968     { "bsolr", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
2969     { "bsolr-", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
2970     { "bsolr-", XLOCB(19,BOTM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
2971     { "bsolr+", XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
2972     { "bsolr+", XLOCB(19,BOTP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
2973     { "bsor", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
2974     { "bsolrl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
2975     { "bsolrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
2976     { "bsolrl-", XLOCB(19,BOTM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
2977     { "bsolrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
2978     { "bsolrl+", XLOCB(19,BOTP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
2979     { "bsorl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
2980     { "bunlr", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
2981     { "bunlr-", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
2982     { "bunlr-", XLOCB(19,BOTM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
2983     { "bunlr+", XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
2984     { "bunlr+", XLOCB(19,BOTP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
2985     { "bunlrl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
2986     { "bunlrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
2987     { "bunlrl-", XLOCB(19,BOTM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
2988     { "bunlrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
2989     { "bunlrl+", XLOCB(19,BOTP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
2990     { "bgelr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
2991     { "bgelr-", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
2992     { "bgelr-", XLOCB(19,BOFM4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
2993     { "bgelr+", XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
2994     { "bgelr+", XLOCB(19,BOFP4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
2995     { "bger", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
2996     { "bgelrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
2997     { "bgelrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
2998     { "bgelrl-", XLOCB(19,BOFM4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
2999     { "bgelrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3000     { "bgelrl+", XLOCB(19,BOFP4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
3001     { "bgerl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
3002     { "bnllr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3003     { "bnllr-", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3004     { "bnllr-", XLOCB(19,BOFM4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
3005     { "bnllr+", XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3006     { "bnllr+", XLOCB(19,BOFP4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
3007     { "bnlr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
3008     { "bnllrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3009     { "bnllrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3010     { "bnllrl-", XLOCB(19,BOFM4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
3011     { "bnllrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3012     { "bnllrl+", XLOCB(19,BOFP4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
3013     { "bnlrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
3014     { "blelr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3015     { "blelr-", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3016     { "blelr-", XLOCB(19,BOFM4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
3017     { "blelr+", XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3018     { "blelr+", XLOCB(19,BOFP4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
3019     { "bler", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
3020     { "blelrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3021     { "blelrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3022     { "blelrl-", XLOCB(19,BOFM4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
3023     { "blelrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3024     { "blelrl+", XLOCB(19,BOFP4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
3025     { "blerl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
3026     { "bnglr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3027     { "bnglr-", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3028     { "bnglr-", XLOCB(19,BOFM4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
3029     { "bnglr+", XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3030     { "bnglr+", XLOCB(19,BOFP4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
3031     { "bngr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
3032     { "bnglrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3033     { "bnglrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3034     { "bnglrl-", XLOCB(19,BOFM4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
3035     { "bnglrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3036     { "bnglrl+", XLOCB(19,BOFP4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
3037     { "bngrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
3038     { "bnelr", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3039     { "bnelr-", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3040     { "bnelr-", XLOCB(19,BOFM4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
3041     { "bnelr+", XLOCB(19,BOFP,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3042     { "bnelr+", XLOCB(19,BOFP4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
3043     { "bner", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
3044     { "bnelrl", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3045     { "bnelrl-", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3046     { "bnelrl-", XLOCB(19,BOFM4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
3047     { "bnelrl+", XLOCB(19,BOFP,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3048     { "bnelrl+", XLOCB(19,BOFP4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
3049     { "bnerl", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
3050     { "bnslr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3051     { "bnslr-", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3052     { "bnslr-", XLOCB(19,BOFM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
3053     { "bnslr+", XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3054     { "bnslr+", XLOCB(19,BOFP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
3055     { "bnsr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
3056     { "bnslrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3057     { "bnslrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3058     { "bnslrl-", XLOCB(19,BOFM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
3059     { "bnslrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3060     { "bnslrl+", XLOCB(19,BOFP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
3061     { "bnsrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
3062     { "bnulr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3063     { "bnulr-", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3064     { "bnulr-", XLOCB(19,BOFM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
3065     { "bnulr+", XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3066     { "bnulr+", XLOCB(19,BOFP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
3067     { "bnulrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3068     { "bnulrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3069     { "bnulrl-", XLOCB(19,BOFM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
3070     { "bnulrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3071     { "bnulrl+", XLOCB(19,BOFP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
3072     { "btlr", XLO(19,BOT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
3073     { "btlr-", XLO(19,BOT,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
3074     { "btlr-", XLO(19,BOTM4,16,0), XLBOBB_MASK, POWER4, { BI } },
3075     { "btlr+", XLO(19,BOTP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
3076     { "btlr+", XLO(19,BOTP4,16,0), XLBOBB_MASK, POWER4, { BI } },
3077     { "bbtr", XLO(19,BOT,16,0), XLBOBB_MASK, PWRCOM, { BI } },
3078     { "btlrl", XLO(19,BOT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
3079     { "btlrl-", XLO(19,BOT,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
3080     { "btlrl-", XLO(19,BOTM4,16,1), XLBOBB_MASK, POWER4, { BI } },
3081     { "btlrl+", XLO(19,BOTP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
3082     { "btlrl+", XLO(19,BOTP4,16,1), XLBOBB_MASK, POWER4, { BI } },
3083     { "bbtrl", XLO(19,BOT,16,1), XLBOBB_MASK, PWRCOM, { BI } },
3084     { "bflr", XLO(19,BOF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
3085     { "bflr-", XLO(19,BOF,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
3086     { "bflr-", XLO(19,BOFM4,16,0), XLBOBB_MASK, POWER4, { BI } },
3087     { "bflr+", XLO(19,BOFP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
3088     { "bflr+", XLO(19,BOFP4,16,0), XLBOBB_MASK, POWER4, { BI } },
3089     { "bbfr", XLO(19,BOF,16,0), XLBOBB_MASK, PWRCOM, { BI } },
3090     { "bflrl", XLO(19,BOF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
3091     { "bflrl-", XLO(19,BOF,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
3092     { "bflrl-", XLO(19,BOFM4,16,1), XLBOBB_MASK, POWER4, { BI } },
3093     { "bflrl+", XLO(19,BOFP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
3094     { "bflrl+", XLO(19,BOFP4,16,1), XLBOBB_MASK, POWER4, { BI } },
3095     { "bbfrl", XLO(19,BOF,16,1), XLBOBB_MASK, PWRCOM, { BI } },
3096     { "bdnztlr", XLO(19,BODNZT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
3097     { "bdnztlr-",XLO(19,BODNZT,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
3098     { "bdnztlr+",XLO(19,BODNZTP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
3099     { "bdnztlrl",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
3100     { "bdnztlrl-",XLO(19,BODNZT,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
3101     { "bdnztlrl+",XLO(19,BODNZTP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
3102     { "bdnzflr", XLO(19,BODNZF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
3103     { "bdnzflr-",XLO(19,BODNZF,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
3104     { "bdnzflr+",XLO(19,BODNZFP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
3105     { "bdnzflrl",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
3106     { "bdnzflrl-",XLO(19,BODNZF,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
3107     { "bdnzflrl+",XLO(19,BODNZFP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
3108     { "bdztlr", XLO(19,BODZT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
3109     { "bdztlr-", XLO(19,BODZT,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
3110     { "bdztlr+", XLO(19,BODZTP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
3111     { "bdztlrl", XLO(19,BODZT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
3112     { "bdztlrl-",XLO(19,BODZT,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
3113     { "bdztlrl+",XLO(19,BODZTP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
3114     { "bdzflr", XLO(19,BODZF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
3115     { "bdzflr-", XLO(19,BODZF,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
3116     { "bdzflr+", XLO(19,BODZFP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
3117     { "bdzflrl", XLO(19,BODZF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
3118     { "bdzflrl-",XLO(19,BODZF,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
3119     { "bdzflrl+",XLO(19,BODZFP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
3120     { "bclr+", XLYLK(19,16,1,0), XLYBB_MASK, PPCCOM, { BOE, BI } },
3121     { "bclrl+", XLYLK(19,16,1,1), XLYBB_MASK, PPCCOM, { BOE, BI } },
3122     { "bclr-", XLYLK(19,16,0,0), XLYBB_MASK, PPCCOM, { BOE, BI } },
3123     { "bclrl-", XLYLK(19,16,0,1), XLYBB_MASK, PPCCOM, { BOE, BI } },
3124     { "bclr", XLLK(19,16,0), XLBH_MASK, PPCCOM, { BO, BI, BH } },
3125     { "bclrl", XLLK(19,16,1), XLBH_MASK, PPCCOM, { BO, BI, BH } },
3126     { "bcr", XLLK(19,16,0), XLBB_MASK, PWRCOM, { BO, BI } },
3127     { "bcrl", XLLK(19,16,1), XLBB_MASK, PWRCOM, { BO, BI } },
3128     { "bclre", XLLK(19,17,0), XLBB_MASK, BOOKE64, { BO, BI } },
3129     { "bclrel", XLLK(19,17,1), XLBB_MASK, BOOKE64, { BO, BI } },
3130    
3131     { "rfid", XL(19,18), 0xffffffff, PPC64, { 0 } },
3132    
3133     { "crnot", XL(19,33), XL_MASK, PPCCOM, { BT, BA, BBA } },
3134     { "crnor", XL(19,33), XL_MASK, COM, { BT, BA, BB } },
3135     { "rfmci", X(19,38), 0xffffffff, PPCRFMCI, { 0 } },
3136    
3137     { "rfi", XL(19,50), 0xffffffff, COM, { 0 } },
3138     { "rfci", XL(19,51), 0xffffffff, PPC403 | BOOKE, { 0 } },
3139    
3140     { "rfsvc", XL(19,82), 0xffffffff, POWER, { 0 } },
3141    
3142     { "crandc", XL(19,129), XL_MASK, COM, { BT, BA, BB } },
3143    
3144     { "isync", XL(19,150), 0xffffffff, PPCCOM, { 0 } },
3145     { "ics", XL(19,150), 0xffffffff, PWRCOM, { 0 } },
3146    
3147     { "crclr", XL(19,193), XL_MASK, PPCCOM, { BT, BAT, BBA } },
3148     { "crxor", XL(19,193), XL_MASK, COM, { BT, BA, BB } },
3149    
3150     { "crnand", XL(19,225), XL_MASK, COM, { BT, BA, BB } },
3151    
3152     { "crand", XL(19,257), XL_MASK, COM, { BT, BA, BB } },
3153    
3154     { "hrfid", XL(19,274), 0xffffffff, POWER5 | CELL, { 0 } },
3155    
3156     { "crset", XL(19,289), XL_MASK, PPCCOM, { BT, BAT, BBA } },
3157     { "creqv", XL(19,289), XL_MASK, COM, { BT, BA, BB } },
3158    
3159     { "doze", XL(19,402), 0xffffffff, POWER6, { 0 } },
3160    
3161     { "crorc", XL(19,417), XL_MASK, COM, { BT, BA, BB } },
3162    
3163     { "nap", XL(19,434), 0xffffffff, POWER6, { 0 } },
3164    
3165     { "crmove", XL(19,449), XL_MASK, PPCCOM, { BT, BA, BBA } },
3166     { "cror", XL(19,449), XL_MASK, COM, { BT, BA, BB } },
3167    
3168     { "sleep", XL(19,466), 0xffffffff, POWER6, { 0 } },
3169     { "rvwinkle", XL(19,498), 0xffffffff, POWER6, { 0 } },
3170    
3171     { "bctr", XLO(19,BOU,528,0), XLBOBIBB_MASK, COM, { 0 } },
3172     { "bctrl", XLO(19,BOU,528,1), XLBOBIBB_MASK, COM, { 0 } },
3173     { "bltctr", XLOCB(19,BOT,CBLT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3174     { "bltctr-", XLOCB(19,BOT,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3175     { "bltctr-", XLOCB(19,BOTM4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3176     { "bltctr+", XLOCB(19,BOTP,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3177     { "bltctr+", XLOCB(19,BOTP4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3178     { "bltctrl", XLOCB(19,BOT,CBLT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3179     { "bltctrl-",XLOCB(19,BOT,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3180     { "bltctrl-",XLOCB(19,BOTM4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3181     { "bltctrl+",XLOCB(19,BOTP,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3182     { "bltctrl+",XLOCB(19,BOTP4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3183     { "bgtctr", XLOCB(19,BOT,CBGT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3184     { "bgtctr-", XLOCB(19,BOT,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3185     { "bgtctr-", XLOCB(19,BOTM4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3186     { "bgtctr+", XLOCB(19,BOTP,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3187     { "bgtctr+", XLOCB(19,BOTP4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3188     { "bgtctrl", XLOCB(19,BOT,CBGT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3189     { "bgtctrl-",XLOCB(19,BOT,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3190     { "bgtctrl-",XLOCB(19,BOTM4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3191     { "bgtctrl+",XLOCB(19,BOTP,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3192     { "bgtctrl+",XLOCB(19,BOTP4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3193     { "beqctr", XLOCB(19,BOT,CBEQ,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3194     { "beqctr-", XLOCB(19,BOT,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3195     { "beqctr-", XLOCB(19,BOTM4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3196     { "beqctr+", XLOCB(19,BOTP,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3197     { "beqctr+", XLOCB(19,BOTP4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3198     { "beqctrl", XLOCB(19,BOT,CBEQ,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3199     { "beqctrl-",XLOCB(19,BOT,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3200     { "beqctrl-",XLOCB(19,BOTM4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3201     { "beqctrl+",XLOCB(19,BOTP,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3202     { "beqctrl+",XLOCB(19,BOTP4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3203     { "bsoctr", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3204     { "bsoctr-", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3205     { "bsoctr-", XLOCB(19,BOTM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3206     { "bsoctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3207     { "bsoctr+", XLOCB(19,BOTP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3208     { "bsoctrl", XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3209     { "bsoctrl-",XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3210     { "bsoctrl-",XLOCB(19,BOTM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3211     { "bsoctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3212     { "bsoctrl+",XLOCB(19,BOTP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3213     { "bunctr", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3214     { "bunctr-", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3215     { "bunctr-", XLOCB(19,BOTM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3216     { "bunctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3217     { "bunctr+", XLOCB(19,BOTP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3218     { "bunctrl", XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3219     { "bunctrl-",XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3220     { "bunctrl-",XLOCB(19,BOTM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3221     { "bunctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3222     { "bunctrl+",XLOCB(19,BOTP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3223     { "bgectr", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3224     { "bgectr-", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3225     { "bgectr-", XLOCB(19,BOFM4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3226     { "bgectr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3227     { "bgectr+", XLOCB(19,BOFP4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3228     { "bgectrl", XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3229     { "bgectrl-",XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3230     { "bgectrl-",XLOCB(19,BOFM4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3231     { "bgectrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3232     { "bgectrl+",XLOCB(19,BOFP4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3233     { "bnlctr", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3234     { "bnlctr-", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3235     { "bnlctr-", XLOCB(19,BOFM4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3236     { "bnlctr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3237     { "bnlctr+", XLOCB(19,BOFP4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3238     { "bnlctrl", XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3239     { "bnlctrl-",XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3240     { "bnlctrl-",XLOCB(19,BOFM4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3241     { "bnlctrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3242     { "bnlctrl+",XLOCB(19,BOFP4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3243     { "blectr", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3244     { "blectr-", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3245     { "blectr-", XLOCB(19,BOFM4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3246     { "blectr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3247     { "blectr+", XLOCB(19,BOFP4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3248     { "blectrl", XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3249     { "blectrl-",XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3250     { "blectrl-",XLOCB(19,BOFM4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3251     { "blectrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3252     { "blectrl+",XLOCB(19,BOFP4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3253     { "bngctr", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3254     { "bngctr-", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3255     { "bngctr-", XLOCB(19,BOFM4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3256     { "bngctr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3257     { "bngctr+", XLOCB(19,BOFP4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3258     { "bngctrl", XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3259     { "bngctrl-",XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3260     { "bngctrl-",XLOCB(19,BOFM4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3261     { "bngctrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3262     { "bngctrl+",XLOCB(19,BOFP4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3263     { "bnectr", XLOCB(19,BOF,CBEQ,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3264     { "bnectr-", XLOCB(19,BOF,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3265     { "bnectr-", XLOCB(19,BOFM4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3266     { "bnectr+", XLOCB(19,BOFP,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3267     { "bnectr+", XLOCB(19,BOFP4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3268     { "bnectrl", XLOCB(19,BOF,CBEQ,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3269     { "bnectrl-",XLOCB(19,BOF,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3270     { "bnectrl-",XLOCB(19,BOFM4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3271     { "bnectrl+",XLOCB(19,BOFP,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3272     { "bnectrl+",XLOCB(19,BOFP4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3273     { "bnsctr", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3274     { "bnsctr-", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3275     { "bnsctr-", XLOCB(19,BOFM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3276     { "bnsctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3277     { "bnsctr+", XLOCB(19,BOFP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3278     { "bnsctrl", XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3279     { "bnsctrl-",XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3280     { "bnsctrl-",XLOCB(19,BOFM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3281     { "bnsctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3282     { "bnsctrl+",XLOCB(19,BOFP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3283     { "bnuctr", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
3284     { "bnuctr-", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3285     { "bnuctr-", XLOCB(19,BOFM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3286     { "bnuctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
3287     { "bnuctr+", XLOCB(19,BOFP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
3288     { "bnuctrl", XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
3289     { "bnuctrl-",XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3290     { "bnuctrl-",XLOCB(19,BOFM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3291     { "bnuctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
3292     { "bnuctrl+",XLOCB(19,BOFP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
3293     { "btctr", XLO(19,BOT,528,0), XLBOBB_MASK, PPCCOM, { BI } },
3294     { "btctr-", XLO(19,BOT,528,0), XLBOBB_MASK, NOPOWER4, { BI } },
3295     { "btctr-", XLO(19,BOTM4,528,0), XLBOBB_MASK, POWER4, { BI } },
3296     { "btctr+", XLO(19,BOTP,528,0), XLBOBB_MASK, NOPOWER4, { BI } },
3297     { "btctr+", XLO(19,BOTP4,528,0), XLBOBB_MASK, POWER4, { BI } },
3298     { "btctrl", XLO(19,BOT,528,1), XLBOBB_MASK, PPCCOM, { BI } },
3299     { "btctrl-", XLO(19,BOT,528,1), XLBOBB_MASK, NOPOWER4, { BI } },
3300     { "btctrl-", XLO(19,BOTM4,528,1), XLBOBB_MASK, POWER4, { BI } },
3301     { "btctrl+", XLO(19,BOTP,528,1), XLBOBB_MASK, NOPOWER4, { BI } },
3302     { "btctrl+", XLO(19,BOTP4,528,1), XLBOBB_MASK, POWER4, { BI } },
3303     { "bfctr", XLO(19,BOF,528,0), XLBOBB_MASK, PPCCOM, { BI } },
3304     { "bfctr-", XLO(19,BOF,528,0), XLBOBB_MASK, NOPOWER4, { BI } },
3305     { "bfctr-", XLO(19,BOFM4,528,0), XLBOBB_MASK, POWER4, { BI } },
3306     { "bfctr+", XLO(19,BOFP,528,0), XLBOBB_MASK, NOPOWER4, { BI } },
3307     { "bfctr+", XLO(19,BOFP4,528,0), XLBOBB_MASK, POWER4, { BI } },
3308     { "bfctrl", XLO(19,BOF,528,1), XLBOBB_MASK, PPCCOM, { BI } },
3309     { "bfctrl-", XLO(19,BOF,528,1), XLBOBB_MASK, NOPOWER4, { BI } },
3310     { "bfctrl-", XLO(19,BOFM4,528,1), XLBOBB_MASK, POWER4, { BI } },
3311     { "bfctrl+", XLO(19,BOFP,528,1), XLBOBB_MASK, NOPOWER4, { BI } },
3312     { "bfctrl+", XLO(19,BOFP4,528,1), XLBOBB_MASK, POWER4, { BI } },
3313     { "bcctr-", XLYLK(19,528,0,0), XLYBB_MASK, PPCCOM, { BOE, BI } },
3314     { "bcctr+", XLYLK(19,528,1,0), XLYBB_MASK, PPCCOM, { BOE, BI } },
3315     { "bcctrl-", XLYLK(19,528,0,1), XLYBB_MASK, PPCCOM, { BOE, BI } },
3316     { "bcctrl+", XLYLK(19,528,1,1), XLYBB_MASK, PPCCOM, { BOE, BI } },
3317     { "bcctr", XLLK(19,528,0), XLBH_MASK, PPCCOM, { BO, BI, BH } },
3318     { "bcctrl", XLLK(19,528,1), XLBH_MASK, PPCCOM, { BO, BI, BH } },
3319     { "bcc", XLLK(19,528,0), XLBB_MASK, PWRCOM, { BO, BI } },
3320     { "bccl", XLLK(19,528,1), XLBB_MASK, PWRCOM, { BO, BI } },
3321     { "bcctre", XLLK(19,529,0), XLBB_MASK, BOOKE64, { BO, BI } },
3322     { "bcctrel", XLLK(19,529,1), XLBB_MASK, BOOKE64, { BO, BI } },
3323    
3324     { "rlwimi", M(20,0), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
3325     { "rlimi", M(20,0), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
3326    
3327     { "rlwimi.", M(20,1), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
3328     { "rlimi.", M(20,1), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
3329    
3330     { "rotlwi", MME(21,31,0), MMBME_MASK, PPCCOM, { RA, RS, SH } },
3331     { "clrlwi", MME(21,31,0), MSHME_MASK, PPCCOM, { RA, RS, MB } },
3332     { "rlwinm", M(21,0), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
3333     { "rlinm", M(21,0), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
3334     { "rotlwi.", MME(21,31,1), MMBME_MASK, PPCCOM, { RA,RS,SH } },
3335     { "clrlwi.", MME(21,31,1), MSHME_MASK, PPCCOM, { RA, RS, MB } },
3336     { "rlwinm.", M(21,1), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
3337     { "rlinm.", M(21,1), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
3338    
3339     { "rlmi", M(22,0), M_MASK, M601, { RA,RS,RB,MBE,ME } },
3340     { "rlmi.", M(22,1), M_MASK, M601, { RA,RS,RB,MBE,ME } },
3341    
3342     { "be", B(22,0,0), B_MASK, BOOKE64, { LI } },
3343     { "bel", B(22,0,1), B_MASK, BOOKE64, { LI } },
3344     { "bea", B(22,1,0), B_MASK, BOOKE64, { LIA } },
3345     { "bela", B(22,1,1), B_MASK, BOOKE64, { LIA } },
3346    
3347     { "rotlw", MME(23,31,0), MMBME_MASK, PPCCOM, { RA, RS, RB } },
3348     { "rlwnm", M(23,0), M_MASK, PPCCOM, { RA,RS,RB,MBE,ME } },
3349     { "rlnm", M(23,0), M_MASK, PWRCOM, { RA,RS,RB,MBE,ME } },
3350     { "rotlw.", MME(23,31,1), MMBME_MASK, PPCCOM, { RA, RS, RB } },
3351     { "rlwnm.", M(23,1), M_MASK, PPCCOM, { RA,RS,RB,MBE,ME } },
3352     { "rlnm.", M(23,1), M_MASK, PWRCOM, { RA,RS,RB,MBE,ME } },
3353    
3354     { "nop", OP(24), 0xffffffff, PPCCOM, { 0 } },
3355     { "ori", OP(24), OP_MASK, PPCCOM, { RA, RS, UI } },
3356     { "oril", OP(24), OP_MASK, PWRCOM, { RA, RS, UI } },
3357    
3358     { "oris", OP(25), OP_MASK, PPCCOM, { RA, RS, UI } },
3359     { "oriu", OP(25), OP_MASK, PWRCOM, { RA, RS, UI } },
3360    
3361     { "xori", OP(26), OP_MASK, PPCCOM, { RA, RS, UI } },
3362     { "xoril", OP(26), OP_MASK, PWRCOM, { RA, RS, UI } },
3363    
3364     { "xoris", OP(27), OP_MASK, PPCCOM, { RA, RS, UI } },
3365     { "xoriu", OP(27), OP_MASK, PWRCOM, { RA, RS, UI } },
3366    
3367     { "andi.", OP(28), OP_MASK, PPCCOM, { RA, RS, UI } },
3368     { "andil.", OP(28), OP_MASK, PWRCOM, { RA, RS, UI } },
3369    
3370     { "andis.", OP(29), OP_MASK, PPCCOM, { RA, RS, UI } },
3371     { "andiu.", OP(29), OP_MASK, PWRCOM, { RA, RS, UI } },
3372    
3373     { "rotldi", MD(30,0,0), MDMB_MASK, PPC64, { RA, RS, SH6 } },
3374     { "clrldi", MD(30,0,0), MDSH_MASK, PPC64, { RA, RS, MB6 } },
3375     { "rldicl", MD(30,0,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
3376     { "rotldi.", MD(30,0,1), MDMB_MASK, PPC64, { RA, RS, SH6 } },
3377     { "clrldi.", MD(30,0,1), MDSH_MASK, PPC64, { RA, RS, MB6 } },
3378     { "rldicl.", MD(30,0,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
3379    
3380     { "rldicr", MD(30,1,0), MD_MASK, PPC64, { RA, RS, SH6, ME6 } },
3381     { "rldicr.", MD(30,1,1), MD_MASK, PPC64, { RA, RS, SH6, ME6 } },
3382    
3383     { "rldic", MD(30,2,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
3384     { "rldic.", MD(30,2,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
3385    
3386     { "rldimi", MD(30,3,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
3387     { "rldimi.", MD(30,3,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
3388    
3389     { "rotld", MDS(30,8,0), MDSMB_MASK, PPC64, { RA, RS, RB } },
3390     { "rldcl", MDS(30,8,0), MDS_MASK, PPC64, { RA, RS, RB, MB6 } },
3391     { "rotld.", MDS(30,8,1), MDSMB_MASK, PPC64, { RA, RS, RB } },
3392     { "rldcl.", MDS(30,8,1), MDS_MASK, PPC64, { RA, RS, RB, MB6 } },
3393    
3394     { "rldcr", MDS(30,9,0), MDS_MASK, PPC64, { RA, RS, RB, ME6 } },
3395     { "rldcr.", MDS(30,9,1), MDS_MASK, PPC64, { RA, RS, RB, ME6 } },
3396    
3397     { "cmpw", XOPL(31,0,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } },
3398     { "cmpd", XOPL(31,0,1), XCMPL_MASK, PPC64, { OBF, RA, RB } },
3399     { "cmp", X(31,0), XCMP_MASK, PPC, { BF, L, RA, RB } },
3400     { "cmp", X(31,0), XCMPL_MASK, PWRCOM, { BF, RA, RB } },
3401    
3402     { "twlgt", XTO(31,4,TOLGT), XTO_MASK, PPCCOM, { RA, RB } },
3403     { "tlgt", XTO(31,4,TOLGT), XTO_MASK, PWRCOM, { RA, RB } },
3404     { "twllt", XTO(31,4,TOLLT), XTO_MASK, PPCCOM, { RA, RB } },
3405     { "tllt", XTO(31,4,TOLLT), XTO_MASK, PWRCOM, { RA, RB } },
3406     { "tweq", XTO(31,4,TOEQ), XTO_MASK, PPCCOM, { RA, RB } },
3407     { "teq", XTO(31,4,TOEQ), XTO_MASK, PWRCOM, { RA, RB } },
3408     { "twlge", XTO(31,4,TOLGE), XTO_MASK, PPCCOM, { RA, RB } },
3409     { "tlge", XTO(31,4,TOLGE), XTO_MASK, PWRCOM, { RA, RB } },
3410     { "twlnl", XTO(31,4,TOLNL), XTO_MASK, PPCCOM, { RA, RB } },
3411     { "tlnl", XTO(31,4,TOLNL), XTO_MASK, PWRCOM, { RA, RB } },
3412     { "twlle", XTO(31,4,TOLLE), XTO_MASK, PPCCOM, { RA, RB } },
3413     { "tlle", XTO(31,4,TOLLE), XTO_MASK, PWRCOM, { RA, RB } },
3414     { "twlng", XTO(31,4,TOLNG), XTO_MASK, PPCCOM, { RA, RB } },
3415     { "tlng", XTO(31,4,TOLNG), XTO_MASK, PWRCOM, { RA, RB } },
3416     { "twgt", XTO(31,4,TOGT), XTO_MASK, PPCCOM, { RA, RB } },
3417     { "tgt", XTO(31,4,TOGT), XTO_MASK, PWRCOM, { RA, RB } },
3418     { "twge", XTO(31,4,TOGE), XTO_MASK, PPCCOM, { RA, RB } },
3419     { "tge", XTO(31,4,TOGE), XTO_MASK, PWRCOM, { RA, RB } },
3420     { "twnl", XTO(31,4,TONL), XTO_MASK, PPCCOM, { RA, RB } },
3421     { "tnl", XTO(31,4,TONL), XTO_MASK, PWRCOM, { RA, RB } },
3422     { "twlt", XTO(31,4,TOLT), XTO_MASK, PPCCOM, { RA, RB } },
3423     { "tlt", XTO(31,4,TOLT), XTO_MASK, PWRCOM, { RA, RB } },
3424     { "twle", XTO(31,4,TOLE), XTO_MASK, PPCCOM, { RA, RB } },
3425     { "tle", XTO(31,4,TOLE), XTO_MASK, PWRCOM, { RA, RB } },
3426     { "twng", XTO(31,4,TONG), XTO_MASK, PPCCOM, { RA, RB } },
3427     { "tng", XTO(31,4,TONG), XTO_MASK, PWRCOM, { RA, RB } },
3428     { "twne", XTO(31,4,TONE), XTO_MASK, PPCCOM, { RA, RB } },
3429     { "tne", XTO(31,4,TONE), XTO_MASK, PWRCOM, { RA, RB } },
3430     { "trap", XTO(31,4,TOU), 0xffffffff, PPCCOM, { 0 } },
3431     { "tw", X(31,4), X_MASK, PPCCOM, { TO, RA, RB } },
3432     { "t", X(31,4), X_MASK, PWRCOM, { TO, RA, RB } },
3433    
3434     { "subfc", XO(31,8,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
3435     { "sf", XO(31,8,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
3436     { "subc", XO(31,8,0,0), XO_MASK, PPC, { RT, RB, RA } },
3437     { "subfc.", XO(31,8,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
3438     { "sf.", XO(31,8,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
3439     { "subc.", XO(31,8,0,1), XO_MASK, PPCCOM, { RT, RB, RA } },
3440     { "subfco", XO(31,8,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
3441     { "sfo", XO(31,8,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
3442     { "subco", XO(31,8,1,0), XO_MASK, PPC, { RT, RB, RA } },
3443     { "subfco.", XO(31,8,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
3444     { "sfo.", XO(31,8,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
3445     { "subco.", XO(31,8,1,1), XO_MASK, PPC, { RT, RB, RA } },
3446    
3447     { "mulhdu", XO(31,9,0,0), XO_MASK, PPC64, { RT, RA, RB } },
3448     { "mulhdu.", XO(31,9,0,1), XO_MASK, PPC64, { RT, RA, RB } },
3449    
3450     { "addc", XO(31,10,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
3451     { "a", XO(31,10,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
3452     { "addc.", XO(31,10,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
3453     { "a.", XO(31,10,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
3454     { "addco", XO(31,10,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
3455     { "ao", XO(31,10,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
3456     { "addco.", XO(31,10,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
3457     { "ao.", XO(31,10,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
3458    
3459     { "mulhwu", XO(31,11,0,0), XO_MASK, PPC, { RT, RA, RB } },
3460     { "mulhwu.", XO(31,11,0,1), XO_MASK, PPC, { RT, RA, RB } },
3461    
3462     { "isellt", X(31,15), X_MASK, PPCISEL, { RT, RA, RB } },
3463     { "iselgt", X(31,47), X_MASK, PPCISEL, { RT, RA, RB } },
3464     { "iseleq", X(31,79), X_MASK, PPCISEL, { RT, RA, RB } },
3465     { "isel", XISEL(31,15), XISEL_MASK, PPCISEL, { RT, RA, RB, CRB } },
3466    
3467     { "mfocrf", XFXM(31,19,0,1), XFXFXM_MASK, COM, { RT, FXM } },
3468     { "mfcr", X(31,19), XRARB_MASK, NOPOWER4 | COM, { RT } },
3469     { "mfcr", X(31,19), XFXFXM_MASK, POWER4, { RT, FXM4 } },
3470    
3471     { "lwarx", X(31,20), XEH_MASK, PPC, { RT, RA0, RB, EH } },
3472    
3473     { "ldx", X(31,21), X_MASK, PPC64, { RT, RA0, RB } },
3474    
3475     { "icbt", X(31,22), X_MASK, BOOKE|PPCE300, { CT, RA, RB } },
3476     { "icbt", X(31,262), XRT_MASK, PPC403, { RA, RB } },
3477    
3478     { "lwzx", X(31,23), X_MASK, PPCCOM, { RT, RA0, RB } },
3479     { "lx", X(31,23), X_MASK, PWRCOM, { RT, RA, RB } },
3480    
3481     { "slw", XRC(31,24,0), X_MASK, PPCCOM, { RA, RS, RB } },
3482     { "sl", XRC(31,24,0), X_MASK, PWRCOM, { RA, RS, RB } },
3483     { "slw.", XRC(31,24,1), X_MASK, PPCCOM, { RA, RS, RB } },
3484     { "sl.", XRC(31,24,1), X_MASK, PWRCOM, { RA, RS, RB } },
3485    
3486     { "cntlzw", XRC(31,26,0), XRB_MASK, PPCCOM, { RA, RS } },
3487     { "cntlz", XRC(31,26,0), XRB_MASK, PWRCOM, { RA, RS } },
3488     { "cntlzw.", XRC(31,26,1), XRB_MASK, PPCCOM, { RA, RS } },
3489     { "cntlz.", XRC(31,26,1), XRB_MASK, PWRCOM, { RA, RS } },
3490    
3491     { "sld", XRC(31,27,0), X_MASK, PPC64, { RA, RS, RB } },
3492     { "sld.", XRC(31,27,1), X_MASK, PPC64, { RA, RS, RB } },
3493    
3494     { "and", XRC(31,28,0), X_MASK, COM, { RA, RS, RB } },
3495     { "and.", XRC(31,28,1), X_MASK, COM, { RA, RS, RB } },
3496    
3497     { "maskg", XRC(31,29,0), X_MASK, M601, { RA, RS, RB } },
3498     { "maskg.", XRC(31,29,1), X_MASK, M601, { RA, RS, RB } },
3499    
3500     { "icbte", X(31,30), X_MASK, BOOKE64, { CT, RA, RB } },
3501    
3502     { "lwzxe", X(31,31), X_MASK, BOOKE64, { RT, RA0, RB } },
3503    
3504     { "cmplw", XOPL(31,32,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } },
3505     { "cmpld", XOPL(31,32,1), XCMPL_MASK, PPC64, { OBF, RA, RB } },
3506     { "cmpl", X(31,32), XCMP_MASK, PPC, { BF, L, RA, RB } },
3507     { "cmpl", X(31,32), XCMPL_MASK, PWRCOM, { BF, RA, RB } },
3508    
3509     { "subf", XO(31,40,0,0), XO_MASK, PPC, { RT, RA, RB } },
3510     { "sub", XO(31,40,0,0), XO_MASK, PPC, { RT, RB, RA } },
3511     { "subf.", XO(31,40,0,1), XO_MASK, PPC, { RT, RA, RB } },
3512     { "sub.", XO(31,40,0,1), XO_MASK, PPC, { RT, RB, RA } },
3513     { "subfo", XO(31,40,1,0), XO_MASK, PPC, { RT, RA, RB } },
3514     { "subo", XO(31,40,1,0), XO_MASK, PPC, { RT, RB, RA } },
3515     { "subfo.", XO(31,40,1,1), XO_MASK, PPC, { RT, RA, RB } },
3516     { "subo.", XO(31,40,1,1), XO_MASK, PPC, { RT, RB, RA } },
3517    
3518     { "ldux", X(31,53), X_MASK, PPC64, { RT, RAL, RB } },
3519    
3520     { "dcbst", X(31,54), XRT_MASK, PPC, { RA, RB } },
3521    
3522     { "lwzux", X(31,55), X_MASK, PPCCOM, { RT, RAL, RB } },
3523     { "lux", X(31,55), X_MASK, PWRCOM, { RT, RA, RB } },
3524    
3525     { "dcbste", X(31,62), XRT_MASK, BOOKE64, { RA, RB } },
3526    
3527     { "lwzuxe", X(31,63), X_MASK, BOOKE64, { RT, RAL, RB } },
3528    
3529     { "cntlzd", XRC(31,58,0), XRB_MASK, PPC64, { RA, RS } },
3530     { "cntlzd.", XRC(31,58,1), XRB_MASK, PPC64, { RA, RS } },
3531    
3532     { "andc", XRC(31,60,0), X_MASK, COM, { RA, RS, RB } },
3533     { "andc.", XRC(31,60,1), X_MASK, COM, { RA, RS, RB } },
3534    
3535     { "tdlgt", XTO(31,68,TOLGT), XTO_MASK, PPC64, { RA, RB } },
3536     { "tdllt", XTO(31,68,TOLLT), XTO_MASK, PPC64, { RA, RB } },
3537     { "tdeq", XTO(31,68,TOEQ), XTO_MASK, PPC64, { RA, RB } },
3538     { "tdlge", XTO(31,68,TOLGE), XTO_MASK, PPC64, { RA, RB } },
3539     { "tdlnl", XTO(31,68,TOLNL), XTO_MASK, PPC64, { RA, RB } },
3540     { "tdlle", XTO(31,68,TOLLE), XTO_MASK, PPC64, { RA, RB } },
3541     { "tdlng", XTO(31,68,TOLNG), XTO_MASK, PPC64, { RA, RB } },
3542     { "tdgt", XTO(31,68,TOGT), XTO_MASK, PPC64, { RA, RB } },
3543     { "tdge", XTO(31,68,TOGE), XTO_MASK, PPC64, { RA, RB } },
3544     { "tdnl", XTO(31,68,TONL), XTO_MASK, PPC64, { RA, RB } },
3545     { "tdlt", XTO(31,68,TOLT), XTO_MASK, PPC64, { RA, RB } },
3546     { "tdle", XTO(31,68,TOLE), XTO_MASK, PPC64, { RA, RB } },
3547     { "tdng", XTO(31,68,TONG), XTO_MASK, PPC64, { RA, RB } },
3548     { "tdne", XTO(31,68,TONE), XTO_MASK, PPC64, { RA, RB } },
3549     { "td", X(31,68), X_MASK, PPC64, { TO, RA, RB } },
3550    
3551     { "mulhd", XO(31,73,0,0), XO_MASK, PPC64, { RT, RA, RB } },
3552     { "mulhd.", XO(31,73,0,1), XO_MASK, PPC64, { RT, RA, RB } },
3553    
3554     { "mulhw", XO(31,75,0,0), XO_MASK, PPC, { RT, RA, RB } },
3555     { "mulhw.", XO(31,75,0,1), XO_MASK, PPC, { RT, RA, RB } },
3556    
3557     { "dlmzb", XRC(31,78,0), X_MASK, PPC403|PPC440, { RA, RS, RB } },
3558     { "dlmzb.", XRC(31,78,1), X_MASK, PPC403|PPC440, { RA, RS, RB } },
3559    
3560     { "mtsrd", X(31,82), XRB_MASK|(1<<20), PPC64, { SR, RS } },
3561    
3562     { "mfmsr", X(31,83), XRARB_MASK, COM, { RT } },
3563    
3564     { "ldarx", X(31,84), XEH_MASK, PPC64, { RT, RA0, RB, EH } },
3565    
3566     { "dcbfl", XOPL(31,86,1), XRT_MASK, POWER5, { RA, RB } },
3567     { "dcbf", X(31,86), XLRT_MASK, PPC, { RA, RB, L } },
3568    
3569     { "lbzx", X(31,87), X_MASK, COM, { RT, RA0, RB } },
3570    
3571     { "dcbfe", X(31,94), XRT_MASK, BOOKE64, { RA, RB } },
3572    
3573     { "lbzxe", X(31,95), X_MASK, BOOKE64, { RT, RA0, RB } },
3574    
3575     { "neg", XO(31,104,0,0), XORB_MASK, COM, { RT, RA } },
3576     { "neg.", XO(31,104,0,1), XORB_MASK, COM, { RT, RA } },
3577     { "nego", XO(31,104,1,0), XORB_MASK, COM, { RT, RA } },
3578     { "nego.", XO(31,104,1,1), XORB_MASK, COM, { RT, RA } },
3579    
3580     { "mul", XO(31,107,0,0), XO_MASK, M601, { RT, RA, RB } },
3581     { "mul.", XO(31,107,0,1), XO_MASK, M601, { RT, RA, RB } },
3582     { "mulo", XO(31,107,1,0), XO_MASK, M601, { RT, RA, RB } },
3583     { "mulo.", XO(31,107,1,1), XO_MASK, M601, { RT, RA, RB } },
3584    
3585     { "mtsrdin", X(31,114), XRA_MASK, PPC64, { RS, RB } },
3586    
3587     { "clf", X(31,118), XTO_MASK, POWER, { RA, RB } },
3588    
3589     { "lbzux", X(31,119), X_MASK, COM, { RT, RAL, RB } },
3590    
3591     { "popcntb", X(31,122), XRB_MASK, POWER5, { RA, RS } },
3592    
3593     { "not", XRC(31,124,0), X_MASK, COM, { RA, RS, RBS } },
3594     { "nor", XRC(31,124,0), X_MASK, COM, { RA, RS, RB } },
3595     { "not.", XRC(31,124,1), X_MASK, COM, { RA, RS, RBS } },
3596     { "nor.", XRC(31,124,1), X_MASK, COM, { RA, RS, RB } },
3597    
3598     { "lwarxe", X(31,126), X_MASK, BOOKE64, { RT, RA0, RB } },
3599    
3600     { "lbzuxe", X(31,127), X_MASK, BOOKE64, { RT, RAL, RB } },
3601    
3602     { "wrtee", X(31,131), XRARB_MASK, PPC403 | BOOKE, { RS } },
3603    
3604     { "dcbtstls",X(31,134), X_MASK, PPCCHLK, { CT, RA, RB }},
3605    
3606     { "subfe", XO(31,136,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
3607     { "sfe", XO(31,136,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
3608     { "subfe.", XO(31,136,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
3609     { "sfe.", XO(31,136,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
3610     { "subfeo", XO(31,136,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
3611     { "sfeo", XO(31,136,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
3612     { "subfeo.", XO(31,136,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
3613     { "sfeo.", XO(31,136,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
3614    
3615     { "adde", XO(31,138,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
3616     { "ae", XO(31,138,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
3617     { "adde.", XO(31,138,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
3618     { "ae.", XO(31,138,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
3619     { "addeo", XO(31,138,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
3620     { "aeo", XO(31,138,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
3621     { "addeo.", XO(31,138,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
3622     { "aeo.", XO(31,138,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
3623    
3624     { "dcbtstlse",X(31,142),X_MASK, PPCCHLK64, { CT, RA, RB }},
3625    
3626     { "mtocrf", XFXM(31,144,0,1), XFXFXM_MASK, COM, { FXM, RS } },
3627     { "mtcr", XFXM(31,144,0xff,0), XRARB_MASK, COM, { RS }},
3628     { "mtcrf", X(31,144), XFXFXM_MASK, COM, { FXM, RS } },
3629    
3630     { "mtmsr", X(31,146), XRARB_MASK, COM, { RS } },
3631    
3632     { "stdx", X(31,149), X_MASK, PPC64, { RS, RA0, RB } },
3633    
3634     { "stwcx.", XRC(31,150,1), X_MASK, PPC, { RS, RA0, RB } },
3635    
3636     { "stwx", X(31,151), X_MASK, PPCCOM, { RS, RA0, RB } },
3637     { "stx", X(31,151), X_MASK, PWRCOM, { RS, RA, RB } },
3638    
3639     { "stwcxe.", XRC(31,158,1), X_MASK, BOOKE64, { RS, RA0, RB } },
3640    
3641     { "stwxe", X(31,159), X_MASK, BOOKE64, { RS, RA0, RB } },
3642    
3643     { "slq", XRC(31,152,0), X_MASK, M601, { RA, RS, RB } },
3644     { "slq.", XRC(31,152,1), X_MASK, M601, { RA, RS, RB } },
3645    
3646     { "sle", XRC(31,153,0), X_MASK, M601, { RA, RS, RB } },
3647     { "sle.", XRC(31,153,1), X_MASK, M601, { RA, RS, RB } },
3648    
3649     { "prtyw", X(31,154), XRB_MASK, POWER6, { RA, RS } },
3650    
3651     { "wrteei", X(31,163), XE_MASK, PPC403 | BOOKE, { E } },
3652    
3653     { "dcbtls", X(31,166), X_MASK, PPCCHLK, { CT, RA, RB }},
3654     { "dcbtlse", X(31,174), X_MASK, PPCCHLK64, { CT, RA, RB }},
3655    
3656     { "mtmsrd", X(31,178), XRLARB_MASK, PPC64, { RS, A_L } },
3657    
3658     { "stdux", X(31,181), X_MASK, PPC64, { RS, RAS, RB } },
3659    
3660     { "stwux", X(31,183), X_MASK, PPCCOM, { RS, RAS, RB } },
3661     { "stux", X(31,183), X_MASK, PWRCOM, { RS, RA0, RB } },
3662    
3663     { "sliq", XRC(31,184,0), X_MASK, M601, { RA, RS, SH } },
3664     { "sliq.", XRC(31,184,1), X_MASK, M601, { RA, RS, SH } },
3665    
3666     { "prtyd", X(31,186), XRB_MASK, POWER6, { RA, RS } },
3667    
3668     { "stwuxe", X(31,191), X_MASK, BOOKE64, { RS, RAS, RB } },
3669    
3670     { "subfze", XO(31,200,0,0), XORB_MASK, PPCCOM, { RT, RA } },
3671     { "sfze", XO(31,200,0,0), XORB_MASK, PWRCOM, { RT, RA } },
3672     { "subfze.", XO(31,200,0,1), XORB_MASK, PPCCOM, { RT, RA } },
3673     { "sfze.", XO(31,200,0,1), XORB_MASK, PWRCOM, { RT, RA } },
3674     { "subfzeo", XO(31,200,1,0), XORB_MASK, PPCCOM, { RT, RA } },
3675     { "sfzeo", XO(31,200,1,0), XORB_MASK, PWRCOM, { RT, RA } },
3676     { "subfzeo.",XO(31,200,1,1), XORB_MASK, PPCCOM, { RT, RA } },
3677     { "sfzeo.", XO(31,200,1,1), XORB_MASK, PWRCOM, { RT, RA } },
3678    
3679     { "addze", XO(31,202,0,0), XORB_MASK, PPCCOM, { RT, RA } },
3680     { "aze", XO(31,202,0,0), XORB_MASK, PWRCOM, { RT, RA } },
3681     { "addze.", XO(31,202,0,1), XORB_MASK, PPCCOM, { RT, RA } },
3682     { "aze.", XO(31,202,0,1), XORB_MASK, PWRCOM, { RT, RA } },
3683     { "addzeo", XO(31,202,1,0), XORB_MASK, PPCCOM, { RT, RA } },
3684     { "azeo", XO(31,202,1,0), XORB_MASK, PWRCOM, { RT, RA } },
3685     { "addzeo.", XO(31,202,1,1), XORB_MASK, PPCCOM, { RT, RA } },
3686     { "azeo.", XO(31,202,1,1), XORB_MASK, PWRCOM, { RT, RA } },
3687    
3688     { "mtsr", X(31,210), XRB_MASK|(1<<20), COM32, { SR, RS } },
3689    
3690     { "stdcx.", XRC(31,214,1), X_MASK, PPC64, { RS, RA0, RB } },
3691    
3692     { "stbx", X(31,215), X_MASK, COM, { RS, RA0, RB } },
3693    
3694     { "sllq", XRC(31,216,0), X_MASK, M601, { RA, RS, RB } },
3695     { "sllq.", XRC(31,216,1), X_MASK, M601, { RA, RS, RB } },
3696    
3697     { "sleq", XRC(31,217,0), X_MASK, M601, { RA, RS, RB } },
3698     { "sleq.", XRC(31,217,1), X_MASK, M601, { RA, RS, RB } },
3699    
3700     { "stbxe", X(31,223), X_MASK, BOOKE64, { RS, RA0, RB } },
3701    
3702     { "icblc", X(31,230), X_MASK, PPCCHLK, { CT, RA, RB }},
3703    
3704     { "subfme", XO(31,232,0,0), XORB_MASK, PPCCOM, { RT, RA } },
3705     { "sfme", XO(31,232,0,0), XORB_MASK, PWRCOM, { RT, RA } },
3706     { "subfme.", XO(31,232,0,1), XORB_MASK, PPCCOM, { RT, RA } },
3707     { "sfme.", XO(31,232,0,1), XORB_MASK, PWRCOM, { RT, RA } },
3708     { "subfmeo", XO(31,232,1,0), XORB_MASK, PPCCOM, { RT, RA } },
3709     { "sfmeo", XO(31,232,1,0), XORB_MASK, PWRCOM, { RT, RA } },
3710     { "subfmeo.",XO(31,232,1,1), XORB_MASK, PPCCOM, { RT, RA } },
3711     { "sfmeo.", XO(31,232,1,1), XORB_MASK, PWRCOM, { RT, RA } },
3712    
3713     { "mulld", XO(31,233,0,0), XO_MASK, PPC64, { RT, RA, RB } },
3714     { "mulld.", XO(31,233,0,1), XO_MASK, PPC64, { RT, RA, RB } },
3715     { "mulldo", XO(31,233,1,0), XO_MASK, PPC64, { RT, RA, RB } },
3716     { "mulldo.", XO(31,233,1,1), XO_MASK, PPC64, { RT, RA, RB } },
3717    
3718     { "addme", XO(31,234,0,0), XORB_MASK, PPCCOM, { RT, RA } },
3719     { "ame", XO(31,234,0,0), XORB_MASK, PWRCOM, { RT, RA } },
3720     { "addme.", XO(31,234,0,1), XORB_MASK, PPCCOM, { RT, RA } },
3721     { "ame.", XO(31,234,0,1), XORB_MASK, PWRCOM, { RT, RA } },
3722     { "addmeo", XO(31,234,1,0), XORB_MASK, PPCCOM, { RT, RA } },
3723     { "ameo", XO(31,234,1,0), XORB_MASK, PWRCOM, { RT, RA } },
3724     { "addmeo.", XO(31,234,1,1), XORB_MASK, PPCCOM, { RT, RA } },
3725     { "ameo.", XO(31,234,1,1), XORB_MASK, PWRCOM, { RT, RA } },
3726    
3727     { "mullw", XO(31,235,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
3728     { "muls", XO(31,235,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
3729     { "mullw.", XO(31,235,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
3730     { "muls.", XO(31,235,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
3731     { "mullwo", XO(31,235,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
3732     { "mulso", XO(31,235,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
3733     { "mullwo.", XO(31,235,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
3734     { "mulso.", XO(31,235,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
3735    
3736     { "icblce", X(31,238), X_MASK, PPCCHLK64, { CT, RA, RB }},
3737     { "mtsrin", X(31,242), XRA_MASK, PPC32, { RS, RB } },
3738     { "mtsri", X(31,242), XRA_MASK, POWER32, { RS, RB } },
3739    
3740     { "dcbtst", X(31,246), X_MASK, PPC, { CT, RA, RB } },
3741    
3742     { "stbux", X(31,247), X_MASK, COM, { RS, RAS, RB } },
3743    
3744     { "slliq", XRC(31,248,0), X_MASK, M601, { RA, RS, SH } },
3745     { "slliq.", XRC(31,248,1), X_MASK, M601, { RA, RS, SH } },
3746    
3747     { "dcbtste", X(31,253), X_MASK, BOOKE64, { CT, RA, RB } },
3748    
3749     { "stbuxe", X(31,255), X_MASK, BOOKE64, { RS, RAS, RB } },
3750    
3751     { "mfdcrx", X(31,259), X_MASK, BOOKE, { RS, RA } },
3752    
3753     { "doz", XO(31,264,0,0), XO_MASK, M601, { RT, RA, RB } },
3754     { "doz.", XO(31,264,0,1), XO_MASK, M601, { RT, RA, RB } },
3755     { "dozo", XO(31,264,1,0), XO_MASK, M601, { RT, RA, RB } },
3756     { "dozo.", XO(31,264,1,1), XO_MASK, M601, { RT, RA, RB } },
3757    
3758     { "add", XO(31,266,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
3759     { "cax", XO(31,266,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
3760     { "add.", XO(31,266,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
3761     { "cax.", XO(31,266,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
3762     { "addo", XO(31,266,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
3763     { "caxo", XO(31,266,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
3764     { "addo.", XO(31,266,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
3765     { "caxo.", XO(31,266,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
3766    
3767     { "tlbiel", X(31,274), XRTLRA_MASK, POWER4, { RB, L } },
3768    
3769     { "mfapidi", X(31,275), X_MASK, BOOKE, { RT, RA } },
3770    
3771     { "lscbx", XRC(31,277,0), X_MASK, M601, { RT, RA, RB } },
3772     { "lscbx.", XRC(31,277,1), X_MASK, M601, { RT, RA, RB } },
3773    
3774     { "dcbt", X(31,278), X_MASK, PPC, { CT, RA, RB } },
3775    
3776     { "lhzx", X(31,279), X_MASK, COM, { RT, RA0, RB } },
3777    
3778     { "eqv", XRC(31,284,0), X_MASK, COM, { RA, RS, RB } },
3779     { "eqv.", XRC(31,284,1), X_MASK, COM, { RA, RS, RB } },
3780    
3781     { "dcbte", X(31,286), X_MASK, BOOKE64, { CT, RA, RB } },
3782    
3783     { "lhzxe", X(31,287), X_MASK, BOOKE64, { RT, RA0, RB } },
3784    
3785     { "tlbie", X(31,306), XRTLRA_MASK, PPC, { RB, L } },
3786     { "tlbi", X(31,306), XRT_MASK, POWER, { RA0, RB } },
3787    
3788     { "eciwx", X(31,310), X_MASK, PPC, { RT, RA, RB } },
3789    
3790     { "lhzux", X(31,311), X_MASK, COM, { RT, RAL, RB } },
3791    
3792     { "xor", XRC(31,316,0), X_MASK, COM, { RA, RS, RB } },
3793     { "xor.", XRC(31,316,1), X_MASK, COM, { RA, RS, RB } },
3794    
3795     { "lhzuxe", X(31,319), X_MASK, BOOKE64, { RT, RAL, RB } },
3796    
3797     { "mfexisr", XSPR(31,323,64), XSPR_MASK, PPC403, { RT } },
3798     { "mfexier", XSPR(31,323,66), XSPR_MASK, PPC403, { RT } },
3799     { "mfbr0", XSPR(31,323,128), XSPR_MASK, PPC403, { RT } },
3800     { "mfbr1", XSPR(31,323,129), XSPR_MASK, PPC403, { RT } },
3801     { "mfbr2", XSPR(31,323,130), XSPR_MASK, PPC403, { RT } },
3802     { "mfbr3", XSPR(31,323,131), XSPR_MASK, PPC403, { RT } },
3803     { "mfbr4", XSPR(31,323,132), XSPR_MASK, PPC403, { RT } },
3804     { "mfbr5", XSPR(31,323,133), XSPR_MASK, PPC403, { RT } },
3805     { "mfbr6", XSPR(31,323,134), XSPR_MASK, PPC403, { RT } },
3806     { "mfbr7", XSPR(31,323,135), XSPR_MASK, PPC403, { RT } },
3807     { "mfbear", XSPR(31,323,144), XSPR_MASK, PPC403, { RT } },
3808     { "mfbesr", XSPR(31,323,145), XSPR_MASK, PPC403, { RT } },
3809     { "mfiocr", XSPR(31,323,160), XSPR_MASK, PPC403, { RT } },
3810     { "mfdmacr0", XSPR(31,323,192), XSPR_MASK, PPC403, { RT } },
3811     { "mfdmact0", XSPR(31,323,193), XSPR_MASK, PPC403, { RT } },
3812     { "mfdmada0", XSPR(31,323,194), XSPR_MASK, PPC403, { RT } },
3813     { "mfdmasa0", XSPR(31,323,195), XSPR_MASK, PPC403, { RT } },
3814     { "mfdmacc0", XSPR(31,323,196), XSPR_MASK, PPC403, { RT } },
3815     { "mfdmacr1", XSPR(31,323,200), XSPR_MASK, PPC403, { RT } },
3816     { "mfdmact1", XSPR(31,323,201), XSPR_MASK, PPC403, { RT } },
3817     { "mfdmada1", XSPR(31,323,202), XSPR_MASK, PPC403, { RT } },
3818     { "mfdmasa1", XSPR(31,323,203), XSPR_MASK, PPC403, { RT } },
3819     { "mfdmacc1", XSPR(31,323,204), XSPR_MASK, PPC403, { RT } },
3820     { "mfdmacr2", XSPR(31,323,208), XSPR_MASK, PPC403, { RT } },
3821     { "mfdmact2", XSPR(31,323,209), XSPR_MASK, PPC403, { RT } },
3822     { "mfdmada2", XSPR(31,323,210), XSPR_MASK, PPC403, { RT } },
3823     { "mfdmasa2", XSPR(31,323,211), XSPR_MASK, PPC403, { RT } },
3824     { "mfdmacc2", XSPR(31,323,212), XSPR_MASK, PPC403, { RT } },
3825     { "mfdmacr3", XSPR(31,323,216), XSPR_MASK, PPC403, { RT } },
3826     { "mfdmact3", XSPR(31,323,217), XSPR_MASK, PPC403, { RT } },
3827     { "mfdmada3", XSPR(31,323,218), XSPR_MASK, PPC403, { RT } },
3828     { "mfdmasa3", XSPR(31,323,219), XSPR_MASK, PPC403, { RT } },
3829     { "mfdmacc3", XSPR(31,323,220), XSPR_MASK, PPC403, { RT } },
3830     { "mfdmasr", XSPR(31,323,224), XSPR_MASK, PPC403, { RT } },
3831     { "mfdcr", X(31,323), X_MASK, PPC403 | BOOKE, { RT, SPR } },
3832    
3833     { "div", XO(31,331,0,0), XO_MASK, M601, { RT, RA, RB } },
3834     { "div.", XO(31,331,0,1), XO_MASK, M601, { RT, RA, RB } },
3835     { "divo", XO(31,331,1,0), XO_MASK, M601, { RT, RA, RB } },
3836     { "divo.", XO(31,331,1,1), XO_MASK, M601, { RT, RA, RB } },
3837    
3838     { "mfpmr", X(31,334), X_MASK, PPCPMR, { RT, PMR }},
3839    
3840     { "mfmq", XSPR(31,339,0), XSPR_MASK, M601, { RT } },
3841     { "mfxer", XSPR(31,339,1), XSPR_MASK, COM, { RT } },
3842     { "mfrtcu", XSPR(31,339,4), XSPR_MASK, COM, { RT } },
3843     { "mfrtcl", XSPR(31,339,5), XSPR_MASK, COM, { RT } },
3844     { "mfdec", XSPR(31,339,6), XSPR_MASK, MFDEC1, { RT } },
3845     { "mfdec", XSPR(31,339,22), XSPR_MASK, MFDEC2, { RT } },
3846     { "mflr", XSPR(31,339,8), XSPR_MASK, COM, { RT } },
3847     { "mfctr", XSPR(31,339,9), XSPR_MASK, COM, { RT } },
3848     { "mftid", XSPR(31,339,17), XSPR_MASK, POWER, { RT } },
3849     { "mfdsisr", XSPR(31,339,18), XSPR_MASK, COM, { RT } },
3850     { "mfdar", XSPR(31,339,19), XSPR_MASK, COM, { RT } },
3851     { "mfsdr0", XSPR(31,339,24), XSPR_MASK, POWER, { RT } },
3852     { "mfsdr1", XSPR(31,339,25), XSPR_MASK, COM, { RT } },
3853     { "mfsrr0", XSPR(31,339,26), XSPR_MASK, COM, { RT } },
3854     { "mfsrr1", XSPR(31,339,27), XSPR_MASK, COM, { RT } },
3855     { "mfcfar", XSPR(31,339,28), XSPR_MASK, POWER6, { RT } },
3856     { "mfpid", XSPR(31,339,48), XSPR_MASK, BOOKE, { RT } },
3857     { "mfpid", XSPR(31,339,945), XSPR_MASK, PPC403, { RT } },
3858     { "mfcsrr0", XSPR(31,339,58), XSPR_MASK, BOOKE, { RT } },
3859     { "mfcsrr1", XSPR(31,339,59), XSPR_MASK, BOOKE, { RT } },
3860     { "mfdear", XSPR(31,339,61), XSPR_MASK, BOOKE, { RT } },
3861     { "mfdear", XSPR(31,339,981), XSPR_MASK, PPC403, { RT } },
3862     { "mfesr", XSPR(31,339,62), XSPR_MASK, BOOKE, { RT } },
3863     { "mfesr", XSPR(31,339,980), XSPR_MASK, PPC403, { RT } },
3864     { "mfivpr", XSPR(31,339,63), XSPR_MASK, BOOKE, { RT } },
3865     { "mfcmpa", XSPR(31,339,144), XSPR_MASK, PPC860, { RT } },
3866     { "mfcmpb", XSPR(31,339,145), XSPR_MASK, PPC860, { RT } },
3867     { "mfcmpc", XSPR(31,339,146), XSPR_MASK, PPC860, { RT } },
3868     { "mfcmpd", XSPR(31,339,147), XSPR_MASK, PPC860, { RT } },
3869     { "mficr", XSPR(31,339,148), XSPR_MASK, PPC860, { RT } },
3870     { "mfder", XSPR(31,339,149), XSPR_MASK, PPC860, { RT } },
3871     { "mfcounta", XSPR(31,339,150), XSPR_MASK, PPC860, { RT } },
3872     { "mfcountb", XSPR(31,339,151), XSPR_MASK, PPC860, { RT } },
3873     { "mfcmpe", XSPR(31,339,152), XSPR_MASK, PPC860, { RT } },
3874     { "mfcmpf", XSPR(31,339,153), XSPR_MASK, PPC860, { RT } },
3875     { "mfcmpg", XSPR(31,339,154), XSPR_MASK, PPC860, { RT } },
3876     { "mfcmph", XSPR(31,339,155), XSPR_MASK, PPC860, { RT } },
3877     { "mflctrl1", XSPR(31,339,156), XSPR_MASK, PPC860, { RT } },
3878     { "mflctrl2", XSPR(31,339,157), XSPR_MASK, PPC860, { RT } },
3879     { "mfictrl", XSPR(31,339,158), XSPR_MASK, PPC860, { RT } },
3880     { "mfbar", XSPR(31,339,159), XSPR_MASK, PPC860, { RT } },
3881     { "mfvrsave", XSPR(31,339,256), XSPR_MASK, PPCVEC, { RT } },
3882     { "mfusprg0", XSPR(31,339,256), XSPR_MASK, BOOKE, { RT } },
3883     { "mftb", X(31,371), X_MASK, CLASSIC, { RT, TBR } },
3884     { "mftb", XSPR(31,339,268), XSPR_MASK, BOOKE, { RT } },
3885     { "mftbl", XSPR(31,371,268), XSPR_MASK, CLASSIC, { RT } },
3886     { "mftbl", XSPR(31,339,268), XSPR_MASK, BOOKE, { RT } },
3887     { "mftbu", XSPR(31,371,269), XSPR_MASK, CLASSIC, { RT } },
3888     { "mftbu", XSPR(31,339,269), XSPR_MASK, BOOKE, { RT } },
3889     { "mfsprg", XSPR(31,339,256), XSPRG_MASK, PPC, { RT, SPRG } },
3890     { "mfsprg0", XSPR(31,339,272), XSPR_MASK, PPC, { RT } },
3891     { "mfsprg1", XSPR(31,339,273), XSPR_MASK, PPC, { RT } },
3892     { "mfsprg2", XSPR(31,339,274), XSPR_MASK, PPC, { RT } },
3893     { "mfsprg3", XSPR(31,339,275), XSPR_MASK, PPC, { RT } },
3894     { "mfsprg4", XSPR(31,339,260), XSPR_MASK, PPC405 | BOOKE, { RT } },
3895     { "mfsprg5", XSPR(31,339,261), XSPR_MASK, PPC405 | BOOKE, { RT } },
3896     { "mfsprg6", XSPR(31,339,262), XSPR_MASK, PPC405 | BOOKE, { RT } },
3897     { "mfsprg7", XSPR(31,339,263), XSPR_MASK, PPC405 | BOOKE, { RT } },
3898     { "mfasr", XSPR(31,339,280), XSPR_MASK, PPC64, { RT } },
3899     { "mfear", XSPR(31,339,282), XSPR_MASK, PPC, { RT } },
3900     { "mfpir", XSPR(31,339,286), XSPR_MASK, BOOKE, { RT } },
3901     { "mfpvr", XSPR(31,339,287), XSPR_MASK, PPC, { RT } },
3902     { "mfdbsr", XSPR(31,339,304), XSPR_MASK, BOOKE, { RT } },
3903     { "mfdbsr", XSPR(31,339,1008), XSPR_MASK, PPC403, { RT } },
3904     { "mfdbcr0", XSPR(31,339,308), XSPR_MASK, BOOKE, { RT } },
3905     { "mfdbcr0", XSPR(31,339,1010), XSPR_MASK, PPC405, { RT } },
3906     { "mfdbcr1", XSPR(31,339,309), XSPR_MASK, BOOKE, { RT } },
3907     { "mfdbcr1", XSPR(31,339,957), XSPR_MASK, PPC405, { RT } },
3908     { "mfdbcr2", XSPR(31,339,310), XSPR_MASK, BOOKE, { RT } },
3909     { "mfiac1", XSPR(31,339,312), XSPR_MASK, BOOKE, { RT } },
3910     { "mfiac1", XSPR(31,339,1012), XSPR_MASK, PPC403, { RT } },
3911     { "mfiac2", XSPR(31,339,313), XSPR_MASK, BOOKE, { RT } },
3912     { "mfiac2", XSPR(31,339,1013), XSPR_MASK, PPC403, { RT } },
3913     { "mfiac3", XSPR(31,339,314), XSPR_MASK, BOOKE, { RT } },
3914     { "mfiac3", XSPR(31,339,948), XSPR_MASK, PPC405, { RT } },
3915     { "mfiac4", XSPR(31,339,315), XSPR_MASK, BOOKE, { RT } },
3916     { "mfiac4", XSPR(31,339,949), XSPR_MASK, PPC405, { RT } },
3917     { "mfdac1", XSPR(31,339,316), XSPR_MASK, BOOKE, { RT } },
3918     { "mfdac1", XSPR(31,339,1014), XSPR_MASK, PPC403, { RT } },
3919     { "mfdac2", XSPR(31,339,317), XSPR_MASK, BOOKE, { RT } },
3920     { "mfdac2", XSPR(31,339,1015), XSPR_MASK, PPC403, { RT } },
3921     { "mfdvc1", XSPR(31,339,318), XSPR_MASK, BOOKE, { RT } },
3922     { "mfdvc1", XSPR(31,339,950), XSPR_MASK, PPC405, { RT } },
3923     { "mfdvc2", XSPR(31,339,319), XSPR_MASK, BOOKE, { RT } },
3924     { "mfdvc2", XSPR(31,339,951), XSPR_MASK, PPC405, { RT } },
3925     { "mftsr", XSPR(31,339,336), XSPR_MASK, BOOKE, { RT } },
3926     { "mftsr", XSPR(31,339,984), XSPR_MASK, PPC403, { RT } },
3927     { "mftcr", XSPR(31,339,340), XSPR_MASK, BOOKE, { RT } },
3928     { "mftcr", XSPR(31,339,986), XSPR_MASK, PPC403, { RT } },
3929     { "mfivor0", XSPR(31,339,400), XSPR_MASK, BOOKE, { RT } },
3930     { "mfivor1", XSPR(31,339,401), XSPR_MASK, BOOKE, { RT } },
3931     { "mfivor2", XSPR(31,339,402), XSPR_MASK, BOOKE, { RT } },
3932     { "mfivor3", XSPR(31,339,403), XSPR_MASK, BOOKE, { RT } },
3933     { "mfivor4", XSPR(31,339,404), XSPR_MASK, BOOKE, { RT } },
3934     { "mfivor5", XSPR(31,339,405), XSPR_MASK, BOOKE, { RT } },
3935     { "mfivor6", XSPR(31,339,406), XSPR_MASK, BOOKE, { RT } },
3936     { "mfivor7", XSPR(31,339,407), XSPR_MASK, BOOKE, { RT } },
3937     { "mfivor8", XSPR(31,339,408), XSPR_MASK, BOOKE, { RT } },
3938     { "mfivor9", XSPR(31,339,409), XSPR_MASK, BOOKE, { RT } },
3939     { "mfivor10", XSPR(31,339,410), XSPR_MASK, BOOKE, { RT } },
3940     { "mfivor11", XSPR(31,339,411), XSPR_MASK, BOOKE, { RT } },
3941     { "mfivor12", XSPR(31,339,412), XSPR_MASK, BOOKE, { RT } },
3942     { "mfivor13", XSPR(31,339,413), XSPR_MASK, BOOKE, { RT } },
3943     { "mfivor14", XSPR(31,339,414), XSPR_MASK, BOOKE, { RT } },
3944     { "mfivor15", XSPR(31,339,415), XSPR_MASK, BOOKE, { RT } },
3945     { "mfspefscr", XSPR(31,339,512), XSPR_MASK, PPCSPE, { RT } },
3946     { "mfbbear", XSPR(31,339,513), XSPR_MASK, PPCBRLK, { RT } },
3947     { "mfbbtar", XSPR(31,339,514), XSPR_MASK, PPCBRLK, { RT } },
3948     { "mfivor32", XSPR(31,339,528), XSPR_MASK, PPCSPE, { RT } },
3949     { "mfivor33", XSPR(31,339,529), XSPR_MASK, PPCSPE, { RT } },
3950     { "mfivor34", XSPR(31,339,530), XSPR_MASK, PPCSPE, { RT } },
3951     { "mfivor35", XSPR(31,339,531), XSPR_MASK, PPCPMR, { RT } },
3952     { "mfibatu", XSPR(31,339,528), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
3953     { "mfibatl", XSPR(31,339,529), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
3954     { "mfdbatu", XSPR(31,339,536), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
3955     { "mfdbatl", XSPR(31,339,537), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
3956     { "mfic_cst", XSPR(31,339,560), XSPR_MASK, PPC860, { RT } },
3957     { "mfic_adr", XSPR(31,339,561), XSPR_MASK, PPC860, { RT } },
3958     { "mfic_dat", XSPR(31,339,562), XSPR_MASK, PPC860, { RT } },
3959     { "mfdc_cst", XSPR(31,339,568), XSPR_MASK, PPC860, { RT } },
3960     { "mfdc_adr", XSPR(31,339,569), XSPR_MASK, PPC860, { RT } },
3961     { "mfmcsrr0", XSPR(31,339,570), XSPR_MASK, PPCRFMCI, { RT } },
3962     { "mfdc_dat", XSPR(31,339,570), XSPR_MASK, PPC860, { RT } },
3963     { "mfmcsrr1", XSPR(31,339,571), XSPR_MASK, PPCRFMCI, { RT } },
3964     { "mfmcsr", XSPR(31,339,572), XSPR_MASK, PPCRFMCI, { RT } },
3965     { "mfmcar", XSPR(31,339,573), XSPR_MASK, PPCRFMCI, { RT } },
3966     { "mfdpdr", XSPR(31,339,630), XSPR_MASK, PPC860, { RT } },
3967     { "mfdpir", XSPR(31,339,631), XSPR_MASK, PPC860, { RT } },
3968     { "mfimmr", XSPR(31,339,638), XSPR_MASK, PPC860, { RT } },
3969     { "mfmi_ctr", XSPR(31,339,784), XSPR_MASK, PPC860, { RT } },
3970     { "mfmi_ap", XSPR(31,339,786), XSPR_MASK, PPC860, { RT } },
3971     { "mfmi_epn", XSPR(31,339,787), XSPR_MASK, PPC860, { RT } },
3972     { "mfmi_twc", XSPR(31,339,789), XSPR_MASK, PPC860, { RT } },
3973     { "mfmi_rpn", XSPR(31,339,790), XSPR_MASK, PPC860, { RT } },
3974     { "mfmd_ctr", XSPR(31,339,792), XSPR_MASK, PPC860, { RT } },
3975     { "mfm_casid", XSPR(31,339,793), XSPR_MASK, PPC860, { RT } },
3976     { "mfmd_ap", XSPR(31,339,794), XSPR_MASK, PPC860, { RT } },
3977     { "mfmd_epn", XSPR(31,339,795), XSPR_MASK, PPC860, { RT } },
3978     { "mfmd_twb", XSPR(31,339,796), XSPR_MASK, PPC860, { RT } },
3979     { "mfmd_twc", XSPR(31,339,797), XSPR_MASK, PPC860, { RT } },
3980     { "mfmd_rpn", XSPR(31,339,798), XSPR_MASK, PPC860, { RT } },
3981     { "mfm_tw", XSPR(31,339,799), XSPR_MASK, PPC860, { RT } },
3982     { "mfmi_dbcam", XSPR(31,339,816), XSPR_MASK, PPC860, { RT } },
3983     { "mfmi_dbram0",XSPR(31,339,817), XSPR_MASK, PPC860, { RT } },
3984     { "mfmi_dbram1",XSPR(31,339,818), XSPR_MASK, PPC860, { RT } },
3985     { "mfmd_dbcam", XSPR(31,339,824), XSPR_MASK, PPC860, { RT } },
3986     { "mfmd_dbram0",XSPR(31,339,825), XSPR_MASK, PPC860, { RT } },
3987     { "mfmd_dbram1",XSPR(31,339,826), XSPR_MASK, PPC860, { RT } },
3988     { "mfummcr0", XSPR(31,339,936), XSPR_MASK, PPC750, { RT } },
3989     { "mfupmc1", XSPR(31,339,937), XSPR_MASK, PPC750, { RT } },
3990     { "mfupmc2", XSPR(31,339,938), XSPR_MASK, PPC750, { RT } },
3991     { "mfusia", XSPR(31,339,939), XSPR_MASK, PPC750, { RT } },
3992     { "mfummcr1", XSPR(31,339,940), XSPR_MASK, PPC750, { RT } },
3993     { "mfupmc3", XSPR(31,339,941), XSPR_MASK, PPC750, { RT } },
3994     { "mfupmc4", XSPR(31,339,942), XSPR_MASK, PPC750, { RT } },
3995     { "mfzpr", XSPR(31,339,944), XSPR_MASK, PPC403, { RT } },
3996     { "mfccr0", XSPR(31,339,947), XSPR_MASK, PPC405, { RT } },
3997     { "mfmmcr0", XSPR(31,339,952), XSPR_MASK, PPC750, { RT } },
3998     { "mfpmc1", XSPR(31,339,953), XSPR_MASK, PPC750, { RT } },
3999     { "mfsgr", XSPR(31,339,953), XSPR_MASK, PPC403, { RT } },
4000     { "mfpmc2", XSPR(31,339,954), XSPR_MASK, PPC750, { RT } },
4001     { "mfdcwr", XSPR(31,339,954), XSPR_MASK, PPC403, { RT } },
4002     { "mfsia", XSPR(31,339,955), XSPR_MASK, PPC750, { RT } },
4003     { "mfsler", XSPR(31,339,955), XSPR_MASK, PPC405, { RT } },
4004     { "mfmmcr1", XSPR(31,339,956), XSPR_MASK, PPC750, { RT } },
4005     { "mfsu0r", XSPR(31,339,956), XSPR_MASK, PPC405, { RT } },
4006     { "mfpmc3", XSPR(31,339,957), XSPR_MASK, PPC750, { RT } },
4007     { "mfpmc4", XSPR(31,339,958), XSPR_MASK, PPC750, { RT } },
4008     { "mficdbdr", XSPR(31,339,979), XSPR_MASK, PPC403, { RT } },
4009     { "mfevpr", XSPR(31,339,982), XSPR_MASK, PPC403, { RT } },
4010     { "mfcdbcr", XSPR(31,339,983), XSPR_MASK, PPC403, { RT } },
4011     { "mfpit", XSPR(31,339,987), XSPR_MASK, PPC403, { RT } },
4012     { "mftbhi", XSPR(31,339,988), XSPR_MASK, PPC403, { RT } },
4013     { "mftblo", XSPR(31,339,989), XSPR_MASK, PPC403, { RT } },
4014     { "mfsrr2", XSPR(31,339,990), XSPR_MASK, PPC403, { RT } },
4015     { "mfsrr3", XSPR(31,339,991), XSPR_MASK, PPC403, { RT } },
4016     { "mfl2cr", XSPR(31,339,1017), XSPR_MASK, PPC750, { RT } },
4017     { "mfdccr", XSPR(31,339,1018), XSPR_MASK, PPC403, { RT } },
4018     { "mficcr", XSPR(31,339,1019), XSPR_MASK, PPC403, { RT } },
4019     { "mfictc", XSPR(31,339,1019), XSPR_MASK, PPC750, { RT } },
4020     { "mfpbl1", XSPR(31,339,1020), XSPR_MASK, PPC403, { RT } },
4021     { "mfthrm1", XSPR(31,339,1020), XSPR_MASK, PPC750, { RT } },
4022     { "mfpbu1", XSPR(31,339,1021), XSPR_MASK, PPC403, { RT } },
4023     { "mfthrm2", XSPR(31,339,1021), XSPR_MASK, PPC750, { RT } },
4024     { "mfpbl2", XSPR(31,339,1022), XSPR_MASK, PPC403, { RT } },
4025     { "mfthrm3", XSPR(31,339,1022), XSPR_MASK, PPC750, { RT } },
4026     { "mfpbu2", XSPR(31,339,1023), XSPR_MASK, PPC403, { RT } },
4027     { "mfspr", X(31,339), X_MASK, COM, { RT, SPR } },
4028    
4029     { "lwax", X(31,341), X_MASK, PPC64, { RT, RA0, RB } },
4030    
4031     { "dst", XDSS(31,342,0), XDSS_MASK, PPCVEC, { RA, RB, STRM } },
4032     { "dstt", XDSS(31,342,1), XDSS_MASK, PPCVEC, { RA, RB, STRM } },
4033    
4034     { "lhax", X(31,343), X_MASK, COM, { RT, RA0, RB } },
4035    
4036     { "lhaxe", X(31,351), X_MASK, BOOKE64, { RT, RA0, RB } },
4037    
4038     { "dstst", XDSS(31,374,0), XDSS_MASK, PPCVEC, { RA, RB, STRM } },
4039     { "dststt", XDSS(31,374,1), XDSS_MASK, PPCVEC, { RA, RB, STRM } },
4040    
4041     { "dccci", X(31,454), XRT_MASK, PPC403|PPC440, { RA, RB } },
4042    
4043     { "abs", XO(31,360,0,0), XORB_MASK, M601, { RT, RA } },
4044     { "abs.", XO(31,360,0,1), XORB_MASK, M601, { RT, RA } },
4045     { "abso", XO(31,360,1,0), XORB_MASK, M601, { RT, RA } },
4046     { "abso.", XO(31,360,1,1), XORB_MASK, M601, { RT, RA } },
4047    
4048     { "divs", XO(31,363,0,0), XO_MASK, M601, { RT, RA, RB } },
4049     { "divs.", XO(31,363,0,1), XO_MASK, M601, { RT, RA, RB } },
4050     { "divso", XO(31,363,1,0), XO_MASK, M601, { RT, RA, RB } },
4051     { "divso.", XO(31,363,1,1), XO_MASK, M601, { RT, RA, RB } },
4052    
4053     { "tlbia", X(31,370), 0xffffffff, PPC, { 0 } },
4054    
4055     { "lwaux", X(31,373), X_MASK, PPC64, { RT, RAL, RB } },
4056    
4057     { "lhaux", X(31,375), X_MASK, COM, { RT, RAL, RB } },
4058    
4059     { "lhauxe", X(31,383), X_MASK, BOOKE64, { RT, RAL, RB } },
4060    
4061     { "mtdcrx", X(31,387), X_MASK, BOOKE, { RA, RS } },
4062    
4063     { "dcblc", X(31,390), X_MASK, PPCCHLK, { CT, RA, RB }},
4064    
4065     { "subfe64", XO(31,392,0,0), XO_MASK, BOOKE64, { RT, RA, RB } },
4066     { "subfe64o",XO(31,392,1,0), XO_MASK, BOOKE64, { RT, RA, RB } },
4067    
4068     { "adde64", XO(31,394,0,0), XO_MASK, BOOKE64, { RT, RA, RB } },
4069     { "adde64o", XO(31,394,1,0), XO_MASK, BOOKE64, { RT, RA, RB } },
4070    
4071     { "dcblce", X(31,398), X_MASK, PPCCHLK64, { CT, RA, RB }},
4072    
4073     { "slbmte", X(31,402), XRA_MASK, PPC64, { RS, RB } },
4074    
4075     { "sthx", X(31,407), X_MASK, COM, { RS, RA0, RB } },
4076    
4077     { "cmpb", X(31,508), X_MASK, POWER6, { RA, RS, RB } },
4078    
4079     { "lfqx", X(31,791), X_MASK, POWER2, { FRT, RA, RB } },
4080    
4081     { "lfdpx", X(31,791), X_MASK, POWER6, { FRT, RA, RB } },
4082    
4083     { "lfqux", X(31,823), X_MASK, POWER2, { FRT, RA, RB } },
4084    
4085     { "stfqx", X(31,919), X_MASK, POWER2, { FRS, RA, RB } },
4086    
4087     { "stfdpx", X(31,919), X_MASK, POWER6, { FRS, RA, RB } },
4088    
4089     { "stfqux", X(31,951), X_MASK, POWER2, { FRS, RA, RB } },
4090    
4091     { "orc", XRC(31,412,0), X_MASK, COM, { RA, RS, RB } },
4092     { "orc.", XRC(31,412,1), X_MASK, COM, { RA, RS, RB } },
4093    
4094     { "sradi", XS(31,413,0), XS_MASK, PPC64, { RA, RS, SH6 } },
4095     { "sradi.", XS(31,413,1), XS_MASK, PPC64, { RA, RS, SH6 } },
4096    
4097     { "sthxe", X(31,415), X_MASK, BOOKE64, { RS, RA0, RB } },
4098    
4099     { "slbie", X(31,434), XRTRA_MASK, PPC64, { RB } },
4100    
4101     { "ecowx", X(31,438), X_MASK, PPC, { RT, RA, RB } },
4102    
4103     { "sthux", X(31,439), X_MASK, COM, { RS, RAS, RB } },
4104    
4105     { "sthuxe", X(31,447), X_MASK, BOOKE64, { RS, RAS, RB } },
4106    
4107     { "cctpl", 0x7c210b78, 0xffffffff, CELL, { 0 }},
4108     { "cctpm", 0x7c421378, 0xffffffff, CELL, { 0 }},
4109     { "cctph", 0x7c631b78, 0xffffffff, CELL, { 0 }},
4110     { "db8cyc", 0x7f9ce378, 0xffffffff, CELL, { 0 }},
4111     { "db10cyc", 0x7fbdeb78, 0xffffffff, CELL, { 0 }},
4112     { "db12cyc", 0x7fdef378, 0xffffffff, CELL, { 0 }},
4113     { "db16cyc", 0x7ffffb78, 0xffffffff, CELL, { 0 }},
4114     { "mr", XRC(31,444,0), X_MASK, COM, { RA, RS, RBS } },
4115     { "or", XRC(31,444,0), X_MASK, COM, { RA, RS, RB } },
4116     { "mr.", XRC(31,444,1), X_MASK, COM, { RA, RS, RBS } },
4117     { "or.", XRC(31,444,1), X_MASK, COM, { RA, RS, RB } },
4118    
4119     { "mtexisr", XSPR(31,451,64), XSPR_MASK, PPC403, { RS } },
4120     { "mtexier", XSPR(31,451,66), XSPR_MASK, PPC403, { RS } },
4121     { "mtbr0", XSPR(31,451,128), XSPR_MASK, PPC403, { RS } },
4122     { "mtbr1", XSPR(31,451,129), XSPR_MASK, PPC403, { RS } },
4123     { "mtbr2", XSPR(31,451,130), XSPR_MASK, PPC403, { RS } },
4124     { "mtbr3", XSPR(31,451,131), XSPR_MASK, PPC403, { RS } },
4125     { "mtbr4", XSPR(31,451,132), XSPR_MASK, PPC403, { RS } },
4126     { "mtbr5", XSPR(31,451,133), XSPR_MASK, PPC403, { RS } },
4127     { "mtbr6", XSPR(31,451,134), XSPR_MASK, PPC403, { RS } },
4128     { "mtbr7", XSPR(31,451,135), XSPR_MASK, PPC403, { RS } },
4129     { "mtbear", XSPR(31,451,144), XSPR_MASK, PPC403, { RS } },
4130     { "mtbesr", XSPR(31,451,145), XSPR_MASK, PPC403, { RS } },
4131     { "mtiocr", XSPR(31,451,160), XSPR_MASK, PPC403, { RS } },
4132     { "mtdmacr0", XSPR(31,451,192), XSPR_MASK, PPC403, { RS } },
4133     { "mtdmact0", XSPR(31,451,193), XSPR_MASK, PPC403, { RS } },
4134     { "mtdmada0", XSPR(31,451,194), XSPR_MASK, PPC403, { RS } },
4135     { "mtdmasa0", XSPR(31,451,195), XSPR_MASK, PPC403, { RS } },
4136     { "mtdmacc0", XSPR(31,451,196), XSPR_MASK, PPC403, { RS } },
4137     { "mtdmacr1", XSPR(31,451,200), XSPR_MASK, PPC403, { RS } },
4138     { "mtdmact1", XSPR(31,451,201), XSPR_MASK, PPC403, { RS } },
4139     { "mtdmada1", XSPR(31,451,202), XSPR_MASK, PPC403, { RS } },
4140     { "mtdmasa1", XSPR(31,451,203), XSPR_MASK, PPC403, { RS } },
4141     { "mtdmacc1", XSPR(31,451,204), XSPR_MASK, PPC403, { RS } },
4142     { "mtdmacr2", XSPR(31,451,208), XSPR_MASK, PPC403, { RS } },
4143     { "mtdmact2", XSPR(31,451,209), XSPR_MASK, PPC403, { RS } },
4144     { "mtdmada2", XSPR(31,451,210), XSPR_MASK, PPC403, { RS } },
4145     { "mtdmasa2", XSPR(31,451,211), XSPR_MASK, PPC403, { RS } },
4146     { "mtdmacc2", XSPR(31,451,212), XSPR_MASK, PPC403, { RS } },
4147     { "mtdmacr3", XSPR(31,451,216), XSPR_MASK, PPC403, { RS } },
4148     { "mtdmact3", XSPR(31,451,217), XSPR_MASK, PPC403, { RS } },
4149     { "mtdmada3", XSPR(31,451,218), XSPR_MASK, PPC403, { RS } },
4150     { "mtdmasa3", XSPR(31,451,219), XSPR_MASK, PPC403, { RS } },
4151     { "mtdmacc3", XSPR(31,451,220), XSPR_MASK, PPC403, { RS } },
4152     { "mtdmasr", XSPR(31,451,224), XSPR_MASK, PPC403, { RS } },
4153     { "mtdcr", X(31,451), X_MASK, PPC403 | BOOKE, { SPR, RS } },
4154    
4155     { "subfze64",XO(31,456,0,0), XORB_MASK, BOOKE64, { RT, RA } },
4156     { "subfze64o",XO(31,456,1,0), XORB_MASK, BOOKE64, { RT, RA } },
4157    
4158     { "divdu", XO(31,457,0,0), XO_MASK, PPC64, { RT, RA, RB } },
4159     { "divdu.", XO(31,457,0,1), XO_MASK, PPC64, { RT, RA, RB } },
4160     { "divduo", XO(31,457,1,0), XO_MASK, PPC64, { RT, RA, RB } },
4161     { "divduo.", XO(31,457,1,1), XO_MASK, PPC64, { RT, RA, RB } },
4162    
4163     { "addze64", XO(31,458,0,0), XORB_MASK, BOOKE64, { RT, RA } },
4164     { "addze64o",XO(31,458,1,0), XORB_MASK, BOOKE64, { RT, RA } },
4165    
4166     { "divwu", XO(31,459,0,0), XO_MASK, PPC, { RT, RA, RB } },
4167     { "divwu.", XO(31,459,0,1), XO_MASK, PPC, { RT, RA, RB } },
4168     { "divwuo", XO(31,459,1,0), XO_MASK, PPC, { RT, RA, RB } },
4169     { "divwuo.", XO(31,459,1,1), XO_MASK, PPC, { RT, RA, RB } },
4170    
4171     { "mtmq", XSPR(31,467,0), XSPR_MASK, M601, { RS } },
4172     { "mtxer", XSPR(31,467,1), XSPR_MASK, COM, { RS } },
4173     { "mtlr", XSPR(31,467,8), XSPR_MASK, COM, { RS } },
4174     { "mtctr", XSPR(31,467,9), XSPR_MASK, COM, { RS } },
4175     { "mttid", XSPR(31,467,17), XSPR_MASK, POWER, { RS } },
4176     { "mtdsisr", XSPR(31,467,18), XSPR_MASK, COM, { RS } },
4177     { "mtdar", XSPR(31,467,19), XSPR_MASK, COM, { RS } },
4178     { "mtrtcu", XSPR(31,467,20), XSPR_MASK, COM, { RS } },
4179     { "mtrtcl", XSPR(31,467,21), XSPR_MASK, COM, { RS } },
4180     { "mtdec", XSPR(31,467,22), XSPR_MASK, COM, { RS } },
4181     { "mtsdr0", XSPR(31,467,24), XSPR_MASK, POWER, { RS } },
4182     { "mtsdr1", XSPR(31,467,25), XSPR_MASK, COM, { RS } },
4183     { "mtsrr0", XSPR(31,467,26), XSPR_MASK, COM, { RS } },
4184     { "mtsrr1", XSPR(31,467,27), XSPR_MASK, COM, { RS } },
4185     { "mtcfar", XSPR(31,467,28), XSPR_MASK, POWER6, { RS } },
4186     { "mtpid", XSPR(31,467,48), XSPR_MASK, BOOKE, { RS } },
4187     { "mtpid", XSPR(31,467,945), XSPR_MASK, PPC403, { RS } },
4188     { "mtdecar", XSPR(31,467,54), XSPR_MASK, BOOKE, { RS } },
4189     { "mtcsrr0", XSPR(31,467,58), XSPR_MASK, BOOKE, { RS } },
4190     { "mtcsrr1", XSPR(31,467,59), XSPR_MASK, BOOKE, { RS } },
4191     { "mtdear", XSPR(31,467,61), XSPR_MASK, BOOKE, { RS } },
4192     { "mtdear", XSPR(31,467,981), XSPR_MASK, PPC403, { RS } },
4193     { "mtesr", XSPR(31,467,62), XSPR_MASK, BOOKE, { RS } },
4194     { "mtesr", XSPR(31,467,980), XSPR_MASK, PPC403, { RS } },
4195     { "mtivpr", XSPR(31,467,63), XSPR_MASK, BOOKE, { RS } },
4196     { "mtcmpa", XSPR(31,467,144), XSPR_MASK, PPC860, { RS } },
4197     { "mtcmpb", XSPR(31,467,145), XSPR_MASK, PPC860, { RS } },
4198     { "mtcmpc", XSPR(31,467,146), XSPR_MASK, PPC860, { RS } },
4199     { "mtcmpd", XSPR(31,467,147), XSPR_MASK, PPC860, { RS } },
4200     { "mticr", XSPR(31,467,148), XSPR_MASK, PPC860, { RS } },
4201     { "mtder", XSPR(31,467,149), XSPR_MASK, PPC860, { RS } },
4202     { "mtcounta", XSPR(31,467,150), XSPR_MASK, PPC860, { RS } },
4203     { "mtcountb", XSPR(31,467,151), XSPR_MASK, PPC860, { RS } },
4204     { "mtcmpe", XSPR(31,467,152), XSPR_MASK, PPC860, { RS } },
4205     { "mtcmpf", XSPR(31,467,153), XSPR_MASK, PPC860, { RS } },
4206     { "mtcmpg", XSPR(31,467,154), XSPR_MASK, PPC860, { RS } },
4207     { "mtcmph", XSPR(31,467,155), XSPR_MASK, PPC860, { RS } },
4208     { "mtlctrl1", XSPR(31,467,156), XSPR_MASK, PPC860, { RS } },
4209     { "mtlctrl2", XSPR(31,467,157), XSPR_MASK, PPC860, { RS } },
4210     { "mtictrl", XSPR(31,467,158), XSPR_MASK, PPC860, { RS } },
4211     { "mtbar", XSPR(31,467,159), XSPR_MASK, PPC860, { RS } },
4212     { "mtvrsave", XSPR(31,467,256), XSPR_MASK, PPCVEC, { RS } },
4213     { "mtusprg0", XSPR(31,467,256), XSPR_MASK, BOOKE, { RS } },
4214     { "mtsprg", XSPR(31,467,256), XSPRG_MASK,PPC, { SPRG, RS } },
4215     { "mtsprg0", XSPR(31,467,272), XSPR_MASK, PPC, { RS } },
4216     { "mtsprg1", XSPR(31,467,273), XSPR_MASK, PPC, { RS } },
4217     { "mtsprg2", XSPR(31,467,274), XSPR_MASK, PPC, { RS } },
4218     { "mtsprg3", XSPR(31,467,275), XSPR_MASK, PPC, { RS } },
4219     { "mtsprg4", XSPR(31,467,276), XSPR_MASK, PPC405 | BOOKE, { RS } },
4220     { "mtsprg5", XSPR(31,467,277), XSPR_MASK, PPC405 | BOOKE, { RS } },
4221     { "mtsprg6", XSPR(31,467,278), XSPR_MASK, PPC405 | BOOKE, { RS } },
4222     { "mtsprg7", XSPR(31,467,279), XSPR_MASK, PPC405 | BOOKE, { RS } },
4223     { "mtasr", XSPR(31,467,280), XSPR_MASK, PPC64, { RS } },
4224     { "mtear", XSPR(31,467,282), XSPR_MASK, PPC, { RS } },
4225     { "mttbl", XSPR(31,467,284), XSPR_MASK, PPC, { RS } },
4226     { "mttbu", XSPR(31,467,285), XSPR_MASK, PPC, { RS } },
4227     { "mtdbsr", XSPR(31,467,304), XSPR_MASK, BOOKE, { RS } },
4228     { "mtdbsr", XSPR(31,467,1008), XSPR_MASK, PPC403, { RS } },
4229     { "mtdbcr0", XSPR(31,467,308), XSPR_MASK, BOOKE, { RS } },
4230     { "mtdbcr0", XSPR(31,467,1010), XSPR_MASK, PPC405, { RS } },
4231     { "mtdbcr1", XSPR(31,467,309), XSPR_MASK, BOOKE, { RS } },
4232     { "mtdbcr1", XSPR(31,467,957), XSPR_MASK, PPC405, { RS } },
4233     { "mtdbcr2", XSPR(31,467,310), XSPR_MASK, BOOKE, { RS } },
4234     { "mtiac1", XSPR(31,467,312), XSPR_MASK, BOOKE, { RS } },
4235     { "mtiac1", XSPR(31,467,1012), XSPR_MASK, PPC403, { RS } },
4236     { "mtiac2", XSPR(31,467,313), XSPR_MASK, BOOKE, { RS } },
4237     { "mtiac2", XSPR(31,467,1013), XSPR_MASK, PPC403, { RS } },
4238     { "mtiac3", XSPR(31,467,314), XSPR_MASK, BOOKE, { RS } },
4239     { "mtiac3", XSPR(31,467,948), XSPR_MASK, PPC405, { RS } },
4240     { "mtiac4", XSPR(31,467,315), XSPR_MASK, BOOKE, { RS } },
4241     { "mtiac4", XSPR(31,467,949), XSPR_MASK, PPC405, { RS } },
4242     { "mtdac1", XSPR(31,467,316), XSPR_MASK, BOOKE, { RS } },
4243     { "mtdac1", XSPR(31,467,1014), XSPR_MASK, PPC403, { RS } },
4244     { "mtdac2", XSPR(31,467,317), XSPR_MASK, BOOKE, { RS } },
4245     { "mtdac2", XSPR(31,467,1015), XSPR_MASK, PPC403, { RS } },
4246     { "mtdvc1", XSPR(31,467,318), XSPR_MASK, BOOKE, { RS } },
4247     { "mtdvc1", XSPR(31,467,950), XSPR_MASK, PPC405, { RS } },
4248     { "mtdvc2", XSPR(31,467,319), XSPR_MASK, BOOKE, { RS } },
4249     { "mtdvc2", XSPR(31,467,951), XSPR_MASK, PPC405, { RS } },
4250     { "mttsr", XSPR(31,467,336), XSPR_MASK, BOOKE, { RS } },
4251     { "mttsr", XSPR(31,467,984), XSPR_MASK, PPC403, { RS } },
4252     { "mttcr", XSPR(31,467,340), XSPR_MASK, BOOKE, { RS } },
4253     { "mttcr", XSPR(31,467,986), XSPR_MASK, PPC403, { RS } },
4254     { "mtivor0", XSPR(31,467,400), XSPR_MASK, BOOKE, { RS } },
4255     { "mtivor1", XSPR(31,467,401), XSPR_MASK, BOOKE, { RS } },
4256     { "mtivor2", XSPR(31,467,402), XSPR_MASK, BOOKE, { RS } },
4257     { "mtivor3", XSPR(31,467,403), XSPR_MASK, BOOKE, { RS } },
4258     { "mtivor4", XSPR(31,467,404), XSPR_MASK, BOOKE, { RS } },
4259     { "mtivor5", XSPR(31,467,405), XSPR_MASK, BOOKE, { RS } },
4260     { "mtivor6", XSPR(31,467,406), XSPR_MASK, BOOKE, { RS } },
4261     { "mtivor7", XSPR(31,467,407), XSPR_MASK, BOOKE, { RS } },
4262     { "mtivor8", XSPR(31,467,408), XSPR_MASK, BOOKE, { RS } },
4263     { "mtivor9", XSPR(31,467,409), XSPR_MASK, BOOKE, { RS } },
4264     { "mtivor10", XSPR(31,467,410), XSPR_MASK, BOOKE, { RS } },
4265     { "mtivor11", XSPR(31,467,411), XSPR_MASK, BOOKE, { RS } },
4266     { "mtivor12", XSPR(31,467,412), XSPR_MASK, BOOKE, { RS } },
4267     { "mtivor13", XSPR(31,467,413), XSPR_MASK, BOOKE, { RS } },
4268     { "mtivor14", XSPR(31,467,414), XSPR_MASK, BOOKE, { RS } },
4269     { "mtivor15", XSPR(31,467,415), XSPR_MASK, BOOKE, { RS } },
4270     { "mtspefscr", XSPR(31,467,512), XSPR_MASK, PPCSPE, { RS } },
4271     { "mtbbear", XSPR(31,467,513), XSPR_MASK, PPCBRLK, { RS } },
4272     { "mtbbtar", XSPR(31,467,514), XSPR_MASK, PPCBRLK, { RS } },
4273     { "mtivor32", XSPR(31,467,528), XSPR_MASK, PPCSPE, { RS } },
4274     { "mtivor33", XSPR(31,467,529), XSPR_MASK, PPCSPE, { RS } },
4275     { "mtivor34", XSPR(31,467,530), XSPR_MASK, PPCSPE, { RS } },
4276     { "mtivor35", XSPR(31,467,531), XSPR_MASK, PPCPMR, { RS } },
4277     { "mtibatu", XSPR(31,467,528), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
4278     { "mtibatl", XSPR(31,467,529), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
4279     { "mtdbatu", XSPR(31,467,536), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
4280     { "mtdbatl", XSPR(31,467,537), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
4281     { "mtmcsrr0", XSPR(31,467,570), XSPR_MASK, PPCRFMCI, { RS } },
4282     { "mtmcsrr1", XSPR(31,467,571), XSPR_MASK, PPCRFMCI, { RS } },
4283     { "mtmcsr", XSPR(31,467,572), XSPR_MASK, PPCRFMCI, { RS } },
4284     { "mtummcr0", XSPR(31,467,936), XSPR_MASK, PPC750, { RS } },
4285     { "mtupmc1", XSPR(31,467,937), XSPR_MASK, PPC750, { RS } },
4286     { "mtupmc2", XSPR(31,467,938), XSPR_MASK, PPC750, { RS } },
4287     { "mtusia", XSPR(31,467,939), XSPR_MASK, PPC750, { RS } },
4288     { "mtummcr1", XSPR(31,467,940), XSPR_MASK, PPC750, { RS } },
4289     { "mtupmc3", XSPR(31,467,941), XSPR_MASK, PPC750, { RS } },
4290     { "mtupmc4", XSPR(31,467,942), XSPR_MASK, PPC750, { RS } },
4291     { "mtzpr", XSPR(31,467,944), XSPR_MASK, PPC403, { RS } },
4292     { "mtccr0", XSPR(31,467,947), XSPR_MASK, PPC405, { RS } },
4293     { "mtmmcr0", XSPR(31,467,952), XSPR_MASK, PPC750, { RS } },
4294     { "mtsgr", XSPR(31,467,953), XSPR_MASK, PPC403, { RS } },
4295     { "mtpmc1", XSPR(31,467,953), XSPR_MASK, PPC750, { RS } },
4296     { "mtdcwr", XSPR(31,467,954), XSPR_MASK, PPC403, { RS } },
4297     { "mtpmc2", XSPR(31,467,954), XSPR_MASK, PPC750, { RS } },
4298     { "mtsler", XSPR(31,467,955), XSPR_MASK, PPC405, { RS } },
4299     { "mtsia", XSPR(31,467,955), XSPR_MASK, PPC750, { RS } },
4300     { "mtsu0r", XSPR(31,467,956), XSPR_MASK, PPC405, { RS } },
4301     { "mtmmcr1", XSPR(31,467,956), XSPR_MASK, PPC750, { RS } },
4302     { "mtpmc3", XSPR(31,467,957), XSPR_MASK, PPC750, { RS } },
4303     { "mtpmc4", XSPR(31,467,958), XSPR_MASK, PPC750, { RS } },
4304     { "mticdbdr", XSPR(31,467,979), XSPR_MASK, PPC403, { RS } },
4305     { "mtevpr", XSPR(31,467,982), XSPR_MASK, PPC403, { RS } },
4306     { "mtcdbcr", XSPR(31,467,983), XSPR_MASK, PPC403, { RS } },
4307     { "mtpit", XSPR(31,467,987), XSPR_MASK, PPC403, { RS } },
4308     { "mttbhi", XSPR(31,467,988), XSPR_MASK, PPC403, { RS } },
4309     { "mttblo", XSPR(31,467,989), XSPR_MASK, PPC403, { RS } },
4310     { "mtsrr2", XSPR(31,467,990), XSPR_MASK, PPC403, { RS } },
4311     { "mtsrr3", XSPR(31,467,991), XSPR_MASK, PPC403, { RS } },
4312     { "mtl2cr", XSPR(31,467,1017), XSPR_MASK, PPC750, { RS } },
4313     { "mtdccr", XSPR(31,467,1018), XSPR_MASK, PPC403, { RS } },
4314     { "mticcr", XSPR(31,467,1019), XSPR_MASK, PPC403, { RS } },
4315     { "mtictc", XSPR(31,467,1019), XSPR_MASK, PPC750, { RS } },
4316     { "mtpbl1", XSPR(31,467,1020), XSPR_MASK, PPC403, { RS } },
4317     { "mtthrm1", XSPR(31,467,1020), XSPR_MASK, PPC750, { RS } },
4318     { "mtpbu1", XSPR(31,467,1021), XSPR_MASK, PPC403, { RS } },
4319     { "mtthrm2", XSPR(31,467,1021), XSPR_MASK, PPC750, { RS } },
4320     { "mtpbl2", XSPR(31,467,1022), XSPR_MASK, PPC403, { RS } },
4321     { "mtthrm3", XSPR(31,467,1022), XSPR_MASK, PPC750, { RS } },
4322     { "mtpbu2", XSPR(31,467,1023), XSPR_MASK, PPC403, { RS } },
4323     { "mtspr", X(31,467), X_MASK, COM, { SPR, RS } },
4324    
4325     { "dcbi", X(31,470), XRT_MASK, PPC, { RA, RB } },
4326    
4327     { "nand", XRC(31,476,0), X_MASK, COM, { RA, RS, RB } },
4328     { "nand.", XRC(31,476,1), X_MASK, COM, { RA, RS, RB } },
4329    
4330     { "dcbie", X(31,478), XRT_MASK, BOOKE64, { RA, RB } },
4331    
4332     { "dcread", X(31,486), X_MASK, PPC403|PPC440, { RT, RA, RB }},
4333    
4334     { "mtpmr", X(31,462), X_MASK, PPCPMR, { PMR, RS }},
4335    
4336     { "icbtls", X(31,486), X_MASK, PPCCHLK, { CT, RA, RB }},
4337    
4338     { "nabs", XO(31,488,0,0), XORB_MASK, M601, { RT, RA } },
4339     { "subfme64",XO(31,488,0,0), XORB_MASK, BOOKE64, { RT, RA } },
4340     { "nabs.", XO(31,488,0,1), XORB_MASK, M601, { RT, RA } },
4341     { "nabso", XO(31,488,1,0), XORB_MASK, M601, { RT, RA } },
4342     { "subfme64o",XO(31,488,1,0), XORB_MASK, BOOKE64, { RT, RA } },
4343     { "nabso.", XO(31,488,1,1), XORB_MASK, M601, { RT, RA } },
4344    
4345     { "divd", XO(31,489,0,0), XO_MASK, PPC64, { RT, RA, RB } },
4346     { "divd.", XO(31,489,0,1), XO_MASK, PPC64, { RT, RA, RB } },
4347     { "divdo", XO(31,489,1,0), XO_MASK, PPC64, { RT, RA, RB } },
4348     { "divdo.", XO(31,489,1,1), XO_MASK, PPC64, { RT, RA, RB } },
4349    
4350     { "addme64", XO(31,490,0,0), XORB_MASK, BOOKE64, { RT, RA } },
4351     { "addme64o",XO(31,490,1,0), XORB_MASK, BOOKE64, { RT, RA } },
4352    
4353     { "divw", XO(31,491,0,0), XO_MASK, PPC, { RT, RA, RB } },
4354     { "divw.", XO(31,491,0,1), XO_MASK, PPC, { RT, RA, RB } },
4355     { "divwo", XO(31,491,1,0), XO_MASK, PPC, { RT, RA, RB } },
4356     { "divwo.", XO(31,491,1,1), XO_MASK, PPC, { RT, RA, RB } },
4357    
4358     { "icbtlse", X(31,494), X_MASK, PPCCHLK64, { CT, RA, RB }},
4359    
4360     { "slbia", X(31,498), 0xffffffff, PPC64, { 0 } },
4361    
4362     { "cli", X(31,502), XRB_MASK, POWER, { RT, RA } },
4363    
4364     { "stdcxe.", XRC(31,511,1), X_MASK, BOOKE64, { RS, RA, RB } },
4365    
4366     { "mcrxr", X(31,512), XRARB_MASK|(3<<21), COM, { BF } },
4367    
4368     { "bblels", X(31,518), X_MASK, PPCBRLK, { 0 }},
4369     { "mcrxr64", X(31,544), XRARB_MASK|(3<<21), BOOKE64, { BF } },
4370    
4371     { "clcs", X(31,531), XRB_MASK, M601, { RT, RA } },
4372    
4373     { "ldbrx", X(31,532), X_MASK, CELL, { RT, RA0, RB } },
4374    
4375     { "lswx", X(31,533), X_MASK, PPCCOM, { RT, RA0, RB } },
4376     { "lsx", X(31,533), X_MASK, PWRCOM, { RT, RA, RB } },
4377    
4378     { "lwbrx", X(31,534), X_MASK, PPCCOM, { RT, RA0, RB } },
4379     { "lbrx", X(31,534), X_MASK, PWRCOM, { RT, RA, RB } },
4380    
4381     { "lfsx", X(31,535), X_MASK, COM, { FRT, RA0, RB } },
4382    
4383     { "srw", XRC(31,536,0), X_MASK, PPCCOM, { RA, RS, RB } },
4384     { "sr", XRC(31,536,0), X_MASK, PWRCOM, { RA, RS, RB } },
4385     { "srw.", XRC(31,536,1), X_MASK, PPCCOM, { RA, RS, RB } },
4386     { "sr.", XRC(31,536,1), X_MASK, PWRCOM, { RA, RS, RB } },
4387    
4388     { "rrib", XRC(31,537,0), X_MASK, M601, { RA, RS, RB } },
4389     { "rrib.", XRC(31,537,1), X_MASK, M601, { RA, RS, RB } },
4390    
4391     { "srd", XRC(31,539,0), X_MASK, PPC64, { RA, RS, RB } },
4392     { "srd.", XRC(31,539,1), X_MASK, PPC64, { RA, RS, RB } },
4393    
4394     { "maskir", XRC(31,541,0), X_MASK, M601, { RA, RS, RB } },
4395     { "maskir.", XRC(31,541,1), X_MASK, M601, { RA, RS, RB } },
4396    
4397     { "lwbrxe", X(31,542), X_MASK, BOOKE64, { RT, RA0, RB } },
4398    
4399     { "lfsxe", X(31,543), X_MASK, BOOKE64, { FRT, RA0, RB } },
4400    
4401     { "bbelr", X(31,550), X_MASK, PPCBRLK, { 0 }},
4402    
4403     { "tlbsync", X(31,566), 0xffffffff, PPC, { 0 } },
4404    
4405     { "lfsux", X(31,567), X_MASK, COM, { FRT, RAS, RB } },
4406    
4407     { "lfsuxe", X(31,575), X_MASK, BOOKE64, { FRT, RAS, RB } },
4408    
4409     { "mfsr", X(31,595), XRB_MASK|(1<<20), COM32, { RT, SR } },
4410    
4411     { "lswi", X(31,597), X_MASK, PPCCOM, { RT, RA0, NB } },
4412     { "lsi", X(31,597), X_MASK, PWRCOM, { RT, RA0, NB } },
4413    
4414     { "lwsync", XSYNC(31,598,1), 0xffffffff, PPC, { 0 } },
4415     { "ptesync", XSYNC(31,598,2), 0xffffffff, PPC64, { 0 } },
4416     { "msync", X(31,598), 0xffffffff, BOOKE, { 0 } },
4417     { "sync", X(31,598), XSYNC_MASK, PPCCOM, { LS } },
4418     { "dcs", X(31,598), 0xffffffff, PWRCOM, { 0 } },
4419    
4420     { "lfdx", X(31,599), X_MASK, COM, { FRT, RA0, RB } },
4421    
4422     { "lfdxe", X(31,607), X_MASK, BOOKE64, { FRT, RA0, RB } },
4423    
4424     { "mffgpr", XRC(31,607,0), XRA_MASK, POWER6, { FRT, RB } },
4425    
4426     { "mfsri", X(31,627), X_MASK, PWRCOM, { RT, RA, RB } },
4427    
4428     { "dclst", X(31,630), XRB_MASK, PWRCOM, { RS, RA } },
4429    
4430     { "lfdux", X(31,631), X_MASK, COM, { FRT, RAS, RB } },
4431    
4432     { "lfduxe", X(31,639), X_MASK, BOOKE64, { FRT, RAS, RB } },
4433    
4434     { "mfsrin", X(31,659), XRA_MASK, PPC32, { RT, RB } },
4435    
4436     { "stdbrx", X(31,660), X_MASK, CELL, { RS, RA0, RB } },
4437    
4438     { "stswx", X(31,661), X_MASK, PPCCOM, { RS, RA0, RB } },
4439     { "stsx", X(31,661), X_MASK, PWRCOM, { RS, RA0, RB } },
4440    
4441     { "stwbrx", X(31,662), X_MASK, PPCCOM, { RS, RA0, RB } },
4442     { "stbrx", X(31,662), X_MASK, PWRCOM, { RS, RA0, RB } },
4443    
4444     { "stfsx", X(31,663), X_MASK, COM, { FRS, RA0, RB } },
4445    
4446     { "srq", XRC(31,664,0), X_MASK, M601, { RA, RS, RB } },
4447     { "srq.", XRC(31,664,1), X_MASK, M601, { RA, RS, RB } },
4448    
4449     { "sre", XRC(31,665,0), X_MASK, M601, { RA, RS, RB } },
4450     { "sre.", XRC(31,665,1), X_MASK, M601, { RA, RS, RB } },
4451    
4452     { "stwbrxe", X(31,670), X_MASK, BOOKE64, { RS, RA0, RB } },
4453    
4454     { "stfsxe", X(31,671), X_MASK, BOOKE64, { FRS, RA0, RB } },
4455    
4456     { "stfsux", X(31,695), X_MASK, COM, { FRS, RAS, RB } },
4457    
4458     { "sriq", XRC(31,696,0), X_MASK, M601, { RA, RS, SH } },
4459     { "sriq.", XRC(31,696,1), X_MASK, M601, { RA, RS, SH } },
4460    
4461     { "stfsuxe", X(31,703), X_MASK, BOOKE64, { FRS, RAS, RB } },
4462    
4463     { "stswi", X(31,725), X_MASK, PPCCOM, { RS, RA0, NB } },
4464     { "stsi", X(31,725), X_MASK, PWRCOM, { RS, RA0, NB } },
4465    
4466     { "stfdx", X(31,727), X_MASK, COM, { FRS, RA0, RB } },
4467    
4468     { "srlq", XRC(31,728,0), X_MASK, M601, { RA, RS, RB } },
4469     { "srlq.", XRC(31,728,1), X_MASK, M601, { RA, RS, RB } },
4470    
4471     { "sreq", XRC(31,729,0), X_MASK, M601, { RA, RS, RB } },
4472     { "sreq.", XRC(31,729,1), X_MASK, M601, { RA, RS, RB } },
4473    
4474     { "stfdxe", X(31,735), X_MASK, BOOKE64, { FRS, RA0, RB } },
4475    
4476     { "mftgpr", XRC(31,735,0), XRA_MASK, POWER6, { RT, FRB } },
4477    
4478     { "dcba", X(31,758), XRT_MASK, PPC405 | BOOKE, { RA, RB } },
4479    
4480     { "stfdux", X(31,759), X_MASK, COM, { FRS, RAS, RB } },
4481    
4482     { "srliq", XRC(31,760,0), X_MASK, M601, { RA, RS, SH } },
4483     { "srliq.", XRC(31,760,1), X_MASK, M601, { RA, RS, SH } },
4484    
4485     { "dcbae", X(31,766), XRT_MASK, BOOKE64, { RA, RB } },
4486    
4487     { "stfduxe", X(31,767), X_MASK, BOOKE64, { FRS, RAS, RB } },
4488    
4489     { "tlbivax", X(31,786), XRT_MASK, BOOKE, { RA, RB } },
4490     { "tlbivaxe",X(31,787), XRT_MASK, BOOKE64, { RA, RB } },
4491    
4492     { "lwzcix", X(31,789), X_MASK, POWER6, { RT, RA0, RB } },
4493    
4494     { "lhbrx", X(31,790), X_MASK, COM, { RT, RA0, RB } },
4495    
4496     { "sraw", XRC(31,792,0), X_MASK, PPCCOM, { RA, RS, RB } },
4497     { "sra", XRC(31,792,0), X_MASK, PWRCOM, { RA, RS, RB } },
4498     { "sraw.", XRC(31,792,1), X_MASK, PPCCOM, { RA, RS, RB } },
4499     { "sra.", XRC(31,792,1), X_MASK, PWRCOM, { RA, RS, RB } },
4500    
4501     { "srad", XRC(31,794,0), X_MASK, PPC64, { RA, RS, RB } },
4502     { "srad.", XRC(31,794,1), X_MASK, PPC64, { RA, RS, RB } },
4503    
4504     { "lhbrxe", X(31,798), X_MASK, BOOKE64, { RT, RA0, RB } },
4505    
4506     { "ldxe", X(31,799), X_MASK, BOOKE64, { RT, RA0, RB } },
4507     { "lduxe", X(31,831), X_MASK, BOOKE64, { RT, RA0, RB } },
4508    
4509     { "rac", X(31,818), X_MASK, PWRCOM, { RT, RA, RB } },
4510    
4511     { "lhzcix", X(31,821), X_MASK, POWER6, { RT, RA0, RB } },
4512    
4513     { "dss", XDSS(31,822,0), XDSS_MASK, PPCVEC, { STRM } },
4514     { "dssall", XDSS(31,822,1), XDSS_MASK, PPCVEC, { 0 } },
4515    
4516     { "srawi", XRC(31,824,0), X_MASK, PPCCOM, { RA, RS, SH } },
4517     { "srai", XRC(31,824,0), X_MASK, PWRCOM, { RA, RS, SH } },
4518     { "srawi.", XRC(31,824,1), X_MASK, PPCCOM, { RA, RS, SH } },
4519     { "srai.", XRC(31,824,1), X_MASK, PWRCOM, { RA, RS, SH } },
4520    
4521     { "slbmfev", X(31,851), XRA_MASK, PPC64, { RT, RB } },
4522    
4523     { "lbzcix", X(31,853), X_MASK, POWER6, { RT, RA0, RB } },
4524    
4525     { "mbar", X(31,854), X_MASK, BOOKE, { MO } },
4526     { "eieio", X(31,854), 0xffffffff, PPC, { 0 } },
4527    
4528     { "lfiwax", X(31,855), X_MASK, POWER6, { FRT, RA0, RB } },
4529    
4530     { "ldcix", X(31,885), X_MASK, POWER6, { RT, RA0, RB } },
4531    
4532     { "tlbsx", XRC(31,914,0), X_MASK, PPC403|BOOKE, { RTO, RA, RB } },
4533     { "tlbsx.", XRC(31,914,1), X_MASK, PPC403|BOOKE, { RTO, RA, RB } },
4534     { "tlbsxe", XRC(31,915,0), X_MASK, BOOKE64, { RTO, RA, RB } },
4535     { "tlbsxe.", XRC(31,915,1), X_MASK, BOOKE64, { RTO, RA, RB } },
4536    
4537     { "slbmfee", X(31,915), XRA_MASK, PPC64, { RT, RB } },
4538    
4539     { "stwcix", X(31,917), X_MASK, POWER6, { RS, RA0, RB } },
4540    
4541     { "sthbrx", X(31,918), X_MASK, COM, { RS, RA0, RB } },
4542    
4543     { "sraq", XRC(31,920,0), X_MASK, M601, { RA, RS, RB } },
4544     { "sraq.", XRC(31,920,1), X_MASK, M601, { RA, RS, RB } },
4545    
4546     { "srea", XRC(31,921,0), X_MASK, M601, { RA, RS, RB } },
4547     { "srea.", XRC(31,921,1), X_MASK, M601, { RA, RS, RB } },
4548    
4549     { "extsh", XRC(31,922,0), XRB_MASK, PPCCOM, { RA, RS } },
4550     { "exts", XRC(31,922,0), XRB_MASK, PWRCOM, { RA, RS } },
4551     { "extsh.", XRC(31,922,1), XRB_MASK, PPCCOM, { RA, RS } },
4552     { "exts.", XRC(31,922,1), XRB_MASK, PWRCOM, { RA, RS } },
4553    
4554     { "sthbrxe", X(31,926), X_MASK, BOOKE64, { RS, RA0, RB } },
4555    
4556     { "stdxe", X(31,927), X_MASK, BOOKE64, { RS, RA0, RB } },
4557    
4558     { "tlbrehi", XTLB(31,946,0), XTLB_MASK, PPC403, { RT, RA } },
4559     { "tlbrelo", XTLB(31,946,1), XTLB_MASK, PPC403, { RT, RA } },
4560     { "tlbre", X(31,946), X_MASK, PPC403|BOOKE, { RSO, RAOPT, SHO } },
4561    
4562     { "sthcix", X(31,949), X_MASK, POWER6, { RS, RA0, RB } },
4563    
4564     { "sraiq", XRC(31,952,0), X_MASK, M601, { RA, RS, SH } },
4565     { "sraiq.", XRC(31,952,1), X_MASK, M601, { RA, RS, SH } },
4566    
4567     { "extsb", XRC(31,954,0), XRB_MASK, PPC, { RA, RS} },
4568     { "extsb.", XRC(31,954,1), XRB_MASK, PPC, { RA, RS} },
4569    
4570     { "stduxe", X(31,959), X_MASK, BOOKE64, { RS, RAS, RB } },
4571    
4572     { "iccci", X(31,966), XRT_MASK, PPC403|PPC440, { RA, RB } },
4573    
4574     { "tlbwehi", XTLB(31,978,0), XTLB_MASK, PPC403, { RT, RA } },
4575     { "tlbwelo", XTLB(31,978,1), XTLB_MASK, PPC403, { RT, RA } },
4576     { "tlbwe", X(31,978), X_MASK, PPC403|BOOKE, { RSO, RAOPT, SHO } },
4577     { "tlbld", X(31,978), XRTRA_MASK, PPC, { RB } },
4578    
4579     { "stbcix", X(31,981), X_MASK, POWER6, { RS, RA0, RB } },
4580    
4581     { "icbi", X(31,982), XRT_MASK, PPC, { RA, RB } },
4582    
4583     { "stfiwx", X(31,983), X_MASK, PPC, { FRS, RA0, RB } },
4584    
4585     { "extsw", XRC(31,986,0), XRB_MASK, PPC64 | BOOKE64,{ RA, RS } },
4586     { "extsw.", XRC(31,986,1), XRB_MASK, PPC64, { RA, RS } },
4587    
4588     { "icread", X(31,998), XRT_MASK, PPC403|PPC440, { RA, RB } },
4589    
4590     { "icbie", X(31,990), XRT_MASK, BOOKE64, { RA, RB } },
4591     { "stfiwxe", X(31,991), X_MASK, BOOKE64, { FRS, RA0, RB } },
4592    
4593     { "tlbli", X(31,1010), XRTRA_MASK, PPC, { RB } },
4594    
4595     { "stdcix", X(31,1013), X_MASK, POWER6, { RS, RA0, RB } },
4596    
4597     { "dcbzl", XOPL(31,1014,1), XRT_MASK,POWER4, { RA, RB } },
4598     { "dcbz", X(31,1014), XRT_MASK, PPC, { RA, RB } },
4599     { "dclz", X(31,1014), XRT_MASK, PPC, { RA, RB } },
4600    
4601     { "dcbze", X(31,1022), XRT_MASK, BOOKE64, { RA, RB } },
4602    
4603     { "lvebx", X(31, 7), X_MASK, PPCVEC, { VD, RA, RB } },
4604     { "lvehx", X(31, 39), X_MASK, PPCVEC, { VD, RA, RB } },
4605     { "lvewx", X(31, 71), X_MASK, PPCVEC, { VD, RA, RB } },
4606     { "lvsl", X(31, 6), X_MASK, PPCVEC, { VD, RA, RB } },
4607     { "lvsr", X(31, 38), X_MASK, PPCVEC, { VD, RA, RB } },
4608     { "lvx", X(31, 103), X_MASK, PPCVEC, { VD, RA, RB } },
4609     { "lvxl", X(31, 359), X_MASK, PPCVEC, { VD, RA, RB } },
4610     { "stvebx", X(31, 135), X_MASK, PPCVEC, { VS, RA, RB } },
4611     { "stvehx", X(31, 167), X_MASK, PPCVEC, { VS, RA, RB } },
4612     { "stvewx", X(31, 199), X_MASK, PPCVEC, { VS, RA, RB } },
4613     { "stvx", X(31, 231), X_MASK, PPCVEC, { VS, RA, RB } },
4614     { "stvxl", X(31, 487), X_MASK, PPCVEC, { VS, RA, RB } },
4615    
4616     /* New load/store left/right index vector instructions that are in the Cell only. */
4617     { "lvlx", X(31, 519), X_MASK, CELL, { VD, RA0, RB } },
4618     { "lvlxl", X(31, 775), X_MASK, CELL, { VD, RA0, RB } },
4619     { "lvrx", X(31, 551), X_MASK, CELL, { VD, RA0, RB } },
4620     { "lvrxl", X(31, 807), X_MASK, CELL, { VD, RA0, RB } },
4621     { "stvlx", X(31, 647), X_MASK, CELL, { VS, RA0, RB } },
4622     { "stvlxl", X(31, 903), X_MASK, CELL, { VS, RA0, RB } },
4623     { "stvrx", X(31, 679), X_MASK, CELL, { VS, RA0, RB } },
4624     { "stvrxl", X(31, 935), X_MASK, CELL, { VS, RA0, RB } },
4625    
4626     { "lwz", OP(32), OP_MASK, PPCCOM, { RT, D, RA0 } },
4627     { "l", OP(32), OP_MASK, PWRCOM, { RT, D, RA0 } },
4628    
4629     { "lwzu", OP(33), OP_MASK, PPCCOM, { RT, D, RAL } },
4630     { "lu", OP(33), OP_MASK, PWRCOM, { RT, D, RA0 } },
4631    
4632     { "lbz", OP(34), OP_MASK, COM, { RT, D, RA0 } },
4633    
4634     { "lbzu", OP(35), OP_MASK, COM, { RT, D, RAL } },
4635    
4636     { "stw", OP(36), OP_MASK, PPCCOM, { RS, D, RA0 } },
4637     { "st", OP(36), OP_MASK, PWRCOM, { RS, D, RA0 } },
4638    
4639     { "stwu", OP(37), OP_MASK, PPCCOM, { RS, D, RAS } },
4640     { "stu", OP(37), OP_MASK, PWRCOM, { RS, D, RA0 } },
4641    
4642     { "stb", OP(38), OP_MASK, COM, { RS, D, RA0 } },
4643    
4644     { "stbu", OP(39), OP_MASK, COM, { RS, D, RAS } },
4645    
4646     { "lhz", OP(40), OP_MASK, COM, { RT, D, RA0 } },
4647    
4648     { "lhzu", OP(41), OP_MASK, COM, { RT, D, RAL } },
4649    
4650     { "lha", OP(42), OP_MASK, COM, { RT, D, RA0 } },
4651    
4652     { "lhau", OP(43), OP_MASK, COM, { RT, D, RAL } },
4653    
4654     { "sth", OP(44), OP_MASK, COM, { RS, D, RA0 } },
4655    
4656     { "sthu", OP(45), OP_MASK, COM, { RS, D, RAS } },
4657    
4658     { "lmw", OP(46), OP_MASK, PPCCOM, { RT, D, RAM } },
4659     { "lm", OP(46), OP_MASK, PWRCOM, { RT, D, RA0 } },
4660    
4661     { "stmw", OP(47), OP_MASK, PPCCOM, { RS, D, RA0 } },
4662     { "stm", OP(47), OP_MASK, PWRCOM, { RS, D, RA0 } },
4663    
4664     { "lfs", OP(48), OP_MASK, COM, { FRT, D, RA0 } },
4665    
4666     { "lfsu", OP(49), OP_MASK, COM, { FRT, D, RAS } },
4667    
4668     { "lfd", OP(50), OP_MASK, COM, { FRT, D, RA0 } },
4669    
4670     { "lfdu", OP(51), OP_MASK, COM, { FRT, D, RAS } },
4671    
4672     { "stfs", OP(52), OP_MASK, COM, { FRS, D, RA0 } },
4673    
4674     { "stfsu", OP(53), OP_MASK, COM, { FRS, D, RAS } },
4675    
4676     { "stfd", OP(54), OP_MASK, COM, { FRS, D, RA0 } },
4677    
4678     { "stfdu", OP(55), OP_MASK, COM, { FRS, D, RAS } },
4679    
4680     { "lq", OP(56), OP_MASK, POWER4, { RTQ, DQ, RAQ } },
4681    
4682     { "lfq", OP(56), OP_MASK, POWER2, { FRT, D, RA0 } },
4683    
4684     { "lfqu", OP(57), OP_MASK, POWER2, { FRT, D, RA0 } },
4685    
4686     { "lfdp", OP(57), OP_MASK, POWER6, { FRT, D, RA0 } },
4687    
4688     { "lbze", DEO(58,0), DE_MASK, BOOKE64, { RT, DE, RA0 } },
4689     { "lbzue", DEO(58,1), DE_MASK, BOOKE64, { RT, DE, RAL } },
4690     { "lhze", DEO(58,2), DE_MASK, BOOKE64, { RT, DE, RA0 } },
4691     { "lhzue", DEO(58,3), DE_MASK, BOOKE64, { RT, DE, RAL } },
4692     { "lhae", DEO(58,4), DE_MASK, BOOKE64, { RT, DE, RA0 } },
4693     { "lhaue", DEO(58,5), DE_MASK, BOOKE64, { RT, DE, RAL } },
4694     { "lwze", DEO(58,6), DE_MASK, BOOKE64, { RT, DE, RA0 } },
4695     { "lwzue", DEO(58,7), DE_MASK, BOOKE64, { RT, DE, RAL } },
4696     { "stbe", DEO(58,8), DE_MASK, BOOKE64, { RS, DE, RA0 } },
4697     { "stbue", DEO(58,9), DE_MASK, BOOKE64, { RS, DE, RAS } },
4698     { "sthe", DEO(58,10), DE_MASK, BOOKE64, { RS, DE, RA0 } },
4699     { "sthue", DEO(58,11), DE_MASK, BOOKE64, { RS, DE, RAS } },
4700     { "stwe", DEO(58,14), DE_MASK, BOOKE64, { RS, DE, RA0 } },
4701     { "stwue", DEO(58,15), DE_MASK, BOOKE64, { RS, DE, RAS } },
4702    
4703     { "ld", DSO(58,0), DS_MASK, PPC64, { RT, DS, RA0 } },
4704    
4705     { "ldu", DSO(58,1), DS_MASK, PPC64, { RT, DS, RAL } },
4706    
4707     { "lwa", DSO(58,2), DS_MASK, PPC64, { RT, DS, RA0 } },
4708    
4709     { "dadd", XRC(59,2,0), X_MASK, POWER6, { FRT, FRA, FRB } },
4710     { "dadd.", XRC(59,2,1), X_MASK, POWER6, { FRT, FRA, FRB } },
4711    
4712     { "dqua", ZRC(59,3,0), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
4713     { "dqua.", ZRC(59,3,1), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
4714    
4715     { "fdivs", A(59,18,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
4716     { "fdivs.", A(59,18,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
4717    
4718     { "fsubs", A(59,20,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
4719     { "fsubs.", A(59,20,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
4720    
4721     { "fadds", A(59,21,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
4722     { "fadds.", A(59,21,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
4723    
4724     { "fsqrts", A(59,22,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
4725     { "fsqrts.", A(59,22,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
4726    
4727     { "fres", A(59,24,0), AFRALFRC_MASK, PPC, { FRT, FRB, A_L } },
4728     { "fres.", A(59,24,1), AFRALFRC_MASK, PPC, { FRT, FRB, A_L } },
4729    
4730     { "fmuls", A(59,25,0), AFRB_MASK, PPC, { FRT, FRA, FRC } },
4731     { "fmuls.", A(59,25,1), AFRB_MASK, PPC, { FRT, FRA, FRC } },
4732    
4733     { "frsqrtes", A(59,26,0), AFRALFRC_MASK,POWER5, { FRT, FRB, A_L } },
4734     { "frsqrtes.",A(59,26,1), AFRALFRC_MASK,POWER5, { FRT, FRB, A_L } },
4735    
4736     { "fmsubs", A(59,28,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
4737     { "fmsubs.", A(59,28,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
4738    
4739     { "fmadds", A(59,29,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
4740     { "fmadds.", A(59,29,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
4741    
4742     { "fnmsubs", A(59,30,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
4743     { "fnmsubs.",A(59,30,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
4744    
4745     { "fnmadds", A(59,31,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
4746     { "fnmadds.",A(59,31,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
4747    
4748     { "dmul", XRC(59,34,0), X_MASK, POWER6, { FRT, FRA, FRB } },
4749     { "dmul.", XRC(59,34,1), X_MASK, POWER6, { FRT, FRA, FRB } },
4750    
4751     { "drrnd", ZRC(59,35,0), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
4752     { "drrnd.", ZRC(59,35,1), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
4753    
4754     { "dscli", ZRC(59,66,0), Z_MASK, POWER6, { FRT, FRA, SH16 } },
4755     { "dscli.", ZRC(59,66,1), Z_MASK, POWER6, { FRT, FRA, SH16 } },
4756    
4757     { "dquai", ZRC(59,67,0), Z2_MASK, POWER6, { TE, FRT, FRB, RMC } },
4758     { "dquai.", ZRC(59,67,1), Z2_MASK, POWER6, { TE, FRT, FRB, RMC } },
4759    
4760     { "dscri", ZRC(59,98,0), Z_MASK, POWER6, { FRT, FRA, SH16 } },
4761     { "dscri.", ZRC(59,98,1), Z_MASK, POWER6, { FRT, FRA, SH16 } },
4762    
4763     { "drintx", ZRC(59,99,0), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
4764     { "drintx.", ZRC(59,99,1), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
4765    
4766     { "dcmpo", X(59,130), X_MASK, POWER6, { BF, FRA, FRB } },
4767    
4768     { "dtstex", X(59,162), X_MASK, POWER6, { BF, FRA, FRB } },
4769     { "dtstdc", Z(59,194), Z_MASK, POWER6, { BF, FRA, DCM } },
4770     { "dtstdg", Z(59,226), Z_MASK, POWER6, { BF, FRA, DGM } },
4771    
4772     { "drintn", ZRC(59,227,0), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
4773     { "drintn.", ZRC(59,227,1), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
4774    
4775     { "dctdp", XRC(59,258,0), X_MASK, POWER6, { FRT, FRB } },
4776     { "dctdp.", XRC(59,258,1), X_MASK, POWER6, { FRT, FRB } },
4777    
4778     { "dctfix", XRC(59,290,0), X_MASK, POWER6, { FRT, FRB } },
4779     { "dctfix.", XRC(59,290,1), X_MASK, POWER6, { FRT, FRB } },
4780    
4781     { "ddedpd", XRC(59,322,0), X_MASK, POWER6, { SP, FRT, FRB } },
4782     { "ddedpd.", XRC(59,322,1), X_MASK, POWER6, { SP, FRT, FRB } },
4783    
4784     { "dxex", XRC(59,354,0), X_MASK, POWER6, { FRT, FRB } },
4785     { "dxex.", XRC(59,354,1), X_MASK, POWER6, { FRT, FRB } },
4786    
4787     { "dsub", XRC(59,514,0), X_MASK, POWER6, { FRT, FRA, FRB } },
4788     { "dsub.", XRC(59,514,1), X_MASK, POWER6, { FRT, FRA, FRB } },
4789    
4790     { "ddiv", XRC(59,546,0), X_MASK, POWER6, { FRT, FRA, FRB } },
4791     { "ddiv.", XRC(59,546,1), X_MASK, POWER6, { FRT, FRA, FRB } },
4792    
4793     { "dcmpu", X(59,642), X_MASK, POWER6, { BF, FRA, FRB } },
4794    
4795     { "dtstsf", X(59,674), X_MASK, POWER6, { BF, FRA, FRB } },
4796    
4797     { "drsp", XRC(59,770,0), X_MASK, POWER6, { FRT, FRB } },
4798     { "drsp.", XRC(59,770,1), X_MASK, POWER6, { FRT, FRB } },
4799    
4800     { "dcffix", XRC(59,802,0), X_MASK, POWER6, { FRT, FRB } },
4801     { "dcffix.", XRC(59,802,1), X_MASK, POWER6, { FRT, FRB } },
4802    
4803     { "denbcd", XRC(59,834,0), X_MASK, POWER6, { S, FRT, FRB } },
4804     { "denbcd.", XRC(59,834,1), X_MASK, POWER6, { S, FRT, FRB } },
4805    
4806     { "diex", XRC(59,866,0), X_MASK, POWER6, { FRT, FRA, FRB } },
4807     { "diex.", XRC(59,866,1), X_MASK, POWER6, { FRT, FRA, FRB } },
4808    
4809     { "stfq", OP(60), OP_MASK, POWER2, { FRS, D, RA } },
4810    
4811     { "stfqu", OP(61), OP_MASK, POWER2, { FRS, D, RA } },
4812    
4813     { "stfdp", OP(61), OP_MASK, POWER6, { FRT, D, RA0 } },
4814    
4815     { "lde", DEO(62,0), DE_MASK, BOOKE64, { RT, DES, RA0 } },
4816     { "ldue", DEO(62,1), DE_MASK, BOOKE64, { RT, DES, RA0 } },
4817     { "lfse", DEO(62,4), DE_MASK, BOOKE64, { FRT, DES, RA0 } },
4818     { "lfsue", DEO(62,5), DE_MASK, BOOKE64, { FRT, DES, RAS } },
4819     { "lfde", DEO(62,6), DE_MASK, BOOKE64, { FRT, DES, RA0 } },
4820     { "lfdue", DEO(62,7), DE_MASK, BOOKE64, { FRT, DES, RAS } },
4821     { "stde", DEO(62,8), DE_MASK, BOOKE64, { RS, DES, RA0 } },
4822     { "stdue", DEO(62,9), DE_MASK, BOOKE64, { RS, DES, RAS } },
4823     { "stfse", DEO(62,12), DE_MASK, BOOKE64, { FRS, DES, RA0 } },
4824     { "stfsue", DEO(62,13), DE_MASK, BOOKE64, { FRS, DES, RAS } },
4825     { "stfde", DEO(62,14), DE_MASK, BOOKE64, { FRS, DES, RA0 } },
4826     { "stfdue", DEO(62,15), DE_MASK, BOOKE64, { FRS, DES, RAS } },
4827    
4828     { "std", DSO(62,0), DS_MASK, PPC64, { RS, DS, RA0 } },
4829    
4830     { "stdu", DSO(62,1), DS_MASK, PPC64, { RS, DS, RAS } },
4831    
4832     { "stq", DSO(62,2), DS_MASK, POWER4, { RSQ, DS, RA0 } },
4833    
4834     { "fcmpu", X(63,0), X_MASK|(3<<21), COM, { BF, FRA, FRB } },
4835    
4836     { "daddq", XRC(63,2,0), X_MASK, POWER6, { FRT, FRA, FRB } },
4837     { "daddq.", XRC(63,2,1), X_MASK, POWER6, { FRT, FRA, FRB } },
4838    
4839     { "dquaq", ZRC(63,3,0), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
4840     { "dquaq.", ZRC(63,3,1), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
4841    
4842     { "fcpsgn", XRC(63,8,0), X_MASK, POWER6, { FRT, FRA, FRB } },
4843     { "fcpsgn.", XRC(63,8,1), X_MASK, POWER6, { FRT, FRA, FRB } },
4844    
4845     { "frsp", XRC(63,12,0), XRA_MASK, COM, { FRT, FRB } },
4846     { "frsp.", XRC(63,12,1), XRA_MASK, COM, { FRT, FRB } },
4847    
4848     { "fctiw", XRC(63,14,0), XRA_MASK, PPCCOM, { FRT, FRB } },
4849     { "fcir", XRC(63,14,0), XRA_MASK, POWER2, { FRT, FRB } },
4850     { "fctiw.", XRC(63,14,1), XRA_MASK, PPCCOM, { FRT, FRB } },
4851     { "fcir.", XRC(63,14,1), XRA_MASK, POWER2, { FRT, FRB } },
4852    
4853     { "fctiwz", XRC(63,15,0), XRA_MASK, PPCCOM, { FRT, FRB } },
4854     { "fcirz", XRC(63,15,0), XRA_MASK, POWER2, { FRT, FRB } },
4855     { "fctiwz.", XRC(63,15,1), XRA_MASK, PPCCOM, { FRT, FRB } },
4856     { "fcirz.", XRC(63,15,1), XRA_MASK, POWER2, { FRT, FRB } },
4857    
4858     { "fdiv", A(63,18,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
4859     { "fd", A(63,18,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
4860     { "fdiv.", A(63,18,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
4861     { "fd.", A(63,18,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
4862    
4863     { "fsub", A(63,20,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
4864     { "fs", A(63,20,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
4865     { "fsub.", A(63,20,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
4866     { "fs.", A(63,20,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
4867    
4868     { "fadd", A(63,21,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
4869     { "fa", A(63,21,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
4870     { "fadd.", A(63,21,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
4871     { "fa.", A(63,21,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
4872    
4873     { "fsqrt", A(63,22,0), AFRAFRC_MASK, PPCPWR2, { FRT, FRB } },
4874     { "fsqrt.", A(63,22,1), AFRAFRC_MASK, PPCPWR2, { FRT, FRB } },
4875    
4876     { "fsel", A(63,23,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
4877     { "fsel.", A(63,23,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
4878    
4879     { "fre", A(63,24,0), AFRALFRC_MASK, POWER5, { FRT, FRB, A_L } },
4880     { "fre.", A(63,24,1), AFRALFRC_MASK, POWER5, { FRT, FRB, A_L } },
4881    
4882     { "fmul", A(63,25,0), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } },
4883     { "fm", A(63,25,0), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } },
4884     { "fmul.", A(63,25,1), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } },
4885     { "fm.", A(63,25,1), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } },
4886    
4887     { "frsqrte", A(63,26,0), AFRALFRC_MASK, PPC, { FRT, FRB, A_L } },
4888     { "frsqrte.",A(63,26,1), AFRALFRC_MASK, PPC, { FRT, FRB, A_L } },
4889    
4890     { "fmsub", A(63,28,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
4891     { "fms", A(63,28,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
4892     { "fmsub.", A(63,28,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
4893     { "fms.", A(63,28,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
4894    
4895     { "fmadd", A(63,29,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
4896     { "fma", A(63,29,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
4897     { "fmadd.", A(63,29,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
4898     { "fma.", A(63,29,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
4899    
4900     { "fnmsub", A(63,30,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
4901     { "fnms", A(63,30,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
4902     { "fnmsub.", A(63,30,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
4903     { "fnms.", A(63,30,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
4904    
4905     { "fnmadd", A(63,31,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
4906     { "fnma", A(63,31,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
4907     { "fnmadd.", A(63,31,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
4908     { "fnma.", A(63,31,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
4909    
4910     { "fcmpo", X(63,32), X_MASK|(3<<21), COM, { BF, FRA, FRB } },
4911    
4912     { "dmulq", XRC(63,34,0), X_MASK, POWER6, { FRT, FRA, FRB } },
4913     { "dmulq.", XRC(63,34,1), X_MASK, POWER6, { FRT, FRA, FRB } },
4914    
4915     { "drrndq", ZRC(63,35,0), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
4916     { "drrndq.", ZRC(63,35,1), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
4917    
4918     { "mtfsb1", XRC(63,38,0), XRARB_MASK, COM, { BT } },
4919     { "mtfsb1.", XRC(63,38,1), XRARB_MASK, COM, { BT } },
4920    
4921     { "fneg", XRC(63,40,0), XRA_MASK, COM, { FRT, FRB } },
4922     { "fneg.", XRC(63,40,1), XRA_MASK, COM, { FRT, FRB } },
4923    
4924     { "mcrfs", X(63,64), XRB_MASK|(3<<21)|(3<<16), COM, { BF, BFA } },
4925    
4926     { "dscliq", ZRC(63,66,0), Z_MASK, POWER6, { FRT, FRA, SH16 } },
4927     { "dscliq.", ZRC(63,66,1), Z_MASK, POWER6, { FRT, FRA, SH16 } },
4928    
4929     { "dquaiq", ZRC(63,67,0), Z2_MASK, POWER6, { TE, FRT, FRB, RMC } },
4930     { "dquaiq.", ZRC(63,67,1), Z2_MASK, POWER6, { FRT, FRA, FRB, RMC } },
4931    
4932     { "mtfsb0", XRC(63,70,0), XRARB_MASK, COM, { BT } },
4933     { "mtfsb0.", XRC(63,70,1), XRARB_MASK, COM, { BT } },
4934    
4935     { "fmr", XRC(63,72,0), XRA_MASK, COM, { FRT, FRB } },
4936     { "fmr.", XRC(63,72,1), XRA_MASK, COM, { FRT, FRB } },
4937    
4938     { "dscriq", ZRC(63,98,0), Z_MASK, POWER6, { FRT, FRA, SH16 } },
4939     { "dscriq.", ZRC(63,98,1), Z_MASK, POWER6, { FRT, FRA, SH16 } },
4940    
4941     { "drintxq", ZRC(63,99,0), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
4942     { "drintxq.",ZRC(63,99,1), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
4943    
4944     { "dcmpoq", X(63,130), X_MASK, POWER6, { BF, FRA, FRB } },
4945    
4946     { "mtfsfi", XRC(63,134,0), XWRA_MASK|(3<<21)|(1<<11), COM, { BFF, U, W } },
4947     { "mtfsfi.", XRC(63,134,1), XWRA_MASK|(3<<21)|(1<<11), COM, { BFF, U, W } },
4948    
4949     { "fnabs", XRC(63,136,0), XRA_MASK, COM, { FRT, FRB } },
4950     { "fnabs.", XRC(63,136,1), XRA_MASK, COM, { FRT, FRB } },
4951    
4952     { "dtstexq", X(63,162), X_MASK, POWER6, { BF, FRA, FRB } },
4953     { "dtstdcq", Z(63,194), Z_MASK, POWER6, { BF, FRA, DCM } },
4954     { "dtstdgq", Z(63,226), Z_MASK, POWER6, { BF, FRA, DGM } },
4955    
4956     { "drintnq", ZRC(63,227,0), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
4957     { "drintnq.",ZRC(63,227,1), Z2_MASK, POWER6, { R, FRT, FRB, RMC } },
4958    
4959     { "dctqpq", XRC(63,258,0), X_MASK, POWER6, { FRT, FRB } },
4960     { "dctqpq.", XRC(63,258,1), X_MASK, POWER6, { FRT, FRB } },
4961    
4962     { "fabs", XRC(63,264,0), XRA_MASK, COM, { FRT, FRB } },
4963     { "fabs.", XRC(63,264,1), XRA_MASK, COM, { FRT, FRB } },
4964    
4965     { "dctfixq", XRC(63,290,0), X_MASK, POWER6, { FRT, FRB } },
4966     { "dctfixq.",XRC(63,290,1), X_MASK, POWER6, { FRT, FRB } },
4967    
4968     { "ddedpdq", XRC(63,322,0), X_MASK, POWER6, { SP, FRT, FRB } },
4969     { "ddedpdq.",XRC(63,322,1), X_MASK, POWER6, { SP, FRT, FRB } },
4970    
4971     { "dxexq", XRC(63,354,0), X_MASK, POWER6, { FRT, FRB } },
4972     { "dxexq.", XRC(63,354,1), X_MASK, POWER6, { FRT, FRB } },
4973    
4974     { "frin", XRC(63,392,0), XRA_MASK, POWER5, { FRT, FRB } },
4975     { "frin.", XRC(63,392,1), XRA_MASK, POWER5, { FRT, FRB } },
4976     { "friz", XRC(63,424,0), XRA_MASK, POWER5, { FRT, FRB } },
4977     { "friz.", XRC(63,424,1), XRA_MASK, POWER5, { FRT, FRB } },
4978     { "frip", XRC(63,456,0), XRA_MASK, POWER5, { FRT, FRB } },
4979     { "frip.", XRC(63,456,1), XRA_MASK, POWER5, { FRT, FRB } },
4980     { "frim", XRC(63,488,0), XRA_MASK, POWER5, { FRT, FRB } },
4981     { "frim.", XRC(63,488,1), XRA_MASK, POWER5, { FRT, FRB } },
4982    
4983     { "dsubq", XRC(63,514,0), X_MASK, POWER6, { FRT, FRA, FRB } },
4984     { "dsubq.", XRC(63,514,1), X_MASK, POWER6, { FRT, FRA, FRB } },
4985    
4986     { "ddivq", XRC(63,546,0), X_MASK, POWER6, { FRT, FRA, FRB } },
4987     { "ddivq.", XRC(63,546,1), X_MASK, POWER6, { FRT, FRA, FRB } },
4988    
4989     { "mffs", XRC(63,583,0), XRARB_MASK, COM, { FRT } },
4990     { "mffs.", XRC(63,583,1), XRARB_MASK, COM, { FRT } },
4991    
4992     { "dcmpuq", X(63,642), X_MASK, POWER6, { BF, FRA, FRB } },
4993    
4994     { "dtstsfq", X(63,674), X_MASK, POWER6, { BF, FRA, FRB } },
4995    
4996     { "mtfsf", XFL(63,711,0), XFL_MASK, COM, { FLM, FRB, XFL_L, W } },
4997     { "mtfsf.", XFL(63,711,1), XFL_MASK, COM, { FLM, FRB, XFL_L, W } },
4998    
4999     { "drdpq", XRC(63,770,0), X_MASK, POWER6, { FRT, FRB } },
5000     { "drdpq.", XRC(63,770,1), X_MASK, POWER6, { FRT, FRB } },
5001    
5002     { "dcffixq", XRC(63,802,0), X_MASK, POWER6, { FRT, FRB } },
5003     { "dcffixq.",XRC(63,802,1), X_MASK, POWER6, { FRT, FRB } },
5004    
5005     { "fctid", XRC(63,814,0), XRA_MASK, PPC64, { FRT, FRB } },
5006     { "fctid.", XRC(63,814,1), XRA_MASK, PPC64, { FRT, FRB } },
5007    
5008     { "fctidz", XRC(63,815,0), XRA_MASK, PPC64, { FRT, FRB } },
5009     { "fctidz.", XRC(63,815,1), XRA_MASK, PPC64, { FRT, FRB } },
5010    
5011     { "denbcdq", XRC(63,834,0), X_MASK, POWER6, { S, FRT, FRB } },
5012     { "denbcdq.",XRC(63,834,1), X_MASK, POWER6, { S, FRT, FRB } },
5013    
5014     { "fcfid", XRC(63,846,0), XRA_MASK, PPC64, { FRT, FRB } },
5015     { "fcfid.", XRC(63,846,1), XRA_MASK, PPC64, { FRT, FRB } },
5016    
5017     { "diexq", XRC(63,866,0), X_MASK, POWER6, { FRT, FRA, FRB } },
5018     { "diexq.", XRC(63,866,1), X_MASK, POWER6, { FRT, FRA, FRB } },
5019    
5020     };
5021    
5022     const int powerpc_num_opcodes =
5023     sizeof (powerpc_opcodes) / sizeof (powerpc_opcodes[0]);
5024    
5025     /* The macro table. This is only used by the assembler. */
5026    
5027     /* The expressions of the form (-x ! 31) & (x | 31) have the value 0
5028     when x=0; 32-x when x is between 1 and 31; are negative if x is
5029     negative; and are 32 or more otherwise. This is what you want
5030     when, for instance, you are emulating a right shift by a
5031     rotate-left-and-mask, because the underlying instructions support
5032     shifts of size 0 but not shifts of size 32. By comparison, when
5033     extracting x bits from some word you want to use just 32-x, because
5034     the underlying instructions don't support extracting 0 bits but do
5035     support extracting the whole word (32 bits in this case). */
5036    
5037     const struct powerpc_macro powerpc_macros[] = {
5038     { "extldi", 4, PPC64, "rldicr %0,%1,%3,(%2)-1" },
5039     { "extldi.", 4, PPC64, "rldicr. %0,%1,%3,(%2)-1" },
5040     { "extrdi", 4, PPC64, "rldicl %0,%1,(%2)+(%3),64-(%2)" },
5041     { "extrdi.", 4, PPC64, "rldicl. %0,%1,(%2)+(%3),64-(%2)" },
5042     { "insrdi", 4, PPC64, "rldimi %0,%1,64-((%2)+(%3)),%3" },
5043     { "insrdi.", 4, PPC64, "rldimi. %0,%1,64-((%2)+(%3)),%3" },
5044     { "rotrdi", 3, PPC64, "rldicl %0,%1,(-(%2)!63)&((%2)|63),0" },
5045     { "rotrdi.", 3, PPC64, "rldicl. %0,%1,(-(%2)!63)&((%2)|63),0" },
5046     { "sldi", 3, PPC64, "rldicr %0,%1,%2,63-(%2)" },
5047     { "sldi.", 3, PPC64, "rldicr. %0,%1,%2,63-(%2)" },
5048     { "srdi", 3, PPC64, "rldicl %0,%1,(-(%2)!63)&((%2)|63),%2" },
5049     { "srdi.", 3, PPC64, "rldicl. %0,%1,(-(%2)!63)&((%2)|63),%2" },
5050     { "clrrdi", 3, PPC64, "rldicr %0,%1,0,63-(%2)" },
5051     { "clrrdi.", 3, PPC64, "rldicr. %0,%1,0,63-(%2)" },
5052     { "clrlsldi",4, PPC64, "rldic %0,%1,%3,(%2)-(%3)" },
5053     { "clrlsldi.",4, PPC64, "rldic. %0,%1,%3,(%2)-(%3)" },
5054    
5055     { "extlwi", 4, PPCCOM, "rlwinm %0,%1,%3,0,(%2)-1" },
5056     { "extlwi.", 4, PPCCOM, "rlwinm. %0,%1,%3,0,(%2)-1" },
5057     { "extrwi", 4, PPCCOM, "rlwinm %0,%1,((%2)+(%3))&((%2)+(%3)<>32),32-(%2),31" },
5058     { "extrwi.", 4, PPCCOM, "rlwinm. %0,%1,((%2)+(%3))&((%2)+(%3)<>32),32-(%2),31" },
5059     { "inslwi", 4, PPCCOM, "rlwimi %0,%1,(-(%3)!31)&((%3)|31),%3,(%2)+(%3)-1" },
5060     { "inslwi.", 4, PPCCOM, "rlwimi. %0,%1,(-(%3)!31)&((%3)|31),%3,(%2)+(%3)-1"},
5061     { "insrwi", 4, PPCCOM, "rlwimi %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1" },
5062     { "insrwi.", 4, PPCCOM, "rlwimi. %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1"},
5063     { "rotrwi", 3, PPCCOM, "rlwinm %0,%1,(-(%2)!31)&((%2)|31),0,31" },
5064     { "rotrwi.", 3, PPCCOM, "rlwinm. %0,%1,(-(%2)!31)&((%2)|31),0,31" },
5065     { "slwi", 3, PPCCOM, "rlwinm %0,%1,%2,0,31-(%2)" },
5066     { "sli", 3, PWRCOM, "rlinm %0,%1,%2,0,31-(%2)" },
5067     { "slwi.", 3, PPCCOM, "rlwinm. %0,%1,%2,0,31-(%2)" },
5068     { "sli.", 3, PWRCOM, "rlinm. %0,%1,%2,0,31-(%2)" },
5069     { "srwi", 3, PPCCOM, "rlwinm %0,%1,(-(%2)!31)&((%2)|31),%2,31" },
5070     { "sri", 3, PWRCOM, "rlinm %0,%1,(-(%2)!31)&((%2)|31),%2,31" },
5071     { "srwi.", 3, PPCCOM, "rlwinm. %0,%1,(-(%2)!31)&((%2)|31),%2,31" },
5072     { "sri.", 3, PWRCOM, "rlinm. %0,%1,(-(%2)!31)&((%2)|31),%2,31" },
5073     { "clrrwi", 3, PPCCOM, "rlwinm %0,%1,0,0,31-(%2)" },
5074     { "clrrwi.", 3, PPCCOM, "rlwinm. %0,%1,0,0,31-(%2)" },
5075     { "clrlslwi",4, PPCCOM, "rlwinm %0,%1,%3,(%2)-(%3),31-(%3)" },
5076     { "clrlslwi.",4, PPCCOM, "rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)" },
5077     };
5078    
5079     const int powerpc_num_macros =
5080     sizeof (powerpc_macros) / sizeof (powerpc_macros[0]);
5081    
5082    
5083     /* This file provides several disassembler functions, all of which use
5084     the disassembler interface defined in dis-asm.h. Several functions
5085     are provided because this file handles disassembly for the PowerPC
5086     in both big and little endian mode and also for the POWER (RS/6000)
5087     chip. */
5088    
5089     static int print_insn_powerpc (bfd_vma, struct disassemble_info *, int, int);
5090    
5091     /* Determine which set of machines to disassemble for. PPC403/601 or
5092     BookE. For convenience, also disassemble instructions supported
5093     by the AltiVec vector unit. */
5094    
5095     static int
5096     powerpc_dialect (struct disassemble_info *info)
5097     {
5098     int dialect = PPC_OPCODE_PPC;
5099    
5100     if (BFD_DEFAULT_TARGET_SIZE == 64)
5101     dialect |= PPC_OPCODE_64;
5102    
5103     if (info->disassembler_options
5104     && strstr (info->disassembler_options, "booke") != NULL)
5105     dialect |= PPC_OPCODE_BOOKE | PPC_OPCODE_BOOKE64;
5106     else if ((info->mach == bfd_mach_ppc_e500)
5107     || (info->disassembler_options
5108     && strstr (info->disassembler_options, "e500") != NULL))
5109     dialect |= (PPC_OPCODE_BOOKE
5110     | PPC_OPCODE_SPE | PPC_OPCODE_ISEL
5111     | PPC_OPCODE_EFS | PPC_OPCODE_BRLOCK
5112     | PPC_OPCODE_PMR | PPC_OPCODE_CACHELCK
5113     | PPC_OPCODE_RFMCI);
5114     else if (info->disassembler_options
5115     && strstr (info->disassembler_options, "efs") != NULL)
5116     dialect |= PPC_OPCODE_EFS;
5117     else if (info->disassembler_options
5118     && strstr (info->disassembler_options, "e300") != NULL)
5119     dialect |= PPC_OPCODE_E300 | PPC_OPCODE_CLASSIC | PPC_OPCODE_COMMON;
5120     else if (info->disassembler_options
5121     && strstr (info->disassembler_options, "440") != NULL)
5122     dialect |= PPC_OPCODE_BOOKE | PPC_OPCODE_32
5123     | PPC_OPCODE_440 | PPC_OPCODE_ISEL | PPC_OPCODE_RFMCI;
5124     else
5125     dialect |= (PPC_OPCODE_403 | PPC_OPCODE_601 | PPC_OPCODE_CLASSIC
5126     | PPC_OPCODE_COMMON | PPC_OPCODE_ALTIVEC);
5127    
5128     if (info->disassembler_options
5129     && strstr (info->disassembler_options, "power4") != NULL)
5130     dialect |= PPC_OPCODE_POWER4;
5131    
5132     if (info->disassembler_options
5133     && strstr (info->disassembler_options, "power5") != NULL)
5134     dialect |= PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5;
5135    
5136     if (info->disassembler_options
5137     && strstr (info->disassembler_options, "cell") != NULL)
5138     dialect |= PPC_OPCODE_POWER4 | PPC_OPCODE_CELL | PPC_OPCODE_ALTIVEC;
5139    
5140     if (info->disassembler_options
5141     && strstr (info->disassembler_options, "power6") != NULL)
5142     dialect |= PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6 | PPC_OPCODE_ALTIVEC;
5143    
5144     if (info->disassembler_options
5145     && strstr (info->disassembler_options, "any") != NULL)
5146     dialect |= PPC_OPCODE_ANY;
5147    
5148     if (info->disassembler_options)
5149     {
5150     if (strstr (info->disassembler_options, "32") != NULL)
5151     dialect &= ~PPC_OPCODE_64;
5152     else if (strstr (info->disassembler_options, "64") != NULL)
5153     dialect |= PPC_OPCODE_64;
5154     }
5155    
5156     info->private_data = (char *) 0 + dialect;
5157     return dialect;
5158     }
5159    
5160     /* Qemu default */
5161     int
5162     print_insn_ppc (bfd_vma memaddr, struct disassemble_info *info)
5163     {
5164     int dialect = (char *) info->private_data - (char *) 0;
5165     return print_insn_powerpc (memaddr, info, 1, dialect);
5166     }
5167    
5168     /* Print a big endian PowerPC instruction. */
5169    
5170     int
5171     print_insn_big_powerpc (bfd_vma memaddr, struct disassemble_info *info)
5172     {
5173     int dialect = (char *) info->private_data - (char *) 0;
5174     return print_insn_powerpc (memaddr, info, 1, dialect);
5175     }
5176    
5177     /* Print a little endian PowerPC instruction. */
5178    
5179     int
5180     print_insn_little_powerpc (bfd_vma memaddr, struct disassemble_info *info)
5181     {
5182     int dialect = (char *) info->private_data - (char *) 0;
5183     return print_insn_powerpc (memaddr, info, 0, dialect);
5184     }
5185    
5186     /* Print a POWER (RS/6000) instruction. */
5187    
5188     int
5189     print_insn_rs6000 (bfd_vma memaddr, struct disassemble_info *info)
5190     {
5191     return print_insn_powerpc (memaddr, info, 1, PPC_OPCODE_POWER);
5192     }
5193    
5194     /* Extract the operand value from the PowerPC or POWER instruction. */
5195    
5196     static long
5197     operand_value_powerpc (const struct powerpc_operand *operand,
5198     unsigned long insn, int dialect)
5199     {
5200     long value;
5201     int invalid;
5202     /* Extract the value from the instruction. */
5203     if (operand->extract)
5204     value = (*operand->extract) (insn, dialect, &invalid);
5205     else
5206     {
5207     value = (insn >> operand->shift) & operand->bitm;
5208     if ((operand->flags & PPC_OPERAND_SIGNED) != 0)
5209     {
5210     /* BITM is always some number of zeros followed by some
5211     number of ones, followed by some numer of zeros. */
5212     unsigned long top = operand->bitm;
5213     /* top & -top gives the rightmost 1 bit, so this
5214     fills in any trailing zeros. */
5215     top |= (top & -top) - 1;
5216     top &= ~(top >> 1);
5217     value = (value ^ top) - top;
5218     }
5219     }
5220    
5221     return value;
5222     }
5223    
5224     /* Determine whether the optional operand(s) should be printed. */
5225    
5226     static int
5227     skip_optional_operands (const unsigned char *opindex,
5228     unsigned long insn, int dialect)
5229     {
5230     const struct powerpc_operand *operand;
5231    
5232     for (; *opindex != 0; opindex++)
5233     {
5234     operand = &powerpc_operands[*opindex];
5235     if ((operand->flags & PPC_OPERAND_NEXT) != 0
5236     || ((operand->flags & PPC_OPERAND_OPTIONAL) != 0
5237     && operand_value_powerpc (operand, insn, dialect) != 0))
5238     return 0;
5239     }
5240    
5241     return 1;
5242     }
5243    
5244     bfd_vma bfd_getl32 (const bfd_byte *addr)
5245     {
5246     unsigned long v;
5247    
5248     v = (unsigned long) addr[0];
5249     v |= (unsigned long) addr[1] << 8;
5250     v |= (unsigned long) addr[2] << 16;
5251     v |= (unsigned long) addr[3] << 24;
5252     return (bfd_vma) v;
5253     }
5254    
5255     bfd_vma bfd_getb32 (const bfd_byte *addr)
5256     {
5257     unsigned long v;
5258    
5259     v = (unsigned long) addr[0] << 24;
5260     v |= (unsigned long) addr[1] << 16;
5261     v |= (unsigned long) addr[2] << 8;
5262     v |= (unsigned long) addr[3];
5263     return (bfd_vma) v;
5264     }
5265    
5266     /* Get LENGTH bytes from info's buffer, at target address memaddr.
5267     Transfer them to myaddr. */
5268     int
5269     buffer_read_memory(bfd_vma memaddr, bfd_byte *myaddr, int length,
5270     struct disassemble_info *info)
5271     {
5272     if (memaddr < info->buffer_vma
5273     || memaddr + length > info->buffer_vma + info->buffer_length)
5274     /* Out of bounds. Use EIO because GDB uses it. */
5275     return EIO;
5276     memcpy (myaddr, info->buffer + (memaddr - info->buffer_vma), length);
5277     return 0;
5278     }
5279    
5280     /* Print an error message. We can assume that this is in response to
5281     an error return from buffer_read_memory. */
5282     void
5283     perror_memory (int status, bfd_vma memaddr, struct disassemble_info *info)
5284     {
5285     if (status != EIO)
5286     /* Can't happen. */
5287     (*info->fprintf_func) (info->stream, "Unknown error %d\n", status);
5288     else
5289     /* Actually, address between memaddr and memaddr + len was
5290     out of bounds. */
5291     (*info->fprintf_func) (info->stream,
5292     "Address 0x%" PRIx64 " is out of bounds.\n", memaddr);
5293     }
5294    
5295     /* This could be in a separate file, to save miniscule amounts of space
5296     in statically linked executables. */
5297    
5298     /* Just print the address is hex. This is included for completeness even
5299     though both GDB and objdump provide their own (to print symbolic
5300     addresses). */
5301    
5302     void
5303     generic_print_address (bfd_vma addr, struct disassemble_info *info)
5304     {
5305     (*info->fprintf_func) (info->stream, "0x%" PRIx64, addr);
5306     }
5307    
5308     /* Just return the given address. */
5309    
5310     int
5311     generic_symbol_at_address (bfd_vma addr, struct disassemble_info *info)
5312     {
5313     return 1;
5314     }
5315    
5316     /* Print a PowerPC or POWER instruction. */
5317    
5318     static int
5319     print_insn_powerpc (bfd_vma memaddr,
5320     struct disassemble_info *info,
5321     int bigendian,
5322     int dialect)
5323     {
5324     bfd_byte buffer[4];
5325     int status;
5326     unsigned long insn;
5327     const struct powerpc_opcode *opcode;
5328     const struct powerpc_opcode *opcode_end;
5329     unsigned long op;
5330    
5331     if (dialect == 0)
5332     dialect = powerpc_dialect (info);
5333    
5334     status = (*info->read_memory_func) (memaddr, buffer, 4, info);
5335     if (status != 0)
5336     {
5337     (*info->memory_error_func) (status, memaddr, info);
5338     return -1;
5339     }
5340    
5341     if (bigendian)
5342     insn = bfd_getb32 (buffer);
5343     else
5344     insn = bfd_getl32 (buffer);
5345    
5346     /* Get the major opcode of the instruction. */
5347     op = PPC_OP (insn);
5348    
5349     /* Find the first match in the opcode table. We could speed this up
5350     a bit by doing a binary search on the major opcode. */
5351     opcode_end = powerpc_opcodes + powerpc_num_opcodes;
5352     again:
5353     for (opcode = powerpc_opcodes; opcode < opcode_end; opcode++)
5354     {
5355     unsigned long table_op;
5356     const unsigned char *opindex;
5357     const struct powerpc_operand *operand;
5358     int invalid;
5359     int need_comma;
5360     int need_paren;
5361     int skip_optional;
5362    
5363     table_op = PPC_OP (opcode->opcode);
5364     if (op < table_op)
5365     break;
5366     if (op > table_op)
5367     continue;
5368    
5369     if ((insn & opcode->mask) != opcode->opcode
5370     || (opcode->flags & dialect) == 0)
5371     continue;
5372    
5373     /* Make two passes over the operands. First see if any of them
5374     have extraction functions, and, if they do, make sure the
5375     instruction is valid. */
5376     invalid = 0;
5377     for (opindex = opcode->operands; *opindex != 0; opindex++)
5378     {
5379     operand = powerpc_operands + *opindex;
5380     if (operand->extract)
5381     (*operand->extract) (insn, dialect, &invalid);
5382     }
5383     if (invalid)
5384     continue;
5385    
5386     /* The instruction is valid. */
5387     if (opcode->operands[0] != 0)
5388     (*info->fprintf_func) (info->stream, "%-7s ", opcode->name);
5389     else
5390     (*info->fprintf_func) (info->stream, "%s", opcode->name);
5391    
5392     /* Now extract and print the operands. */
5393     need_comma = 0;
5394     need_paren = 0;
5395     skip_optional = -1;
5396     for (opindex = opcode->operands; *opindex != 0; opindex++)
5397     {
5398     long value;
5399    
5400     operand = powerpc_operands + *opindex;
5401    
5402     /* Operands that are marked FAKE are simply ignored. We
5403     already made sure that the extract function considered
5404     the instruction to be valid. */
5405     if ((operand->flags & PPC_OPERAND_FAKE) != 0)
5406     continue;
5407    
5408     /* If all of the optional operands have the value zero,
5409     then don't print any of them. */
5410     if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0)
5411     {
5412     if (skip_optional < 0)
5413     skip_optional = skip_optional_operands (opindex, insn,
5414     dialect);
5415     if (skip_optional)
5416     continue;
5417     }
5418    
5419     value = operand_value_powerpc (operand, insn, dialect);
5420    
5421     if (need_comma)
5422     {
5423     (*info->fprintf_func) (info->stream, ",");
5424     need_comma = 0;
5425     }
5426    
5427     /* Print the operand as directed by the flags. */
5428     if ((operand->flags & PPC_OPERAND_GPR) != 0
5429     || ((operand->flags & PPC_OPERAND_GPR_0) != 0 && value != 0))
5430     (*info->fprintf_func) (info->stream, "r%ld", value);
5431     else if ((operand->flags & PPC_OPERAND_FPR) != 0)
5432     (*info->fprintf_func) (info->stream, "f%ld", value);
5433     else if ((operand->flags & PPC_OPERAND_VR) != 0)
5434     (*info->fprintf_func) (info->stream, "v%ld", value);
5435     else if ((operand->flags & PPC_OPERAND_RELATIVE) != 0)
5436     (*info->print_address_func) (memaddr + value, info);
5437     else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0)
5438     (*info->print_address_func) ((bfd_vma) value & 0xffffffff, info);
5439     else if ((operand->flags & PPC_OPERAND_CR) == 0
5440     || (dialect & PPC_OPCODE_PPC) == 0)
5441     (*info->fprintf_func) (info->stream, "%ld", value);
5442     else
5443     {
5444     if (operand->bitm == 7)
5445     (*info->fprintf_func) (info->stream, "cr%ld", value);
5446     else
5447     {
5448     static const char *cbnames[4] = { "lt", "gt", "eq", "so" };
5449     int cr;
5450     int cc;
5451    
5452     cr = value >> 2;
5453     if (cr != 0)
5454     (*info->fprintf_func) (info->stream, "4*cr%d+", cr);
5455     cc = value & 3;
5456     (*info->fprintf_func) (info->stream, "%s", cbnames[cc]);
5457     }
5458     }
5459    
5460     if (need_paren)
5461     {
5462     (*info->fprintf_func) (info->stream, ")");
5463     need_paren = 0;
5464     }
5465    
5466     if ((operand->flags & PPC_OPERAND_PARENS) == 0)
5467     need_comma = 1;
5468     else
5469     {
5470     (*info->fprintf_func) (info->stream, "(");
5471     need_paren = 1;
5472     }
5473     }
5474    
5475     /* We have found and printed an instruction; return. */
5476     return 4;
5477     }
5478    
5479     if ((dialect & PPC_OPCODE_ANY) != 0)
5480     {
5481     dialect = ~PPC_OPCODE_ANY;
5482     goto again;
5483     }
5484    
5485     /* We could not find a match. */
5486     (*info->fprintf_func) (info->stream, ".long 0x%lx", insn);
5487    
5488     return 4;
5489     }