Commit eca8f8889ff5ec05b1a0c8e6643a576c1dfdd58e

Authored by blueswir1
1 parent e6bd862b

Update ppc-dis.c from binutils 2.17

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6582 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 2 changed files with 3980 additions and 1880 deletions
dis-asm.h
... ... @@ -142,6 +142,7 @@ enum bfd_architecture
142 142 #define bfd_mach_ppc64 1
143 143 #define bfd_mach_ppc_403 403
144 144 #define bfd_mach_ppc_403gc 4030
  145 +#define bfd_mach_ppc_e500 500
145 146 #define bfd_mach_ppc_505 505
146 147 #define bfd_mach_ppc_601 601
147 148 #define bfd_mach_ppc_602 602
... ...
ppc-dis.c
1 1 /* ppc-dis.c -- Disassemble PowerPC instructions
2   - Copyright 1994 Free Software Foundation, Inc.
  2 + Copyright 1994, 1995, 2000, 2001, 2002, 2003, 2004, 2005
  3 + Free Software Foundation, Inc.
3 4 Written by Ian Lance Taylor, Cygnus Support
4 5  
5 6 This file is part of GDB, GAS, and the GNU binutils.
... ... @@ -18,9 +19,11 @@ You should have received a copy of the GNU General Public License
18 19 along with this file; see the file COPYING. If not, write to the Free
19 20 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
20 21 #include "dis-asm.h"
  22 +#define BFD_DEFAULT_TARGET_SIZE 64
21 23  
22 24 /* ppc.h -- Header file for PowerPC opcode table
23   - Copyright 1994 Free Software Foundation, Inc.
  25 + Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005
  26 + Free Software Foundation, Inc.
24 27 Written by Ian Lance Taylor, Cygnus Support
25 28  
26 29 This file is part of GDB, GAS, and the GNU binutils.
... ... @@ -37,7 +40,7 @@ the GNU General Public License for more details.
37 40  
38 41 You should have received a copy of the GNU General Public License
39 42 along with this file; see the file COPYING. If not, write to the Free
40   -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
  43 +Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
41 44  
42 45 /* The opcode table is an array of struct powerpc_opcode. */
43 46  
... ... @@ -48,18 +51,18 @@ struct powerpc_opcode
48 51  
49 52 /* The opcode itself. Those bits which will be filled in with
50 53 operands are zeroes. */
51   - uint32_t opcode;
  54 + unsigned long opcode;
52 55  
53 56 /* The opcode mask. This is used by the disassembler. This is a
54 57 mask containing ones indicating those bits which must match the
55 58 opcode field, and zeroes indicating those bits which need not
56 59 match (and are presumably filled in by operands). */
57   - uint32_t mask;
  60 + unsigned long mask;
58 61  
59 62 /* One bit flags for the opcode. These are used to indicate which
60 63 specific processors support the instructions. The defined values
61 64 are listed below. */
62   - uint32_t flags;
  65 + unsigned long flags;
63 66  
64 67 /* An array of operand codes. Each code is an index into the
65 68 operand table. They appear in the order which the operands must
... ... @@ -76,24 +79,86 @@ extern const int powerpc_num_opcodes;
76 79 /* Values defined for the flags field of a struct powerpc_opcode. */
77 80  
78 81 /* Opcode is defined for the PowerPC architecture. */
79   -#define PPC_OPCODE_PPC (01)
  82 +#define PPC_OPCODE_PPC 1
80 83  
81 84 /* Opcode is defined for the POWER (RS/6000) architecture. */
82   -#define PPC_OPCODE_POWER (02)
  85 +#define PPC_OPCODE_POWER 2
83 86  
84 87 /* Opcode is defined for the POWER2 (Rios 2) architecture. */
85   -#define PPC_OPCODE_POWER2 (04)
  88 +#define PPC_OPCODE_POWER2 4
86 89  
87 90 /* Opcode is only defined on 32 bit architectures. */
88   -#define PPC_OPCODE_32 (010)
  91 +#define PPC_OPCODE_32 8
89 92  
90 93 /* Opcode is only defined on 64 bit architectures. */
91   -#define PPC_OPCODE_64 (020)
  94 +#define PPC_OPCODE_64 0x10
92 95  
93 96 /* Opcode is supported by the Motorola PowerPC 601 processor. The 601
94 97 is assumed to support all PowerPC (PPC_OPCODE_PPC) instructions,
95 98 but it also supports many additional POWER instructions. */
96   -#define PPC_OPCODE_601 (040)
  99 +#define PPC_OPCODE_601 0x20
  100 +
  101 +/* Opcode is supported in both the Power and PowerPC architectures
  102 + (ie, compiler's -mcpu=common or assembler's -mcom). */
  103 +#define PPC_OPCODE_COMMON 0x40
  104 +
  105 +/* Opcode is supported for any Power or PowerPC platform (this is
  106 + for the assembler's -many option, and it eliminates duplicates). */
  107 +#define PPC_OPCODE_ANY 0x80
  108 +
  109 +/* Opcode is supported as part of the 64-bit bridge. */
  110 +#define PPC_OPCODE_64_BRIDGE 0x100
  111 +
  112 +/* Opcode is supported by Altivec Vector Unit */
  113 +#define PPC_OPCODE_ALTIVEC 0x200
  114 +
  115 +/* Opcode is supported by PowerPC 403 processor. */
  116 +#define PPC_OPCODE_403 0x400
  117 +
  118 +/* Opcode is supported by PowerPC BookE processor. */
  119 +#define PPC_OPCODE_BOOKE 0x800
  120 +
  121 +/* Opcode is only supported by 64-bit PowerPC BookE processor. */
  122 +#define PPC_OPCODE_BOOKE64 0x1000
  123 +
  124 +/* Opcode is supported by PowerPC 440 processor. */
  125 +#define PPC_OPCODE_440 0x2000
  126 +
  127 +/* Opcode is only supported by Power4 architecture. */
  128 +#define PPC_OPCODE_POWER4 0x4000
  129 +
  130 +/* Opcode isn't supported by Power4 architecture. */
  131 +#define PPC_OPCODE_NOPOWER4 0x8000
  132 +
  133 +/* Opcode is only supported by POWERPC Classic architecture. */
  134 +#define PPC_OPCODE_CLASSIC 0x10000
  135 +
  136 +/* Opcode is only supported by e500x2 Core. */
  137 +#define PPC_OPCODE_SPE 0x20000
  138 +
  139 +/* Opcode is supported by e500x2 Integer select APU. */
  140 +#define PPC_OPCODE_ISEL 0x40000
  141 +
  142 +/* Opcode is an e500 SPE floating point instruction. */
  143 +#define PPC_OPCODE_EFS 0x80000
  144 +
  145 +/* Opcode is supported by branch locking APU. */
  146 +#define PPC_OPCODE_BRLOCK 0x100000
  147 +
  148 +/* Opcode is supported by performance monitor APU. */
  149 +#define PPC_OPCODE_PMR 0x200000
  150 +
  151 +/* Opcode is supported by cache locking APU. */
  152 +#define PPC_OPCODE_CACHELCK 0x400000
  153 +
  154 +/* Opcode is supported by machine check APU. */
  155 +#define PPC_OPCODE_RFMCI 0x800000
  156 +
  157 +/* Opcode is only supported by Power5 architecture. */
  158 +#define PPC_OPCODE_POWER5 0x1000000
  159 +
  160 +/* Opcode is supported by PowerPC e300 family. */
  161 +#define PPC_OPCODE_E300 0x2000000
97 162  
98 163 /* A macro to extract the major opcode from an instruction. */
99 164 #define PPC_OP(i) (((i) >> 26) & 0x3f)
... ... @@ -112,7 +177,7 @@ struct powerpc_operand
112 177 operand value into an instruction, check this field.
113 178  
114 179 If it is NULL, execute
115   - i |= (op & ((1 << o->bits) - 1)) << o->shift;
  180 + i |= (op & ((1 << o->bits) - 1)) << o->shift;
116 181 (i is the instruction which we are filling in, o is a pointer to
117 182 this structure, and op is the opcode value; this assumes twos
118 183 complement arithmetic).
... ... @@ -124,14 +189,14 @@ struct powerpc_operand
124 189 string (the operand will be inserted in any case). If the
125 190 operand value is legal, *ERRMSG will be unchanged (most operands
126 191 can accept any value). */
127   - unsigned long (*insert)(uint32_t instruction, int32_t op,
128   - const char **errmsg);
  192 + unsigned long (*insert)
  193 + (unsigned long instruction, long op, int dialect, const char **errmsg);
129 194  
130 195 /* Extraction function. This is used by the disassembler. To
131 196 extract this operand type from an instruction, check this field.
132 197  
133 198 If it is NULL, compute
134   - op = ((i) >> o->shift) & ((1 << o->bits) - 1);
  199 + op = ((i) >> o->shift) & ((1 << o->bits) - 1);
135 200 if ((o->flags & PPC_OPERAND_SIGNED) != 0
136 201 && (op & (1 << (o->bits - 1))) != 0)
137 202 op -= 1 << o->bits;
... ... @@ -144,10 +209,10 @@ struct powerpc_operand
144 209 non-zero if this operand type can not actually be extracted from
145 210 this operand (i.e., the instruction does not match). If the
146 211 operand is valid, *INVALID will not be changed. */
147   - long (*extract) (uint32_t instruction, int *invalid);
  212 + long (*extract) (unsigned long instruction, int dialect, int *invalid);
148 213  
149 214 /* One bit syntax flags. */
150   - uint32_t flags;
  215 + unsigned long flags;
151 216 };
152 217  
153 218 /* Elements in the table are retrieved by indexing with values from
... ... @@ -194,25 +259,28 @@ extern const struct powerpc_operand powerpc_operands[];
194 259 register names with a leading 'r'. */
195 260 #define PPC_OPERAND_GPR (040)
196 261  
  262 +/* Like PPC_OPERAND_GPR, but don't print a leading 'r' for r0. */
  263 +#define PPC_OPERAND_GPR_0 (0100)
  264 +
197 265 /* This operand names a floating point register. The disassembler
198 266 prints these with a leading 'f'. */
199   -#define PPC_OPERAND_FPR (0100)
  267 +#define PPC_OPERAND_FPR (0200)
200 268  
201 269 /* This operand is a relative branch displacement. The disassembler
202 270 prints these symbolically if possible. */
203   -#define PPC_OPERAND_RELATIVE (0200)
  271 +#define PPC_OPERAND_RELATIVE (0400)
204 272  
205 273 /* This operand is an absolute branch address. The disassembler
206 274 prints these symbolically if possible. */
207   -#define PPC_OPERAND_ABSOLUTE (0400)
  275 +#define PPC_OPERAND_ABSOLUTE (01000)
208 276  
209 277 /* This operand is optional, and is zero if omitted. This is used for
210   - the optional BF and L fields in the comparison instructions. The
  278 + example, in the optional BF field in the comparison instructions. The
211 279 assembler must count the number of operands remaining on the line,
212 280 and the number of operands remaining for the opcode, and decide
213 281 whether this operand is present or not. The disassembler should
214 282 print this operand out only if it is not zero. */
215   -#define PPC_OPERAND_OPTIONAL (01000)
  283 +#define PPC_OPERAND_OPTIONAL (02000)
216 284  
217 285 /* This flag is only used with PPC_OPERAND_OPTIONAL. If this operand
218 286 is omitted, then for the next operand use this operand value plus
... ... @@ -220,14 +288,24 @@ extern const struct powerpc_operand powerpc_operands[];
220 288 hack is needed because the Power rotate instructions can take
221 289 either 4 or 5 operands. The disassembler should print this operand
222 290 out regardless of the PPC_OPERAND_OPTIONAL field. */
223   -#define PPC_OPERAND_NEXT (02000)
  291 +#define PPC_OPERAND_NEXT (04000)
224 292  
225 293 /* This operand should be regarded as a negative number for the
226 294 purposes of overflow checking (i.e., the normal most negative
227 295 number is disallowed and one more than the normal most positive
228 296 number is allowed). This flag will only be set for a signed
229 297 operand. */
230   -#define PPC_OPERAND_NEGATIVE (04000)
  298 +#define PPC_OPERAND_NEGATIVE (010000)
  299 +
  300 +/* This operand names a vector unit register. The disassembler
  301 + prints these with a leading 'v'. */
  302 +#define PPC_OPERAND_VR (020000)
  303 +
  304 +/* This operand is for the DS field in a DS form instruction. */
  305 +#define PPC_OPERAND_DS (040000)
  306 +
  307 +/* This operand is for the DQ field in a DQ form instruction. */
  308 +#define PPC_OPERAND_DQ (0100000)
231 309  
232 310 /* The POWER and PowerPC assemblers use a few macros. We keep them
233 311 with the operands table for simplicity. The macro table is an
... ... @@ -244,7 +322,7 @@ struct powerpc_macro
244 322 /* One bit flags for the opcode. These are used to indicate which
245 323 specific processors support the instructions. The values are the
246 324 same as those for the struct powerpc_opcode flags field. */
247   - uint32_t flags;
  325 + unsigned long flags;
248 326  
249 327 /* A format string to turn the macro into a normal instruction.
250 328 Each %N in the string is replaced with operand number N (zero
... ... @@ -256,25 +334,26 @@ extern const struct powerpc_macro powerpc_macros[];
256 334 extern const int powerpc_num_macros;
257 335  
258 336 /* ppc-opc.c -- PowerPC opcode list
259   - Copyright 1994 Free Software Foundation, Inc.
  337 + Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004,
  338 + 2005 Free Software Foundation, Inc.
260 339 Written by Ian Lance Taylor, Cygnus Support
261 340  
262   -This file is part of GDB, GAS, and the GNU binutils.
  341 + This file is part of GDB, GAS, and the GNU binutils.
263 342  
264   -GDB, GAS, and the GNU binutils are free software; you can redistribute
265   -them and/or modify them under the terms of the GNU General Public
266   -License as published by the Free Software Foundation; either version
267   -2, or (at your option) any later version.
  343 + GDB, GAS, and the GNU binutils are free software; you can redistribute
  344 + them and/or modify them under the terms of the GNU General Public
  345 + License as published by the Free Software Foundation; either version
  346 + 2, or (at your option) any later version.
268 347  
269   -GDB, GAS, and the GNU binutils are distributed in the hope that they
270   -will be useful, but WITHOUT ANY WARRANTY; without even the implied
271   -warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
272   -the GNU General Public License for more details.
  348 + GDB, GAS, and the GNU binutils are distributed in the hope that they
  349 + will be useful, but WITHOUT ANY WARRANTY; without even the implied
  350 + warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
  351 + the GNU General Public License for more details.
273 352  
274   -You should have received a copy of the GNU General Public License
275   -along with this file; see the file COPYING. If not, write to the Free
276   -Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
277   -02110-1301, USA. */
  353 + You should have received a copy of the GNU General Public License
  354 + along with this file; see the file COPYING. If not, write to the Free
  355 + Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
  356 + 02110-1301, USA. */
278 357  
279 358 /* This file holds the PowerPC opcode table. The opcode table
280 359 includes almost all of the extended instruction mnemonics. This
... ... @@ -289,353 +368,531 @@ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
289 368  
290 369 /* Local insertion and extraction functions. */
291 370  
292   -static unsigned long insert_bat (uint32_t, int32_t, const char **);
293   -static long extract_bat(uint32_t, int *);
294   -static unsigned long insert_bba(uint32_t, int32_t, const char **);
295   -static long extract_bba(uint32_t, int *);
296   -static unsigned long insert_bd(uint32_t, int32_t, const char **);
297   -static long extract_bd(uint32_t, int *);
298   -static unsigned long insert_bdm(uint32_t, int32_t, const char **);
299   -static long extract_bdm(uint32_t, int *);
300   -static unsigned long insert_bdp(uint32_t, int32_t, const char **);
301   -static long extract_bdp(uint32_t, int *);
302   -static unsigned long insert_bo(uint32_t, int32_t, const char **);
303   -static long extract_bo(uint32_t, int *);
304   -static unsigned long insert_boe(uint32_t, int32_t, const char **);
305   -static long extract_boe(uint32_t, int *);
306   -static unsigned long insert_ds(uint32_t, int32_t, const char **);
307   -static long extract_ds(uint32_t, int *);
308   -static unsigned long insert_li(uint32_t, int32_t, const char **);
309   -static long extract_li(uint32_t, int *);
310   -static unsigned long insert_mbe(uint32_t, int32_t, const char **);
311   -static long extract_mbe(uint32_t, int *);
312   -static unsigned long insert_mb6(uint32_t, int32_t, const char **);
313   -static long extract_mb6(uint32_t, int *);
314   -static unsigned long insert_nb(uint32_t, int32_t, const char **);
315   -static long extract_nb(uint32_t, int *);
316   -static unsigned long insert_nsi(uint32_t, int32_t, const char **);
317   -static long extract_nsi(uint32_t, int *);
318   -static unsigned long insert_ral(uint32_t, int32_t, const char **);
319   -static unsigned long insert_ram(uint32_t, int32_t, const char **);
320   -static unsigned long insert_ras(uint32_t, int32_t, const char **);
321   -static unsigned long insert_rbs(uint32_t, int32_t, const char **);
322   -static long extract_rbs(uint32_t, int *);
323   -static unsigned long insert_sh6(uint32_t, int32_t, const char **);
324   -static long extract_sh6(uint32_t, int *);
325   -static unsigned long insert_spr(uint32_t, int32_t, const char **);
326   -static long extract_spr(uint32_t, int *);
327   -static unsigned long insert_tbr(uint32_t, int32_t, const char **);
328   -static long extract_tbr(uint32_t, int *);
  371 +static unsigned long insert_bat (unsigned long, long, int, const char **);
  372 +static long extract_bat (unsigned long, int, int *);
  373 +static unsigned long insert_bba (unsigned long, long, int, const char **);
  374 +static long extract_bba (unsigned long, int, int *);
  375 +static unsigned long insert_bd (unsigned long, long, int, const char **);
  376 +static long extract_bd (unsigned long, int, int *);
  377 +static unsigned long insert_bdm (unsigned long, long, int, const char **);
  378 +static long extract_bdm (unsigned long, int, int *);
  379 +static unsigned long insert_bdp (unsigned long, long, int, const char **);
  380 +static long extract_bdp (unsigned long, int, int *);
  381 +static unsigned long insert_bo (unsigned long, long, int, const char **);
  382 +static long extract_bo (unsigned long, int, int *);
  383 +static unsigned long insert_boe (unsigned long, long, int, const char **);
  384 +static long extract_boe (unsigned long, int, int *);
  385 +static unsigned long insert_dq (unsigned long, long, int, const char **);
  386 +static long extract_dq (unsigned long, int, int *);
  387 +static unsigned long insert_ds (unsigned long, long, int, const char **);
  388 +static long extract_ds (unsigned long, int, int *);
  389 +static unsigned long insert_de (unsigned long, long, int, const char **);
  390 +static long extract_de (unsigned long, int, int *);
  391 +static unsigned long insert_des (unsigned long, long, int, const char **);
  392 +static long extract_des (unsigned long, int, int *);
  393 +static unsigned long insert_fxm (unsigned long, long, int, const char **);
  394 +static long extract_fxm (unsigned long, int, int *);
  395 +static unsigned long insert_li (unsigned long, long, int, const char **);
  396 +static long extract_li (unsigned long, int, int *);
  397 +static unsigned long insert_mbe (unsigned long, long, int, const char **);
  398 +static long extract_mbe (unsigned long, int, int *);
  399 +static unsigned long insert_mb6 (unsigned long, long, int, const char **);
  400 +static long extract_mb6 (unsigned long, int, int *);
  401 +static unsigned long insert_nb (unsigned long, long, int, const char **);
  402 +static long extract_nb (unsigned long, int, int *);
  403 +static unsigned long insert_nsi (unsigned long, long, int, const char **);
  404 +static long extract_nsi (unsigned long, int, int *);
  405 +static unsigned long insert_ral (unsigned long, long, int, const char **);
  406 +static unsigned long insert_ram (unsigned long, long, int, const char **);
  407 +static unsigned long insert_raq (unsigned long, long, int, const char **);
  408 +static unsigned long insert_ras (unsigned long, long, int, const char **);
  409 +static unsigned long insert_rbs (unsigned long, long, int, const char **);
  410 +static long extract_rbs (unsigned long, int, int *);
  411 +static unsigned long insert_rsq (unsigned long, long, int, const char **);
  412 +static unsigned long insert_rtq (unsigned long, long, int, const char **);
  413 +static unsigned long insert_sh6 (unsigned long, long, int, const char **);
  414 +static long extract_sh6 (unsigned long, int, int *);
  415 +static unsigned long insert_spr (unsigned long, long, int, const char **);
  416 +static long extract_spr (unsigned long, int, int *);
  417 +static unsigned long insert_sprg (unsigned long, long, int, const char **);
  418 +static long extract_sprg (unsigned long, int, int *);
  419 +static unsigned long insert_tbr (unsigned long, long, int, const char **);
  420 +static long extract_tbr (unsigned long, int, int *);
  421 +static unsigned long insert_ev2 (unsigned long, long, int, const char **);
  422 +static long extract_ev2 (unsigned long, int, int *);
  423 +static unsigned long insert_ev4 (unsigned long, long, int, const char **);
  424 +static long extract_ev4 (unsigned long, int, int *);
  425 +static unsigned long insert_ev8 (unsigned long, long, int, const char **);
  426 +static long extract_ev8 (unsigned long, int, int *);
329 427  
330 428 /* The operands table.
331 429  
332   - The fields are bits, shift, signed, insert, extract, flags. */
  430 + The fields are bits, shift, insert, extract, flags.
  431 +
  432 + We used to put parens around the various additions, like the one
  433 + for BA just below. However, that caused trouble with feeble
  434 + compilers with a limit on depth of a parenthesized expression, like
  435 + (reportedly) the compiler in Microsoft Developer Studio 5. So we
  436 + omit the parens, since the macros are never used in a context where
  437 + the addition will be ambiguous. */
333 438  
334 439 const struct powerpc_operand powerpc_operands[] =
335 440 {
336 441 /* The zero index is used to indicate the end of the list of
337 442 operands. */
338   -#define UNUSED (0)
339   - { 0, 0, 0, 0, 0 },
  443 +#define UNUSED 0
  444 + { 0, 0, NULL, NULL, 0 },
340 445  
341 446 /* The BA field in an XL form instruction. */
342   -#define BA (1)
  447 +#define BA UNUSED + 1
343 448 #define BA_MASK (0x1f << 16)
344   - { 5, 16, 0, 0, PPC_OPERAND_CR },
  449 + { 5, 16, NULL, NULL, PPC_OPERAND_CR },
345 450  
346 451 /* The BA field in an XL form instruction when it must be the same
347 452 as the BT field in the same instruction. */
348   -#define BAT (2)
  453 +#define BAT BA + 1
349 454 { 5, 16, insert_bat, extract_bat, PPC_OPERAND_FAKE },
350 455  
351 456 /* The BB field in an XL form instruction. */
352   -#define BB (3)
  457 +#define BB BAT + 1
353 458 #define BB_MASK (0x1f << 11)
354   - { 5, 11, 0, 0, PPC_OPERAND_CR },
  459 + { 5, 11, NULL, NULL, PPC_OPERAND_CR },
355 460  
356 461 /* The BB field in an XL form instruction when it must be the same
357 462 as the BA field in the same instruction. */
358   -#define BBA (4)
  463 +#define BBA BB + 1
359 464 { 5, 11, insert_bba, extract_bba, PPC_OPERAND_FAKE },
360 465  
361 466 /* The BD field in a B form instruction. The lower two bits are
362 467 forced to zero. */
363   -#define BD (5)
  468 +#define BD BBA + 1
364 469 { 16, 0, insert_bd, extract_bd, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
365 470  
366 471 /* The BD field in a B form instruction when absolute addressing is
367 472 used. */
368   -#define BDA (6)
  473 +#define BDA BD + 1
369 474 { 16, 0, insert_bd, extract_bd, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
370 475  
371 476 /* The BD field in a B form instruction when the - modifier is used.
372 477 This sets the y bit of the BO field appropriately. */
373   -#define BDM (7)
  478 +#define BDM BDA + 1
374 479 { 16, 0, insert_bdm, extract_bdm,
375 480 PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
376 481  
377 482 /* The BD field in a B form instruction when the - modifier is used
378 483 and absolute address is used. */
379   -#define BDMA (8)
  484 +#define BDMA BDM + 1
380 485 { 16, 0, insert_bdm, extract_bdm,
381 486 PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
382 487  
383 488 /* The BD field in a B form instruction when the + modifier is used.
384 489 This sets the y bit of the BO field appropriately. */
385   -#define BDP (9)
  490 +#define BDP BDMA + 1
386 491 { 16, 0, insert_bdp, extract_bdp,
387 492 PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
388 493  
389 494 /* The BD field in a B form instruction when the + modifier is used
390 495 and absolute addressing is used. */
391   -#define BDPA (10)
  496 +#define BDPA BDP + 1
392 497 { 16, 0, insert_bdp, extract_bdp,
393 498 PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
394 499  
395 500 /* The BF field in an X or XL form instruction. */
396   -#define BF (11)
397   - { 3, 23, 0, 0, PPC_OPERAND_CR },
  501 +#define BF BDPA + 1
  502 + { 3, 23, NULL, NULL, PPC_OPERAND_CR },
398 503  
399 504 /* An optional BF field. This is used for comparison instructions,
400 505 in which an omitted BF field is taken as zero. */
401   -#define OBF (12)
402   - { 3, 23, 0, 0, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
  506 +#define OBF BF + 1
  507 + { 3, 23, NULL, NULL, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
403 508  
404 509 /* The BFA field in an X or XL form instruction. */
405   -#define BFA (13)
406   - { 3, 18, 0, 0, PPC_OPERAND_CR },
  510 +#define BFA OBF + 1
  511 + { 3, 18, NULL, NULL, PPC_OPERAND_CR },
407 512  
408 513 /* The BI field in a B form or XL form instruction. */
409   -#define BI (14)
  514 +#define BI BFA + 1
410 515 #define BI_MASK (0x1f << 16)
411   - { 5, 16, 0, 0, PPC_OPERAND_CR },
  516 + { 5, 16, NULL, NULL, PPC_OPERAND_CR },
412 517  
413 518 /* The BO field in a B form instruction. Certain values are
414 519 illegal. */
415   -#define BO (15)
  520 +#define BO BI + 1
416 521 #define BO_MASK (0x1f << 21)
417 522 { 5, 21, insert_bo, extract_bo, 0 },
418 523  
419 524 /* The BO field in a B form instruction when the + or - modifier is
420 525 used. This is like the BO field, but it must be even. */
421   -#define BOE (16)
  526 +#define BOE BO + 1
422 527 { 5, 21, insert_boe, extract_boe, 0 },
423 528  
  529 +#define BH BOE + 1
  530 + { 2, 11, NULL, NULL, PPC_OPERAND_OPTIONAL },
  531 +
424 532 /* The BT field in an X or XL form instruction. */
425   -#define BT (17)
426   - { 5, 21, 0, 0, PPC_OPERAND_CR },
  533 +#define BT BH + 1
  534 + { 5, 21, NULL, NULL, PPC_OPERAND_CR },
427 535  
428 536 /* The condition register number portion of the BI field in a B form
429 537 or XL form instruction. This is used for the extended
430 538 conditional branch mnemonics, which set the lower two bits of the
431 539 BI field. This field is optional. */
432   -#define CR (18)
433   - { 3, 18, 0, 0, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
  540 +#define CR BT + 1
  541 + { 3, 18, NULL, NULL, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
  542 +
  543 + /* The CRB field in an X form instruction. */
  544 +#define CRB CR + 1
  545 + { 5, 6, NULL, NULL, 0 },
  546 +
  547 + /* The CRFD field in an X form instruction. */
  548 +#define CRFD CRB + 1
  549 + { 3, 23, NULL, NULL, PPC_OPERAND_CR },
  550 +
  551 + /* The CRFS field in an X form instruction. */
  552 +#define CRFS CRFD + 1
  553 + { 3, 0, NULL, NULL, PPC_OPERAND_CR },
  554 +
  555 + /* The CT field in an X form instruction. */
  556 +#define CT CRFS + 1
  557 + { 5, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
434 558  
435 559 /* The D field in a D form instruction. This is a displacement off
436 560 a register, and implies that the next operand is a register in
437 561 parentheses. */
438   -#define D (19)
439   - { 16, 0, 0, 0, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
  562 +#define D CT + 1
  563 + { 16, 0, NULL, NULL, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
  564 +
  565 + /* The DE field in a DE form instruction. This is like D, but is 12
  566 + bits only. */
  567 +#define DE D + 1
  568 + { 14, 0, insert_de, extract_de, PPC_OPERAND_PARENS },
  569 +
  570 + /* The DES field in a DES form instruction. This is like DS, but is 14
  571 + bits only (12 stored.) */
  572 +#define DES DE + 1
  573 + { 14, 0, insert_des, extract_des, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
  574 +
  575 + /* The DQ field in a DQ form instruction. This is like D, but the
  576 + lower four bits are forced to zero. */
  577 +#define DQ DES + 1
  578 + { 16, 0, insert_dq, extract_dq,
  579 + PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DQ },
440 580  
441 581 /* The DS field in a DS form instruction. This is like D, but the
442 582 lower two bits are forced to zero. */
443   -#define DS (20)
444   - { 16, 0, insert_ds, extract_ds, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
  583 +#define DS DQ + 1
  584 + { 16, 0, insert_ds, extract_ds,
  585 + PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DS },
  586 +
  587 + /* The E field in a wrteei instruction. */
  588 +#define E DS + 1
  589 + { 1, 15, NULL, NULL, 0 },
445 590  
446 591 /* The FL1 field in a POWER SC form instruction. */
447   -#define FL1 (21)
448   - { 4, 12, 0, 0, 0 },
  592 +#define FL1 E + 1
  593 + { 4, 12, NULL, NULL, 0 },
449 594  
450 595 /* The FL2 field in a POWER SC form instruction. */
451   -#define FL2 (22)
452   - { 3, 2, 0, 0, 0 },
  596 +#define FL2 FL1 + 1
  597 + { 3, 2, NULL, NULL, 0 },
453 598  
454 599 /* The FLM field in an XFL form instruction. */
455   -#define FLM (23)
456   - { 8, 17, 0, 0, 0 },
  600 +#define FLM FL2 + 1
  601 + { 8, 17, NULL, NULL, 0 },
457 602  
458 603 /* The FRA field in an X or A form instruction. */
459   -#define FRA (24)
  604 +#define FRA FLM + 1
460 605 #define FRA_MASK (0x1f << 16)
461   - { 5, 16, 0, 0, PPC_OPERAND_FPR },
  606 + { 5, 16, NULL, NULL, PPC_OPERAND_FPR },
462 607  
463 608 /* The FRB field in an X or A form instruction. */
464   -#define FRB (25)
  609 +#define FRB FRA + 1
465 610 #define FRB_MASK (0x1f << 11)
466   - { 5, 11, 0, 0, PPC_OPERAND_FPR },
  611 + { 5, 11, NULL, NULL, PPC_OPERAND_FPR },
467 612  
468 613 /* The FRC field in an A form instruction. */
469   -#define FRC (26)
  614 +#define FRC FRB + 1
470 615 #define FRC_MASK (0x1f << 6)
471   - { 5, 6, 0, 0, PPC_OPERAND_FPR },
  616 + { 5, 6, NULL, NULL, PPC_OPERAND_FPR },
472 617  
473 618 /* The FRS field in an X form instruction or the FRT field in a D, X
474 619 or A form instruction. */
475   -#define FRS (27)
476   -#define FRT (FRS)
477   - { 5, 21, 0, 0, PPC_OPERAND_FPR },
  620 +#define FRS FRC + 1
  621 +#define FRT FRS
  622 + { 5, 21, NULL, NULL, PPC_OPERAND_FPR },
478 623  
479 624 /* The FXM field in an XFX instruction. */
480   -#define FXM (28)
  625 +#define FXM FRS + 1
481 626 #define FXM_MASK (0xff << 12)
482   - { 8, 12, 0, 0, 0 },
  627 + { 8, 12, insert_fxm, extract_fxm, 0 },
  628 +
  629 + /* Power4 version for mfcr. */
  630 +#define FXM4 FXM + 1
  631 + { 8, 12, insert_fxm, extract_fxm, PPC_OPERAND_OPTIONAL },
483 632  
484 633 /* The L field in a D or X form instruction. */
485   -#define L (29)
486   - { 1, 21, 0, 0, PPC_OPERAND_OPTIONAL },
  634 +#define L FXM4 + 1
  635 + { 1, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
487 636  
488   - /* The LEV field in a POWER SC form instruction. */
489   -#define LEV (30)
490   - { 7, 5, 0, 0, 0 },
  637 + /* The LEV field in a POWER SVC form instruction. */
  638 +#define SVC_LEV L + 1
  639 + { 7, 5, NULL, NULL, 0 },
  640 +
  641 + /* The LEV field in an SC form instruction. */
  642 +#define LEV SVC_LEV + 1
  643 + { 7, 5, NULL, NULL, PPC_OPERAND_OPTIONAL },
491 644  
492 645 /* The LI field in an I form instruction. The lower two bits are
493 646 forced to zero. */
494   -#define LI (31)
  647 +#define LI LEV + 1
495 648 { 26, 0, insert_li, extract_li, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
496 649  
497 650 /* The LI field in an I form instruction when used as an absolute
498 651 address. */
499   -#define LIA (32)
  652 +#define LIA LI + 1
500 653 { 26, 0, insert_li, extract_li, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
501 654  
  655 + /* The LS field in an X (sync) form instruction. */
  656 +#define LS LIA + 1
  657 + { 2, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
  658 +
502 659 /* The MB field in an M form instruction. */
503   -#define MB (33)
  660 +#define MB LS + 1
504 661 #define MB_MASK (0x1f << 6)
505   - { 5, 6, 0, 0, 0 },
  662 + { 5, 6, NULL, NULL, 0 },
506 663  
507 664 /* The ME field in an M form instruction. */
508   -#define ME (34)
  665 +#define ME MB + 1
509 666 #define ME_MASK (0x1f << 1)
510   - { 5, 1, 0, 0, 0 },
  667 + { 5, 1, NULL, NULL, 0 },
511 668  
512 669 /* The MB and ME fields in an M form instruction expressed a single
513 670 operand which is a bitmask indicating which bits to select. This
514 671 is a two operand form using PPC_OPERAND_NEXT. See the
515 672 description in opcode/ppc.h for what this means. */
516   -#define MBE (35)
517   - { 5, 6, 0, 0, PPC_OPERAND_OPTIONAL | PPC_OPERAND_NEXT },
  673 +#define MBE ME + 1
  674 + { 5, 6, NULL, NULL, PPC_OPERAND_OPTIONAL | PPC_OPERAND_NEXT },
518 675 { 32, 0, insert_mbe, extract_mbe, 0 },
519 676  
520 677 /* The MB or ME field in an MD or MDS form instruction. The high
521 678 bit is wrapped to the low end. */
522   -#define MB6 (37)
523   -#define ME6 (MB6)
  679 +#define MB6 MBE + 2
  680 +#define ME6 MB6
524 681 #define MB6_MASK (0x3f << 5)
525 682 { 6, 5, insert_mb6, extract_mb6, 0 },
526 683  
  684 + /* The MO field in an mbar instruction. */
  685 +#define MO MB6 + 1
  686 + { 5, 21, NULL, NULL, PPC_OPERAND_OPTIONAL },
  687 +
527 688 /* The NB field in an X form instruction. The value 32 is stored as
528 689 0. */
529   -#define NB (38)
  690 +#define NB MO + 1
530 691 { 6, 11, insert_nb, extract_nb, 0 },
531 692  
532 693 /* The NSI field in a D form instruction. This is the same as the
533 694 SI field, only negated. */
534   -#define NSI (39)
  695 +#define NSI NB + 1
535 696 { 16, 0, insert_nsi, extract_nsi,
536 697 PPC_OPERAND_NEGATIVE | PPC_OPERAND_SIGNED },
537 698  
538   - /* The RA field in an D, DS, X, XO, M, or MDS form instruction. */
539   -#define RA (40)
  699 + /* The RA field in an D, DS, DQ, X, XO, M, or MDS form instruction. */
  700 +#define RA NSI + 1
540 701 #define RA_MASK (0x1f << 16)
541   - { 5, 16, 0, 0, PPC_OPERAND_GPR },
  702 + { 5, 16, NULL, NULL, PPC_OPERAND_GPR },
  703 +
  704 + /* As above, but 0 in the RA field means zero, not r0. */
  705 +#define RA0 RA + 1
  706 + { 5, 16, NULL, NULL, PPC_OPERAND_GPR_0 },
  707 +
  708 + /* The RA field in the DQ form lq instruction, which has special
  709 + value restrictions. */
  710 +#define RAQ RA0 + 1
  711 + { 5, 16, insert_raq, NULL, PPC_OPERAND_GPR_0 },
542 712  
543 713 /* The RA field in a D or X form instruction which is an updating
544 714 load, which means that the RA field may not be zero and may not
545 715 equal the RT field. */
546   -#define RAL (41)
547   - { 5, 16, insert_ral, 0, PPC_OPERAND_GPR },
  716 +#define RAL RAQ + 1
  717 + { 5, 16, insert_ral, NULL, PPC_OPERAND_GPR_0 },
548 718  
549 719 /* The RA field in an lmw instruction, which has special value
550 720 restrictions. */
551   -#define RAM (42)
552   - { 5, 16, insert_ram, 0, PPC_OPERAND_GPR },
  721 +#define RAM RAL + 1
  722 + { 5, 16, insert_ram, NULL, PPC_OPERAND_GPR_0 },
553 723  
554 724 /* The RA field in a D or X form instruction which is an updating
555 725 store or an updating floating point load, which means that the RA
556 726 field may not be zero. */
557   -#define RAS (43)
558   - { 5, 16, insert_ras, 0, PPC_OPERAND_GPR },
  727 +#define RAS RAM + 1
  728 + { 5, 16, insert_ras, NULL, PPC_OPERAND_GPR_0 },
  729 +
  730 + /* The RA field of the tlbwe instruction, which is optional. */
  731 +#define RAOPT RAS + 1
  732 + { 5, 16, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL },
559 733  
560 734 /* The RB field in an X, XO, M, or MDS form instruction. */
561   -#define RB (44)
  735 +#define RB RAOPT + 1
562 736 #define RB_MASK (0x1f << 11)
563   - { 5, 11, 0, 0, PPC_OPERAND_GPR },
  737 + { 5, 11, NULL, NULL, PPC_OPERAND_GPR },
564 738  
565 739 /* The RB field in an X form instruction when it must be the same as
566 740 the RS field in the instruction. This is used for extended
567 741 mnemonics like mr. */
568   -#define RBS (45)
  742 +#define RBS RB + 1
569 743 { 5, 1, insert_rbs, extract_rbs, PPC_OPERAND_FAKE },
570 744  
571 745 /* The RS field in a D, DS, X, XFX, XS, M, MD or MDS form
572 746 instruction or the RT field in a D, DS, X, XFX or XO form
573 747 instruction. */
574   -#define RS (46)
575   -#define RT (RS)
  748 +#define RS RBS + 1
  749 +#define RT RS
576 750 #define RT_MASK (0x1f << 21)
577   - { 5, 21, 0, 0, PPC_OPERAND_GPR },
  751 + { 5, 21, NULL, NULL, PPC_OPERAND_GPR },
  752 +
  753 + /* The RS field of the DS form stq instruction, which has special
  754 + value restrictions. */
  755 +#define RSQ RS + 1
  756 + { 5, 21, insert_rsq, NULL, PPC_OPERAND_GPR_0 },
  757 +
  758 + /* The RT field of the DQ form lq instruction, which has special
  759 + value restrictions. */
  760 +#define RTQ RSQ + 1
  761 + { 5, 21, insert_rtq, NULL, PPC_OPERAND_GPR_0 },
  762 +
  763 + /* The RS field of the tlbwe instruction, which is optional. */
  764 +#define RSO RTQ + 1
  765 +#define RTO RSO
  766 + { 5, 21, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL },
578 767  
579 768 /* The SH field in an X or M form instruction. */
580   -#define SH (47)
  769 +#define SH RSO + 1
581 770 #define SH_MASK (0x1f << 11)
582   - { 5, 11, 0, 0, 0 },
  771 + { 5, 11, NULL, NULL, 0 },
583 772  
584 773 /* The SH field in an MD form instruction. This is split. */
585   -#define SH6 (48)
  774 +#define SH6 SH + 1
586 775 #define SH6_MASK ((0x1f << 11) | (1 << 1))
587 776 { 6, 1, insert_sh6, extract_sh6, 0 },
588 777  
  778 + /* The SH field of the tlbwe instruction, which is optional. */
  779 +#define SHO SH6 + 1
  780 + { 5, 11,NULL, NULL, PPC_OPERAND_OPTIONAL },
  781 +
589 782 /* The SI field in a D form instruction. */
590   -#define SI (49)
591   - { 16, 0, 0, 0, PPC_OPERAND_SIGNED },
  783 +#define SI SHO + 1
  784 + { 16, 0, NULL, NULL, PPC_OPERAND_SIGNED },
592 785  
593 786 /* The SI field in a D form instruction when we accept a wide range
594 787 of positive values. */
595   -#define SISIGNOPT (50)
596   - { 16, 0, 0, 0, PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT },
  788 +#define SISIGNOPT SI + 1
  789 + { 16, 0, NULL, NULL, PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT },
597 790  
598 791 /* The SPR field in an XFX form instruction. This is flipped--the
599 792 lower 5 bits are stored in the upper 5 and vice- versa. */
600   -#define SPR (51)
  793 +#define SPR SISIGNOPT + 1
  794 +#define PMR SPR
601 795 #define SPR_MASK (0x3ff << 11)
602 796 { 10, 11, insert_spr, extract_spr, 0 },
603 797  
604 798 /* The BAT index number in an XFX form m[ft]ibat[lu] instruction. */
605   -#define SPRBAT (52)
  799 +#define SPRBAT SPR + 1
606 800 #define SPRBAT_MASK (0x3 << 17)
607   - { 2, 17, 0, 0, 0 },
  801 + { 2, 17, NULL, NULL, 0 },
608 802  
609 803 /* The SPRG register number in an XFX form m[ft]sprg instruction. */
610   -#define SPRG (53)
611   -#define SPRG_MASK (0x3 << 16)
612   - { 2, 16, 0, 0, 0 },
  804 +#define SPRG SPRBAT + 1
  805 + { 5, 16, insert_sprg, extract_sprg, 0 },
613 806  
614 807 /* The SR field in an X form instruction. */
615   -#define SR (54)
616   - { 4, 16, 0, 0, 0 },
  808 +#define SR SPRG + 1
  809 + { 4, 16, NULL, NULL, 0 },
  810 +
  811 + /* The STRM field in an X AltiVec form instruction. */
  812 +#define STRM SR + 1
  813 +#define STRM_MASK (0x3 << 21)
  814 + { 2, 21, NULL, NULL, 0 },
617 815  
618 816 /* The SV field in a POWER SC form instruction. */
619   -#define SV (55)
620   - { 14, 2, 0, 0, 0 },
  817 +#define SV STRM + 1
  818 + { 14, 2, NULL, NULL, 0 },
621 819  
622 820 /* The TBR field in an XFX form instruction. This is like the SPR
623 821 field, but it is optional. */
624   -#define TBR (56)
  822 +#define TBR SV + 1
625 823 { 10, 11, insert_tbr, extract_tbr, PPC_OPERAND_OPTIONAL },
626 824  
627 825 /* The TO field in a D or X form instruction. */
628   -#define TO (57)
  826 +#define TO TBR + 1
629 827 #define TO_MASK (0x1f << 21)
630   - { 5, 21, 0, 0, 0 },
  828 + { 5, 21, NULL, NULL, 0 },
631 829  
632 830 /* The U field in an X form instruction. */
633   -#define U (58)
634   - { 4, 12, 0, 0, 0 },
  831 +#define U TO + 1
  832 + { 4, 12, NULL, NULL, 0 },
635 833  
636 834 /* The UI field in a D form instruction. */
637   -#define UI (59)
638   - { 16, 0, 0, 0, 0 },
  835 +#define UI U + 1
  836 + { 16, 0, NULL, NULL, 0 },
  837 +
  838 + /* The VA field in a VA, VX or VXR form instruction. */
  839 +#define VA UI + 1
  840 +#define VA_MASK (0x1f << 16)
  841 + { 5, 16, NULL, NULL, PPC_OPERAND_VR },
  842 +
  843 + /* The VB field in a VA, VX or VXR form instruction. */
  844 +#define VB VA + 1
  845 +#define VB_MASK (0x1f << 11)
  846 + { 5, 11, NULL, NULL, PPC_OPERAND_VR },
  847 +
  848 + /* The VC field in a VA form instruction. */
  849 +#define VC VB + 1
  850 +#define VC_MASK (0x1f << 6)
  851 + { 5, 6, NULL, NULL, PPC_OPERAND_VR },
  852 +
  853 + /* The VD or VS field in a VA, VX, VXR or X form instruction. */
  854 +#define VD VC + 1
  855 +#define VS VD
  856 +#define VD_MASK (0x1f << 21)
  857 + { 5, 21, NULL, NULL, PPC_OPERAND_VR },
  858 +
  859 + /* The SIMM field in a VX form instruction. */
  860 +#define SIMM VD + 1
  861 + { 5, 16, NULL, NULL, PPC_OPERAND_SIGNED},
  862 +
  863 + /* The UIMM field in a VX form instruction. */
  864 +#define UIMM SIMM + 1
  865 + { 5, 16, NULL, NULL, 0 },
  866 +
  867 + /* The SHB field in a VA form instruction. */
  868 +#define SHB UIMM + 1
  869 + { 4, 6, NULL, NULL, 0 },
  870 +
  871 + /* The other UIMM field in a EVX form instruction. */
  872 +#define EVUIMM SHB + 1
  873 + { 5, 11, NULL, NULL, 0 },
  874 +
  875 + /* The other UIMM field in a half word EVX form instruction. */
  876 +#define EVUIMM_2 EVUIMM + 1
  877 + { 32, 11, insert_ev2, extract_ev2, PPC_OPERAND_PARENS },
  878 +
  879 + /* The other UIMM field in a word EVX form instruction. */
  880 +#define EVUIMM_4 EVUIMM_2 + 1
  881 + { 32, 11, insert_ev4, extract_ev4, PPC_OPERAND_PARENS },
  882 +
  883 + /* The other UIMM field in a double EVX form instruction. */
  884 +#define EVUIMM_8 EVUIMM_4 + 1
  885 + { 32, 11, insert_ev8, extract_ev8, PPC_OPERAND_PARENS },
  886 +
  887 + /* The WS field. */
  888 +#define WS EVUIMM_8 + 1
  889 +#define WS_MASK (0x7 << 11)
  890 + { 3, 11, NULL, NULL, 0 },
  891 +
  892 + /* The L field in an mtmsrd instruction */
  893 +#define MTMSRD_L WS + 1
  894 + { 1, 16, NULL, NULL, PPC_OPERAND_OPTIONAL },
  895 +
639 896 };
640 897  
641 898 /* The functions used to insert and extract complicated operands. */
... ... @@ -646,23 +903,21 @@ const struct powerpc_operand powerpc_operands[] =
646 903 and the extraction function just checks that the fields are the
647 904 same. */
648 905  
649   -/*ARGSUSED*/
650 906 static unsigned long
651   -insert_bat (insn, value, errmsg)
652   - uint32_t insn;
653   - int32_t value;
654   - const char **errmsg;
  907 +insert_bat (unsigned long insn,
  908 + long value ATTRIBUTE_UNUSED,
  909 + int dialect ATTRIBUTE_UNUSED,
  910 + const char **errmsg ATTRIBUTE_UNUSED)
655 911 {
656 912 return insn | (((insn >> 21) & 0x1f) << 16);
657 913 }
658 914  
659 915 static long
660   -extract_bat (insn, invalid)
661   - uint32_t insn;
662   - int *invalid;
  916 +extract_bat (unsigned long insn,
  917 + int dialect ATTRIBUTE_UNUSED,
  918 + int *invalid)
663 919 {
664   - if (invalid != (int *) NULL
665   - && ((insn >> 21) & 0x1f) != ((insn >> 16) & 0x1f))
  920 + if (((insn >> 21) & 0x1f) != ((insn >> 16) & 0x1f))
666 921 *invalid = 1;
667 922 return 0;
668 923 }
... ... @@ -673,23 +928,21 @@ extract_bat (insn, invalid)
673 928 and the extraction function just checks that the fields are the
674 929 same. */
675 930  
676   -/*ARGSUSED*/
677 931 static unsigned long
678   -insert_bba (insn, value, errmsg)
679   - uint32_t insn;
680   - int32_t value;
681   - const char **errmsg;
  932 +insert_bba (unsigned long insn,
  933 + long value ATTRIBUTE_UNUSED,
  934 + int dialect ATTRIBUTE_UNUSED,
  935 + const char **errmsg ATTRIBUTE_UNUSED)
682 936 {
683 937 return insn | (((insn >> 16) & 0x1f) << 11);
684 938 }
685 939  
686 940 static long
687   -extract_bba (insn, invalid)
688   - uint32_t insn;
689   - int *invalid;
  941 +extract_bba (unsigned long insn,
  942 + int dialect ATTRIBUTE_UNUSED,
  943 + int *invalid)
690 944 {
691   - if (invalid != (int *) NULL
692   - && ((insn >> 16) & 0x1f) != ((insn >> 11) & 0x1f))
  945 + if (((insn >> 16) & 0x1f) != ((insn >> 11) & 0x1f))
693 946 *invalid = 1;
694 947 return 0;
695 948 }
... ... @@ -697,117 +950,170 @@ extract_bba (insn, invalid)
697 950 /* The BD field in a B form instruction. The lower two bits are
698 951 forced to zero. */
699 952  
700   -/*ARGSUSED*/
701 953 static unsigned long
702   -insert_bd (insn, value, errmsg)
703   - uint32_t insn;
704   - int32_t value;
705   - const char **errmsg;
  954 +insert_bd (unsigned long insn,
  955 + long value,
  956 + int dialect ATTRIBUTE_UNUSED,
  957 + const char **errmsg ATTRIBUTE_UNUSED)
706 958 {
707 959 return insn | (value & 0xfffc);
708 960 }
709 961  
710   -/*ARGSUSED*/
711 962 static long
712   -extract_bd (insn, invalid)
713   - uint32_t insn;
714   - int *invalid;
  963 +extract_bd (unsigned long insn,
  964 + int dialect ATTRIBUTE_UNUSED,
  965 + int *invalid ATTRIBUTE_UNUSED)
715 966 {
716   - if ((insn & 0x8000) != 0)
717   - return (insn & 0xfffc) - 0x10000;
718   - else
719   - return insn & 0xfffc;
  967 + return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
720 968 }
721 969  
722 970 /* The BD field in a B form instruction when the - modifier is used.
723 971 This modifier means that the branch is not expected to be taken.
724   - We must set the y bit of the BO field to 1 if the offset is
725   - negative. When extracting, we require that the y bit be 1 and that
726   - the offset be positive, since if the y bit is 0 we just want to
727   - print the normal form of the instruction. */
  972 + For chips built to versions of the architecture prior to version 2
  973 + (ie. not Power4 compatible), we set the y bit of the BO field to 1
  974 + if the offset is negative. When extracting, we require that the y
  975 + bit be 1 and that the offset be positive, since if the y bit is 0
  976 + we just want to print the normal form of the instruction.
  977 + Power4 compatible targets use two bits, "a", and "t", instead of
  978 + the "y" bit. "at" == 00 => no hint, "at" == 01 => unpredictable,
  979 + "at" == 10 => not taken, "at" == 11 => taken. The "t" bit is 00001
  980 + in BO field, the "a" bit is 00010 for branch on CR(BI) and 01000
  981 + for branch on CTR. We only handle the taken/not-taken hint here. */
728 982  
729   -/*ARGSUSED*/
730 983 static unsigned long
731   -insert_bdm (insn, value, errmsg)
732   - uint32_t insn;
733   - int32_t value;
734   - const char **errmsg;
  984 +insert_bdm (unsigned long insn,
  985 + long value,
  986 + int dialect,
  987 + const char **errmsg ATTRIBUTE_UNUSED)
735 988 {
736   - if ((value & 0x8000) != 0)
737   - insn |= 1 << 21;
  989 + if ((dialect & PPC_OPCODE_POWER4) == 0)
  990 + {
  991 + if ((value & 0x8000) != 0)
  992 + insn |= 1 << 21;
  993 + }
  994 + else
  995 + {
  996 + if ((insn & (0x14 << 21)) == (0x04 << 21))
  997 + insn |= 0x02 << 21;
  998 + else if ((insn & (0x14 << 21)) == (0x10 << 21))
  999 + insn |= 0x08 << 21;
  1000 + }
738 1001 return insn | (value & 0xfffc);
739 1002 }
740 1003  
741 1004 static long
742   -extract_bdm (insn, invalid)
743   - uint32_t insn;
744   - int *invalid;
  1005 +extract_bdm (unsigned long insn,
  1006 + int dialect,
  1007 + int *invalid)
745 1008 {
746   - if (invalid != (int *) NULL
747   - && ((insn & (1 << 21)) == 0
748   - || (insn & (1 << 15)) == 0))
749   - *invalid = 1;
750   - if ((insn & 0x8000) != 0)
751   - return (insn & 0xfffc) - 0x10000;
  1009 + if ((dialect & PPC_OPCODE_POWER4) == 0)
  1010 + {
  1011 + if (((insn & (1 << 21)) == 0) != ((insn & (1 << 15)) == 0))
  1012 + *invalid = 1;
  1013 + }
752 1014 else
753   - return insn & 0xfffc;
  1015 + {
  1016 + if ((insn & (0x17 << 21)) != (0x06 << 21)
  1017 + && (insn & (0x1d << 21)) != (0x18 << 21))
  1018 + *invalid = 1;
  1019 + }
  1020 +
  1021 + return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
754 1022 }
755 1023  
756 1024 /* The BD field in a B form instruction when the + modifier is used.
757 1025 This is like BDM, above, except that the branch is expected to be
758 1026 taken. */
759 1027  
760   -/*ARGSUSED*/
761 1028 static unsigned long
762   -insert_bdp (insn, value, errmsg)
763   - uint32_t insn;
764   - int32_t value;
765   - const char **errmsg;
  1029 +insert_bdp (unsigned long insn,
  1030 + long value,
  1031 + int dialect,
  1032 + const char **errmsg ATTRIBUTE_UNUSED)
766 1033 {
767   - if ((value & 0x8000) == 0)
768   - insn |= 1 << 21;
  1034 + if ((dialect & PPC_OPCODE_POWER4) == 0)
  1035 + {
  1036 + if ((value & 0x8000) == 0)
  1037 + insn |= 1 << 21;
  1038 + }
  1039 + else
  1040 + {
  1041 + if ((insn & (0x14 << 21)) == (0x04 << 21))
  1042 + insn |= 0x03 << 21;
  1043 + else if ((insn & (0x14 << 21)) == (0x10 << 21))
  1044 + insn |= 0x09 << 21;
  1045 + }
769 1046 return insn | (value & 0xfffc);
770 1047 }
771 1048  
772 1049 static long
773   -extract_bdp (insn, invalid)
774   - uint32_t insn;
775   - int *invalid;
  1050 +extract_bdp (unsigned long insn,
  1051 + int dialect,
  1052 + int *invalid)
776 1053 {
777   - if (invalid != (int *) NULL
778   - && ((insn & (1 << 21)) == 0
779   - || (insn & (1 << 15)) != 0))
780   - *invalid = 1;
781   - if ((insn & 0x8000) != 0)
782   - return (insn & 0xfffc) - 0x10000;
  1054 + if ((dialect & PPC_OPCODE_POWER4) == 0)
  1055 + {
  1056 + if (((insn & (1 << 21)) == 0) == ((insn & (1 << 15)) == 0))
  1057 + *invalid = 1;
  1058 + }
783 1059 else
784   - return insn & 0xfffc;
  1060 + {
  1061 + if ((insn & (0x17 << 21)) != (0x07 << 21)
  1062 + && (insn & (0x1d << 21)) != (0x19 << 21))
  1063 + *invalid = 1;
  1064 + }
  1065 +
  1066 + return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
785 1067 }
786 1068  
787 1069 /* Check for legal values of a BO field. */
788 1070  
789 1071 static int
790   -valid_bo (int32_t value)
791   -{
792   - /* Certain encodings have bits that are required to be zero. These
793   - are (z must be zero, y may be anything):
794   - 001zy
795   - 011zy
796   - 1z00y
797   - 1z01y
798   - 1z1zz
799   - */
800   - switch (value & 0x14)
  1072 +valid_bo (long value, int dialect)
  1073 +{
  1074 + if ((dialect & PPC_OPCODE_POWER4) == 0)
  1075 + {
  1076 + /* Certain encodings have bits that are required to be zero.
  1077 + These are (z must be zero, y may be anything):
  1078 + 001zy
  1079 + 011zy
  1080 + 1z00y
  1081 + 1z01y
  1082 + 1z1zz
  1083 + */
  1084 + switch (value & 0x14)
  1085 + {
  1086 + default:
  1087 + case 0:
  1088 + return 1;
  1089 + case 0x4:
  1090 + return (value & 0x2) == 0;
  1091 + case 0x10:
  1092 + return (value & 0x8) == 0;
  1093 + case 0x14:
  1094 + return value == 0x14;
  1095 + }
  1096 + }
  1097 + else
801 1098 {
802   - default:
803   - case 0:
804   - return 1;
805   - case 0x4:
806   - return (value & 0x2) == 0;
807   - case 0x10:
808   - return (value & 0x8) == 0;
809   - case 0x14:
810   - return value == 0x14;
  1099 + /* Certain encodings have bits that are required to be zero.
  1100 + These are (z must be zero, a & t may be anything):
  1101 + 0000z
  1102 + 0001z
  1103 + 0100z
  1104 + 0101z
  1105 + 001at
  1106 + 011at
  1107 + 1a00t
  1108 + 1a01t
  1109 + 1z1zz
  1110 + */
  1111 + if ((value & 0x14) == 0)
  1112 + return (value & 0x1) == 0;
  1113 + else if ((value & 0x14) == 0x14)
  1114 + return value == 0x14;
  1115 + else
  1116 + return 1;
811 1117 }
812 1118 }
813 1119  
... ... @@ -815,27 +1121,25 @@ valid_bo (int32_t value)
815 1121 the field to an illegal value. */
816 1122  
817 1123 static unsigned long
818   -insert_bo (insn, value, errmsg)
819   - uint32_t insn;
820   - int32_t value;
821   - const char **errmsg;
822   -{
823   - if (errmsg != (const char **) NULL
824   - && ! valid_bo (value))
825   - *errmsg = "invalid conditional option";
  1124 +insert_bo (unsigned long insn,
  1125 + long value,
  1126 + int dialect,
  1127 + const char **errmsg)
  1128 +{
  1129 + if (!valid_bo (value, dialect))
  1130 + *errmsg = _("invalid conditional option");
826 1131 return insn | ((value & 0x1f) << 21);
827 1132 }
828 1133  
829 1134 static long
830   -extract_bo (insn, invalid)
831   - uint32_t insn;
832   - int *invalid;
  1135 +extract_bo (unsigned long insn,
  1136 + int dialect,
  1137 + int *invalid)
833 1138 {
834   - int32_t value;
  1139 + long value;
835 1140  
836 1141 value = (insn >> 21) & 0x1f;
837   - if (invalid != (int *) NULL
838   - && ! valid_bo (value))
  1142 + if (!valid_bo (value, dialect))
839 1143 *invalid = 1;
840 1144 return value;
841 1145 }
... ... @@ -845,83 +1149,275 @@ extract_bo (insn, invalid)
845 1149 extracting it, we force it to be even. */
846 1150  
847 1151 static unsigned long
848   -insert_boe (insn, value, errmsg)
849   - uint32_t insn;
850   - int32_t value;
851   - const char **errmsg;
  1152 +insert_boe (unsigned long insn,
  1153 + long value,
  1154 + int dialect,
  1155 + const char **errmsg)
852 1156 {
853   - if (errmsg != (const char **) NULL)
854   - {
855   - if (! valid_bo (value))
856   - *errmsg = "invalid conditional option";
857   - else if ((value & 1) != 0)
858   - *errmsg = "attempt to set y bit when using + or - modifier";
859   - }
  1157 + if (!valid_bo (value, dialect))
  1158 + *errmsg = _("invalid conditional option");
  1159 + else if ((value & 1) != 0)
  1160 + *errmsg = _("attempt to set y bit when using + or - modifier");
  1161 +
860 1162 return insn | ((value & 0x1f) << 21);
861 1163 }
862 1164  
863 1165 static long
864   -extract_boe (insn, invalid)
865   - uint32_t insn;
866   - int *invalid;
  1166 +extract_boe (unsigned long insn,
  1167 + int dialect,
  1168 + int *invalid)
867 1169 {
868   - int32_t value;
  1170 + long value;
869 1171  
870 1172 value = (insn >> 21) & 0x1f;
871   - if (invalid != (int *) NULL
872   - && ! valid_bo (value))
  1173 + if (!valid_bo (value, dialect))
873 1174 *invalid = 1;
874 1175 return value & 0x1e;
875 1176 }
876 1177  
  1178 +/* The DQ field in a DQ form instruction. This is like D, but the
  1179 + lower four bits are forced to zero. */
  1180 +
  1181 +static unsigned long
  1182 +insert_dq (unsigned long insn,
  1183 + long value,
  1184 + int dialect ATTRIBUTE_UNUSED,
  1185 + const char **errmsg)
  1186 +{
  1187 + if ((value & 0xf) != 0)
  1188 + *errmsg = _("offset not a multiple of 16");
  1189 + return insn | (value & 0xfff0);
  1190 +}
  1191 +
  1192 +static long
  1193 +extract_dq (unsigned long insn,
  1194 + int dialect ATTRIBUTE_UNUSED,
  1195 + int *invalid ATTRIBUTE_UNUSED)
  1196 +{
  1197 + return ((insn & 0xfff0) ^ 0x8000) - 0x8000;
  1198 +}
  1199 +
  1200 +static unsigned long
  1201 +insert_ev2 (unsigned long insn,
  1202 + long value,
  1203 + int dialect ATTRIBUTE_UNUSED,
  1204 + const char **errmsg)
  1205 +{
  1206 + if ((value & 1) != 0)
  1207 + *errmsg = _("offset not a multiple of 2");
  1208 + if ((value > 62) != 0)
  1209 + *errmsg = _("offset greater than 62");
  1210 + return insn | ((value & 0x3e) << 10);
  1211 +}
  1212 +
  1213 +static long
  1214 +extract_ev2 (unsigned long insn,
  1215 + int dialect ATTRIBUTE_UNUSED,
  1216 + int *invalid ATTRIBUTE_UNUSED)
  1217 +{
  1218 + return (insn >> 10) & 0x3e;
  1219 +}
  1220 +
  1221 +static unsigned long
  1222 +insert_ev4 (unsigned long insn,
  1223 + long value,
  1224 + int dialect ATTRIBUTE_UNUSED,
  1225 + const char **errmsg)
  1226 +{
  1227 + if ((value & 3) != 0)
  1228 + *errmsg = _("offset not a multiple of 4");
  1229 + if ((value > 124) != 0)
  1230 + *errmsg = _("offset greater than 124");
  1231 + return insn | ((value & 0x7c) << 9);
  1232 +}
  1233 +
  1234 +static long
  1235 +extract_ev4 (unsigned long insn,
  1236 + int dialect ATTRIBUTE_UNUSED,
  1237 + int *invalid ATTRIBUTE_UNUSED)
  1238 +{
  1239 + return (insn >> 9) & 0x7c;
  1240 +}
  1241 +
  1242 +static unsigned long
  1243 +insert_ev8 (unsigned long insn,
  1244 + long value,
  1245 + int dialect ATTRIBUTE_UNUSED,
  1246 + const char **errmsg)
  1247 +{
  1248 + if ((value & 7) != 0)
  1249 + *errmsg = _("offset not a multiple of 8");
  1250 + if ((value > 248) != 0)
  1251 + *errmsg = _("offset greater than 248");
  1252 + return insn | ((value & 0xf8) << 8);
  1253 +}
  1254 +
  1255 +static long
  1256 +extract_ev8 (unsigned long insn,
  1257 + int dialect ATTRIBUTE_UNUSED,
  1258 + int *invalid ATTRIBUTE_UNUSED)
  1259 +{
  1260 + return (insn >> 8) & 0xf8;
  1261 +}
  1262 +
877 1263 /* The DS field in a DS form instruction. This is like D, but the
878 1264 lower two bits are forced to zero. */
879 1265  
880   -/*ARGSUSED*/
881 1266 static unsigned long
882   -insert_ds (insn, value, errmsg)
883   - uint32_t insn;
884   - int32_t value;
885   - const char **errmsg;
  1267 +insert_ds (unsigned long insn,
  1268 + long value,
  1269 + int dialect ATTRIBUTE_UNUSED,
  1270 + const char **errmsg)
886 1271 {
  1272 + if ((value & 3) != 0)
  1273 + *errmsg = _("offset not a multiple of 4");
887 1274 return insn | (value & 0xfffc);
888 1275 }
889 1276  
890   -/*ARGSUSED*/
891 1277 static long
892   -extract_ds (insn, invalid)
893   - uint32_t insn;
894   - int *invalid;
  1278 +extract_ds (unsigned long insn,
  1279 + int dialect ATTRIBUTE_UNUSED,
  1280 + int *invalid ATTRIBUTE_UNUSED)
895 1281 {
896   - if ((insn & 0x8000) != 0)
897   - return (insn & 0xfffc) - 0x10000;
898   - else
899   - return insn & 0xfffc;
  1282 + return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
  1283 +}
  1284 +
  1285 +/* The DE field in a DE form instruction. */
  1286 +
  1287 +static unsigned long
  1288 +insert_de (unsigned long insn,
  1289 + long value,
  1290 + int dialect ATTRIBUTE_UNUSED,
  1291 + const char **errmsg)
  1292 +{
  1293 + if (value > 2047 || value < -2048)
  1294 + *errmsg = _("offset not between -2048 and 2047");
  1295 + return insn | ((value << 4) & 0xfff0);
  1296 +}
  1297 +
  1298 +static long
  1299 +extract_de (unsigned long insn,
  1300 + int dialect ATTRIBUTE_UNUSED,
  1301 + int *invalid ATTRIBUTE_UNUSED)
  1302 +{
  1303 + return (insn & 0xfff0) >> 4;
  1304 +}
  1305 +
  1306 +/* The DES field in a DES form instruction. */
  1307 +
  1308 +static unsigned long
  1309 +insert_des (unsigned long insn,
  1310 + long value,
  1311 + int dialect ATTRIBUTE_UNUSED,
  1312 + const char **errmsg)
  1313 +{
  1314 + if (value > 8191 || value < -8192)
  1315 + *errmsg = _("offset not between -8192 and 8191");
  1316 + else if ((value & 3) != 0)
  1317 + *errmsg = _("offset not a multiple of 4");
  1318 + return insn | ((value << 2) & 0xfff0);
  1319 +}
  1320 +
  1321 +static long
  1322 +extract_des (unsigned long insn,
  1323 + int dialect ATTRIBUTE_UNUSED,
  1324 + int *invalid ATTRIBUTE_UNUSED)
  1325 +{
  1326 + return (((insn >> 2) & 0x3ffc) ^ 0x2000) - 0x2000;
  1327 +}
  1328 +
  1329 +/* FXM mask in mfcr and mtcrf instructions. */
  1330 +
  1331 +static unsigned long
  1332 +insert_fxm (unsigned long insn,
  1333 + long value,
  1334 + int dialect,
  1335 + const char **errmsg)
  1336 +{
  1337 + /* If we're handling the mfocrf and mtocrf insns ensure that exactly
  1338 + one bit of the mask field is set. */
  1339 + if ((insn & (1 << 20)) != 0)
  1340 + {
  1341 + if (value == 0 || (value & -value) != value)
  1342 + {
  1343 + *errmsg = _("invalid mask field");
  1344 + value = 0;
  1345 + }
  1346 + }
  1347 +
  1348 + /* If the optional field on mfcr is missing that means we want to use
  1349 + the old form of the instruction that moves the whole cr. In that
  1350 + case we'll have VALUE zero. There doesn't seem to be a way to
  1351 + distinguish this from the case where someone writes mfcr %r3,0. */
  1352 + else if (value == 0)
  1353 + ;
  1354 +
  1355 + /* If only one bit of the FXM field is set, we can use the new form
  1356 + of the instruction, which is faster. Unlike the Power4 branch hint
  1357 + encoding, this is not backward compatible. Do not generate the
  1358 + new form unless -mpower4 has been given, or -many and the two
  1359 + operand form of mfcr was used. */
  1360 + else if ((value & -value) == value
  1361 + && ((dialect & PPC_OPCODE_POWER4) != 0
  1362 + || ((dialect & PPC_OPCODE_ANY) != 0
  1363 + && (insn & (0x3ff << 1)) == 19 << 1)))
  1364 + insn |= 1 << 20;
  1365 +
  1366 + /* Any other value on mfcr is an error. */
  1367 + else if ((insn & (0x3ff << 1)) == 19 << 1)
  1368 + {
  1369 + *errmsg = _("ignoring invalid mfcr mask");
  1370 + value = 0;
  1371 + }
  1372 +
  1373 + return insn | ((value & 0xff) << 12);
  1374 +}
  1375 +
  1376 +static long
  1377 +extract_fxm (unsigned long insn,
  1378 + int dialect ATTRIBUTE_UNUSED,
  1379 + int *invalid)
  1380 +{
  1381 + long mask = (insn >> 12) & 0xff;
  1382 +
  1383 + /* Is this a Power4 insn? */
  1384 + if ((insn & (1 << 20)) != 0)
  1385 + {
  1386 + /* Exactly one bit of MASK should be set. */
  1387 + if (mask == 0 || (mask & -mask) != mask)
  1388 + *invalid = 1;
  1389 + }
  1390 +
  1391 + /* Check that non-power4 form of mfcr has a zero MASK. */
  1392 + else if ((insn & (0x3ff << 1)) == 19 << 1)
  1393 + {
  1394 + if (mask != 0)
  1395 + *invalid = 1;
  1396 + }
  1397 +
  1398 + return mask;
900 1399 }
901 1400  
902 1401 /* The LI field in an I form instruction. The lower two bits are
903 1402 forced to zero. */
904 1403  
905   -/*ARGSUSED*/
906 1404 static unsigned long
907   -insert_li (insn, value, errmsg)
908   - uint32_t insn;
909   - int32_t value;
910   - const char **errmsg;
  1405 +insert_li (unsigned long insn,
  1406 + long value,
  1407 + int dialect ATTRIBUTE_UNUSED,
  1408 + const char **errmsg)
911 1409 {
  1410 + if ((value & 3) != 0)
  1411 + *errmsg = _("ignoring least significant bits in branch offset");
912 1412 return insn | (value & 0x3fffffc);
913 1413 }
914 1414  
915   -/*ARGSUSED*/
916 1415 static long
917   -extract_li (insn, invalid)
918   - uint32_t insn;
919   - int *invalid;
  1416 +extract_li (unsigned long insn,
  1417 + int dialect ATTRIBUTE_UNUSED,
  1418 + int *invalid ATTRIBUTE_UNUSED)
920 1419 {
921   - if ((insn & 0x2000000) != 0)
922   - return (insn & 0x3fffffc) - 0x4000000;
923   - else
924   - return insn & 0x3fffffc;
  1420 + return ((insn & 0x3fffffc) ^ 0x2000000) - 0x2000000;
925 1421 }
926 1422  
927 1423 /* The MB and ME fields in an M form instruction expressed as a single
... ... @@ -930,85 +1426,104 @@ extract_li (insn, invalid)
930 1426 instruction which uses a field of this type. */
931 1427  
932 1428 static unsigned long
933   -insert_mbe (insn, value, errmsg)
934   - uint32_t insn;
935   - int32_t value;
936   - const char **errmsg;
  1429 +insert_mbe (unsigned long insn,
  1430 + long value,
  1431 + int dialect ATTRIBUTE_UNUSED,
  1432 + const char **errmsg)
937 1433 {
938   - uint32_t uval;
939   - int mb, me;
  1434 + unsigned long uval, mask;
  1435 + int mb, me, mx, count, last;
940 1436  
941 1437 uval = value;
942 1438  
943 1439 if (uval == 0)
944 1440 {
945   - if (errmsg != (const char **) NULL)
946   - *errmsg = "illegal bitmask";
  1441 + *errmsg = _("illegal bitmask");
947 1442 return insn;
948 1443 }
949 1444  
950   - me = 31;
951   - while ((uval & 1) == 0)
952   - {
953   - uval >>= 1;
954   - --me;
955   - }
  1445 + mb = 0;
  1446 + me = 32;
  1447 + if ((uval & 1) != 0)
  1448 + last = 1;
  1449 + else
  1450 + last = 0;
  1451 + count = 0;
956 1452  
957   - mb = me;
958   - uval >>= 1;
959   - while ((uval & 1) != 0)
960   - {
961   - uval >>= 1;
962   - --mb;
963   - }
  1453 + /* mb: location of last 0->1 transition */
  1454 + /* me: location of last 1->0 transition */
  1455 + /* count: # transitions */
964 1456  
965   - if (uval != 0)
  1457 + for (mx = 0, mask = 1L << 31; mx < 32; ++mx, mask >>= 1)
966 1458 {
967   - if (errmsg != (const char **) NULL)
968   - *errmsg = "illegal bitmask";
  1459 + if ((uval & mask) && !last)
  1460 + {
  1461 + ++count;
  1462 + mb = mx;
  1463 + last = 1;
  1464 + }
  1465 + else if (!(uval & mask) && last)
  1466 + {
  1467 + ++count;
  1468 + me = mx;
  1469 + last = 0;
  1470 + }
969 1471 }
  1472 + if (me == 0)
  1473 + me = 32;
970 1474  
971   - return insn | (mb << 6) | (me << 1);
  1475 + if (count != 2 && (count != 0 || ! last))
  1476 + *errmsg = _("illegal bitmask");
  1477 +
  1478 + return insn | (mb << 6) | ((me - 1) << 1);
972 1479 }
973 1480  
974 1481 static long
975   -extract_mbe (insn, invalid)
976   - uint32_t insn;
977   - int *invalid;
  1482 +extract_mbe (unsigned long insn,
  1483 + int dialect ATTRIBUTE_UNUSED,
  1484 + int *invalid)
978 1485 {
979 1486 long ret;
980 1487 int mb, me;
981 1488 int i;
982 1489  
983   - if (invalid != (int *) NULL)
984   - *invalid = 1;
  1490 + *invalid = 1;
985 1491  
986   - ret = 0;
987 1492 mb = (insn >> 6) & 0x1f;
988 1493 me = (insn >> 1) & 0x1f;
989   - for (i = mb; i < me; i++)
990   - ret |= 1 << (31 - i);
  1494 + if (mb < me + 1)
  1495 + {
  1496 + ret = 0;
  1497 + for (i = mb; i <= me; i++)
  1498 + ret |= 1L << (31 - i);
  1499 + }
  1500 + else if (mb == me + 1)
  1501 + ret = ~0;
  1502 + else /* (mb > me + 1) */
  1503 + {
  1504 + ret = ~0;
  1505 + for (i = me + 1; i < mb; i++)
  1506 + ret &= ~(1L << (31 - i));
  1507 + }
991 1508 return ret;
992 1509 }
993 1510  
994 1511 /* The MB or ME field in an MD or MDS form instruction. The high bit
995 1512 is wrapped to the low end. */
996 1513  
997   -/*ARGSUSED*/
998 1514 static unsigned long
999   -insert_mb6 (insn, value, errmsg)
1000   - uint32_t insn;
1001   - int32_t value;
1002   - const char **errmsg;
  1515 +insert_mb6 (unsigned long insn,
  1516 + long value,
  1517 + int dialect ATTRIBUTE_UNUSED,
  1518 + const char **errmsg ATTRIBUTE_UNUSED)
1003 1519 {
1004 1520 return insn | ((value & 0x1f) << 6) | (value & 0x20);
1005 1521 }
1006 1522  
1007   -/*ARGSUSED*/
1008 1523 static long
1009   -extract_mb6 (insn, invalid)
1010   - uint32_t insn;
1011   - int *invalid;
  1524 +extract_mb6 (unsigned long insn,
  1525 + int dialect ATTRIBUTE_UNUSED,
  1526 + int *invalid ATTRIBUTE_UNUSED)
1012 1527 {
1013 1528 return ((insn >> 6) & 0x1f) | (insn & 0x20);
1014 1529 }
... ... @@ -1017,23 +1532,22 @@ extract_mb6 (insn, invalid)
1017 1532 0. */
1018 1533  
1019 1534 static unsigned long
1020   -insert_nb (insn, value, errmsg)
1021   - uint32_t insn;
1022   - int32_t value;
1023   - const char **errmsg;
  1535 +insert_nb (unsigned long insn,
  1536 + long value,
  1537 + int dialect ATTRIBUTE_UNUSED,
  1538 + const char **errmsg)
1024 1539 {
1025 1540 if (value < 0 || value > 32)
1026   - *errmsg = "value out of range";
  1541 + *errmsg = _("value out of range");
1027 1542 if (value == 32)
1028 1543 value = 0;
1029 1544 return insn | ((value & 0x1f) << 11);
1030 1545 }
1031 1546  
1032   -/*ARGSUSED*/
1033 1547 static long
1034   -extract_nb (insn, invalid)
1035   - uint32_t insn;
1036   - int *invalid;
  1548 +extract_nb (unsigned long insn,
  1549 + int dialect ATTRIBUTE_UNUSED,
  1550 + int *invalid ATTRIBUTE_UNUSED)
1037 1551 {
1038 1552 long ret;
1039 1553  
... ... @@ -1048,27 +1562,22 @@ extract_nb (insn, invalid)
1048 1562 invalid, since we never want to recognize an instruction which uses
1049 1563 a field of this type. */
1050 1564  
1051   -/*ARGSUSED*/
1052 1565 static unsigned long
1053   -insert_nsi (insn, value, errmsg)
1054   - uint32_t insn;
1055   - int32_t value;
1056   - const char **errmsg;
  1566 +insert_nsi (unsigned long insn,
  1567 + long value,
  1568 + int dialect ATTRIBUTE_UNUSED,
  1569 + const char **errmsg ATTRIBUTE_UNUSED)
1057 1570 {
1058   - return insn | ((- value) & 0xffff);
  1571 + return insn | (-value & 0xffff);
1059 1572 }
1060 1573  
1061 1574 static long
1062   -extract_nsi (insn, invalid)
1063   - uint32_t insn;
1064   - int *invalid;
  1575 +extract_nsi (unsigned long insn,
  1576 + int dialect ATTRIBUTE_UNUSED,
  1577 + int *invalid)
1065 1578 {
1066   - if (invalid != (int *) NULL)
1067   - *invalid = 1;
1068   - if ((insn & 0x8000) != 0)
1069   - return - ((insn & 0xffff) - 0x10000);
1070   - else
1071   - return - (insn & 0xffff);
  1579 + *invalid = 1;
  1580 + return -(((insn & 0xffff) ^ 0x8000) - 0x8000);
1072 1581 }
1073 1582  
1074 1583 /* The RA field in a D or X form instruction which is an updating
... ... @@ -1076,13 +1585,13 @@ extract_nsi (insn, invalid)
1076 1585 equal the RT field. */
1077 1586  
1078 1587 static unsigned long
1079   -insert_ral (insn, value, errmsg)
1080   - uint32_t insn;
1081   - int32_t value;
1082   - const char **errmsg;
  1588 +insert_ral (unsigned long insn,
  1589 + long value,
  1590 + int dialect ATTRIBUTE_UNUSED,
  1591 + const char **errmsg)
1083 1592 {
1084 1593 if (value == 0
1085   - || value == ((insn >> 21) & 0x1f))
  1594 + || (unsigned long) value == ((insn >> 21) & 0x1f))
1086 1595 *errmsg = "invalid register operand when updating";
1087 1596 return insn | ((value & 0x1f) << 16);
1088 1597 }
... ... @@ -1091,13 +1600,29 @@ insert_ral (insn, value, errmsg)
1091 1600 restrictions. */
1092 1601  
1093 1602 static unsigned long
1094   -insert_ram (insn, value, errmsg)
1095   - uint32_t insn;
1096   - int32_t value;
1097   - const char **errmsg;
  1603 +insert_ram (unsigned long insn,
  1604 + long value,
  1605 + int dialect ATTRIBUTE_UNUSED,
  1606 + const char **errmsg)
1098 1607 {
1099   - if (value >= ((insn >> 21) & 0x1f))
1100   - *errmsg = "index register in load range";
  1608 + if ((unsigned long) value >= ((insn >> 21) & 0x1f))
  1609 + *errmsg = _("index register in load range");
  1610 + return insn | ((value & 0x1f) << 16);
  1611 +}
  1612 +
  1613 +/* The RA field in the DQ form lq instruction, which has special
  1614 + value restrictions. */
  1615 +
  1616 +static unsigned long
  1617 +insert_raq (unsigned long insn,
  1618 + long value,
  1619 + int dialect ATTRIBUTE_UNUSED,
  1620 + const char **errmsg)
  1621 +{
  1622 + long rtvalue = (insn & RT_MASK) >> 21;
  1623 +
  1624 + if (value == rtvalue)
  1625 + *errmsg = _("source and target register operands must be different");
1101 1626 return insn | ((value & 0x1f) << 16);
1102 1627 }
1103 1628  
... ... @@ -1106,13 +1631,13 @@ insert_ram (insn, value, errmsg)
1106 1631 field may not be zero. */
1107 1632  
1108 1633 static unsigned long
1109   -insert_ras (insn, value, errmsg)
1110   - uint32_t insn;
1111   - int32_t value;
1112   - const char **errmsg;
  1634 +insert_ras (unsigned long insn,
  1635 + long value,
  1636 + int dialect ATTRIBUTE_UNUSED,
  1637 + const char **errmsg)
1113 1638 {
1114 1639 if (value == 0)
1115   - *errmsg = "invalid register operand when updating";
  1640 + *errmsg = _("invalid register operand when updating");
1116 1641 return insn | ((value & 0x1f) << 16);
1117 1642 }
1118 1643  
... ... @@ -1122,44 +1647,68 @@ insert_ras (insn, value, errmsg)
1122 1647 function just copies the BT field into the BA field, and the
1123 1648 extraction function just checks that the fields are the same. */
1124 1649  
1125   -/*ARGSUSED*/
1126 1650 static unsigned long
1127   -insert_rbs (insn, value, errmsg)
1128   - uint32_t insn;
1129   - int32_t value;
1130   - const char **errmsg;
  1651 +insert_rbs (unsigned long insn,
  1652 + long value ATTRIBUTE_UNUSED,
  1653 + int dialect ATTRIBUTE_UNUSED,
  1654 + const char **errmsg ATTRIBUTE_UNUSED)
1131 1655 {
1132 1656 return insn | (((insn >> 21) & 0x1f) << 11);
1133 1657 }
1134 1658  
1135 1659 static long
1136   -extract_rbs (insn, invalid)
1137   - uint32_t insn;
1138   - int *invalid;
  1660 +extract_rbs (unsigned long insn,
  1661 + int dialect ATTRIBUTE_UNUSED,
  1662 + int *invalid)
1139 1663 {
1140   - if (invalid != (int *) NULL
1141   - && ((insn >> 21) & 0x1f) != ((insn >> 11) & 0x1f))
  1664 + if (((insn >> 21) & 0x1f) != ((insn >> 11) & 0x1f))
1142 1665 *invalid = 1;
1143 1666 return 0;
1144 1667 }
1145 1668  
  1669 +/* The RT field of the DQ form lq instruction, which has special
  1670 + value restrictions. */
  1671 +
  1672 +static unsigned long
  1673 +insert_rtq (unsigned long insn,
  1674 + long value,
  1675 + int dialect ATTRIBUTE_UNUSED,
  1676 + const char **errmsg)
  1677 +{
  1678 + if ((value & 1) != 0)
  1679 + *errmsg = _("target register operand must be even");
  1680 + return insn | ((value & 0x1f) << 21);
  1681 +}
  1682 +
  1683 +/* The RS field of the DS form stq instruction, which has special
  1684 + value restrictions. */
  1685 +
  1686 +static unsigned long
  1687 +insert_rsq (unsigned long insn,
  1688 + long value ATTRIBUTE_UNUSED,
  1689 + int dialect ATTRIBUTE_UNUSED,
  1690 + const char **errmsg)
  1691 +{
  1692 + if ((value & 1) != 0)
  1693 + *errmsg = _("source register operand must be even");
  1694 + return insn | ((value & 0x1f) << 21);
  1695 +}
  1696 +
1146 1697 /* The SH field in an MD form instruction. This is split. */
1147 1698  
1148   -/*ARGSUSED*/
1149 1699 static unsigned long
1150   -insert_sh6 (insn, value, errmsg)
1151   - uint32_t insn;
1152   - int32_t value;
1153   - const char **errmsg;
  1700 +insert_sh6 (unsigned long insn,
  1701 + long value,
  1702 + int dialect ATTRIBUTE_UNUSED,
  1703 + const char **errmsg ATTRIBUTE_UNUSED)
1154 1704 {
1155 1705 return insn | ((value & 0x1f) << 11) | ((value & 0x20) >> 4);
1156 1706 }
1157 1707  
1158   -/*ARGSUSED*/
1159 1708 static long
1160   -extract_sh6 (insn, invalid)
1161   - uint32_t insn;
1162   - int *invalid;
  1709 +extract_sh6 (unsigned long insn,
  1710 + int dialect ATTRIBUTE_UNUSED,
  1711 + int *invalid ATTRIBUTE_UNUSED)
1163 1712 {
1164 1713 return ((insn >> 11) & 0x1f) | ((insn << 4) & 0x20);
1165 1714 }
... ... @@ -1168,22 +1717,63 @@ extract_sh6 (insn, invalid)
1168 1717 lower 5 bits are stored in the upper 5 and vice- versa. */
1169 1718  
1170 1719 static unsigned long
1171   -insert_spr (insn, value, errmsg)
1172   - uint32_t insn;
1173   - int32_t value;
1174   - const char **errmsg;
  1720 +insert_spr (unsigned long insn,
  1721 + long value,
  1722 + int dialect ATTRIBUTE_UNUSED,
  1723 + const char **errmsg ATTRIBUTE_UNUSED)
1175 1724 {
1176 1725 return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6);
1177 1726 }
1178 1727  
1179 1728 static long
1180   -extract_spr (insn, invalid)
1181   - uint32_t insn;
1182   - int *invalid;
  1729 +extract_spr (unsigned long insn,
  1730 + int dialect ATTRIBUTE_UNUSED,
  1731 + int *invalid ATTRIBUTE_UNUSED)
1183 1732 {
1184 1733 return ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
1185 1734 }
1186 1735  
  1736 +/* Some dialects have 8 SPRG registers instead of the standard 4. */
  1737 +
  1738 +static unsigned long
  1739 +insert_sprg (unsigned long insn,
  1740 + long value,
  1741 + int dialect,
  1742 + const char **errmsg)
  1743 +{
  1744 + /* This check uses PPC_OPCODE_403 because PPC405 is later defined
  1745 + as a synonym. If ever a 405 specific dialect is added this
  1746 + check should use that instead. */
  1747 + if (value > 7
  1748 + || (value > 3
  1749 + && (dialect & (PPC_OPCODE_BOOKE | PPC_OPCODE_403)) == 0))
  1750 + *errmsg = _("invalid sprg number");
  1751 +
  1752 + /* If this is mfsprg4..7 then use spr 260..263 which can be read in
  1753 + user mode. Anything else must use spr 272..279. */
  1754 + if (value <= 3 || (insn & 0x100) != 0)
  1755 + value |= 0x10;
  1756 +
  1757 + return insn | ((value & 0x17) << 16);
  1758 +}
  1759 +
  1760 +static long
  1761 +extract_sprg (unsigned long insn,
  1762 + int dialect,
  1763 + int *invalid)
  1764 +{
  1765 + unsigned long val = (insn >> 16) & 0x1f;
  1766 +
  1767 + /* mfsprg can use 260..263 and 272..279. mtsprg only uses spr 272..279
  1768 + If not BOOKE or 405, then both use only 272..275. */
  1769 + if (val <= 3
  1770 + || (val < 0x10 && (insn & 0x100) != 0)
  1771 + || (val - 0x10 > 3
  1772 + && (dialect & (PPC_OPCODE_BOOKE | PPC_OPCODE_403)) == 0))
  1773 + *invalid = 1;
  1774 + return val & 7;
  1775 +}
  1776 +
1187 1777 /* The TBR field in an XFX instruction. This is just like SPR, but it
1188 1778 is optional. When TBR is omitted, it must be inserted as 268 (the
1189 1779 magic number of the TB register). These functions treat 0
... ... @@ -1195,10 +1785,10 @@ extract_spr (insn, invalid)
1195 1785 #define TB (268)
1196 1786  
1197 1787 static unsigned long
1198   -insert_tbr (insn, value, errmsg)
1199   - uint32_t insn;
1200   - int32_t value;
1201   - const char **errmsg;
  1788 +insert_tbr (unsigned long insn,
  1789 + long value,
  1790 + int dialect ATTRIBUTE_UNUSED,
  1791 + const char **errmsg ATTRIBUTE_UNUSED)
1202 1792 {
1203 1793 if (value == 0)
1204 1794 value = TB;
... ... @@ -1206,9 +1796,9 @@ insert_tbr (insn, value, errmsg)
1206 1796 }
1207 1797  
1208 1798 static long
1209   -extract_tbr (insn, invalid)
1210   - uint32_t insn;
1211   - int *invalid;
  1799 +extract_tbr (unsigned long insn,
  1800 + int dialect ATTRIBUTE_UNUSED,
  1801 + int *invalid ATTRIBUTE_UNUSED)
1212 1802 {
1213 1803 long ret;
1214 1804  
... ... @@ -1221,23 +1811,23 @@ extract_tbr (insn, invalid)
1221 1811 /* Macros used to form opcodes. */
1222 1812  
1223 1813 /* The main opcode. */
1224   -#define OP(x) (((x) & 0x3f) << 26)
  1814 +#define OP(x) ((((unsigned long)(x)) & 0x3f) << 26)
1225 1815 #define OP_MASK OP (0x3f)
1226 1816  
1227 1817 /* The main opcode combined with a trap code in the TO field of a D
1228 1818 form instruction. Used for extended mnemonics for the trap
1229 1819 instructions. */
1230   -#define OPTO(x,to) (OP (x) | (((to) & 0x1f) << 21))
  1820 +#define OPTO(x,to) (OP (x) | ((((unsigned long)(to)) & 0x1f) << 21))
1231 1821 #define OPTO_MASK (OP_MASK | TO_MASK)
1232 1822  
1233 1823 /* The main opcode combined with a comparison size bit in the L field
1234 1824 of a D form or X form instruction. Used for extended mnemonics for
1235 1825 the comparison instructions. */
1236   -#define OPL(x,l) (OP (x) | (((l) & 1) << 21))
  1826 +#define OPL(x,l) (OP (x) | ((((unsigned long)(l)) & 1) << 21))
1237 1827 #define OPL_MASK OPL (0x3f,1)
1238 1828  
1239 1829 /* An A form instruction. */
1240   -#define A(op, xop, rc) (OP (op) | (((xop) & 0x1f) << 1) | ((rc) & 1))
  1830 +#define A(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1) | (((unsigned long)(rc)) & 1))
1241 1831 #define A_MASK A (0x3f, 0x1f, 1)
1242 1832  
1243 1833 /* An A_MASK with the FRB field fixed. */
... ... @@ -1250,30 +1840,44 @@ extract_tbr (insn, invalid)
1250 1840 #define AFRAFRC_MASK (A_MASK | FRA_MASK | FRC_MASK)
1251 1841  
1252 1842 /* A B form instruction. */
1253   -#define B(op, aa, lk) (OP (op) | (((aa) & 1) << 1) | ((lk) & 1))
  1843 +#define B(op, aa, lk) (OP (op) | ((((unsigned long)(aa)) & 1) << 1) | ((lk) & 1))
1254 1844 #define B_MASK B (0x3f, 1, 1)
1255 1845  
1256 1846 /* A B form instruction setting the BO field. */
1257   -#define BBO(op, bo, aa, lk) (B ((op), (aa), (lk)) | (((bo) & 0x1f) << 21))
  1847 +#define BBO(op, bo, aa, lk) (B ((op), (aa), (lk)) | ((((unsigned long)(bo)) & 0x1f) << 21))
1258 1848 #define BBO_MASK BBO (0x3f, 0x1f, 1, 1)
1259 1849  
1260 1850 /* A BBO_MASK with the y bit of the BO field removed. This permits
1261 1851 matching a conditional branch regardless of the setting of the y
1262   - bit. */
1263   -#define Y_MASK (1 << 21)
1264   -#define BBOY_MASK (BBO_MASK &~ Y_MASK)
  1852 + bit. Similarly for the 'at' bits used for power4 branch hints. */
  1853 +#define Y_MASK (((unsigned long) 1) << 21)
  1854 +#define AT1_MASK (((unsigned long) 3) << 21)
  1855 +#define AT2_MASK (((unsigned long) 9) << 21)
  1856 +#define BBOY_MASK (BBO_MASK &~ Y_MASK)
  1857 +#define BBOAT_MASK (BBO_MASK &~ AT1_MASK)
1265 1858  
1266 1859 /* A B form instruction setting the BO field and the condition bits of
1267 1860 the BI field. */
1268 1861 #define BBOCB(op, bo, cb, aa, lk) \
1269   - (BBO ((op), (bo), (aa), (lk)) | (((cb) & 0x3) << 16))
  1862 + (BBO ((op), (bo), (aa), (lk)) | ((((unsigned long)(cb)) & 0x3) << 16))
1270 1863 #define BBOCB_MASK BBOCB (0x3f, 0x1f, 0x3, 1, 1)
1271 1864  
1272 1865 /* A BBOCB_MASK with the y bit of the BO field removed. */
1273 1866 #define BBOYCB_MASK (BBOCB_MASK &~ Y_MASK)
  1867 +#define BBOATCB_MASK (BBOCB_MASK &~ AT1_MASK)
  1868 +#define BBOAT2CB_MASK (BBOCB_MASK &~ AT2_MASK)
1274 1869  
1275 1870 /* A BBOYCB_MASK in which the BI field is fixed. */
1276 1871 #define BBOYBI_MASK (BBOYCB_MASK | BI_MASK)
  1872 +#define BBOATBI_MASK (BBOAT2CB_MASK | BI_MASK)
  1873 +
  1874 +/* An Context form instruction. */
  1875 +#define CTX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7))
  1876 +#define CTX_MASK CTX(0x3f, 0x7)
  1877 +
  1878 +/* An User Context form instruction. */
  1879 +#define UCTX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1f))
  1880 +#define UCTX_MASK UCTX(0x3f, 0x1f)
1277 1881  
1278 1882 /* The main opcode mask with the RA field clear. */
1279 1883 #define DRA_MASK (OP_MASK | RA_MASK)
... ... @@ -1282,12 +1886,20 @@ extract_tbr (insn, invalid)
1282 1886 #define DSO(op, xop) (OP (op) | ((xop) & 0x3))
1283 1887 #define DS_MASK DSO (0x3f, 3)
1284 1888  
  1889 +/* A DE form instruction. */
  1890 +#define DEO(op, xop) (OP (op) | ((xop) & 0xf))
  1891 +#define DE_MASK DEO (0x3e, 0xf)
  1892 +
  1893 +/* An EVSEL form instruction. */
  1894 +#define EVSEL(op, xop) (OP (op) | (((unsigned long)(xop)) & 0xff) << 3)
  1895 +#define EVSEL_MASK EVSEL(0x3f, 0xff)
  1896 +
1285 1897 /* An M form instruction. */
1286 1898 #define M(op, rc) (OP (op) | ((rc) & 1))
1287 1899 #define M_MASK M (0x3f, 1)
1288 1900  
1289 1901 /* An M form instruction with the ME field specified. */
1290   -#define MME(op, me, rc) (M ((op), (rc)) | (((me) & 0x1f) << 1))
  1902 +#define MME(op, me, rc) (M ((op), (rc)) | ((((unsigned long)(me)) & 0x1f) << 1))
1291 1903  
1292 1904 /* An M_MASK with the MB and ME fields fixed. */
1293 1905 #define MMBME_MASK (M_MASK | MB_MASK | ME_MASK)
... ... @@ -1296,7 +1908,7 @@ extract_tbr (insn, invalid)
1296 1908 #define MSHME_MASK (M_MASK | SH_MASK | ME_MASK)
1297 1909  
1298 1910 /* An MD form instruction. */
1299   -#define MD(op, xop, rc) (OP (op) | (((xop) & 0x7) << 2) | ((rc) & 1))
  1911 +#define MD(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x7) << 2) | ((rc) & 1))
1300 1912 #define MD_MASK MD (0x3f, 0x7, 1)
1301 1913  
1302 1914 /* An MD_MASK with the MB field fixed. */
... ... @@ -1306,18 +1918,36 @@ extract_tbr (insn, invalid)
1306 1918 #define MDSH_MASK (MD_MASK | SH6_MASK)
1307 1919  
1308 1920 /* An MDS form instruction. */
1309   -#define MDS(op, xop, rc) (OP (op) | (((xop) & 0xf) << 1) | ((rc) & 1))
  1921 +#define MDS(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0xf) << 1) | ((rc) & 1))
1310 1922 #define MDS_MASK MDS (0x3f, 0xf, 1)
1311 1923  
1312 1924 /* An MDS_MASK with the MB field fixed. */
1313 1925 #define MDSMB_MASK (MDS_MASK | MB6_MASK)
1314 1926  
1315 1927 /* An SC form instruction. */
1316   -#define SC(op, sa, lk) (OP (op) | (((sa) & 1) << 1) | ((lk) & 1))
1317   -#define SC_MASK (OP_MASK | (0x3ff << 16) | (1 << 1) | 1)
  1928 +#define SC(op, sa, lk) (OP (op) | ((((unsigned long)(sa)) & 1) << 1) | ((lk) & 1))
  1929 +#define SC_MASK (OP_MASK | (((unsigned long)0x3ff) << 16) | (((unsigned long)1) << 1) | 1)
  1930 +
  1931 +/* An VX form instruction. */
  1932 +#define VX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7ff))
  1933 +
  1934 +/* The mask for an VX form instruction. */
  1935 +#define VX_MASK VX(0x3f, 0x7ff)
  1936 +
  1937 +/* An VA form instruction. */
  1938 +#define VXA(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x03f))
  1939 +
  1940 +/* The mask for an VA form instruction. */
  1941 +#define VXA_MASK VXA(0x3f, 0x3f)
  1942 +
  1943 +/* An VXR form instruction. */
  1944 +#define VXR(op, xop, rc) (OP (op) | (((rc) & 1) << 10) | (((unsigned long)(xop)) & 0x3ff))
  1945 +
  1946 +/* The mask for a VXR form instruction. */
  1947 +#define VXR_MASK VXR(0x3f, 0x3ff, 1)
1318 1948  
1319 1949 /* An X form instruction. */
1320   -#define X(op, xop) (OP (op) | (((xop) & 0x3ff) << 1))
  1950 +#define X(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))
1321 1951  
1322 1952 /* An X form instruction with the RC bit specified. */
1323 1953 #define XRC(op, xop, rc) (X ((op), (xop)) | ((rc) & 1))
... ... @@ -1337,29 +1967,53 @@ extract_tbr (insn, invalid)
1337 1967 /* An X_MASK with the RA and RB fields fixed. */
1338 1968 #define XRARB_MASK (X_MASK | RA_MASK | RB_MASK)
1339 1969  
  1970 +/* An XRARB_MASK, but with the L bit clear. */
  1971 +#define XRLARB_MASK (XRARB_MASK & ~((unsigned long) 1 << 16))
  1972 +
1340 1973 /* An X_MASK with the RT and RA fields fixed. */
1341 1974 #define XRTRA_MASK (X_MASK | RT_MASK | RA_MASK)
1342 1975  
1343   -/* An X form comparison instruction. */
1344   -#define XCMPL(op, xop, l) (X ((op), (xop)) | (((l) & 1) << 21))
  1976 +/* An XRTRA_MASK, but with L bit clear. */
  1977 +#define XRTLRA_MASK (XRTRA_MASK & ~((unsigned long) 1 << 21))
  1978 +
  1979 +/* An X form instruction with the L bit specified. */
  1980 +#define XOPL(op, xop, l) (X ((op), (xop)) | ((((unsigned long)(l)) & 1) << 21))
1345 1981  
1346 1982 /* The mask for an X form comparison instruction. */
1347   -#define XCMP_MASK (X_MASK | (1 << 22))
  1983 +#define XCMP_MASK (X_MASK | (((unsigned long)1) << 22))
1348 1984  
1349 1985 /* The mask for an X form comparison instruction with the L field
1350 1986 fixed. */
1351   -#define XCMPL_MASK (XCMP_MASK | (1 << 21))
  1987 +#define XCMPL_MASK (XCMP_MASK | (((unsigned long)1) << 21))
1352 1988  
1353 1989 /* An X form trap instruction with the TO field specified. */
1354   -#define XTO(op, xop, to) (X ((op), (xop)) | (((to) & 0x1f) << 21))
  1990 +#define XTO(op, xop, to) (X ((op), (xop)) | ((((unsigned long)(to)) & 0x1f) << 21))
1355 1991 #define XTO_MASK (X_MASK | TO_MASK)
1356 1992  
  1993 +/* An X form tlb instruction with the SH field specified. */
  1994 +#define XTLB(op, xop, sh) (X ((op), (xop)) | ((((unsigned long)(sh)) & 0x1f) << 11))
  1995 +#define XTLB_MASK (X_MASK | SH_MASK)
  1996 +
  1997 +/* An X form sync instruction. */
  1998 +#define XSYNC(op, xop, l) (X ((op), (xop)) | ((((unsigned long)(l)) & 3) << 21))
  1999 +
  2000 +/* An X form sync instruction with everything filled in except the LS field. */
  2001 +#define XSYNC_MASK (0xff9fffff)
  2002 +
  2003 +/* An X form AltiVec dss instruction. */
  2004 +#define XDSS(op, xop, a) (X ((op), (xop)) | ((((unsigned long)(a)) & 1) << 25))
  2005 +#define XDSS_MASK XDSS(0x3f, 0x3ff, 1)
  2006 +
1357 2007 /* An XFL form instruction. */
1358   -#define XFL(op, xop, rc) (OP (op) | (((xop) & 0x3ff) << 1) | ((rc) & 1))
1359   -#define XFL_MASK (XFL (0x3f, 0x3ff, 1) | (1 << 25) | (1 << 16))
  2008 +#define XFL(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1) | (((unsigned long)(rc)) & 1))
  2009 +#define XFL_MASK (XFL (0x3f, 0x3ff, 1) | (((unsigned long)1) << 25) | (((unsigned long)1) << 16))
  2010 +
  2011 +/* An X form isel instruction. */
  2012 +#define XISEL(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1))
  2013 +#define XISEL_MASK XISEL(0x3f, 0x1f)
1360 2014  
1361 2015 /* An XL form instruction with the LK field set to 0. */
1362   -#define XL(op, xop) (OP (op) | (((xop) & 0x3ff) << 1))
  2016 +#define XL(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))
1363 2017  
1364 2018 /* An XL form instruction which uses the LK field. */
1365 2019 #define XLLK(op, xop, lk) (XL ((op), (xop)) | ((lk) & 1))
... ... @@ -1369,18 +2023,18 @@ extract_tbr (insn, invalid)
1369 2023  
1370 2024 /* An XL form instruction which explicitly sets the BO field. */
1371 2025 #define XLO(op, bo, xop, lk) \
1372   - (XLLK ((op), (xop), (lk)) | (((bo) & 0x1f) << 21))
  2026 + (XLLK ((op), (xop), (lk)) | ((((unsigned long)(bo)) & 0x1f) << 21))
1373 2027 #define XLO_MASK (XL_MASK | BO_MASK)
1374 2028  
1375 2029 /* An XL form instruction which explicitly sets the y bit of the BO
1376 2030 field. */
1377   -#define XLYLK(op, xop, y, lk) (XLLK ((op), (xop), (lk)) | (((y) & 1) << 21))
  2031 +#define XLYLK(op, xop, y, lk) (XLLK ((op), (xop), (lk)) | ((((unsigned long)(y)) & 1) << 21))
1378 2032 #define XLYLK_MASK (XL_MASK | Y_MASK)
1379 2033  
1380 2034 /* An XL form instruction which sets the BO field and the condition
1381 2035 bits of the BI field. */
1382 2036 #define XLOCB(op, bo, cb, xop, lk) \
1383   - (XLO ((op), (bo), (xop), (lk)) | (((cb) & 3) << 16))
  2037 + (XLO ((op), (bo), (xop), (lk)) | ((((unsigned long)(cb)) & 3) << 16))
1384 2038 #define XLOCB_MASK XLOCB (0x3f, 0x1f, 0x3, 0x3ff, 1)
1385 2039  
1386 2040 /* An XL_MASK or XLYLK_MASK or XLOCB_MASK with the BB field fixed. */
... ... @@ -1388,6 +2042,9 @@ extract_tbr (insn, invalid)
1388 2042 #define XLYBB_MASK (XLYLK_MASK | BB_MASK)
1389 2043 #define XLBOCBBB_MASK (XLOCB_MASK | BB_MASK)
1390 2044  
  2045 +/* A mask for branch instructions using the BH field. */
  2046 +#define XLBH_MASK (XL_MASK | (0x1c << 11))
  2047 +
1391 2048 /* An XL_MASK with the BO and BB fields fixed. */
1392 2049 #define XLBOBB_MASK (XL_MASK | BO_MASK | BB_MASK)
1393 2050  
... ... @@ -1396,26 +2053,27 @@ extract_tbr (insn, invalid)
1396 2053  
1397 2054 /* An XO form instruction. */
1398 2055 #define XO(op, xop, oe, rc) \
1399   - (OP (op) | (((xop) & 0x1ff) << 1) | (((oe) & 1) << 10) | ((rc) & 1))
  2056 + (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 1) | ((((unsigned long)(oe)) & 1) << 10) | (((unsigned long)(rc)) & 1))
1400 2057 #define XO_MASK XO (0x3f, 0x1ff, 1, 1)
1401 2058  
1402 2059 /* An XO_MASK with the RB field fixed. */
1403 2060 #define XORB_MASK (XO_MASK | RB_MASK)
1404 2061  
1405 2062 /* An XS form instruction. */
1406   -#define XS(op, xop, rc) (OP (op) | (((xop) & 0x1ff) << 2) | ((rc) & 1))
  2063 +#define XS(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 2) | (((unsigned long)(rc)) & 1))
1407 2064 #define XS_MASK XS (0x3f, 0x1ff, 1)
1408 2065  
1409 2066 /* A mask for the FXM version of an XFX form instruction. */
1410   -#define XFXFXM_MASK (X_MASK | (1 << 20) | (1 << 11))
  2067 +#define XFXFXM_MASK (X_MASK | (1 << 11) | (1 << 20))
1411 2068  
1412 2069 /* An XFX form instruction with the FXM field filled in. */
1413   -#define XFXM(op, xop, fxm) \
1414   - (X ((op), (xop)) | (((fxm) & 0xff) << 12))
  2070 +#define XFXM(op, xop, fxm, p4) \
  2071 + (X ((op), (xop)) | ((((unsigned long)(fxm)) & 0xff) << 12) \
  2072 + | ((unsigned long)(p4) << 20))
1415 2073  
1416 2074 /* An XFX form instruction with the SPR field filled in. */
1417 2075 #define XSPR(op, xop, spr) \
1418   - (X ((op), (xop)) | (((spr) & 0x1f) << 16) | (((spr) & 0x3e0) << 6))
  2076 + (X ((op), (xop)) | ((((unsigned long)(spr)) & 0x1f) << 16) | ((((unsigned long)(spr)) & 0x3e0) << 6))
1419 2077 #define XSPR_MASK (X_MASK | SPR_MASK)
1420 2078  
1421 2079 /* An XFX form instruction with the SPR field filled in except for the
... ... @@ -1424,25 +2082,43 @@ extract_tbr (insn, invalid)
1424 2082  
1425 2083 /* An XFX form instruction with the SPR field filled in except for the
1426 2084 SPRG field. */
1427   -#define XSPRG_MASK (XSPR_MASK &~ SPRG_MASK)
  2085 +#define XSPRG_MASK (XSPR_MASK & ~(0x17 << 16))
  2086 +
  2087 +/* An X form instruction with everything filled in except the E field. */
  2088 +#define XE_MASK (0xffff7fff)
  2089 +
  2090 +/* An X form user context instruction. */
  2091 +#define XUC(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1f))
  2092 +#define XUC_MASK XUC(0x3f, 0x1f)
1428 2093  
1429 2094 /* The BO encodings used in extended conditional branch mnemonics. */
1430 2095 #define BODNZF (0x0)
1431 2096 #define BODNZFP (0x1)
1432 2097 #define BODZF (0x2)
1433 2098 #define BODZFP (0x3)
1434   -#define BOF (0x4)
1435   -#define BOFP (0x5)
1436 2099 #define BODNZT (0x8)
1437 2100 #define BODNZTP (0x9)
1438 2101 #define BODZT (0xa)
1439 2102 #define BODZTP (0xb)
  2103 +
  2104 +#define BOF (0x4)
  2105 +#define BOFP (0x5)
  2106 +#define BOFM4 (0x6)
  2107 +#define BOFP4 (0x7)
1440 2108 #define BOT (0xc)
1441 2109 #define BOTP (0xd)
  2110 +#define BOTM4 (0xe)
  2111 +#define BOTP4 (0xf)
  2112 +
1442 2113 #define BODNZ (0x10)
1443 2114 #define BODNZP (0x11)
1444 2115 #define BODZ (0x12)
1445 2116 #define BODZP (0x13)
  2117 +#define BODNZM4 (0x18)
  2118 +#define BODNZP4 (0x19)
  2119 +#define BODZM4 (0x1a)
  2120 +#define BODZP4 (0x1b)
  2121 +
1446 2122 #define BOU (0x14)
1447 2123  
1448 2124 /* The BI condition bit encodings used in extended conditional branch
... ... @@ -1471,13 +2147,42 @@ extract_tbr (insn, invalid)
1471 2147  
1472 2148 /* Smaller names for the flags so each entry in the opcodes table will
1473 2149 fit on a single line. */
1474   -#undef PPC
1475   -#define PPC PPC_OPCODE_PPC
1476   -#define POWER PPC_OPCODE_POWER
1477   -#define POWER2 PPC_OPCODE_POWER2
1478   -#define B32 PPC_OPCODE_32
1479   -#define B64 PPC_OPCODE_64
1480   -#define M601 PPC_OPCODE_601
  2150 +#undef PPC
  2151 +#define PPC PPC_OPCODE_PPC
  2152 +#define PPCCOM PPC_OPCODE_PPC | PPC_OPCODE_COMMON
  2153 +#define NOPOWER4 PPC_OPCODE_NOPOWER4 | PPCCOM
  2154 +#define POWER4 PPC_OPCODE_POWER4
  2155 +#define POWER5 PPC_OPCODE_POWER5
  2156 +#define PPC32 PPC_OPCODE_32 | PPC_OPCODE_PPC
  2157 +#define PPC64 PPC_OPCODE_64 | PPC_OPCODE_PPC
  2158 +#define PPC403 PPC_OPCODE_403
  2159 +#define PPC405 PPC403
  2160 +#define PPC440 PPC_OPCODE_440
  2161 +#define PPC750 PPC
  2162 +#define PPC860 PPC
  2163 +#define PPCVEC PPC_OPCODE_ALTIVEC
  2164 +#define POWER PPC_OPCODE_POWER
  2165 +#define POWER2 PPC_OPCODE_POWER | PPC_OPCODE_POWER2
  2166 +#define PPCPWR2 PPC_OPCODE_PPC | PPC_OPCODE_POWER | PPC_OPCODE_POWER2
  2167 +#define POWER32 PPC_OPCODE_POWER | PPC_OPCODE_32
  2168 +#define COM PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON
  2169 +#define COM32 PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_32
  2170 +#define M601 PPC_OPCODE_POWER | PPC_OPCODE_601
  2171 +#define PWRCOM PPC_OPCODE_POWER | PPC_OPCODE_601 | PPC_OPCODE_COMMON
  2172 +#define MFDEC1 PPC_OPCODE_POWER
  2173 +#define MFDEC2 PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE
  2174 +#define BOOKE PPC_OPCODE_BOOKE
  2175 +#define BOOKE64 PPC_OPCODE_BOOKE64
  2176 +#define CLASSIC PPC_OPCODE_CLASSIC
  2177 +#define PPCE300 PPC_OPCODE_E300
  2178 +#define PPCSPE PPC_OPCODE_SPE
  2179 +#define PPCISEL PPC_OPCODE_ISEL
  2180 +#define PPCEFS PPC_OPCODE_EFS
  2181 +#define PPCBRLK PPC_OPCODE_BRLOCK
  2182 +#define PPCPMR PPC_OPCODE_PMR
  2183 +#define PPCCHLK PPC_OPCODE_CACHELCK
  2184 +#define PPCCHLK64 PPC_OPCODE_CACHELCK | PPC_OPCODE_BOOKE64
  2185 +#define PPCRFMCI PPC_OPCODE_RFMCI
1481 2186  
1482 2187 /* The opcode table.
1483 2188  
... ... @@ -1498,815 +2203,1494 @@ extract_tbr (insn, invalid)
1498 2203 sorted by major opcode. */
1499 2204  
1500 2205 const struct powerpc_opcode powerpc_opcodes[] = {
1501   -{ "tdlgti", OPTO(2,TOLGT), OPTO_MASK, PPC|B64, { RA, SI } },
1502   -{ "tdllti", OPTO(2,TOLLT), OPTO_MASK, PPC|B64, { RA, SI } },
1503   -{ "tdeqi", OPTO(2,TOEQ), OPTO_MASK, PPC|B64, { RA, SI } },
1504   -{ "tdlgei", OPTO(2,TOLGE), OPTO_MASK, PPC|B64, { RA, SI } },
1505   -{ "tdlnli", OPTO(2,TOLNL), OPTO_MASK, PPC|B64, { RA, SI } },
1506   -{ "tdllei", OPTO(2,TOLLE), OPTO_MASK, PPC|B64, { RA, SI } },
1507   -{ "tdlngi", OPTO(2,TOLNG), OPTO_MASK, PPC|B64, { RA, SI } },
1508   -{ "tdgti", OPTO(2,TOGT), OPTO_MASK, PPC|B64, { RA, SI } },
1509   -{ "tdgei", OPTO(2,TOGE), OPTO_MASK, PPC|B64, { RA, SI } },
1510   -{ "tdnli", OPTO(2,TONL), OPTO_MASK, PPC|B64, { RA, SI } },
1511   -{ "tdlti", OPTO(2,TOLT), OPTO_MASK, PPC|B64, { RA, SI } },
1512   -{ "tdlei", OPTO(2,TOLE), OPTO_MASK, PPC|B64, { RA, SI } },
1513   -{ "tdngi", OPTO(2,TONG), OPTO_MASK, PPC|B64, { RA, SI } },
1514   -{ "tdnei", OPTO(2,TONE), OPTO_MASK, PPC|B64, { RA, SI } },
1515   -{ "tdi", OP(2), OP_MASK, PPC|B64, { TO, RA, SI } },
1516   -
1517   -{ "twlgti", OPTO(3,TOLGT), OPTO_MASK, PPC, { RA, SI } },
1518   -{ "tlgti", OPTO(3,TOLGT), OPTO_MASK, POWER, { RA, SI } },
1519   -{ "twllti", OPTO(3,TOLLT), OPTO_MASK, PPC, { RA, SI } },
1520   -{ "tllti", OPTO(3,TOLLT), OPTO_MASK, POWER, { RA, SI } },
1521   -{ "tweqi", OPTO(3,TOEQ), OPTO_MASK, PPC, { RA, SI } },
1522   -{ "teqi", OPTO(3,TOEQ), OPTO_MASK, POWER, { RA, SI } },
1523   -{ "twlgei", OPTO(3,TOLGE), OPTO_MASK, PPC, { RA, SI } },
1524   -{ "tlgei", OPTO(3,TOLGE), OPTO_MASK, POWER, { RA, SI } },
1525   -{ "twlnli", OPTO(3,TOLNL), OPTO_MASK, PPC, { RA, SI } },
1526   -{ "tlnli", OPTO(3,TOLNL), OPTO_MASK, POWER, { RA, SI } },
1527   -{ "twllei", OPTO(3,TOLLE), OPTO_MASK, PPC, { RA, SI } },
1528   -{ "tllei", OPTO(3,TOLLE), OPTO_MASK, POWER, { RA, SI } },
1529   -{ "twlngi", OPTO(3,TOLNG), OPTO_MASK, PPC, { RA, SI } },
1530   -{ "tlngi", OPTO(3,TOLNG), OPTO_MASK, POWER, { RA, SI } },
1531   -{ "twgti", OPTO(3,TOGT), OPTO_MASK, PPC, { RA, SI } },
1532   -{ "tgti", OPTO(3,TOGT), OPTO_MASK, POWER, { RA, SI } },
1533   -{ "twgei", OPTO(3,TOGE), OPTO_MASK, PPC, { RA, SI } },
1534   -{ "tgei", OPTO(3,TOGE), OPTO_MASK, POWER, { RA, SI } },
1535   -{ "twnli", OPTO(3,TONL), OPTO_MASK, PPC, { RA, SI } },
1536   -{ "tnli", OPTO(3,TONL), OPTO_MASK, POWER, { RA, SI } },
1537   -{ "twlti", OPTO(3,TOLT), OPTO_MASK, PPC, { RA, SI } },
1538   -{ "tlti", OPTO(3,TOLT), OPTO_MASK, POWER, { RA, SI } },
1539   -{ "twlei", OPTO(3,TOLE), OPTO_MASK, PPC, { RA, SI } },
1540   -{ "tlei", OPTO(3,TOLE), OPTO_MASK, POWER, { RA, SI } },
1541   -{ "twngi", OPTO(3,TONG), OPTO_MASK, PPC, { RA, SI } },
1542   -{ "tngi", OPTO(3,TONG), OPTO_MASK, POWER, { RA, SI } },
1543   -{ "twnei", OPTO(3,TONE), OPTO_MASK, PPC, { RA, SI } },
1544   -{ "tnei", OPTO(3,TONE), OPTO_MASK, POWER, { RA, SI } },
1545   -{ "twi", OP(3), OP_MASK, PPC, { TO, RA, SI } },
1546   -{ "ti", OP(3), OP_MASK, POWER, { TO, RA, SI } },
1547   -
1548   -{ "mulli", OP(7), OP_MASK, PPC, { RT, RA, SI } },
1549   -{ "muli", OP(7), OP_MASK, POWER, { RT, RA, SI } },
1550   -
1551   -{ "subfic", OP(8), OP_MASK, PPC, { RT, RA, SI } },
1552   -{ "sfi", OP(8), OP_MASK, POWER, { RT, RA, SI } },
1553   -
1554   -{ "dozi", OP(9), OP_MASK, POWER|M601, { RT, RA, SI } },
1555   -
1556   -{ "cmplwi", OPL(10,0), OPL_MASK, PPC, { OBF, RA, UI } },
1557   -{ "cmpldi", OPL(10,1), OPL_MASK, PPC|B64, { OBF, RA, UI } },
  2206 +{ "attn", X(0,256), X_MASK, POWER4, { 0 } },
  2207 +{ "tdlgti", OPTO(2,TOLGT), OPTO_MASK, PPC64, { RA, SI } },
  2208 +{ "tdllti", OPTO(2,TOLLT), OPTO_MASK, PPC64, { RA, SI } },
  2209 +{ "tdeqi", OPTO(2,TOEQ), OPTO_MASK, PPC64, { RA, SI } },
  2210 +{ "tdlgei", OPTO(2,TOLGE), OPTO_MASK, PPC64, { RA, SI } },
  2211 +{ "tdlnli", OPTO(2,TOLNL), OPTO_MASK, PPC64, { RA, SI } },
  2212 +{ "tdllei", OPTO(2,TOLLE), OPTO_MASK, PPC64, { RA, SI } },
  2213 +{ "tdlngi", OPTO(2,TOLNG), OPTO_MASK, PPC64, { RA, SI } },
  2214 +{ "tdgti", OPTO(2,TOGT), OPTO_MASK, PPC64, { RA, SI } },
  2215 +{ "tdgei", OPTO(2,TOGE), OPTO_MASK, PPC64, { RA, SI } },
  2216 +{ "tdnli", OPTO(2,TONL), OPTO_MASK, PPC64, { RA, SI } },
  2217 +{ "tdlti", OPTO(2,TOLT), OPTO_MASK, PPC64, { RA, SI } },
  2218 +{ "tdlei", OPTO(2,TOLE), OPTO_MASK, PPC64, { RA, SI } },
  2219 +{ "tdngi", OPTO(2,TONG), OPTO_MASK, PPC64, { RA, SI } },
  2220 +{ "tdnei", OPTO(2,TONE), OPTO_MASK, PPC64, { RA, SI } },
  2221 +{ "tdi", OP(2), OP_MASK, PPC64, { TO, RA, SI } },
  2222 +
  2223 +{ "twlgti", OPTO(3,TOLGT), OPTO_MASK, PPCCOM, { RA, SI } },
  2224 +{ "tlgti", OPTO(3,TOLGT), OPTO_MASK, PWRCOM, { RA, SI } },
  2225 +{ "twllti", OPTO(3,TOLLT), OPTO_MASK, PPCCOM, { RA, SI } },
  2226 +{ "tllti", OPTO(3,TOLLT), OPTO_MASK, PWRCOM, { RA, SI } },
  2227 +{ "tweqi", OPTO(3,TOEQ), OPTO_MASK, PPCCOM, { RA, SI } },
  2228 +{ "teqi", OPTO(3,TOEQ), OPTO_MASK, PWRCOM, { RA, SI } },
  2229 +{ "twlgei", OPTO(3,TOLGE), OPTO_MASK, PPCCOM, { RA, SI } },
  2230 +{ "tlgei", OPTO(3,TOLGE), OPTO_MASK, PWRCOM, { RA, SI } },
  2231 +{ "twlnli", OPTO(3,TOLNL), OPTO_MASK, PPCCOM, { RA, SI } },
  2232 +{ "tlnli", OPTO(3,TOLNL), OPTO_MASK, PWRCOM, { RA, SI } },
  2233 +{ "twllei", OPTO(3,TOLLE), OPTO_MASK, PPCCOM, { RA, SI } },
  2234 +{ "tllei", OPTO(3,TOLLE), OPTO_MASK, PWRCOM, { RA, SI } },
  2235 +{ "twlngi", OPTO(3,TOLNG), OPTO_MASK, PPCCOM, { RA, SI } },
  2236 +{ "tlngi", OPTO(3,TOLNG), OPTO_MASK, PWRCOM, { RA, SI } },
  2237 +{ "twgti", OPTO(3,TOGT), OPTO_MASK, PPCCOM, { RA, SI } },
  2238 +{ "tgti", OPTO(3,TOGT), OPTO_MASK, PWRCOM, { RA, SI } },
  2239 +{ "twgei", OPTO(3,TOGE), OPTO_MASK, PPCCOM, { RA, SI } },
  2240 +{ "tgei", OPTO(3,TOGE), OPTO_MASK, PWRCOM, { RA, SI } },
  2241 +{ "twnli", OPTO(3,TONL), OPTO_MASK, PPCCOM, { RA, SI } },
  2242 +{ "tnli", OPTO(3,TONL), OPTO_MASK, PWRCOM, { RA, SI } },
  2243 +{ "twlti", OPTO(3,TOLT), OPTO_MASK, PPCCOM, { RA, SI } },
  2244 +{ "tlti", OPTO(3,TOLT), OPTO_MASK, PWRCOM, { RA, SI } },
  2245 +{ "twlei", OPTO(3,TOLE), OPTO_MASK, PPCCOM, { RA, SI } },
  2246 +{ "tlei", OPTO(3,TOLE), OPTO_MASK, PWRCOM, { RA, SI } },
  2247 +{ "twngi", OPTO(3,TONG), OPTO_MASK, PPCCOM, { RA, SI } },
  2248 +{ "tngi", OPTO(3,TONG), OPTO_MASK, PWRCOM, { RA, SI } },
  2249 +{ "twnei", OPTO(3,TONE), OPTO_MASK, PPCCOM, { RA, SI } },
  2250 +{ "tnei", OPTO(3,TONE), OPTO_MASK, PWRCOM, { RA, SI } },
  2251 +{ "twi", OP(3), OP_MASK, PPCCOM, { TO, RA, SI } },
  2252 +{ "ti", OP(3), OP_MASK, PWRCOM, { TO, RA, SI } },
  2253 +
  2254 +{ "macchw", XO(4,172,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2255 +{ "macchw.", XO(4,172,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2256 +{ "macchwo", XO(4,172,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2257 +{ "macchwo.", XO(4,172,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2258 +{ "macchws", XO(4,236,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2259 +{ "macchws.", XO(4,236,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2260 +{ "macchwso", XO(4,236,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2261 +{ "macchwso.", XO(4,236,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2262 +{ "macchwsu", XO(4,204,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2263 +{ "macchwsu.", XO(4,204,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2264 +{ "macchwsuo", XO(4,204,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2265 +{ "macchwsuo.", XO(4,204,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2266 +{ "macchwu", XO(4,140,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2267 +{ "macchwu.", XO(4,140,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2268 +{ "macchwuo", XO(4,140,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2269 +{ "macchwuo.", XO(4,140,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2270 +{ "machhw", XO(4,44,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2271 +{ "machhw.", XO(4,44,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2272 +{ "machhwo", XO(4,44,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2273 +{ "machhwo.", XO(4,44,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2274 +{ "machhws", XO(4,108,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2275 +{ "machhws.", XO(4,108,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2276 +{ "machhwso", XO(4,108,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2277 +{ "machhwso.", XO(4,108,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2278 +{ "machhwsu", XO(4,76,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2279 +{ "machhwsu.", XO(4,76,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2280 +{ "machhwsuo", XO(4,76,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2281 +{ "machhwsuo.", XO(4,76,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2282 +{ "machhwu", XO(4,12,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2283 +{ "machhwu.", XO(4,12,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2284 +{ "machhwuo", XO(4,12,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2285 +{ "machhwuo.", XO(4,12,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2286 +{ "maclhw", XO(4,428,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2287 +{ "maclhw.", XO(4,428,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2288 +{ "maclhwo", XO(4,428,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2289 +{ "maclhwo.", XO(4,428,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2290 +{ "maclhws", XO(4,492,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2291 +{ "maclhws.", XO(4,492,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2292 +{ "maclhwso", XO(4,492,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2293 +{ "maclhwso.", XO(4,492,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2294 +{ "maclhwsu", XO(4,460,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2295 +{ "maclhwsu.", XO(4,460,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2296 +{ "maclhwsuo", XO(4,460,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2297 +{ "maclhwsuo.", XO(4,460,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2298 +{ "maclhwu", XO(4,396,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2299 +{ "maclhwu.", XO(4,396,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2300 +{ "maclhwuo", XO(4,396,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2301 +{ "maclhwuo.", XO(4,396,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2302 +{ "mulchw", XRC(4,168,0), X_MASK, PPC405|PPC440, { RT, RA, RB } },
  2303 +{ "mulchw.", XRC(4,168,1), X_MASK, PPC405|PPC440, { RT, RA, RB } },
  2304 +{ "mulchwu", XRC(4,136,0), X_MASK, PPC405|PPC440, { RT, RA, RB } },
  2305 +{ "mulchwu.", XRC(4,136,1), X_MASK, PPC405|PPC440, { RT, RA, RB } },
  2306 +{ "mulhhw", XRC(4,40,0), X_MASK, PPC405|PPC440, { RT, RA, RB } },
  2307 +{ "mulhhw.", XRC(4,40,1), X_MASK, PPC405|PPC440, { RT, RA, RB } },
  2308 +{ "mulhhwu", XRC(4,8,0), X_MASK, PPC405|PPC440, { RT, RA, RB } },
  2309 +{ "mulhhwu.", XRC(4,8,1), X_MASK, PPC405|PPC440, { RT, RA, RB } },
  2310 +{ "mullhw", XRC(4,424,0), X_MASK, PPC405|PPC440, { RT, RA, RB } },
  2311 +{ "mullhw.", XRC(4,424,1), X_MASK, PPC405|PPC440, { RT, RA, RB } },
  2312 +{ "mullhwu", XRC(4,392,0), X_MASK, PPC405|PPC440, { RT, RA, RB } },
  2313 +{ "mullhwu.", XRC(4,392,1), X_MASK, PPC405|PPC440, { RT, RA, RB } },
  2314 +{ "nmacchw", XO(4,174,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2315 +{ "nmacchw.", XO(4,174,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2316 +{ "nmacchwo", XO(4,174,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2317 +{ "nmacchwo.", XO(4,174,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2318 +{ "nmacchws", XO(4,238,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2319 +{ "nmacchws.", XO(4,238,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2320 +{ "nmacchwso", XO(4,238,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2321 +{ "nmacchwso.", XO(4,238,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2322 +{ "nmachhw", XO(4,46,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2323 +{ "nmachhw.", XO(4,46,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2324 +{ "nmachhwo", XO(4,46,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2325 +{ "nmachhwo.", XO(4,46,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2326 +{ "nmachhws", XO(4,110,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2327 +{ "nmachhws.", XO(4,110,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2328 +{ "nmachhwso", XO(4,110,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2329 +{ "nmachhwso.", XO(4,110,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2330 +{ "nmaclhw", XO(4,430,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2331 +{ "nmaclhw.", XO(4,430,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2332 +{ "nmaclhwo", XO(4,430,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2333 +{ "nmaclhwo.", XO(4,430,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2334 +{ "nmaclhws", XO(4,494,0,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2335 +{ "nmaclhws.", XO(4,494,0,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2336 +{ "nmaclhwso", XO(4,494,1,0), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2337 +{ "nmaclhwso.", XO(4,494,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } },
  2338 +{ "mfvscr", VX(4, 1540), VX_MASK, PPCVEC, { VD } },
  2339 +{ "mtvscr", VX(4, 1604), VX_MASK, PPCVEC, { VB } },
  2340 +
  2341 + /* Double-precision opcodes. */
  2342 + /* Some of these conflict with AltiVec, so move them before, since
  2343 + PPCVEC includes the PPC_OPCODE_PPC set. */
  2344 +{ "efscfd", VX(4, 719), VX_MASK, PPCEFS, { RS, RB } },
  2345 +{ "efdabs", VX(4, 740), VX_MASK, PPCEFS, { RS, RA } },
  2346 +{ "efdnabs", VX(4, 741), VX_MASK, PPCEFS, { RS, RA } },
  2347 +{ "efdneg", VX(4, 742), VX_MASK, PPCEFS, { RS, RA } },
  2348 +{ "efdadd", VX(4, 736), VX_MASK, PPCEFS, { RS, RA, RB } },
  2349 +{ "efdsub", VX(4, 737), VX_MASK, PPCEFS, { RS, RA, RB } },
  2350 +{ "efdmul", VX(4, 744), VX_MASK, PPCEFS, { RS, RA, RB } },
  2351 +{ "efddiv", VX(4, 745), VX_MASK, PPCEFS, { RS, RA, RB } },
  2352 +{ "efdcmpgt", VX(4, 748), VX_MASK, PPCEFS, { CRFD, RA, RB } },
  2353 +{ "efdcmplt", VX(4, 749), VX_MASK, PPCEFS, { CRFD, RA, RB } },
  2354 +{ "efdcmpeq", VX(4, 750), VX_MASK, PPCEFS, { CRFD, RA, RB } },
  2355 +{ "efdtstgt", VX(4, 764), VX_MASK, PPCEFS, { CRFD, RA, RB } },
  2356 +{ "efdtstlt", VX(4, 765), VX_MASK, PPCEFS, { CRFD, RA, RB } },
  2357 +{ "efdtsteq", VX(4, 766), VX_MASK, PPCEFS, { CRFD, RA, RB } },
  2358 +{ "efdcfsi", VX(4, 753), VX_MASK, PPCEFS, { RS, RB } },
  2359 +{ "efdcfsid", VX(4, 739), VX_MASK, PPCEFS, { RS, RB } },
  2360 +{ "efdcfui", VX(4, 752), VX_MASK, PPCEFS, { RS, RB } },
  2361 +{ "efdcfuid", VX(4, 738), VX_MASK, PPCEFS, { RS, RB } },
  2362 +{ "efdcfsf", VX(4, 755), VX_MASK, PPCEFS, { RS, RB } },
  2363 +{ "efdcfuf", VX(4, 754), VX_MASK, PPCEFS, { RS, RB } },
  2364 +{ "efdctsi", VX(4, 757), VX_MASK, PPCEFS, { RS, RB } },
  2365 +{ "efdctsidz",VX(4, 747), VX_MASK, PPCEFS, { RS, RB } },
  2366 +{ "efdctsiz", VX(4, 762), VX_MASK, PPCEFS, { RS, RB } },
  2367 +{ "efdctui", VX(4, 756), VX_MASK, PPCEFS, { RS, RB } },
  2368 +{ "efdctuidz",VX(4, 746), VX_MASK, PPCEFS, { RS, RB } },
  2369 +{ "efdctuiz", VX(4, 760), VX_MASK, PPCEFS, { RS, RB } },
  2370 +{ "efdctsf", VX(4, 759), VX_MASK, PPCEFS, { RS, RB } },
  2371 +{ "efdctuf", VX(4, 758), VX_MASK, PPCEFS, { RS, RB } },
  2372 +{ "efdcfs", VX(4, 751), VX_MASK, PPCEFS, { RS, RB } },
  2373 + /* End of double-precision opcodes. */
  2374 +
  2375 +{ "vaddcuw", VX(4, 384), VX_MASK, PPCVEC, { VD, VA, VB } },
  2376 +{ "vaddfp", VX(4, 10), VX_MASK, PPCVEC, { VD, VA, VB } },
  2377 +{ "vaddsbs", VX(4, 768), VX_MASK, PPCVEC, { VD, VA, VB } },
  2378 +{ "vaddshs", VX(4, 832), VX_MASK, PPCVEC, { VD, VA, VB } },
  2379 +{ "vaddsws", VX(4, 896), VX_MASK, PPCVEC, { VD, VA, VB } },
  2380 +{ "vaddubm", VX(4, 0), VX_MASK, PPCVEC, { VD, VA, VB } },
  2381 +{ "vaddubs", VX(4, 512), VX_MASK, PPCVEC, { VD, VA, VB } },
  2382 +{ "vadduhm", VX(4, 64), VX_MASK, PPCVEC, { VD, VA, VB } },
  2383 +{ "vadduhs", VX(4, 576), VX_MASK, PPCVEC, { VD, VA, VB } },
  2384 +{ "vadduwm", VX(4, 128), VX_MASK, PPCVEC, { VD, VA, VB } },
  2385 +{ "vadduws", VX(4, 640), VX_MASK, PPCVEC, { VD, VA, VB } },
  2386 +{ "vand", VX(4, 1028), VX_MASK, PPCVEC, { VD, VA, VB } },
  2387 +{ "vandc", VX(4, 1092), VX_MASK, PPCVEC, { VD, VA, VB } },
  2388 +{ "vavgsb", VX(4, 1282), VX_MASK, PPCVEC, { VD, VA, VB } },
  2389 +{ "vavgsh", VX(4, 1346), VX_MASK, PPCVEC, { VD, VA, VB } },
  2390 +{ "vavgsw", VX(4, 1410), VX_MASK, PPCVEC, { VD, VA, VB } },
  2391 +{ "vavgub", VX(4, 1026), VX_MASK, PPCVEC, { VD, VA, VB } },
  2392 +{ "vavguh", VX(4, 1090), VX_MASK, PPCVEC, { VD, VA, VB } },
  2393 +{ "vavguw", VX(4, 1154), VX_MASK, PPCVEC, { VD, VA, VB } },
  2394 +{ "vcfsx", VX(4, 842), VX_MASK, PPCVEC, { VD, VB, UIMM } },
  2395 +{ "vcfux", VX(4, 778), VX_MASK, PPCVEC, { VD, VB, UIMM } },
  2396 +{ "vcmpbfp", VXR(4, 966, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2397 +{ "vcmpbfp.", VXR(4, 966, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2398 +{ "vcmpeqfp", VXR(4, 198, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2399 +{ "vcmpeqfp.", VXR(4, 198, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2400 +{ "vcmpequb", VXR(4, 6, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2401 +{ "vcmpequb.", VXR(4, 6, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2402 +{ "vcmpequh", VXR(4, 70, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2403 +{ "vcmpequh.", VXR(4, 70, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2404 +{ "vcmpequw", VXR(4, 134, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2405 +{ "vcmpequw.", VXR(4, 134, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2406 +{ "vcmpgefp", VXR(4, 454, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2407 +{ "vcmpgefp.", VXR(4, 454, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2408 +{ "vcmpgtfp", VXR(4, 710, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2409 +{ "vcmpgtfp.", VXR(4, 710, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2410 +{ "vcmpgtsb", VXR(4, 774, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2411 +{ "vcmpgtsb.", VXR(4, 774, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2412 +{ "vcmpgtsh", VXR(4, 838, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2413 +{ "vcmpgtsh.", VXR(4, 838, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2414 +{ "vcmpgtsw", VXR(4, 902, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2415 +{ "vcmpgtsw.", VXR(4, 902, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2416 +{ "vcmpgtub", VXR(4, 518, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2417 +{ "vcmpgtub.", VXR(4, 518, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2418 +{ "vcmpgtuh", VXR(4, 582, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2419 +{ "vcmpgtuh.", VXR(4, 582, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2420 +{ "vcmpgtuw", VXR(4, 646, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2421 +{ "vcmpgtuw.", VXR(4, 646, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
  2422 +{ "vctsxs", VX(4, 970), VX_MASK, PPCVEC, { VD, VB, UIMM } },
  2423 +{ "vctuxs", VX(4, 906), VX_MASK, PPCVEC, { VD, VB, UIMM } },
  2424 +{ "vexptefp", VX(4, 394), VX_MASK, PPCVEC, { VD, VB } },
  2425 +{ "vlogefp", VX(4, 458), VX_MASK, PPCVEC, { VD, VB } },
  2426 +{ "vmaddfp", VXA(4, 46), VXA_MASK, PPCVEC, { VD, VA, VC, VB } },
  2427 +{ "vmaxfp", VX(4, 1034), VX_MASK, PPCVEC, { VD, VA, VB } },
  2428 +{ "vmaxsb", VX(4, 258), VX_MASK, PPCVEC, { VD, VA, VB } },
  2429 +{ "vmaxsh", VX(4, 322), VX_MASK, PPCVEC, { VD, VA, VB } },
  2430 +{ "vmaxsw", VX(4, 386), VX_MASK, PPCVEC, { VD, VA, VB } },
  2431 +{ "vmaxub", VX(4, 2), VX_MASK, PPCVEC, { VD, VA, VB } },
  2432 +{ "vmaxuh", VX(4, 66), VX_MASK, PPCVEC, { VD, VA, VB } },
  2433 +{ "vmaxuw", VX(4, 130), VX_MASK, PPCVEC, { VD, VA, VB } },
  2434 +{ "vmhaddshs", VXA(4, 32), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
  2435 +{ "vmhraddshs", VXA(4, 33), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
  2436 +{ "vminfp", VX(4, 1098), VX_MASK, PPCVEC, { VD, VA, VB } },
  2437 +{ "vminsb", VX(4, 770), VX_MASK, PPCVEC, { VD, VA, VB } },
  2438 +{ "vminsh", VX(4, 834), VX_MASK, PPCVEC, { VD, VA, VB } },
  2439 +{ "vminsw", VX(4, 898), VX_MASK, PPCVEC, { VD, VA, VB } },
  2440 +{ "vminub", VX(4, 514), VX_MASK, PPCVEC, { VD, VA, VB } },
  2441 +{ "vminuh", VX(4, 578), VX_MASK, PPCVEC, { VD, VA, VB } },
  2442 +{ "vminuw", VX(4, 642), VX_MASK, PPCVEC, { VD, VA, VB } },
  2443 +{ "vmladduhm", VXA(4, 34), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
  2444 +{ "vmrghb", VX(4, 12), VX_MASK, PPCVEC, { VD, VA, VB } },
  2445 +{ "vmrghh", VX(4, 76), VX_MASK, PPCVEC, { VD, VA, VB } },
  2446 +{ "vmrghw", VX(4, 140), VX_MASK, PPCVEC, { VD, VA, VB } },
  2447 +{ "vmrglb", VX(4, 268), VX_MASK, PPCVEC, { VD, VA, VB } },
  2448 +{ "vmrglh", VX(4, 332), VX_MASK, PPCVEC, { VD, VA, VB } },
  2449 +{ "vmrglw", VX(4, 396), VX_MASK, PPCVEC, { VD, VA, VB } },
  2450 +{ "vmsummbm", VXA(4, 37), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
  2451 +{ "vmsumshm", VXA(4, 40), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
  2452 +{ "vmsumshs", VXA(4, 41), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
  2453 +{ "vmsumubm", VXA(4, 36), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
  2454 +{ "vmsumuhm", VXA(4, 38), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
  2455 +{ "vmsumuhs", VXA(4, 39), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
  2456 +{ "vmulesb", VX(4, 776), VX_MASK, PPCVEC, { VD, VA, VB } },
  2457 +{ "vmulesh", VX(4, 840), VX_MASK, PPCVEC, { VD, VA, VB } },
  2458 +{ "vmuleub", VX(4, 520), VX_MASK, PPCVEC, { VD, VA, VB } },
  2459 +{ "vmuleuh", VX(4, 584), VX_MASK, PPCVEC, { VD, VA, VB } },
  2460 +{ "vmulosb", VX(4, 264), VX_MASK, PPCVEC, { VD, VA, VB } },
  2461 +{ "vmulosh", VX(4, 328), VX_MASK, PPCVEC, { VD, VA, VB } },
  2462 +{ "vmuloub", VX(4, 8), VX_MASK, PPCVEC, { VD, VA, VB } },
  2463 +{ "vmulouh", VX(4, 72), VX_MASK, PPCVEC, { VD, VA, VB } },
  2464 +{ "vnmsubfp", VXA(4, 47), VXA_MASK, PPCVEC, { VD, VA, VC, VB } },
  2465 +{ "vnor", VX(4, 1284), VX_MASK, PPCVEC, { VD, VA, VB } },
  2466 +{ "vor", VX(4, 1156), VX_MASK, PPCVEC, { VD, VA, VB } },
  2467 +{ "vperm", VXA(4, 43), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
  2468 +{ "vpkpx", VX(4, 782), VX_MASK, PPCVEC, { VD, VA, VB } },
  2469 +{ "vpkshss", VX(4, 398), VX_MASK, PPCVEC, { VD, VA, VB } },
  2470 +{ "vpkshus", VX(4, 270), VX_MASK, PPCVEC, { VD, VA, VB } },
  2471 +{ "vpkswss", VX(4, 462), VX_MASK, PPCVEC, { VD, VA, VB } },
  2472 +{ "vpkswus", VX(4, 334), VX_MASK, PPCVEC, { VD, VA, VB } },
  2473 +{ "vpkuhum", VX(4, 14), VX_MASK, PPCVEC, { VD, VA, VB } },
  2474 +{ "vpkuhus", VX(4, 142), VX_MASK, PPCVEC, { VD, VA, VB } },
  2475 +{ "vpkuwum", VX(4, 78), VX_MASK, PPCVEC, { VD, VA, VB } },
  2476 +{ "vpkuwus", VX(4, 206), VX_MASK, PPCVEC, { VD, VA, VB } },
  2477 +{ "vrefp", VX(4, 266), VX_MASK, PPCVEC, { VD, VB } },
  2478 +{ "vrfim", VX(4, 714), VX_MASK, PPCVEC, { VD, VB } },
  2479 +{ "vrfin", VX(4, 522), VX_MASK, PPCVEC, { VD, VB } },
  2480 +{ "vrfip", VX(4, 650), VX_MASK, PPCVEC, { VD, VB } },
  2481 +{ "vrfiz", VX(4, 586), VX_MASK, PPCVEC, { VD, VB } },
  2482 +{ "vrlb", VX(4, 4), VX_MASK, PPCVEC, { VD, VA, VB } },
  2483 +{ "vrlh", VX(4, 68), VX_MASK, PPCVEC, { VD, VA, VB } },
  2484 +{ "vrlw", VX(4, 132), VX_MASK, PPCVEC, { VD, VA, VB } },
  2485 +{ "vrsqrtefp", VX(4, 330), VX_MASK, PPCVEC, { VD, VB } },
  2486 +{ "vsel", VXA(4, 42), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
  2487 +{ "vsl", VX(4, 452), VX_MASK, PPCVEC, { VD, VA, VB } },
  2488 +{ "vslb", VX(4, 260), VX_MASK, PPCVEC, { VD, VA, VB } },
  2489 +{ "vsldoi", VXA(4, 44), VXA_MASK, PPCVEC, { VD, VA, VB, SHB } },
  2490 +{ "vslh", VX(4, 324), VX_MASK, PPCVEC, { VD, VA, VB } },
  2491 +{ "vslo", VX(4, 1036), VX_MASK, PPCVEC, { VD, VA, VB } },
  2492 +{ "vslw", VX(4, 388), VX_MASK, PPCVEC, { VD, VA, VB } },
  2493 +{ "vspltb", VX(4, 524), VX_MASK, PPCVEC, { VD, VB, UIMM } },
  2494 +{ "vsplth", VX(4, 588), VX_MASK, PPCVEC, { VD, VB, UIMM } },
  2495 +{ "vspltisb", VX(4, 780), VX_MASK, PPCVEC, { VD, SIMM } },
  2496 +{ "vspltish", VX(4, 844), VX_MASK, PPCVEC, { VD, SIMM } },
  2497 +{ "vspltisw", VX(4, 908), VX_MASK, PPCVEC, { VD, SIMM } },
  2498 +{ "vspltw", VX(4, 652), VX_MASK, PPCVEC, { VD, VB, UIMM } },
  2499 +{ "vsr", VX(4, 708), VX_MASK, PPCVEC, { VD, VA, VB } },
  2500 +{ "vsrab", VX(4, 772), VX_MASK, PPCVEC, { VD, VA, VB } },
  2501 +{ "vsrah", VX(4, 836), VX_MASK, PPCVEC, { VD, VA, VB } },
  2502 +{ "vsraw", VX(4, 900), VX_MASK, PPCVEC, { VD, VA, VB } },
  2503 +{ "vsrb", VX(4, 516), VX_MASK, PPCVEC, { VD, VA, VB } },
  2504 +{ "vsrh", VX(4, 580), VX_MASK, PPCVEC, { VD, VA, VB } },
  2505 +{ "vsro", VX(4, 1100), VX_MASK, PPCVEC, { VD, VA, VB } },
  2506 +{ "vsrw", VX(4, 644), VX_MASK, PPCVEC, { VD, VA, VB } },
  2507 +{ "vsubcuw", VX(4, 1408), VX_MASK, PPCVEC, { VD, VA, VB } },
  2508 +{ "vsubfp", VX(4, 74), VX_MASK, PPCVEC, { VD, VA, VB } },
  2509 +{ "vsubsbs", VX(4, 1792), VX_MASK, PPCVEC, { VD, VA, VB } },
  2510 +{ "vsubshs", VX(4, 1856), VX_MASK, PPCVEC, { VD, VA, VB } },
  2511 +{ "vsubsws", VX(4, 1920), VX_MASK, PPCVEC, { VD, VA, VB } },
  2512 +{ "vsububm", VX(4, 1024), VX_MASK, PPCVEC, { VD, VA, VB } },
  2513 +{ "vsububs", VX(4, 1536), VX_MASK, PPCVEC, { VD, VA, VB } },
  2514 +{ "vsubuhm", VX(4, 1088), VX_MASK, PPCVEC, { VD, VA, VB } },
  2515 +{ "vsubuhs", VX(4, 1600), VX_MASK, PPCVEC, { VD, VA, VB } },
  2516 +{ "vsubuwm", VX(4, 1152), VX_MASK, PPCVEC, { VD, VA, VB } },
  2517 +{ "vsubuws", VX(4, 1664), VX_MASK, PPCVEC, { VD, VA, VB } },
  2518 +{ "vsumsws", VX(4, 1928), VX_MASK, PPCVEC, { VD, VA, VB } },
  2519 +{ "vsum2sws", VX(4, 1672), VX_MASK, PPCVEC, { VD, VA, VB } },
  2520 +{ "vsum4sbs", VX(4, 1800), VX_MASK, PPCVEC, { VD, VA, VB } },
  2521 +{ "vsum4shs", VX(4, 1608), VX_MASK, PPCVEC, { VD, VA, VB } },
  2522 +{ "vsum4ubs", VX(4, 1544), VX_MASK, PPCVEC, { VD, VA, VB } },
  2523 +{ "vupkhpx", VX(4, 846), VX_MASK, PPCVEC, { VD, VB } },
  2524 +{ "vupkhsb", VX(4, 526), VX_MASK, PPCVEC, { VD, VB } },
  2525 +{ "vupkhsh", VX(4, 590), VX_MASK, PPCVEC, { VD, VB } },
  2526 +{ "vupklpx", VX(4, 974), VX_MASK, PPCVEC, { VD, VB } },
  2527 +{ "vupklsb", VX(4, 654), VX_MASK, PPCVEC, { VD, VB } },
  2528 +{ "vupklsh", VX(4, 718), VX_MASK, PPCVEC, { VD, VB } },
  2529 +{ "vxor", VX(4, 1220), VX_MASK, PPCVEC, { VD, VA, VB } },
  2530 +
  2531 +{ "evaddw", VX(4, 512), VX_MASK, PPCSPE, { RS, RA, RB } },
  2532 +{ "evaddiw", VX(4, 514), VX_MASK, PPCSPE, { RS, RB, UIMM } },
  2533 +{ "evsubfw", VX(4, 516), VX_MASK, PPCSPE, { RS, RA, RB } },
  2534 +{ "evsubw", VX(4, 516), VX_MASK, PPCSPE, { RS, RB, RA } },
  2535 +{ "evsubifw", VX(4, 518), VX_MASK, PPCSPE, { RS, UIMM, RB } },
  2536 +{ "evsubiw", VX(4, 518), VX_MASK, PPCSPE, { RS, RB, UIMM } },
  2537 +{ "evabs", VX(4, 520), VX_MASK, PPCSPE, { RS, RA } },
  2538 +{ "evneg", VX(4, 521), VX_MASK, PPCSPE, { RS, RA } },
  2539 +{ "evextsb", VX(4, 522), VX_MASK, PPCSPE, { RS, RA } },
  2540 +{ "evextsh", VX(4, 523), VX_MASK, PPCSPE, { RS, RA } },
  2541 +{ "evrndw", VX(4, 524), VX_MASK, PPCSPE, { RS, RA } },
  2542 +{ "evcntlzw", VX(4, 525), VX_MASK, PPCSPE, { RS, RA } },
  2543 +{ "evcntlsw", VX(4, 526), VX_MASK, PPCSPE, { RS, RA } },
  2544 +
  2545 +{ "brinc", VX(4, 527), VX_MASK, PPCSPE, { RS, RA, RB } },
  2546 +
  2547 +{ "evand", VX(4, 529), VX_MASK, PPCSPE, { RS, RA, RB } },
  2548 +{ "evandc", VX(4, 530), VX_MASK, PPCSPE, { RS, RA, RB } },
  2549 +{ "evmr", VX(4, 535), VX_MASK, PPCSPE, { RS, RA, BBA } },
  2550 +{ "evor", VX(4, 535), VX_MASK, PPCSPE, { RS, RA, RB } },
  2551 +{ "evorc", VX(4, 539), VX_MASK, PPCSPE, { RS, RA, RB } },
  2552 +{ "evxor", VX(4, 534), VX_MASK, PPCSPE, { RS, RA, RB } },
  2553 +{ "eveqv", VX(4, 537), VX_MASK, PPCSPE, { RS, RA, RB } },
  2554 +{ "evnand", VX(4, 542), VX_MASK, PPCSPE, { RS, RA, RB } },
  2555 +{ "evnot", VX(4, 536), VX_MASK, PPCSPE, { RS, RA, BBA } },
  2556 +{ "evnor", VX(4, 536), VX_MASK, PPCSPE, { RS, RA, RB } },
  2557 +
  2558 +{ "evrlw", VX(4, 552), VX_MASK, PPCSPE, { RS, RA, RB } },
  2559 +{ "evrlwi", VX(4, 554), VX_MASK, PPCSPE, { RS, RA, EVUIMM } },
  2560 +{ "evslw", VX(4, 548), VX_MASK, PPCSPE, { RS, RA, RB } },
  2561 +{ "evslwi", VX(4, 550), VX_MASK, PPCSPE, { RS, RA, EVUIMM } },
  2562 +{ "evsrws", VX(4, 545), VX_MASK, PPCSPE, { RS, RA, RB } },
  2563 +{ "evsrwu", VX(4, 544), VX_MASK, PPCSPE, { RS, RA, RB } },
  2564 +{ "evsrwis", VX(4, 547), VX_MASK, PPCSPE, { RS, RA, EVUIMM } },
  2565 +{ "evsrwiu", VX(4, 546), VX_MASK, PPCSPE, { RS, RA, EVUIMM } },
  2566 +{ "evsplati", VX(4, 553), VX_MASK, PPCSPE, { RS, SIMM } },
  2567 +{ "evsplatfi", VX(4, 555), VX_MASK, PPCSPE, { RS, SIMM } },
  2568 +{ "evmergehi", VX(4, 556), VX_MASK, PPCSPE, { RS, RA, RB } },
  2569 +{ "evmergelo", VX(4, 557), VX_MASK, PPCSPE, { RS, RA, RB } },
  2570 +{ "evmergehilo",VX(4,558), VX_MASK, PPCSPE, { RS, RA, RB } },
  2571 +{ "evmergelohi",VX(4,559), VX_MASK, PPCSPE, { RS, RA, RB } },
  2572 +
  2573 +{ "evcmpgts", VX(4, 561), VX_MASK, PPCSPE, { CRFD, RA, RB } },
  2574 +{ "evcmpgtu", VX(4, 560), VX_MASK, PPCSPE, { CRFD, RA, RB } },
  2575 +{ "evcmplts", VX(4, 563), VX_MASK, PPCSPE, { CRFD, RA, RB } },
  2576 +{ "evcmpltu", VX(4, 562), VX_MASK, PPCSPE, { CRFD, RA, RB } },
  2577 +{ "evcmpeq", VX(4, 564), VX_MASK, PPCSPE, { CRFD, RA, RB } },
  2578 +{ "evsel", EVSEL(4,79),EVSEL_MASK, PPCSPE, { RS, RA, RB, CRFS } },
  2579 +
  2580 +{ "evldd", VX(4, 769), VX_MASK, PPCSPE, { RS, EVUIMM_8, RA } },
  2581 +{ "evlddx", VX(4, 768), VX_MASK, PPCSPE, { RS, RA, RB } },
  2582 +{ "evldw", VX(4, 771), VX_MASK, PPCSPE, { RS, EVUIMM_8, RA } },
  2583 +{ "evldwx", VX(4, 770), VX_MASK, PPCSPE, { RS, RA, RB } },
  2584 +{ "evldh", VX(4, 773), VX_MASK, PPCSPE, { RS, EVUIMM_8, RA } },
  2585 +{ "evldhx", VX(4, 772), VX_MASK, PPCSPE, { RS, RA, RB } },
  2586 +{ "evlwhe", VX(4, 785), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
  2587 +{ "evlwhex", VX(4, 784), VX_MASK, PPCSPE, { RS, RA, RB } },
  2588 +{ "evlwhou", VX(4, 789), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
  2589 +{ "evlwhoux", VX(4, 788), VX_MASK, PPCSPE, { RS, RA, RB } },
  2590 +{ "evlwhos", VX(4, 791), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
  2591 +{ "evlwhosx", VX(4, 790), VX_MASK, PPCSPE, { RS, RA, RB } },
  2592 +{ "evlwwsplat",VX(4, 793), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
  2593 +{ "evlwwsplatx",VX(4, 792), VX_MASK, PPCSPE, { RS, RA, RB } },
  2594 +{ "evlwhsplat",VX(4, 797), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
  2595 +{ "evlwhsplatx",VX(4, 796), VX_MASK, PPCSPE, { RS, RA, RB } },
  2596 +{ "evlhhesplat",VX(4, 777), VX_MASK, PPCSPE, { RS, EVUIMM_2, RA } },
  2597 +{ "evlhhesplatx",VX(4, 776), VX_MASK, PPCSPE, { RS, RA, RB } },
  2598 +{ "evlhhousplat",VX(4, 781), VX_MASK, PPCSPE, { RS, EVUIMM_2, RA } },
  2599 +{ "evlhhousplatx",VX(4, 780), VX_MASK, PPCSPE, { RS, RA, RB } },
  2600 +{ "evlhhossplat",VX(4, 783), VX_MASK, PPCSPE, { RS, EVUIMM_2, RA } },
  2601 +{ "evlhhossplatx",VX(4, 782), VX_MASK, PPCSPE, { RS, RA, RB } },
  2602 +
  2603 +{ "evstdd", VX(4, 801), VX_MASK, PPCSPE, { RS, EVUIMM_8, RA } },
  2604 +{ "evstddx", VX(4, 800), VX_MASK, PPCSPE, { RS, RA, RB } },
  2605 +{ "evstdw", VX(4, 803), VX_MASK, PPCSPE, { RS, EVUIMM_8, RA } },
  2606 +{ "evstdwx", VX(4, 802), VX_MASK, PPCSPE, { RS, RA, RB } },
  2607 +{ "evstdh", VX(4, 805), VX_MASK, PPCSPE, { RS, EVUIMM_8, RA } },
  2608 +{ "evstdhx", VX(4, 804), VX_MASK, PPCSPE, { RS, RA, RB } },
  2609 +{ "evstwwe", VX(4, 825), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
  2610 +{ "evstwwex", VX(4, 824), VX_MASK, PPCSPE, { RS, RA, RB } },
  2611 +{ "evstwwo", VX(4, 829), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
  2612 +{ "evstwwox", VX(4, 828), VX_MASK, PPCSPE, { RS, RA, RB } },
  2613 +{ "evstwhe", VX(4, 817), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
  2614 +{ "evstwhex", VX(4, 816), VX_MASK, PPCSPE, { RS, RA, RB } },
  2615 +{ "evstwho", VX(4, 821), VX_MASK, PPCSPE, { RS, EVUIMM_4, RA } },
  2616 +{ "evstwhox", VX(4, 820), VX_MASK, PPCSPE, { RS, RA, RB } },
  2617 +
  2618 +{ "evfsabs", VX(4, 644), VX_MASK, PPCSPE, { RS, RA } },
  2619 +{ "evfsnabs", VX(4, 645), VX_MASK, PPCSPE, { RS, RA } },
  2620 +{ "evfsneg", VX(4, 646), VX_MASK, PPCSPE, { RS, RA } },
  2621 +{ "evfsadd", VX(4, 640), VX_MASK, PPCSPE, { RS, RA, RB } },
  2622 +{ "evfssub", VX(4, 641), VX_MASK, PPCSPE, { RS, RA, RB } },
  2623 +{ "evfsmul", VX(4, 648), VX_MASK, PPCSPE, { RS, RA, RB } },
  2624 +{ "evfsdiv", VX(4, 649), VX_MASK, PPCSPE, { RS, RA, RB } },
  2625 +{ "evfscmpgt", VX(4, 652), VX_MASK, PPCSPE, { CRFD, RA, RB } },
  2626 +{ "evfscmplt", VX(4, 653), VX_MASK, PPCSPE, { CRFD, RA, RB } },
  2627 +{ "evfscmpeq", VX(4, 654), VX_MASK, PPCSPE, { CRFD, RA, RB } },
  2628 +{ "evfststgt", VX(4, 668), VX_MASK, PPCSPE, { CRFD, RA, RB } },
  2629 +{ "evfststlt", VX(4, 669), VX_MASK, PPCSPE, { CRFD, RA, RB } },
  2630 +{ "evfststeq", VX(4, 670), VX_MASK, PPCSPE, { CRFD, RA, RB } },
  2631 +{ "evfscfui", VX(4, 656), VX_MASK, PPCSPE, { RS, RB } },
  2632 +{ "evfsctuiz", VX(4, 664), VX_MASK, PPCSPE, { RS, RB } },
  2633 +{ "evfscfsi", VX(4, 657), VX_MASK, PPCSPE, { RS, RB } },
  2634 +{ "evfscfuf", VX(4, 658), VX_MASK, PPCSPE, { RS, RB } },
  2635 +{ "evfscfsf", VX(4, 659), VX_MASK, PPCSPE, { RS, RB } },
  2636 +{ "evfsctui", VX(4, 660), VX_MASK, PPCSPE, { RS, RB } },
  2637 +{ "evfsctsi", VX(4, 661), VX_MASK, PPCSPE, { RS, RB } },
  2638 +{ "evfsctsiz", VX(4, 666), VX_MASK, PPCSPE, { RS, RB } },
  2639 +{ "evfsctuf", VX(4, 662), VX_MASK, PPCSPE, { RS, RB } },
  2640 +{ "evfsctsf", VX(4, 663), VX_MASK, PPCSPE, { RS, RB } },
  2641 +
  2642 +{ "efsabs", VX(4, 708), VX_MASK, PPCEFS, { RS, RA } },
  2643 +{ "efsnabs", VX(4, 709), VX_MASK, PPCEFS, { RS, RA } },
  2644 +{ "efsneg", VX(4, 710), VX_MASK, PPCEFS, { RS, RA } },
  2645 +{ "efsadd", VX(4, 704), VX_MASK, PPCEFS, { RS, RA, RB } },
  2646 +{ "efssub", VX(4, 705), VX_MASK, PPCEFS, { RS, RA, RB } },
  2647 +{ "efsmul", VX(4, 712), VX_MASK, PPCEFS, { RS, RA, RB } },
  2648 +{ "efsdiv", VX(4, 713), VX_MASK, PPCEFS, { RS, RA, RB } },
  2649 +{ "efscmpgt", VX(4, 716), VX_MASK, PPCEFS, { CRFD, RA, RB } },
  2650 +{ "efscmplt", VX(4, 717), VX_MASK, PPCEFS, { CRFD, RA, RB } },
  2651 +{ "efscmpeq", VX(4, 718), VX_MASK, PPCEFS, { CRFD, RA, RB } },
  2652 +{ "efststgt", VX(4, 732), VX_MASK, PPCEFS, { CRFD, RA, RB } },
  2653 +{ "efststlt", VX(4, 733), VX_MASK, PPCEFS, { CRFD, RA, RB } },
  2654 +{ "efststeq", VX(4, 734), VX_MASK, PPCEFS, { CRFD, RA, RB } },
  2655 +{ "efscfui", VX(4, 720), VX_MASK, PPCEFS, { RS, RB } },
  2656 +{ "efsctuiz", VX(4, 728), VX_MASK, PPCEFS, { RS, RB } },
  2657 +{ "efscfsi", VX(4, 721), VX_MASK, PPCEFS, { RS, RB } },
  2658 +{ "efscfuf", VX(4, 722), VX_MASK, PPCEFS, { RS, RB } },
  2659 +{ "efscfsf", VX(4, 723), VX_MASK, PPCEFS, { RS, RB } },
  2660 +{ "efsctui", VX(4, 724), VX_MASK, PPCEFS, { RS, RB } },
  2661 +{ "efsctsi", VX(4, 725), VX_MASK, PPCEFS, { RS, RB } },
  2662 +{ "efsctsiz", VX(4, 730), VX_MASK, PPCEFS, { RS, RB } },
  2663 +{ "efsctuf", VX(4, 726), VX_MASK, PPCEFS, { RS, RB } },
  2664 +{ "efsctsf", VX(4, 727), VX_MASK, PPCEFS, { RS, RB } },
  2665 +
  2666 +{ "evmhossf", VX(4, 1031), VX_MASK, PPCSPE, { RS, RA, RB } },
  2667 +{ "evmhossfa", VX(4, 1063), VX_MASK, PPCSPE, { RS, RA, RB } },
  2668 +{ "evmhosmf", VX(4, 1039), VX_MASK, PPCSPE, { RS, RA, RB } },
  2669 +{ "evmhosmfa", VX(4, 1071), VX_MASK, PPCSPE, { RS, RA, RB } },
  2670 +{ "evmhosmi", VX(4, 1037), VX_MASK, PPCSPE, { RS, RA, RB } },
  2671 +{ "evmhosmia", VX(4, 1069), VX_MASK, PPCSPE, { RS, RA, RB } },
  2672 +{ "evmhoumi", VX(4, 1036), VX_MASK, PPCSPE, { RS, RA, RB } },
  2673 +{ "evmhoumia", VX(4, 1068), VX_MASK, PPCSPE, { RS, RA, RB } },
  2674 +{ "evmhessf", VX(4, 1027), VX_MASK, PPCSPE, { RS, RA, RB } },
  2675 +{ "evmhessfa", VX(4, 1059), VX_MASK, PPCSPE, { RS, RA, RB } },
  2676 +{ "evmhesmf", VX(4, 1035), VX_MASK, PPCSPE, { RS, RA, RB } },
  2677 +{ "evmhesmfa", VX(4, 1067), VX_MASK, PPCSPE, { RS, RA, RB } },
  2678 +{ "evmhesmi", VX(4, 1033), VX_MASK, PPCSPE, { RS, RA, RB } },
  2679 +{ "evmhesmia", VX(4, 1065), VX_MASK, PPCSPE, { RS, RA, RB } },
  2680 +{ "evmheumi", VX(4, 1032), VX_MASK, PPCSPE, { RS, RA, RB } },
  2681 +{ "evmheumia", VX(4, 1064), VX_MASK, PPCSPE, { RS, RA, RB } },
  2682 +
  2683 +{ "evmhossfaaw",VX(4, 1287), VX_MASK, PPCSPE, { RS, RA, RB } },
  2684 +{ "evmhossiaaw",VX(4, 1285), VX_MASK, PPCSPE, { RS, RA, RB } },
  2685 +{ "evmhosmfaaw",VX(4, 1295), VX_MASK, PPCSPE, { RS, RA, RB } },
  2686 +{ "evmhosmiaaw",VX(4, 1293), VX_MASK, PPCSPE, { RS, RA, RB } },
  2687 +{ "evmhousiaaw",VX(4, 1284), VX_MASK, PPCSPE, { RS, RA, RB } },
  2688 +{ "evmhoumiaaw",VX(4, 1292), VX_MASK, PPCSPE, { RS, RA, RB } },
  2689 +{ "evmhessfaaw",VX(4, 1283), VX_MASK, PPCSPE, { RS, RA, RB } },
  2690 +{ "evmhessiaaw",VX(4, 1281), VX_MASK, PPCSPE, { RS, RA, RB } },
  2691 +{ "evmhesmfaaw",VX(4, 1291), VX_MASK, PPCSPE, { RS, RA, RB } },
  2692 +{ "evmhesmiaaw",VX(4, 1289), VX_MASK, PPCSPE, { RS, RA, RB } },
  2693 +{ "evmheusiaaw",VX(4, 1280), VX_MASK, PPCSPE, { RS, RA, RB } },
  2694 +{ "evmheumiaaw",VX(4, 1288), VX_MASK, PPCSPE, { RS, RA, RB } },
  2695 +
  2696 +{ "evmhossfanw",VX(4, 1415), VX_MASK, PPCSPE, { RS, RA, RB } },
  2697 +{ "evmhossianw",VX(4, 1413), VX_MASK, PPCSPE, { RS, RA, RB } },
  2698 +{ "evmhosmfanw",VX(4, 1423), VX_MASK, PPCSPE, { RS, RA, RB } },
  2699 +{ "evmhosmianw",VX(4, 1421), VX_MASK, PPCSPE, { RS, RA, RB } },
  2700 +{ "evmhousianw",VX(4, 1412), VX_MASK, PPCSPE, { RS, RA, RB } },
  2701 +{ "evmhoumianw",VX(4, 1420), VX_MASK, PPCSPE, { RS, RA, RB } },
  2702 +{ "evmhessfanw",VX(4, 1411), VX_MASK, PPCSPE, { RS, RA, RB } },
  2703 +{ "evmhessianw",VX(4, 1409), VX_MASK, PPCSPE, { RS, RA, RB } },
  2704 +{ "evmhesmfanw",VX(4, 1419), VX_MASK, PPCSPE, { RS, RA, RB } },
  2705 +{ "evmhesmianw",VX(4, 1417), VX_MASK, PPCSPE, { RS, RA, RB } },
  2706 +{ "evmheusianw",VX(4, 1408), VX_MASK, PPCSPE, { RS, RA, RB } },
  2707 +{ "evmheumianw",VX(4, 1416), VX_MASK, PPCSPE, { RS, RA, RB } },
  2708 +
  2709 +{ "evmhogsmfaa",VX(4, 1327), VX_MASK, PPCSPE, { RS, RA, RB } },
  2710 +{ "evmhogsmiaa",VX(4, 1325), VX_MASK, PPCSPE, { RS, RA, RB } },
  2711 +{ "evmhogumiaa",VX(4, 1324), VX_MASK, PPCSPE, { RS, RA, RB } },
  2712 +{ "evmhegsmfaa",VX(4, 1323), VX_MASK, PPCSPE, { RS, RA, RB } },
  2713 +{ "evmhegsmiaa",VX(4, 1321), VX_MASK, PPCSPE, { RS, RA, RB } },
  2714 +{ "evmhegumiaa",VX(4, 1320), VX_MASK, PPCSPE, { RS, RA, RB } },
  2715 +
  2716 +{ "evmhogsmfan",VX(4, 1455), VX_MASK, PPCSPE, { RS, RA, RB } },
  2717 +{ "evmhogsmian",VX(4, 1453), VX_MASK, PPCSPE, { RS, RA, RB } },
  2718 +{ "evmhogumian",VX(4, 1452), VX_MASK, PPCSPE, { RS, RA, RB } },
  2719 +{ "evmhegsmfan",VX(4, 1451), VX_MASK, PPCSPE, { RS, RA, RB } },
  2720 +{ "evmhegsmian",VX(4, 1449), VX_MASK, PPCSPE, { RS, RA, RB } },
  2721 +{ "evmhegumian",VX(4, 1448), VX_MASK, PPCSPE, { RS, RA, RB } },
  2722 +
  2723 +{ "evmwhssf", VX(4, 1095), VX_MASK, PPCSPE, { RS, RA, RB } },
  2724 +{ "evmwhssfa", VX(4, 1127), VX_MASK, PPCSPE, { RS, RA, RB } },
  2725 +{ "evmwhsmf", VX(4, 1103), VX_MASK, PPCSPE, { RS, RA, RB } },
  2726 +{ "evmwhsmfa", VX(4, 1135), VX_MASK, PPCSPE, { RS, RA, RB } },
  2727 +{ "evmwhsmi", VX(4, 1101), VX_MASK, PPCSPE, { RS, RA, RB } },
  2728 +{ "evmwhsmia", VX(4, 1133), VX_MASK, PPCSPE, { RS, RA, RB } },
  2729 +{ "evmwhumi", VX(4, 1100), VX_MASK, PPCSPE, { RS, RA, RB } },
  2730 +{ "evmwhumia", VX(4, 1132), VX_MASK, PPCSPE, { RS, RA, RB } },
  2731 +
  2732 +{ "evmwlumi", VX(4, 1096), VX_MASK, PPCSPE, { RS, RA, RB } },
  2733 +{ "evmwlumia", VX(4, 1128), VX_MASK, PPCSPE, { RS, RA, RB } },
  2734 +
  2735 +{ "evmwlssiaaw",VX(4, 1345), VX_MASK, PPCSPE, { RS, RA, RB } },
  2736 +{ "evmwlsmiaaw",VX(4, 1353), VX_MASK, PPCSPE, { RS, RA, RB } },
  2737 +{ "evmwlusiaaw",VX(4, 1344), VX_MASK, PPCSPE, { RS, RA, RB } },
  2738 +{ "evmwlumiaaw",VX(4, 1352), VX_MASK, PPCSPE, { RS, RA, RB } },
  2739 +
  2740 +{ "evmwlssianw",VX(4, 1473), VX_MASK, PPCSPE, { RS, RA, RB } },
  2741 +{ "evmwlsmianw",VX(4, 1481), VX_MASK, PPCSPE, { RS, RA, RB } },
  2742 +{ "evmwlusianw",VX(4, 1472), VX_MASK, PPCSPE, { RS, RA, RB } },
  2743 +{ "evmwlumianw",VX(4, 1480), VX_MASK, PPCSPE, { RS, RA, RB } },
  2744 +
  2745 +{ "evmwssf", VX(4, 1107), VX_MASK, PPCSPE, { RS, RA, RB } },
  2746 +{ "evmwssfa", VX(4, 1139), VX_MASK, PPCSPE, { RS, RA, RB } },
  2747 +{ "evmwsmf", VX(4, 1115), VX_MASK, PPCSPE, { RS, RA, RB } },
  2748 +{ "evmwsmfa", VX(4, 1147), VX_MASK, PPCSPE, { RS, RA, RB } },
  2749 +{ "evmwsmi", VX(4, 1113), VX_MASK, PPCSPE, { RS, RA, RB } },
  2750 +{ "evmwsmia", VX(4, 1145), VX_MASK, PPCSPE, { RS, RA, RB } },
  2751 +{ "evmwumi", VX(4, 1112), VX_MASK, PPCSPE, { RS, RA, RB } },
  2752 +{ "evmwumia", VX(4, 1144), VX_MASK, PPCSPE, { RS, RA, RB } },
  2753 +
  2754 +{ "evmwssfaa", VX(4, 1363), VX_MASK, PPCSPE, { RS, RA, RB } },
  2755 +{ "evmwsmfaa", VX(4, 1371), VX_MASK, PPCSPE, { RS, RA, RB } },
  2756 +{ "evmwsmiaa", VX(4, 1369), VX_MASK, PPCSPE, { RS, RA, RB } },
  2757 +{ "evmwumiaa", VX(4, 1368), VX_MASK, PPCSPE, { RS, RA, RB } },
  2758 +
  2759 +{ "evmwssfan", VX(4, 1491), VX_MASK, PPCSPE, { RS, RA, RB } },
  2760 +{ "evmwsmfan", VX(4, 1499), VX_MASK, PPCSPE, { RS, RA, RB } },
  2761 +{ "evmwsmian", VX(4, 1497), VX_MASK, PPCSPE, { RS, RA, RB } },
  2762 +{ "evmwumian", VX(4, 1496), VX_MASK, PPCSPE, { RS, RA, RB } },
  2763 +
  2764 +{ "evaddssiaaw",VX(4, 1217), VX_MASK, PPCSPE, { RS, RA } },
  2765 +{ "evaddsmiaaw",VX(4, 1225), VX_MASK, PPCSPE, { RS, RA } },
  2766 +{ "evaddusiaaw",VX(4, 1216), VX_MASK, PPCSPE, { RS, RA } },
  2767 +{ "evaddumiaaw",VX(4, 1224), VX_MASK, PPCSPE, { RS, RA } },
  2768 +
  2769 +{ "evsubfssiaaw",VX(4, 1219), VX_MASK, PPCSPE, { RS, RA } },
  2770 +{ "evsubfsmiaaw",VX(4, 1227), VX_MASK, PPCSPE, { RS, RA } },
  2771 +{ "evsubfusiaaw",VX(4, 1218), VX_MASK, PPCSPE, { RS, RA } },
  2772 +{ "evsubfumiaaw",VX(4, 1226), VX_MASK, PPCSPE, { RS, RA } },
  2773 +
  2774 +{ "evmra", VX(4, 1220), VX_MASK, PPCSPE, { RS, RA } },
  2775 +
  2776 +{ "evdivws", VX(4, 1222), VX_MASK, PPCSPE, { RS, RA, RB } },
  2777 +{ "evdivwu", VX(4, 1223), VX_MASK, PPCSPE, { RS, RA, RB } },
  2778 +
  2779 +{ "mulli", OP(7), OP_MASK, PPCCOM, { RT, RA, SI } },
  2780 +{ "muli", OP(7), OP_MASK, PWRCOM, { RT, RA, SI } },
  2781 +
  2782 +{ "subfic", OP(8), OP_MASK, PPCCOM, { RT, RA, SI } },
  2783 +{ "sfi", OP(8), OP_MASK, PWRCOM, { RT, RA, SI } },
  2784 +
  2785 +{ "dozi", OP(9), OP_MASK, M601, { RT, RA, SI } },
  2786 +
  2787 +{ "bce", B(9,0,0), B_MASK, BOOKE64, { BO, BI, BD } },
  2788 +{ "bcel", B(9,0,1), B_MASK, BOOKE64, { BO, BI, BD } },
  2789 +{ "bcea", B(9,1,0), B_MASK, BOOKE64, { BO, BI, BDA } },
  2790 +{ "bcela", B(9,1,1), B_MASK, BOOKE64, { BO, BI, BDA } },
  2791 +
  2792 +{ "cmplwi", OPL(10,0), OPL_MASK, PPCCOM, { OBF, RA, UI } },
  2793 +{ "cmpldi", OPL(10,1), OPL_MASK, PPC64, { OBF, RA, UI } },
1558 2794 { "cmpli", OP(10), OP_MASK, PPC, { BF, L, RA, UI } },
1559   -{ "cmpli", OP(10), OP_MASK, POWER, { BF, RA, UI } },
  2795 +{ "cmpli", OP(10), OP_MASK, PWRCOM, { BF, RA, UI } },
1560 2796  
1561   -{ "cmpwi", OPL(11,0), OPL_MASK, PPC, { OBF, RA, SI } },
1562   -{ "cmpdi", OPL(11,1), OPL_MASK, PPC|B64, { OBF, RA, SI } },
  2797 +{ "cmpwi", OPL(11,0), OPL_MASK, PPCCOM, { OBF, RA, SI } },
  2798 +{ "cmpdi", OPL(11,1), OPL_MASK, PPC64, { OBF, RA, SI } },
1563 2799 { "cmpi", OP(11), OP_MASK, PPC, { BF, L, RA, SI } },
1564   -{ "cmpi", OP(11), OP_MASK, POWER, { BF, RA, SI } },
1565   -
1566   -{ "addic", OP(12), OP_MASK, PPC, { RT, RA, SI } },
1567   -{ "ai", OP(12), OP_MASK, POWER, { RT, RA, SI } },
1568   -{ "subic", OP(12), OP_MASK, PPC, { RT, RA, NSI } },
1569   -
1570   -{ "addic.", OP(13), OP_MASK, PPC, { RT, RA, SI } },
1571   -{ "ai.", OP(13), OP_MASK, POWER, { RT, RA, SI } },
1572   -{ "subic.", OP(13), OP_MASK, PPC, { RT, RA, NSI } },
1573   -
1574   -{ "li", OP(14), DRA_MASK, PPC, { RT, SI } },
1575   -{ "lil", OP(14), DRA_MASK, POWER, { RT, SI } },
1576   -{ "addi", OP(14), OP_MASK, PPC, { RT, RA, SI } },
1577   -{ "cal", OP(14), OP_MASK, POWER, { RT, D, RA } },
1578   -{ "subi", OP(14), OP_MASK, PPC, { RT, RA, NSI } },
1579   -{ "la", OP(14), OP_MASK, PPC, { RT, D, RA } },
1580   -
1581   -{ "lis", OP(15), DRA_MASK, PPC, { RT, SISIGNOPT } },
1582   -{ "liu", OP(15), DRA_MASK, POWER, { RT, SISIGNOPT } },
1583   -{ "addis", OP(15), OP_MASK, PPC, { RT,RA,SISIGNOPT } },
1584   -{ "cau", OP(15), OP_MASK, POWER, { RT,RA,SISIGNOPT } },
1585   -{ "subis", OP(15), OP_MASK, PPC, { RT, RA, NSI } },
1586   -
1587   -{ "bdnz-", BBO(16,BODNZ,0,0), BBOYBI_MASK, PPC, { BDM } },
1588   -{ "bdnz+", BBO(16,BODNZ,0,0), BBOYBI_MASK, PPC, { BDP } },
1589   -{ "bdnz", BBO(16,BODNZ,0,0), BBOYBI_MASK, PPC, { BD } },
1590   -{ "bdn", BBO(16,BODNZ,0,0), BBOYBI_MASK, POWER, { BD } },
1591   -{ "bdnzl-", BBO(16,BODNZ,0,1), BBOYBI_MASK, PPC, { BDM } },
1592   -{ "bdnzl+", BBO(16,BODNZ,0,1), BBOYBI_MASK, PPC, { BDP } },
1593   -{ "bdnzl", BBO(16,BODNZ,0,1), BBOYBI_MASK, PPC, { BD } },
1594   -{ "bdnl", BBO(16,BODNZ,0,1), BBOYBI_MASK, POWER, { BD } },
1595   -{ "bdnza-", BBO(16,BODNZ,1,0), BBOYBI_MASK, PPC, { BDMA } },
1596   -{ "bdnza+", BBO(16,BODNZ,1,0), BBOYBI_MASK, PPC, { BDPA } },
1597   -{ "bdnza", BBO(16,BODNZ,1,0), BBOYBI_MASK, PPC, { BDA } },
1598   -{ "bdna", BBO(16,BODNZ,1,0), BBOYBI_MASK, POWER, { BDA } },
1599   -{ "bdnzla-", BBO(16,BODNZ,1,1), BBOYBI_MASK, PPC, { BDMA } },
1600   -{ "bdnzla+", BBO(16,BODNZ,1,1), BBOYBI_MASK, PPC, { BDPA } },
1601   -{ "bdnzla", BBO(16,BODNZ,1,1), BBOYBI_MASK, PPC, { BDA } },
1602   -{ "bdnla", BBO(16,BODNZ,1,1), BBOYBI_MASK, POWER, { BDA } },
1603   -{ "bdz-", BBO(16,BODZ,0,0), BBOYBI_MASK, PPC, { BDM } },
1604   -{ "bdz+", BBO(16,BODZ,0,0), BBOYBI_MASK, PPC, { BDP } },
1605   -{ "bdz", BBO(16,BODZ,0,0), BBOYBI_MASK, PPC|POWER, { BD } },
1606   -{ "bdzl-", BBO(16,BODZ,0,1), BBOYBI_MASK, PPC, { BDM } },
1607   -{ "bdzl+", BBO(16,BODZ,0,1), BBOYBI_MASK, PPC, { BDP } },
1608   -{ "bdzl", BBO(16,BODZ,0,1), BBOYBI_MASK, PPC|POWER, { BD } },
1609   -{ "bdza-", BBO(16,BODZ,1,0), BBOYBI_MASK, PPC, { BDMA } },
1610   -{ "bdza+", BBO(16,BODZ,1,0), BBOYBI_MASK, PPC, { BDPA } },
1611   -{ "bdza", BBO(16,BODZ,1,0), BBOYBI_MASK, PPC|POWER, { BDA } },
1612   -{ "bdzla-", BBO(16,BODZ,1,1), BBOYBI_MASK, PPC, { BDMA } },
1613   -{ "bdzla+", BBO(16,BODZ,1,1), BBOYBI_MASK, PPC, { BDPA } },
1614   -{ "bdzla", BBO(16,BODZ,1,1), BBOYBI_MASK, PPC|POWER, { BDA } },
1615   -{ "blt-", BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
1616   -{ "blt+", BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
1617   -{ "blt", BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1618   -{ "bltl-", BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
1619   -{ "bltl+", BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
1620   -{ "bltl", BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1621   -{ "blta-", BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
1622   -{ "blta+", BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
1623   -{ "blta", BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1624   -{ "bltla-", BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
1625   -{ "bltla+", BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
1626   -{ "bltla", BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1627   -{ "bgt-", BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
1628   -{ "bgt+", BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
1629   -{ "bgt", BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1630   -{ "bgtl-", BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
1631   -{ "bgtl+", BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
1632   -{ "bgtl", BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1633   -{ "bgta-", BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
1634   -{ "bgta+", BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
1635   -{ "bgta", BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1636   -{ "bgtla-", BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
1637   -{ "bgtla+", BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
1638   -{ "bgtla", BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1639   -{ "beq-", BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
1640   -{ "beq+", BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
1641   -{ "beq", BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1642   -{ "beql-", BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
1643   -{ "beql+", BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
1644   -{ "beql", BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1645   -{ "beqa-", BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
1646   -{ "beqa+", BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
1647   -{ "beqa", BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1648   -{ "beqla-", BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
1649   -{ "beqla+", BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
1650   -{ "beqla", BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1651   -{ "bso-", BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
1652   -{ "bso+", BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
1653   -{ "bso", BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1654   -{ "bsol-", BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
1655   -{ "bsol+", BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
1656   -{ "bsol", BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1657   -{ "bsoa-", BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
1658   -{ "bsoa+", BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
1659   -{ "bsoa", BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1660   -{ "bsola-", BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
1661   -{ "bsola+", BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
1662   -{ "bsola", BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1663   -{ "bun-", BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
1664   -{ "bun+", BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
1665   -{ "bun", BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BD } },
1666   -{ "bunl-", BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
1667   -{ "bunl+", BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
1668   -{ "bunl", BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BD } },
1669   -{ "buna-", BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
1670   -{ "buna+", BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
1671   -{ "buna", BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDA } },
1672   -{ "bunla-", BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
1673   -{ "bunla+", BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
1674   -{ "bunla", BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDA } },
1675   -{ "bge-", BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
1676   -{ "bge+", BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
1677   -{ "bge", BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1678   -{ "bgel-", BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
1679   -{ "bgel+", BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
1680   -{ "bgel", BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1681   -{ "bgea-", BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
1682   -{ "bgea+", BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
1683   -{ "bgea", BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1684   -{ "bgela-", BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
1685   -{ "bgela+", BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
1686   -{ "bgela", BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1687   -{ "bnl-", BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
1688   -{ "bnl+", BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
1689   -{ "bnl", BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1690   -{ "bnll-", BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
1691   -{ "bnll+", BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
1692   -{ "bnll", BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1693   -{ "bnla-", BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
1694   -{ "bnla+", BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
1695   -{ "bnla", BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1696   -{ "bnlla-", BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
1697   -{ "bnlla+", BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
1698   -{ "bnlla", BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1699   -{ "ble-", BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
1700   -{ "ble+", BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
1701   -{ "ble", BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1702   -{ "blel-", BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
1703   -{ "blel+", BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
1704   -{ "blel", BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1705   -{ "blea-", BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
1706   -{ "blea+", BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
1707   -{ "blea", BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1708   -{ "blela-", BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
1709   -{ "blela+", BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
1710   -{ "blela", BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1711   -{ "bng-", BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
1712   -{ "bng+", BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
1713   -{ "bng", BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1714   -{ "bngl-", BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
1715   -{ "bngl+", BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
1716   -{ "bngl", BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1717   -{ "bnga-", BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
1718   -{ "bnga+", BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
1719   -{ "bnga", BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1720   -{ "bngla-", BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
1721   -{ "bngla+", BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
1722   -{ "bngla", BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1723   -{ "bne-", BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
1724   -{ "bne+", BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
1725   -{ "bne", BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1726   -{ "bnel-", BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
1727   -{ "bnel+", BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
1728   -{ "bnel", BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1729   -{ "bnea-", BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
1730   -{ "bnea+", BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
1731   -{ "bnea", BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1732   -{ "bnela-", BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
1733   -{ "bnela+", BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
1734   -{ "bnela", BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1735   -{ "bns-", BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
1736   -{ "bns+", BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
1737   -{ "bns", BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1738   -{ "bnsl-", BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
1739   -{ "bnsl+", BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
1740   -{ "bnsl", BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1741   -{ "bnsa-", BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
1742   -{ "bnsa+", BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
1743   -{ "bnsa", BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1744   -{ "bnsla-", BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
1745   -{ "bnsla+", BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
1746   -{ "bnsla", BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1747   -{ "bnu-", BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDM } },
1748   -{ "bnu+", BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BDP } },
1749   -{ "bnu", BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC, { CR, BD } },
1750   -{ "bnul-", BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDM } },
1751   -{ "bnul+", BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BDP } },
1752   -{ "bnul", BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC, { CR, BD } },
1753   -{ "bnua-", BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDMA } },
1754   -{ "bnua+", BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDPA } },
1755   -{ "bnua", BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC, { CR, BDA } },
1756   -{ "bnula-", BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDMA } },
1757   -{ "bnula+", BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDPA } },
1758   -{ "bnula", BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC, { CR, BDA } },
1759   -{ "bdnzt-", BBO(16,BODNZT,0,0), BBOY_MASK, PPC, { BI, BDM } },
1760   -{ "bdnzt+", BBO(16,BODNZT,0,0), BBOY_MASK, PPC, { BI, BDP } },
1761   -{ "bdnzt", BBO(16,BODNZT,0,0), BBOY_MASK, PPC, { BI, BD } },
1762   -{ "bdnztl-", BBO(16,BODNZT,0,1), BBOY_MASK, PPC, { BI, BDM } },
1763   -{ "bdnztl+", BBO(16,BODNZT,0,1), BBOY_MASK, PPC, { BI, BDP } },
1764   -{ "bdnztl", BBO(16,BODNZT,0,1), BBOY_MASK, PPC, { BI, BD } },
1765   -{ "bdnzta-", BBO(16,BODNZT,1,0), BBOY_MASK, PPC, { BI, BDMA } },
1766   -{ "bdnzta+", BBO(16,BODNZT,1,0), BBOY_MASK, PPC, { BI, BDPA } },
1767   -{ "bdnzta", BBO(16,BODNZT,1,0), BBOY_MASK, PPC, { BI, BDA } },
1768   -{ "bdnztla-",BBO(16,BODNZT,1,1), BBOY_MASK, PPC, { BI, BDMA } },
1769   -{ "bdnztla+",BBO(16,BODNZT,1,1), BBOY_MASK, PPC, { BI, BDPA } },
1770   -{ "bdnztla", BBO(16,BODNZT,1,1), BBOY_MASK, PPC, { BI, BDA } },
1771   -{ "bdnzf-", BBO(16,BODNZF,0,0), BBOY_MASK, PPC, { BI, BDM } },
1772   -{ "bdnzf+", BBO(16,BODNZF,0,0), BBOY_MASK, PPC, { BI, BDP } },
1773   -{ "bdnzf", BBO(16,BODNZF,0,0), BBOY_MASK, PPC, { BI, BD } },
1774   -{ "bdnzfl-", BBO(16,BODNZF,0,1), BBOY_MASK, PPC, { BI, BDM } },
1775   -{ "bdnzfl+", BBO(16,BODNZF,0,1), BBOY_MASK, PPC, { BI, BDP } },
1776   -{ "bdnzfl", BBO(16,BODNZF,0,1), BBOY_MASK, PPC, { BI, BD } },
1777   -{ "bdnzfa-", BBO(16,BODNZF,1,0), BBOY_MASK, PPC, { BI, BDMA } },
1778   -{ "bdnzfa+", BBO(16,BODNZF,1,0), BBOY_MASK, PPC, { BI, BDPA } },
1779   -{ "bdnzfa", BBO(16,BODNZF,1,0), BBOY_MASK, PPC, { BI, BDA } },
1780   -{ "bdnzfla-",BBO(16,BODNZF,1,1), BBOY_MASK, PPC, { BI, BDMA } },
1781   -{ "bdnzfla+",BBO(16,BODNZF,1,1), BBOY_MASK, PPC, { BI, BDPA } },
1782   -{ "bdnzfla", BBO(16,BODNZF,1,1), BBOY_MASK, PPC, { BI, BDA } },
1783   -{ "bt-", BBO(16,BOT,0,0), BBOY_MASK, PPC, { BI, BDM } },
1784   -{ "bt+", BBO(16,BOT,0,0), BBOY_MASK, PPC, { BI, BDP } },
1785   -{ "bt", BBO(16,BOT,0,0), BBOY_MASK, PPC, { BI, BD } },
1786   -{ "bbt", BBO(16,BOT,0,0), BBOY_MASK, POWER, { BI, BD } },
1787   -{ "btl-", BBO(16,BOT,0,1), BBOY_MASK, PPC, { BI, BDM } },
1788   -{ "btl+", BBO(16,BOT,0,1), BBOY_MASK, PPC, { BI, BDP } },
1789   -{ "btl", BBO(16,BOT,0,1), BBOY_MASK, PPC, { BI, BD } },
1790   -{ "bbtl", BBO(16,BOT,0,1), BBOY_MASK, POWER, { BI, BD } },
1791   -{ "bta-", BBO(16,BOT,1,0), BBOY_MASK, PPC, { BI, BDMA } },
1792   -{ "bta+", BBO(16,BOT,1,0), BBOY_MASK, PPC, { BI, BDPA } },
1793   -{ "bta", BBO(16,BOT,1,0), BBOY_MASK, PPC, { BI, BDA } },
1794   -{ "bbta", BBO(16,BOT,1,0), BBOY_MASK, POWER, { BI, BDA } },
1795   -{ "btla-", BBO(16,BOT,1,1), BBOY_MASK, PPC, { BI, BDMA } },
1796   -{ "btla+", BBO(16,BOT,1,1), BBOY_MASK, PPC, { BI, BDPA } },
1797   -{ "btla", BBO(16,BOT,1,1), BBOY_MASK, PPC, { BI, BDA } },
1798   -{ "bbtla", BBO(16,BOT,1,1), BBOY_MASK, POWER, { BI, BDA } },
1799   -{ "bf-", BBO(16,BOF,0,0), BBOY_MASK, PPC, { BI, BDM } },
1800   -{ "bf+", BBO(16,BOF,0,0), BBOY_MASK, PPC, { BI, BDP } },
1801   -{ "bf", BBO(16,BOF,0,0), BBOY_MASK, PPC, { BI, BD } },
1802   -{ "bbf", BBO(16,BOF,0,0), BBOY_MASK, POWER, { BI, BD } },
1803   -{ "bfl-", BBO(16,BOF,0,1), BBOY_MASK, PPC, { BI, BDM } },
1804   -{ "bfl+", BBO(16,BOF,0,1), BBOY_MASK, PPC, { BI, BDP } },
1805   -{ "bfl", BBO(16,BOF,0,1), BBOY_MASK, PPC, { BI, BD } },
1806   -{ "bbfl", BBO(16,BOF,0,1), BBOY_MASK, POWER, { BI, BD } },
1807   -{ "bfa-", BBO(16,BOF,1,0), BBOY_MASK, PPC, { BI, BDMA } },
1808   -{ "bfa+", BBO(16,BOF,1,0), BBOY_MASK, PPC, { BI, BDPA } },
1809   -{ "bfa", BBO(16,BOF,1,0), BBOY_MASK, PPC, { BI, BDA } },
1810   -{ "bbfa", BBO(16,BOF,1,0), BBOY_MASK, POWER, { BI, BDA } },
1811   -{ "bfla-", BBO(16,BOF,1,1), BBOY_MASK, PPC, { BI, BDMA } },
1812   -{ "bfla+", BBO(16,BOF,1,1), BBOY_MASK, PPC, { BI, BDPA } },
1813   -{ "bfla", BBO(16,BOF,1,1), BBOY_MASK, PPC, { BI, BDA } },
1814   -{ "bbfla", BBO(16,BOF,1,1), BBOY_MASK, POWER, { BI, BDA } },
1815   -{ "bdzt-", BBO(16,BODZT,0,0), BBOY_MASK, PPC, { BI, BDM } },
1816   -{ "bdzt+", BBO(16,BODZT,0,0), BBOY_MASK, PPC, { BI, BDP } },
1817   -{ "bdzt", BBO(16,BODZT,0,0), BBOY_MASK, PPC, { BI, BD } },
1818   -{ "bdztl-", BBO(16,BODZT,0,1), BBOY_MASK, PPC, { BI, BDM } },
1819   -{ "bdztl+", BBO(16,BODZT,0,1), BBOY_MASK, PPC, { BI, BDP } },
1820   -{ "bdztl", BBO(16,BODZT,0,1), BBOY_MASK, PPC, { BI, BD } },
1821   -{ "bdzta-", BBO(16,BODZT,1,0), BBOY_MASK, PPC, { BI, BDMA } },
1822   -{ "bdzta+", BBO(16,BODZT,1,0), BBOY_MASK, PPC, { BI, BDPA } },
1823   -{ "bdzta", BBO(16,BODZT,1,0), BBOY_MASK, PPC, { BI, BDA } },
1824   -{ "bdztla-", BBO(16,BODZT,1,1), BBOY_MASK, PPC, { BI, BDMA } },
1825   -{ "bdztla+", BBO(16,BODZT,1,1), BBOY_MASK, PPC, { BI, BDPA } },
1826   -{ "bdztla", BBO(16,BODZT,1,1), BBOY_MASK, PPC, { BI, BDA } },
1827   -{ "bdzf-", BBO(16,BODZF,0,0), BBOY_MASK, PPC, { BI, BDM } },
1828   -{ "bdzf+", BBO(16,BODZF,0,0), BBOY_MASK, PPC, { BI, BDP } },
1829   -{ "bdzf", BBO(16,BODZF,0,0), BBOY_MASK, PPC, { BI, BD } },
1830   -{ "bdzfl-", BBO(16,BODZF,0,1), BBOY_MASK, PPC, { BI, BDM } },
1831   -{ "bdzfl+", BBO(16,BODZF,0,1), BBOY_MASK, PPC, { BI, BDP } },
1832   -{ "bdzfl", BBO(16,BODZF,0,1), BBOY_MASK, PPC, { BI, BD } },
1833   -{ "bdzfa-", BBO(16,BODZF,1,0), BBOY_MASK, PPC, { BI, BDMA } },
1834   -{ "bdzfa+", BBO(16,BODZF,1,0), BBOY_MASK, PPC, { BI, BDPA } },
1835   -{ "bdzfa", BBO(16,BODZF,1,0), BBOY_MASK, PPC, { BI, BDA } },
1836   -{ "bdzfla-", BBO(16,BODZF,1,1), BBOY_MASK, PPC, { BI, BDMA } },
1837   -{ "bdzfla+", BBO(16,BODZF,1,1), BBOY_MASK, PPC, { BI, BDPA } },
1838   -{ "bdzfla", BBO(16,BODZF,1,1), BBOY_MASK, PPC, { BI, BDA } },
1839   -{ "bc-", B(16,0,0), B_MASK, PPC, { BOE, BI, BDM } },
1840   -{ "bc+", B(16,0,0), B_MASK, PPC, { BOE, BI, BDP } },
1841   -{ "bc", B(16,0,0), B_MASK, PPC|POWER, { BO, BI, BD } },
1842   -{ "bcl-", B(16,0,1), B_MASK, PPC, { BOE, BI, BDM } },
1843   -{ "bcl+", B(16,0,1), B_MASK, PPC, { BOE, BI, BDP } },
1844   -{ "bcl", B(16,0,1), B_MASK, PPC|POWER, { BO, BI, BD } },
1845   -{ "bca-", B(16,1,0), B_MASK, PPC, { BOE, BI, BDMA } },
1846   -{ "bca+", B(16,1,0), B_MASK, PPC, { BOE, BI, BDPA } },
1847   -{ "bca", B(16,1,0), B_MASK, PPC|POWER, { BO, BI, BDA } },
1848   -{ "bcla-", B(16,1,1), B_MASK, PPC, { BOE, BI, BDMA } },
1849   -{ "bcla+", B(16,1,1), B_MASK, PPC, { BOE, BI, BDPA } },
1850   -{ "bcla", B(16,1,1), B_MASK, PPC|POWER, { BO, BI, BDA } },
1851   -
1852   -{ "sc", SC(17,1,0), 0xffffffff, PPC, { 0 } },
1853   -{ "svc", SC(17,0,0), SC_MASK, POWER, { LEV, FL1, FL2 } },
1854   -{ "svcl", SC(17,0,1), SC_MASK, POWER, { LEV, FL1, FL2 } },
1855   -{ "svca", SC(17,1,0), SC_MASK, POWER, { SV } },
  2800 +{ "cmpi", OP(11), OP_MASK, PWRCOM, { BF, RA, SI } },
  2801 +
  2802 +{ "addic", OP(12), OP_MASK, PPCCOM, { RT, RA, SI } },
  2803 +{ "ai", OP(12), OP_MASK, PWRCOM, { RT, RA, SI } },
  2804 +{ "subic", OP(12), OP_MASK, PPCCOM, { RT, RA, NSI } },
  2805 +
  2806 +{ "addic.", OP(13), OP_MASK, PPCCOM, { RT, RA, SI } },
  2807 +{ "ai.", OP(13), OP_MASK, PWRCOM, { RT, RA, SI } },
  2808 +{ "subic.", OP(13), OP_MASK, PPCCOM, { RT, RA, NSI } },
  2809 +
  2810 +{ "li", OP(14), DRA_MASK, PPCCOM, { RT, SI } },
  2811 +{ "lil", OP(14), DRA_MASK, PWRCOM, { RT, SI } },
  2812 +{ "addi", OP(14), OP_MASK, PPCCOM, { RT, RA0, SI } },
  2813 +{ "cal", OP(14), OP_MASK, PWRCOM, { RT, D, RA0 } },
  2814 +{ "subi", OP(14), OP_MASK, PPCCOM, { RT, RA0, NSI } },
  2815 +{ "la", OP(14), OP_MASK, PPCCOM, { RT, D, RA0 } },
  2816 +
  2817 +{ "lis", OP(15), DRA_MASK, PPCCOM, { RT, SISIGNOPT } },
  2818 +{ "liu", OP(15), DRA_MASK, PWRCOM, { RT, SISIGNOPT } },
  2819 +{ "addis", OP(15), OP_MASK, PPCCOM, { RT,RA0,SISIGNOPT } },
  2820 +{ "cau", OP(15), OP_MASK, PWRCOM, { RT,RA0,SISIGNOPT } },
  2821 +{ "subis", OP(15), OP_MASK, PPCCOM, { RT, RA0, NSI } },
  2822 +
  2823 +{ "bdnz-", BBO(16,BODNZ,0,0), BBOATBI_MASK, PPCCOM, { BDM } },
  2824 +{ "bdnz+", BBO(16,BODNZ,0,0), BBOATBI_MASK, PPCCOM, { BDP } },
  2825 +{ "bdnz", BBO(16,BODNZ,0,0), BBOATBI_MASK, PPCCOM, { BD } },
  2826 +{ "bdn", BBO(16,BODNZ,0,0), BBOATBI_MASK, PWRCOM, { BD } },
  2827 +{ "bdnzl-", BBO(16,BODNZ,0,1), BBOATBI_MASK, PPCCOM, { BDM } },
  2828 +{ "bdnzl+", BBO(16,BODNZ,0,1), BBOATBI_MASK, PPCCOM, { BDP } },
  2829 +{ "bdnzl", BBO(16,BODNZ,0,1), BBOATBI_MASK, PPCCOM, { BD } },
  2830 +{ "bdnl", BBO(16,BODNZ,0,1), BBOATBI_MASK, PWRCOM, { BD } },
  2831 +{ "bdnza-", BBO(16,BODNZ,1,0), BBOATBI_MASK, PPCCOM, { BDMA } },
  2832 +{ "bdnza+", BBO(16,BODNZ,1,0), BBOATBI_MASK, PPCCOM, { BDPA } },
  2833 +{ "bdnza", BBO(16,BODNZ,1,0), BBOATBI_MASK, PPCCOM, { BDA } },
  2834 +{ "bdna", BBO(16,BODNZ,1,0), BBOATBI_MASK, PWRCOM, { BDA } },
  2835 +{ "bdnzla-", BBO(16,BODNZ,1,1), BBOATBI_MASK, PPCCOM, { BDMA } },
  2836 +{ "bdnzla+", BBO(16,BODNZ,1,1), BBOATBI_MASK, PPCCOM, { BDPA } },
  2837 +{ "bdnzla", BBO(16,BODNZ,1,1), BBOATBI_MASK, PPCCOM, { BDA } },
  2838 +{ "bdnla", BBO(16,BODNZ,1,1), BBOATBI_MASK, PWRCOM, { BDA } },
  2839 +{ "bdz-", BBO(16,BODZ,0,0), BBOATBI_MASK, PPCCOM, { BDM } },
  2840 +{ "bdz+", BBO(16,BODZ,0,0), BBOATBI_MASK, PPCCOM, { BDP } },
  2841 +{ "bdz", BBO(16,BODZ,0,0), BBOATBI_MASK, COM, { BD } },
  2842 +{ "bdzl-", BBO(16,BODZ,0,1), BBOATBI_MASK, PPCCOM, { BDM } },
  2843 +{ "bdzl+", BBO(16,BODZ,0,1), BBOATBI_MASK, PPCCOM, { BDP } },
  2844 +{ "bdzl", BBO(16,BODZ,0,1), BBOATBI_MASK, COM, { BD } },
  2845 +{ "bdza-", BBO(16,BODZ,1,0), BBOATBI_MASK, PPCCOM, { BDMA } },
  2846 +{ "bdza+", BBO(16,BODZ,1,0), BBOATBI_MASK, PPCCOM, { BDPA } },
  2847 +{ "bdza", BBO(16,BODZ,1,0), BBOATBI_MASK, COM, { BDA } },
  2848 +{ "bdzla-", BBO(16,BODZ,1,1), BBOATBI_MASK, PPCCOM, { BDMA } },
  2849 +{ "bdzla+", BBO(16,BODZ,1,1), BBOATBI_MASK, PPCCOM, { BDPA } },
  2850 +{ "bdzla", BBO(16,BODZ,1,1), BBOATBI_MASK, COM, { BDA } },
  2851 +{ "blt-", BBOCB(16,BOT,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2852 +{ "blt+", BBOCB(16,BOT,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2853 +{ "blt", BBOCB(16,BOT,CBLT,0,0), BBOATCB_MASK, COM, { CR, BD } },
  2854 +{ "bltl-", BBOCB(16,BOT,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2855 +{ "bltl+", BBOCB(16,BOT,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2856 +{ "bltl", BBOCB(16,BOT,CBLT,0,1), BBOATCB_MASK, COM, { CR, BD } },
  2857 +{ "blta-", BBOCB(16,BOT,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2858 +{ "blta+", BBOCB(16,BOT,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2859 +{ "blta", BBOCB(16,BOT,CBLT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
  2860 +{ "bltla-", BBOCB(16,BOT,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2861 +{ "bltla+", BBOCB(16,BOT,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2862 +{ "bltla", BBOCB(16,BOT,CBLT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
  2863 +{ "bgt-", BBOCB(16,BOT,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2864 +{ "bgt+", BBOCB(16,BOT,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2865 +{ "bgt", BBOCB(16,BOT,CBGT,0,0), BBOATCB_MASK, COM, { CR, BD } },
  2866 +{ "bgtl-", BBOCB(16,BOT,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2867 +{ "bgtl+", BBOCB(16,BOT,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2868 +{ "bgtl", BBOCB(16,BOT,CBGT,0,1), BBOATCB_MASK, COM, { CR, BD } },
  2869 +{ "bgta-", BBOCB(16,BOT,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2870 +{ "bgta+", BBOCB(16,BOT,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2871 +{ "bgta", BBOCB(16,BOT,CBGT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
  2872 +{ "bgtla-", BBOCB(16,BOT,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2873 +{ "bgtla+", BBOCB(16,BOT,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2874 +{ "bgtla", BBOCB(16,BOT,CBGT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
  2875 +{ "beq-", BBOCB(16,BOT,CBEQ,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2876 +{ "beq+", BBOCB(16,BOT,CBEQ,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2877 +{ "beq", BBOCB(16,BOT,CBEQ,0,0), BBOATCB_MASK, COM, { CR, BD } },
  2878 +{ "beql-", BBOCB(16,BOT,CBEQ,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2879 +{ "beql+", BBOCB(16,BOT,CBEQ,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2880 +{ "beql", BBOCB(16,BOT,CBEQ,0,1), BBOATCB_MASK, COM, { CR, BD } },
  2881 +{ "beqa-", BBOCB(16,BOT,CBEQ,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2882 +{ "beqa+", BBOCB(16,BOT,CBEQ,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2883 +{ "beqa", BBOCB(16,BOT,CBEQ,1,0), BBOATCB_MASK, COM, { CR, BDA } },
  2884 +{ "beqla-", BBOCB(16,BOT,CBEQ,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2885 +{ "beqla+", BBOCB(16,BOT,CBEQ,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2886 +{ "beqla", BBOCB(16,BOT,CBEQ,1,1), BBOATCB_MASK, COM, { CR, BDA } },
  2887 +{ "bso-", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2888 +{ "bso+", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2889 +{ "bso", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, COM, { CR, BD } },
  2890 +{ "bsol-", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2891 +{ "bsol+", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2892 +{ "bsol", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, COM, { CR, BD } },
  2893 +{ "bsoa-", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2894 +{ "bsoa+", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2895 +{ "bsoa", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, COM, { CR, BDA } },
  2896 +{ "bsola-", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2897 +{ "bsola+", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2898 +{ "bsola", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, COM, { CR, BDA } },
  2899 +{ "bun-", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2900 +{ "bun+", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2901 +{ "bun", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BD } },
  2902 +{ "bunl-", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2903 +{ "bunl+", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2904 +{ "bunl", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BD } },
  2905 +{ "buna-", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2906 +{ "buna+", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2907 +{ "buna", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDA } },
  2908 +{ "bunla-", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2909 +{ "bunla+", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2910 +{ "bunla", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDA } },
  2911 +{ "bge-", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2912 +{ "bge+", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2913 +{ "bge", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, COM, { CR, BD } },
  2914 +{ "bgel-", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2915 +{ "bgel+", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2916 +{ "bgel", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, COM, { CR, BD } },
  2917 +{ "bgea-", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2918 +{ "bgea+", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2919 +{ "bgea", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
  2920 +{ "bgela-", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2921 +{ "bgela+", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2922 +{ "bgela", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
  2923 +{ "bnl-", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2924 +{ "bnl+", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2925 +{ "bnl", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, COM, { CR, BD } },
  2926 +{ "bnll-", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2927 +{ "bnll+", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2928 +{ "bnll", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, COM, { CR, BD } },
  2929 +{ "bnla-", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2930 +{ "bnla+", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2931 +{ "bnla", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
  2932 +{ "bnlla-", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2933 +{ "bnlla+", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2934 +{ "bnlla", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
  2935 +{ "ble-", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2936 +{ "ble+", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2937 +{ "ble", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, COM, { CR, BD } },
  2938 +{ "blel-", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2939 +{ "blel+", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2940 +{ "blel", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, COM, { CR, BD } },
  2941 +{ "blea-", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2942 +{ "blea+", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2943 +{ "blea", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
  2944 +{ "blela-", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2945 +{ "blela+", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2946 +{ "blela", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
  2947 +{ "bng-", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2948 +{ "bng+", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2949 +{ "bng", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, COM, { CR, BD } },
  2950 +{ "bngl-", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2951 +{ "bngl+", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2952 +{ "bngl", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, COM, { CR, BD } },
  2953 +{ "bnga-", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2954 +{ "bnga+", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2955 +{ "bnga", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
  2956 +{ "bngla-", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2957 +{ "bngla+", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2958 +{ "bngla", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
  2959 +{ "bne-", BBOCB(16,BOF,CBEQ,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2960 +{ "bne+", BBOCB(16,BOF,CBEQ,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2961 +{ "bne", BBOCB(16,BOF,CBEQ,0,0), BBOATCB_MASK, COM, { CR, BD } },
  2962 +{ "bnel-", BBOCB(16,BOF,CBEQ,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2963 +{ "bnel+", BBOCB(16,BOF,CBEQ,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2964 +{ "bnel", BBOCB(16,BOF,CBEQ,0,1), BBOATCB_MASK, COM, { CR, BD } },
  2965 +{ "bnea-", BBOCB(16,BOF,CBEQ,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2966 +{ "bnea+", BBOCB(16,BOF,CBEQ,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2967 +{ "bnea", BBOCB(16,BOF,CBEQ,1,0), BBOATCB_MASK, COM, { CR, BDA } },
  2968 +{ "bnela-", BBOCB(16,BOF,CBEQ,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2969 +{ "bnela+", BBOCB(16,BOF,CBEQ,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2970 +{ "bnela", BBOCB(16,BOF,CBEQ,1,1), BBOATCB_MASK, COM, { CR, BDA } },
  2971 +{ "bns-", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2972 +{ "bns+", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2973 +{ "bns", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, COM, { CR, BD } },
  2974 +{ "bnsl-", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2975 +{ "bnsl+", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2976 +{ "bnsl", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, COM, { CR, BD } },
  2977 +{ "bnsa-", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2978 +{ "bnsa+", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2979 +{ "bnsa", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, COM, { CR, BDA } },
  2980 +{ "bnsla-", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2981 +{ "bnsla+", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2982 +{ "bnsla", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, COM, { CR, BDA } },
  2983 +{ "bnu-", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2984 +{ "bnu+", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2985 +{ "bnu", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BD } },
  2986 +{ "bnul-", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
  2987 +{ "bnul+", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
  2988 +{ "bnul", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BD } },
  2989 +{ "bnua-", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2990 +{ "bnua+", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2991 +{ "bnua", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDA } },
  2992 +{ "bnula-", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
  2993 +{ "bnula+", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
  2994 +{ "bnula", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDA } },
  2995 +{ "bdnzt-", BBO(16,BODNZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
  2996 +{ "bdnzt+", BBO(16,BODNZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
  2997 +{ "bdnzt", BBO(16,BODNZT,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
  2998 +{ "bdnztl-", BBO(16,BODNZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
  2999 +{ "bdnztl+", BBO(16,BODNZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
  3000 +{ "bdnztl", BBO(16,BODNZT,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
  3001 +{ "bdnzta-", BBO(16,BODNZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
  3002 +{ "bdnzta+", BBO(16,BODNZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
  3003 +{ "bdnzta", BBO(16,BODNZT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
  3004 +{ "bdnztla-",BBO(16,BODNZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
  3005 +{ "bdnztla+",BBO(16,BODNZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
  3006 +{ "bdnztla", BBO(16,BODNZT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
  3007 +{ "bdnzf-", BBO(16,BODNZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
  3008 +{ "bdnzf+", BBO(16,BODNZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
  3009 +{ "bdnzf", BBO(16,BODNZF,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
  3010 +{ "bdnzfl-", BBO(16,BODNZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
  3011 +{ "bdnzfl+", BBO(16,BODNZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
  3012 +{ "bdnzfl", BBO(16,BODNZF,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
  3013 +{ "bdnzfa-", BBO(16,BODNZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
  3014 +{ "bdnzfa+", BBO(16,BODNZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
  3015 +{ "bdnzfa", BBO(16,BODNZF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
  3016 +{ "bdnzfla-",BBO(16,BODNZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
  3017 +{ "bdnzfla+",BBO(16,BODNZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
  3018 +{ "bdnzfla", BBO(16,BODNZF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
  3019 +{ "bt-", BBO(16,BOT,0,0), BBOAT_MASK, PPCCOM, { BI, BDM } },
  3020 +{ "bt+", BBO(16,BOT,0,0), BBOAT_MASK, PPCCOM, { BI, BDP } },
  3021 +{ "bt", BBO(16,BOT,0,0), BBOAT_MASK, PPCCOM, { BI, BD } },
  3022 +{ "bbt", BBO(16,BOT,0,0), BBOAT_MASK, PWRCOM, { BI, BD } },
  3023 +{ "btl-", BBO(16,BOT,0,1), BBOAT_MASK, PPCCOM, { BI, BDM } },
  3024 +{ "btl+", BBO(16,BOT,0,1), BBOAT_MASK, PPCCOM, { BI, BDP } },
  3025 +{ "btl", BBO(16,BOT,0,1), BBOAT_MASK, PPCCOM, { BI, BD } },
  3026 +{ "bbtl", BBO(16,BOT,0,1), BBOAT_MASK, PWRCOM, { BI, BD } },
  3027 +{ "bta-", BBO(16,BOT,1,0), BBOAT_MASK, PPCCOM, { BI, BDMA } },
  3028 +{ "bta+", BBO(16,BOT,1,0), BBOAT_MASK, PPCCOM, { BI, BDPA } },
  3029 +{ "bta", BBO(16,BOT,1,0), BBOAT_MASK, PPCCOM, { BI, BDA } },
  3030 +{ "bbta", BBO(16,BOT,1,0), BBOAT_MASK, PWRCOM, { BI, BDA } },
  3031 +{ "btla-", BBO(16,BOT,1,1), BBOAT_MASK, PPCCOM, { BI, BDMA } },
  3032 +{ "btla+", BBO(16,BOT,1,1), BBOAT_MASK, PPCCOM, { BI, BDPA } },
  3033 +{ "btla", BBO(16,BOT,1,1), BBOAT_MASK, PPCCOM, { BI, BDA } },
  3034 +{ "bbtla", BBO(16,BOT,1,1), BBOAT_MASK, PWRCOM, { BI, BDA } },
  3035 +{ "bf-", BBO(16,BOF,0,0), BBOAT_MASK, PPCCOM, { BI, BDM } },
  3036 +{ "bf+", BBO(16,BOF,0,0), BBOAT_MASK, PPCCOM, { BI, BDP } },
  3037 +{ "bf", BBO(16,BOF,0,0), BBOAT_MASK, PPCCOM, { BI, BD } },
  3038 +{ "bbf", BBO(16,BOF,0,0), BBOAT_MASK, PWRCOM, { BI, BD } },
  3039 +{ "bfl-", BBO(16,BOF,0,1), BBOAT_MASK, PPCCOM, { BI, BDM } },
  3040 +{ "bfl+", BBO(16,BOF,0,1), BBOAT_MASK, PPCCOM, { BI, BDP } },
  3041 +{ "bfl", BBO(16,BOF,0,1), BBOAT_MASK, PPCCOM, { BI, BD } },
  3042 +{ "bbfl", BBO(16,BOF,0,1), BBOAT_MASK, PWRCOM, { BI, BD } },
  3043 +{ "bfa-", BBO(16,BOF,1,0), BBOAT_MASK, PPCCOM, { BI, BDMA } },
  3044 +{ "bfa+", BBO(16,BOF,1,0), BBOAT_MASK, PPCCOM, { BI, BDPA } },
  3045 +{ "bfa", BBO(16,BOF,1,0), BBOAT_MASK, PPCCOM, { BI, BDA } },
  3046 +{ "bbfa", BBO(16,BOF,1,0), BBOAT_MASK, PWRCOM, { BI, BDA } },
  3047 +{ "bfla-", BBO(16,BOF,1,1), BBOAT_MASK, PPCCOM, { BI, BDMA } },
  3048 +{ "bfla+", BBO(16,BOF,1,1), BBOAT_MASK, PPCCOM, { BI, BDPA } },
  3049 +{ "bfla", BBO(16,BOF,1,1), BBOAT_MASK, PPCCOM, { BI, BDA } },
  3050 +{ "bbfla", BBO(16,BOF,1,1), BBOAT_MASK, PWRCOM, { BI, BDA } },
  3051 +{ "bdzt-", BBO(16,BODZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
  3052 +{ "bdzt+", BBO(16,BODZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
  3053 +{ "bdzt", BBO(16,BODZT,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
  3054 +{ "bdztl-", BBO(16,BODZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
  3055 +{ "bdztl+", BBO(16,BODZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
  3056 +{ "bdztl", BBO(16,BODZT,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
  3057 +{ "bdzta-", BBO(16,BODZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
  3058 +{ "bdzta+", BBO(16,BODZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
  3059 +{ "bdzta", BBO(16,BODZT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
  3060 +{ "bdztla-", BBO(16,BODZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
  3061 +{ "bdztla+", BBO(16,BODZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
  3062 +{ "bdztla", BBO(16,BODZT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
  3063 +{ "bdzf-", BBO(16,BODZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
  3064 +{ "bdzf+", BBO(16,BODZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
  3065 +{ "bdzf", BBO(16,BODZF,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
  3066 +{ "bdzfl-", BBO(16,BODZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
  3067 +{ "bdzfl+", BBO(16,BODZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
  3068 +{ "bdzfl", BBO(16,BODZF,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
  3069 +{ "bdzfa-", BBO(16,BODZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
  3070 +{ "bdzfa+", BBO(16,BODZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
  3071 +{ "bdzfa", BBO(16,BODZF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
  3072 +{ "bdzfla-", BBO(16,BODZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
  3073 +{ "bdzfla+", BBO(16,BODZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
  3074 +{ "bdzfla", BBO(16,BODZF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
  3075 +{ "bc-", B(16,0,0), B_MASK, PPCCOM, { BOE, BI, BDM } },
  3076 +{ "bc+", B(16,0,0), B_MASK, PPCCOM, { BOE, BI, BDP } },
  3077 +{ "bc", B(16,0,0), B_MASK, COM, { BO, BI, BD } },
  3078 +{ "bcl-", B(16,0,1), B_MASK, PPCCOM, { BOE, BI, BDM } },
  3079 +{ "bcl+", B(16,0,1), B_MASK, PPCCOM, { BOE, BI, BDP } },
  3080 +{ "bcl", B(16,0,1), B_MASK, COM, { BO, BI, BD } },
  3081 +{ "bca-", B(16,1,0), B_MASK, PPCCOM, { BOE, BI, BDMA } },
  3082 +{ "bca+", B(16,1,0), B_MASK, PPCCOM, { BOE, BI, BDPA } },
  3083 +{ "bca", B(16,1,0), B_MASK, COM, { BO, BI, BDA } },
  3084 +{ "bcla-", B(16,1,1), B_MASK, PPCCOM, { BOE, BI, BDMA } },
  3085 +{ "bcla+", B(16,1,1), B_MASK, PPCCOM, { BOE, BI, BDPA } },
  3086 +{ "bcla", B(16,1,1), B_MASK, COM, { BO, BI, BDA } },
  3087 +
  3088 +{ "sc", SC(17,1,0), SC_MASK, PPC, { LEV } },
  3089 +{ "svc", SC(17,0,0), SC_MASK, POWER, { SVC_LEV, FL1, FL2 } },
  3090 +{ "svcl", SC(17,0,1), SC_MASK, POWER, { SVC_LEV, FL1, FL2 } },
  3091 +{ "svca", SC(17,1,0), SC_MASK, PWRCOM, { SV } },
1856 3092 { "svcla", SC(17,1,1), SC_MASK, POWER, { SV } },
1857 3093  
1858   -{ "b", B(18,0,0), B_MASK, PPC|POWER, { LI } },
1859   -{ "bl", B(18,0,1), B_MASK, PPC|POWER, { LI } },
1860   -{ "ba", B(18,1,0), B_MASK, PPC|POWER, { LIA } },
1861   -{ "bla", B(18,1,1), B_MASK, PPC|POWER, { LIA } },
1862   -
1863   -{ "mcrf", XL(19,0), XLBB_MASK|(3<<21)|(3<<16), PPC|POWER, { BF, BFA } },
1864   -
1865   -{ "blr", XLO(19,BOU,16,0), XLBOBIBB_MASK, PPC, { 0 } },
1866   -{ "br", XLO(19,BOU,16,0), XLBOBIBB_MASK, POWER, { 0 } },
1867   -{ "blrl", XLO(19,BOU,16,1), XLBOBIBB_MASK, PPC, { 0 } },
1868   -{ "brl", XLO(19,BOU,16,1), XLBOBIBB_MASK, POWER, { 0 } },
1869   -{ "bdnzlr", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPC, { 0 } },
1870   -{ "bdnzlr-", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPC, { 0 } },
1871   -{ "bdnzlr+", XLO(19,BODNZP,16,0), XLBOBIBB_MASK, PPC, { 0 } },
1872   -{ "bdnzlrl", XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPC, { 0 } },
1873   -{ "bdnzlrl-",XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPC, { 0 } },
1874   -{ "bdnzlrl+",XLO(19,BODNZP,16,1), XLBOBIBB_MASK, PPC, { 0 } },
1875   -{ "bdzlr", XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPC, { 0 } },
1876   -{ "bdzlr-", XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPC, { 0 } },
1877   -{ "bdzlr+", XLO(19,BODZP,16,0), XLBOBIBB_MASK, PPC, { 0 } },
1878   -{ "bdzlrl", XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPC, { 0 } },
1879   -{ "bdzlrl-", XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPC, { 0 } },
1880   -{ "bdzlrl+", XLO(19,BODZP,16,1), XLBOBIBB_MASK, PPC, { 0 } },
1881   -{ "bltlr", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1882   -{ "bltlr-", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1883   -{ "bltlr+", XLOCB(19,BOTP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1884   -{ "bltr", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, POWER, { CR } },
1885   -{ "bltlrl", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1886   -{ "bltlrl-", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1887   -{ "bltlrl+", XLOCB(19,BOTP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1888   -{ "bltrl", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, POWER, { CR } },
1889   -{ "bgtlr", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1890   -{ "bgtlr-", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1891   -{ "bgtlr+", XLOCB(19,BOTP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1892   -{ "bgtr", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, POWER, { CR } },
1893   -{ "bgtlrl", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1894   -{ "bgtlrl-", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1895   -{ "bgtlrl+", XLOCB(19,BOTP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1896   -{ "bgtrl", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, POWER, { CR } },
1897   -{ "beqlr", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
1898   -{ "beqlr-", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
1899   -{ "beqlr+", XLOCB(19,BOTP,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
1900   -{ "beqr", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, POWER, { CR } },
1901   -{ "beqlrl", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
1902   -{ "beqlrl-", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
1903   -{ "beqlrl+", XLOCB(19,BOTP,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
1904   -{ "beqrl", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, POWER, { CR } },
1905   -{ "bsolr", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1906   -{ "bsolr-", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1907   -{ "bsolr+", XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1908   -{ "bsor", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, POWER, { CR } },
1909   -{ "bsolrl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1910   -{ "bsolrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1911   -{ "bsolrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1912   -{ "bsorl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, POWER, { CR } },
1913   -{ "bunlr", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1914   -{ "bunlr-", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1915   -{ "bunlr+", XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1916   -{ "bunlrl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1917   -{ "bunlrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1918   -{ "bunlrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1919   -{ "bgelr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1920   -{ "bgelr-", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1921   -{ "bgelr+", XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1922   -{ "bger", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, POWER, { CR } },
1923   -{ "bgelrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1924   -{ "bgelrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1925   -{ "bgelrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1926   -{ "bgerl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, POWER, { CR } },
1927   -{ "bnllr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1928   -{ "bnllr-", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1929   -{ "bnllr+", XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1930   -{ "bnlr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, POWER, { CR } },
1931   -{ "bnllrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1932   -{ "bnllrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1933   -{ "bnllrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1934   -{ "bnlrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, POWER, { CR } },
1935   -{ "blelr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1936   -{ "blelr-", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1937   -{ "blelr+", XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1938   -{ "bler", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, POWER, { CR } },
1939   -{ "blelrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1940   -{ "blelrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1941   -{ "blelrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1942   -{ "blerl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, POWER, { CR } },
1943   -{ "bnglr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1944   -{ "bnglr-", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1945   -{ "bnglr+", XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1946   -{ "bngr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, POWER, { CR } },
1947   -{ "bnglrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1948   -{ "bnglrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1949   -{ "bnglrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1950   -{ "bngrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, POWER, { CR } },
1951   -{ "bnelr", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
1952   -{ "bnelr-", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
1953   -{ "bnelr+", XLOCB(19,BOFP,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
1954   -{ "bner", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, POWER, { CR } },
1955   -{ "bnelrl", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
1956   -{ "bnelrl-", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
1957   -{ "bnelrl+", XLOCB(19,BOFP,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
1958   -{ "bnerl", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, POWER, { CR } },
1959   -{ "bnslr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1960   -{ "bnslr-", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1961   -{ "bnslr+", XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1962   -{ "bnsr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, POWER, { CR } },
1963   -{ "bnslrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1964   -{ "bnslrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1965   -{ "bnslrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1966   -{ "bnsrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, POWER, { CR } },
1967   -{ "bnulr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1968   -{ "bnulr-", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1969   -{ "bnulr+", XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1970   -{ "bnulrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1971   -{ "bnulrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1972   -{ "bnulrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1973   -{ "btlr", XLO(19,BOT,16,0), XLBOBB_MASK, PPC, { BI } },
1974   -{ "btlr-", XLO(19,BOT,16,0), XLBOBB_MASK, PPC, { BI } },
1975   -{ "btlr+", XLO(19,BOTP,16,0), XLBOBB_MASK, PPC, { BI } },
1976   -{ "bbtr", XLO(19,BOT,16,0), XLBOBB_MASK, POWER, { BI } },
1977   -{ "btlrl", XLO(19,BOT,16,1), XLBOBB_MASK, PPC, { BI } },
1978   -{ "btlrl-", XLO(19,BOT,16,1), XLBOBB_MASK, PPC, { BI } },
1979   -{ "btlrl+", XLO(19,BOTP,16,1), XLBOBB_MASK, PPC, { BI } },
1980   -{ "bbtrl", XLO(19,BOT,16,1), XLBOBB_MASK, POWER, { BI } },
1981   -{ "bflr", XLO(19,BOF,16,0), XLBOBB_MASK, PPC, { BI } },
1982   -{ "bflr-", XLO(19,BOF,16,0), XLBOBB_MASK, PPC, { BI } },
1983   -{ "bflr+", XLO(19,BOFP,16,0), XLBOBB_MASK, PPC, { BI } },
1984   -{ "bbfr", XLO(19,BOF,16,0), XLBOBB_MASK, POWER, { BI } },
1985   -{ "bflrl", XLO(19,BOF,16,1), XLBOBB_MASK, PPC, { BI } },
1986   -{ "bflrl-", XLO(19,BOF,16,1), XLBOBB_MASK, PPC, { BI } },
1987   -{ "bflrl+", XLO(19,BOFP,16,1), XLBOBB_MASK, PPC, { BI } },
1988   -{ "bbfrl", XLO(19,BOF,16,1), XLBOBB_MASK, POWER, { BI } },
1989   -{ "bdnztlr", XLO(19,BODNZT,16,0), XLBOBB_MASK, PPC, { BI } },
1990   -{ "bdnztlr-",XLO(19,BODNZT,16,0), XLBOBB_MASK, PPC, { BI } },
1991   -{ "bdnztlr+",XLO(19,BODNZTP,16,0), XLBOBB_MASK, PPC, { BI } },
1992   -{ "bdnztlrl",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPC, { BI } },
1993   -{ "bdnztlrl-",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPC, { BI } },
1994   -{ "bdnztlrl+",XLO(19,BODNZTP,16,1), XLBOBB_MASK, PPC, { BI } },
1995   -{ "bdnzflr", XLO(19,BODNZF,16,0), XLBOBB_MASK, PPC, { BI } },
1996   -{ "bdnzflr-",XLO(19,BODNZF,16,0), XLBOBB_MASK, PPC, { BI } },
1997   -{ "bdnzflr+",XLO(19,BODNZFP,16,0), XLBOBB_MASK, PPC, { BI } },
1998   -{ "bdnzflrl",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPC, { BI } },
1999   -{ "bdnzflrl-",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPC, { BI } },
2000   -{ "bdnzflrl+",XLO(19,BODNZFP,16,1), XLBOBB_MASK, PPC, { BI } },
2001   -{ "bdztlr", XLO(19,BODZT,16,0), XLBOBB_MASK, PPC, { BI } },
2002   -{ "bdztlr-", XLO(19,BODZT,16,0), XLBOBB_MASK, PPC, { BI } },
2003   -{ "bdztlr+", XLO(19,BODZTP,16,0), XLBOBB_MASK, PPC, { BI } },
2004   -{ "bdztlrl", XLO(19,BODZT,16,1), XLBOBB_MASK, PPC, { BI } },
2005   -{ "bdztlrl-",XLO(19,BODZT,16,1), XLBOBB_MASK, PPC, { BI } },
2006   -{ "bdztlrl+",XLO(19,BODZTP,16,1), XLBOBB_MASK, PPC, { BI } },
2007   -{ "bdzflr", XLO(19,BODZF,16,0), XLBOBB_MASK, PPC, { BI } },
2008   -{ "bdzflr-", XLO(19,BODZF,16,0), XLBOBB_MASK, PPC, { BI } },
2009   -{ "bdzflr+", XLO(19,BODZFP,16,0), XLBOBB_MASK, PPC, { BI } },
2010   -{ "bdzflrl", XLO(19,BODZF,16,1), XLBOBB_MASK, PPC, { BI } },
2011   -{ "bdzflrl-",XLO(19,BODZF,16,1), XLBOBB_MASK, PPC, { BI } },
2012   -{ "bdzflrl+",XLO(19,BODZFP,16,1), XLBOBB_MASK, PPC, { BI } },
2013   -{ "bclr", XLLK(19,16,0), XLYBB_MASK, PPC, { BO, BI } },
2014   -{ "bclrl", XLLK(19,16,1), XLYBB_MASK, PPC, { BO, BI } },
2015   -{ "bclr+", XLYLK(19,16,1,0), XLYBB_MASK, PPC, { BOE, BI } },
2016   -{ "bclrl+", XLYLK(19,16,1,1), XLYBB_MASK, PPC, { BOE, BI } },
2017   -{ "bclr-", XLYLK(19,16,0,0), XLYBB_MASK, PPC, { BOE, BI } },
2018   -{ "bclrl-", XLYLK(19,16,0,1), XLYBB_MASK, PPC, { BOE, BI } },
2019   -{ "bcr", XLLK(19,16,0), XLBB_MASK, POWER, { BO, BI } },
2020   -{ "bcrl", XLLK(19,16,1), XLBB_MASK, POWER, { BO, BI } },
2021   -
2022   -{ "crnot", XL(19,33), XL_MASK, PPC, { BT, BA, BBA } },
2023   -{ "crnor", XL(19,33), XL_MASK, PPC|POWER, { BT, BA, BB } },
2024   -
2025   -{ "rfi", XL(19,50), 0xffffffff, PPC|POWER, { 0 } },
2026   -{ "rfci", XL(19,51), 0xffffffff, PPC, { 0 } },
  3094 +{ "b", B(18,0,0), B_MASK, COM, { LI } },
  3095 +{ "bl", B(18,0,1), B_MASK, COM, { LI } },
  3096 +{ "ba", B(18,1,0), B_MASK, COM, { LIA } },
  3097 +{ "bla", B(18,1,1), B_MASK, COM, { LIA } },
  3098 +
  3099 +{ "mcrf", XL(19,0), XLBB_MASK|(3 << 21)|(3 << 16), COM, { BF, BFA } },
  3100 +
  3101 +{ "blr", XLO(19,BOU,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
  3102 +{ "br", XLO(19,BOU,16,0), XLBOBIBB_MASK, PWRCOM, { 0 } },
  3103 +{ "blrl", XLO(19,BOU,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
  3104 +{ "brl", XLO(19,BOU,16,1), XLBOBIBB_MASK, PWRCOM, { 0 } },
  3105 +{ "bdnzlr", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
  3106 +{ "bdnzlr-", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
  3107 +{ "bdnzlr-", XLO(19,BODNZM4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
  3108 +{ "bdnzlr+", XLO(19,BODNZP,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
  3109 +{ "bdnzlr+", XLO(19,BODNZP4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
  3110 +{ "bdnzlrl", XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
  3111 +{ "bdnzlrl-",XLO(19,BODNZ,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
  3112 +{ "bdnzlrl-",XLO(19,BODNZM4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
  3113 +{ "bdnzlrl+",XLO(19,BODNZP,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
  3114 +{ "bdnzlrl+",XLO(19,BODNZP4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
  3115 +{ "bdzlr", XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
  3116 +{ "bdzlr-", XLO(19,BODZ,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
  3117 +{ "bdzlr-", XLO(19,BODZM4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
  3118 +{ "bdzlr+", XLO(19,BODZP,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
  3119 +{ "bdzlr+", XLO(19,BODZP4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
  3120 +{ "bdzlrl", XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
  3121 +{ "bdzlrl-", XLO(19,BODZ,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
  3122 +{ "bdzlrl-", XLO(19,BODZM4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
  3123 +{ "bdzlrl+", XLO(19,BODZP,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
  3124 +{ "bdzlrl+", XLO(19,BODZP4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
  3125 +{ "bltlr", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3126 +{ "bltlr-", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3127 +{ "bltlr-", XLOCB(19,BOTM4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3128 +{ "bltlr+", XLOCB(19,BOTP,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3129 +{ "bltlr+", XLOCB(19,BOTP4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3130 +{ "bltr", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
  3131 +{ "bltlrl", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3132 +{ "bltlrl-", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3133 +{ "bltlrl-", XLOCB(19,BOTM4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3134 +{ "bltlrl+", XLOCB(19,BOTP,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3135 +{ "bltlrl+", XLOCB(19,BOTP4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3136 +{ "bltrl", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
  3137 +{ "bgtlr", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3138 +{ "bgtlr-", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3139 +{ "bgtlr-", XLOCB(19,BOTM4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3140 +{ "bgtlr+", XLOCB(19,BOTP,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3141 +{ "bgtlr+", XLOCB(19,BOTP4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3142 +{ "bgtr", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
  3143 +{ "bgtlrl", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3144 +{ "bgtlrl-", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3145 +{ "bgtlrl-", XLOCB(19,BOTM4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3146 +{ "bgtlrl+", XLOCB(19,BOTP,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3147 +{ "bgtlrl+", XLOCB(19,BOTP4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3148 +{ "bgtrl", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
  3149 +{ "beqlr", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3150 +{ "beqlr-", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3151 +{ "beqlr-", XLOCB(19,BOTM4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3152 +{ "beqlr+", XLOCB(19,BOTP,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3153 +{ "beqlr+", XLOCB(19,BOTP4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3154 +{ "beqr", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
  3155 +{ "beqlrl", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3156 +{ "beqlrl-", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3157 +{ "beqlrl-", XLOCB(19,BOTM4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3158 +{ "beqlrl+", XLOCB(19,BOTP,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3159 +{ "beqlrl+", XLOCB(19,BOTP4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3160 +{ "beqrl", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
  3161 +{ "bsolr", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3162 +{ "bsolr-", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3163 +{ "bsolr-", XLOCB(19,BOTM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3164 +{ "bsolr+", XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3165 +{ "bsolr+", XLOCB(19,BOTP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3166 +{ "bsor", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
  3167 +{ "bsolrl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3168 +{ "bsolrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3169 +{ "bsolrl-", XLOCB(19,BOTM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3170 +{ "bsolrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3171 +{ "bsolrl+", XLOCB(19,BOTP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3172 +{ "bsorl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
  3173 +{ "bunlr", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3174 +{ "bunlr-", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3175 +{ "bunlr-", XLOCB(19,BOTM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3176 +{ "bunlr+", XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3177 +{ "bunlr+", XLOCB(19,BOTP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3178 +{ "bunlrl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3179 +{ "bunlrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3180 +{ "bunlrl-", XLOCB(19,BOTM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3181 +{ "bunlrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3182 +{ "bunlrl+", XLOCB(19,BOTP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3183 +{ "bgelr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3184 +{ "bgelr-", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3185 +{ "bgelr-", XLOCB(19,BOFM4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3186 +{ "bgelr+", XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3187 +{ "bgelr+", XLOCB(19,BOFP4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3188 +{ "bger", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
  3189 +{ "bgelrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3190 +{ "bgelrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3191 +{ "bgelrl-", XLOCB(19,BOFM4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3192 +{ "bgelrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3193 +{ "bgelrl+", XLOCB(19,BOFP4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3194 +{ "bgerl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
  3195 +{ "bnllr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3196 +{ "bnllr-", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3197 +{ "bnllr-", XLOCB(19,BOFM4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3198 +{ "bnllr+", XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3199 +{ "bnllr+", XLOCB(19,BOFP4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3200 +{ "bnlr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
  3201 +{ "bnllrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3202 +{ "bnllrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3203 +{ "bnllrl-", XLOCB(19,BOFM4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3204 +{ "bnllrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3205 +{ "bnllrl+", XLOCB(19,BOFP4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3206 +{ "bnlrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
  3207 +{ "blelr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3208 +{ "blelr-", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3209 +{ "blelr-", XLOCB(19,BOFM4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3210 +{ "blelr+", XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3211 +{ "blelr+", XLOCB(19,BOFP4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3212 +{ "bler", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
  3213 +{ "blelrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3214 +{ "blelrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3215 +{ "blelrl-", XLOCB(19,BOFM4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3216 +{ "blelrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3217 +{ "blelrl+", XLOCB(19,BOFP4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3218 +{ "blerl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
  3219 +{ "bnglr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3220 +{ "bnglr-", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3221 +{ "bnglr-", XLOCB(19,BOFM4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3222 +{ "bnglr+", XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3223 +{ "bnglr+", XLOCB(19,BOFP4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3224 +{ "bngr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
  3225 +{ "bnglrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3226 +{ "bnglrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3227 +{ "bnglrl-", XLOCB(19,BOFM4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3228 +{ "bnglrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3229 +{ "bnglrl+", XLOCB(19,BOFP4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3230 +{ "bngrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
  3231 +{ "bnelr", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3232 +{ "bnelr-", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3233 +{ "bnelr-", XLOCB(19,BOFM4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3234 +{ "bnelr+", XLOCB(19,BOFP,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3235 +{ "bnelr+", XLOCB(19,BOFP4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3236 +{ "bner", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
  3237 +{ "bnelrl", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3238 +{ "bnelrl-", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3239 +{ "bnelrl-", XLOCB(19,BOFM4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3240 +{ "bnelrl+", XLOCB(19,BOFP,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3241 +{ "bnelrl+", XLOCB(19,BOFP4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3242 +{ "bnerl", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
  3243 +{ "bnslr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3244 +{ "bnslr-", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3245 +{ "bnslr-", XLOCB(19,BOFM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3246 +{ "bnslr+", XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3247 +{ "bnslr+", XLOCB(19,BOFP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3248 +{ "bnsr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
  3249 +{ "bnslrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3250 +{ "bnslrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3251 +{ "bnslrl-", XLOCB(19,BOFM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3252 +{ "bnslrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3253 +{ "bnslrl+", XLOCB(19,BOFP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3254 +{ "bnsrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
  3255 +{ "bnulr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3256 +{ "bnulr-", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3257 +{ "bnulr-", XLOCB(19,BOFM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3258 +{ "bnulr+", XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3259 +{ "bnulr+", XLOCB(19,BOFP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
  3260 +{ "bnulrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3261 +{ "bnulrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3262 +{ "bnulrl-", XLOCB(19,BOFM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3263 +{ "bnulrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3264 +{ "bnulrl+", XLOCB(19,BOFP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
  3265 +{ "btlr", XLO(19,BOT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
  3266 +{ "btlr-", XLO(19,BOT,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3267 +{ "btlr-", XLO(19,BOTM4,16,0), XLBOBB_MASK, POWER4, { BI } },
  3268 +{ "btlr+", XLO(19,BOTP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3269 +{ "btlr+", XLO(19,BOTP4,16,0), XLBOBB_MASK, POWER4, { BI } },
  3270 +{ "bbtr", XLO(19,BOT,16,0), XLBOBB_MASK, PWRCOM, { BI } },
  3271 +{ "btlrl", XLO(19,BOT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
  3272 +{ "btlrl-", XLO(19,BOT,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3273 +{ "btlrl-", XLO(19,BOTM4,16,1), XLBOBB_MASK, POWER4, { BI } },
  3274 +{ "btlrl+", XLO(19,BOTP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3275 +{ "btlrl+", XLO(19,BOTP4,16,1), XLBOBB_MASK, POWER4, { BI } },
  3276 +{ "bbtrl", XLO(19,BOT,16,1), XLBOBB_MASK, PWRCOM, { BI } },
  3277 +{ "bflr", XLO(19,BOF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
  3278 +{ "bflr-", XLO(19,BOF,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3279 +{ "bflr-", XLO(19,BOFM4,16,0), XLBOBB_MASK, POWER4, { BI } },
  3280 +{ "bflr+", XLO(19,BOFP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3281 +{ "bflr+", XLO(19,BOFP4,16,0), XLBOBB_MASK, POWER4, { BI } },
  3282 +{ "bbfr", XLO(19,BOF,16,0), XLBOBB_MASK, PWRCOM, { BI } },
  3283 +{ "bflrl", XLO(19,BOF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
  3284 +{ "bflrl-", XLO(19,BOF,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3285 +{ "bflrl-", XLO(19,BOFM4,16,1), XLBOBB_MASK, POWER4, { BI } },
  3286 +{ "bflrl+", XLO(19,BOFP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3287 +{ "bflrl+", XLO(19,BOFP4,16,1), XLBOBB_MASK, POWER4, { BI } },
  3288 +{ "bbfrl", XLO(19,BOF,16,1), XLBOBB_MASK, PWRCOM, { BI } },
  3289 +{ "bdnztlr", XLO(19,BODNZT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
  3290 +{ "bdnztlr-",XLO(19,BODNZT,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3291 +{ "bdnztlr+",XLO(19,BODNZTP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3292 +{ "bdnztlrl",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
  3293 +{ "bdnztlrl-",XLO(19,BODNZT,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3294 +{ "bdnztlrl+",XLO(19,BODNZTP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3295 +{ "bdnzflr", XLO(19,BODNZF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
  3296 +{ "bdnzflr-",XLO(19,BODNZF,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3297 +{ "bdnzflr+",XLO(19,BODNZFP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3298 +{ "bdnzflrl",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
  3299 +{ "bdnzflrl-",XLO(19,BODNZF,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3300 +{ "bdnzflrl+",XLO(19,BODNZFP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3301 +{ "bdztlr", XLO(19,BODZT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
  3302 +{ "bdztlr-", XLO(19,BODZT,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3303 +{ "bdztlr+", XLO(19,BODZTP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3304 +{ "bdztlrl", XLO(19,BODZT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
  3305 +{ "bdztlrl-",XLO(19,BODZT,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3306 +{ "bdztlrl+",XLO(19,BODZTP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3307 +{ "bdzflr", XLO(19,BODZF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
  3308 +{ "bdzflr-", XLO(19,BODZF,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3309 +{ "bdzflr+", XLO(19,BODZFP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3310 +{ "bdzflrl", XLO(19,BODZF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
  3311 +{ "bdzflrl-",XLO(19,BODZF,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3312 +{ "bdzflrl+",XLO(19,BODZFP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3313 +{ "bclr+", XLYLK(19,16,1,0), XLYBB_MASK, PPCCOM, { BOE, BI } },
  3314 +{ "bclrl+", XLYLK(19,16,1,1), XLYBB_MASK, PPCCOM, { BOE, BI } },
  3315 +{ "bclr-", XLYLK(19,16,0,0), XLYBB_MASK, PPCCOM, { BOE, BI } },
  3316 +{ "bclrl-", XLYLK(19,16,0,1), XLYBB_MASK, PPCCOM, { BOE, BI } },
  3317 +{ "bclr", XLLK(19,16,0), XLBH_MASK, PPCCOM, { BO, BI, BH } },
  3318 +{ "bclrl", XLLK(19,16,1), XLBH_MASK, PPCCOM, { BO, BI, BH } },
  3319 +{ "bcr", XLLK(19,16,0), XLBB_MASK, PWRCOM, { BO, BI } },
  3320 +{ "bcrl", XLLK(19,16,1), XLBB_MASK, PWRCOM, { BO, BI } },
  3321 +{ "bclre", XLLK(19,17,0), XLBB_MASK, BOOKE64, { BO, BI } },
  3322 +{ "bclrel", XLLK(19,17,1), XLBB_MASK, BOOKE64, { BO, BI } },
  3323 +
  3324 +{ "rfid", XL(19,18), 0xffffffff, PPC64, { 0 } },
  3325 +
  3326 +{ "crnot", XL(19,33), XL_MASK, PPCCOM, { BT, BA, BBA } },
  3327 +{ "crnor", XL(19,33), XL_MASK, COM, { BT, BA, BB } },
  3328 +{ "rfmci", X(19,38), 0xffffffff, PPCRFMCI, { 0 } },
  3329 +
  3330 +{ "rfi", XL(19,50), 0xffffffff, COM, { 0 } },
  3331 +{ "rfci", XL(19,51), 0xffffffff, PPC403 | BOOKE, { 0 } },
2027 3332  
2028 3333 { "rfsvc", XL(19,82), 0xffffffff, POWER, { 0 } },
2029 3334  
2030   -{ "crandc", XL(19,129), XL_MASK, PPC|POWER, { BT, BA, BB } },
2031   -
2032   -{ "isync", XL(19,150), 0xffffffff, PPC, { 0 } },
2033   -{ "ics", XL(19,150), 0xffffffff, POWER, { 0 } },
2034   -
2035   -{ "crclr", XL(19,193), XL_MASK, PPC, { BT, BAT, BBA } },
2036   -{ "crxor", XL(19,193), XL_MASK, PPC|POWER, { BT, BA, BB } },
2037   -
2038   -{ "crnand", XL(19,225), XL_MASK, PPC|POWER, { BT, BA, BB } },
2039   -
2040   -{ "crand", XL(19,257), XL_MASK, PPC|POWER, { BT, BA, BB } },
2041   -
2042   -{ "crset", XL(19,289), XL_MASK, PPC, { BT, BAT, BBA } },
2043   -{ "creqv", XL(19,289), XL_MASK, PPC|POWER, { BT, BA, BB } },
2044   -
2045   -{ "crorc", XL(19,417), XL_MASK, PPC|POWER, { BT, BA, BB } },
2046   -
2047   -{ "crmove", XL(19,449), XL_MASK, PPC, { BT, BA, BBA } },
2048   -{ "cror", XL(19,449), XL_MASK, PPC|POWER, { BT, BA, BB } },
2049   -
2050   -{ "bctr", XLO(19,BOU,528,0), XLBOBIBB_MASK, PPC|POWER, { 0 } },
2051   -{ "bctrl", XLO(19,BOU,528,1), XLBOBIBB_MASK, PPC|POWER, { 0 } },
2052   -{ "bltctr", XLOCB(19,BOT,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2053   -{ "bltctr-", XLOCB(19,BOT,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2054   -{ "bltctr+", XLOCB(19,BOTP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2055   -{ "bltctrl", XLOCB(19,BOT,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2056   -{ "bltctrl-",XLOCB(19,BOT,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2057   -{ "bltctrl+",XLOCB(19,BOTP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2058   -{ "bgtctr", XLOCB(19,BOT,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2059   -{ "bgtctr-", XLOCB(19,BOT,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2060   -{ "bgtctr+", XLOCB(19,BOTP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2061   -{ "bgtctrl", XLOCB(19,BOT,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2062   -{ "bgtctrl-",XLOCB(19,BOT,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2063   -{ "bgtctrl+",XLOCB(19,BOTP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2064   -{ "beqctr", XLOCB(19,BOT,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
2065   -{ "beqctr-", XLOCB(19,BOT,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
2066   -{ "beqctr+", XLOCB(19,BOTP,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
2067   -{ "beqctrl", XLOCB(19,BOT,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
2068   -{ "beqctrl-",XLOCB(19,BOT,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
2069   -{ "beqctrl+",XLOCB(19,BOTP,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
2070   -{ "bsoctr", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
2071   -{ "bsoctr-", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
2072   -{ "bsoctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
2073   -{ "bsoctrl", XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
2074   -{ "bsoctrl-",XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
2075   -{ "bsoctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
2076   -{ "bunctr", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
2077   -{ "bunctr-", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
2078   -{ "bunctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
2079   -{ "bunctrl", XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
2080   -{ "bunctrl-",XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
2081   -{ "bunctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
2082   -{ "bgectr", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2083   -{ "bgectr-", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2084   -{ "bgectr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2085   -{ "bgectrl", XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2086   -{ "bgectrl-",XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2087   -{ "bgectrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2088   -{ "bnlctr", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2089   -{ "bnlctr-", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2090   -{ "bnlctr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2091   -{ "bnlctrl", XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2092   -{ "bnlctrl-",XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2093   -{ "bnlctrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2094   -{ "blectr", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2095   -{ "blectr-", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2096   -{ "blectr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2097   -{ "blectrl", XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2098   -{ "blectrl-",XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2099   -{ "blectrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2100   -{ "bngctr", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2101   -{ "bngctr-", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2102   -{ "bngctr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
2103   -{ "bngctrl", XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2104   -{ "bngctrl-",XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2105   -{ "bngctrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
2106   -{ "bnectr", XLOCB(19,BOF,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
2107   -{ "bnectr-", XLOCB(19,BOF,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
2108   -{ "bnectr+", XLOCB(19,BOFP,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
2109   -{ "bnectrl", XLOCB(19,BOF,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
2110   -{ "bnectrl-",XLOCB(19,BOF,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
2111   -{ "bnectrl+",XLOCB(19,BOFP,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
2112   -{ "bnsctr", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
2113   -{ "bnsctr-", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
2114   -{ "bnsctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
2115   -{ "bnsctrl", XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
2116   -{ "bnsctrl-",XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
2117   -{ "bnsctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
2118   -{ "bnuctr", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
2119   -{ "bnuctr-", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
2120   -{ "bnuctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
2121   -{ "bnuctrl", XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
2122   -{ "bnuctrl-",XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
2123   -{ "bnuctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
2124   -{ "btctr", XLO(19,BOT,528,0), XLBOBB_MASK, PPC, { BI } },
2125   -{ "btctr-", XLO(19,BOT,528,0), XLBOBB_MASK, PPC, { BI } },
2126   -{ "btctr+", XLO(19,BOTP,528,0), XLBOBB_MASK, PPC, { BI } },
2127   -{ "btctrl", XLO(19,BOT,528,1), XLBOBB_MASK, PPC, { BI } },
2128   -{ "btctrl-", XLO(19,BOT,528,1), XLBOBB_MASK, PPC, { BI } },
2129   -{ "btctrl+", XLO(19,BOTP,528,1), XLBOBB_MASK, PPC, { BI } },
2130   -{ "bfctr", XLO(19,BOF,528,0), XLBOBB_MASK, PPC, { BI } },
2131   -{ "bfctr-", XLO(19,BOF,528,0), XLBOBB_MASK, PPC, { BI } },
2132   -{ "bfctr+", XLO(19,BOFP,528,0), XLBOBB_MASK, PPC, { BI } },
2133   -{ "bfctrl", XLO(19,BOF,528,1), XLBOBB_MASK, PPC, { BI } },
2134   -{ "bfctrl-", XLO(19,BOF,528,1), XLBOBB_MASK, PPC, { BI } },
2135   -{ "bfctrl+", XLO(19,BOFP,528,1), XLBOBB_MASK, PPC, { BI } },
2136   -{ "bcctr", XLLK(19,528,0), XLYBB_MASK, PPC, { BO, BI } },
2137   -{ "bcctr-", XLYLK(19,528,0,0), XLYBB_MASK, PPC, { BOE, BI } },
2138   -{ "bcctr+", XLYLK(19,528,1,0), XLYBB_MASK, PPC, { BOE, BI } },
2139   -{ "bcctrl", XLLK(19,528,1), XLYBB_MASK, PPC, { BO, BI } },
2140   -{ "bcctrl-", XLYLK(19,528,0,1), XLYBB_MASK, PPC, { BOE, BI } },
2141   -{ "bcctrl+", XLYLK(19,528,1,1), XLYBB_MASK, PPC, { BOE, BI } },
2142   -{ "bcc", XLLK(19,528,0), XLBB_MASK, POWER, { BO, BI } },
2143   -{ "bccl", XLLK(19,528,1), XLBB_MASK, POWER, { BO, BI } },
2144   -
2145   -{ "rlwimi", M(20,0), M_MASK, PPC, { RA,RS,SH,MBE,ME } },
2146   -{ "rlimi", M(20,0), M_MASK, POWER, { RA,RS,SH,MBE,ME } },
2147   -
2148   -{ "rlwimi.", M(20,1), M_MASK, PPC, { RA,RS,SH,MBE,ME } },
2149   -{ "rlimi.", M(20,1), M_MASK, POWER, { RA,RS,SH,MBE,ME } },
2150   -
2151   -{ "rotlwi", MME(21,31,0), MMBME_MASK, PPC, { RA, RS, SH } },
2152   -{ "clrlwi", MME(21,31,0), MSHME_MASK, PPC, { RA, RS, MB } },
2153   -{ "rlwinm", M(21,0), M_MASK, PPC, { RA,RS,SH,MBE,ME } },
2154   -{ "rlinm", M(21,0), M_MASK, POWER, { RA,RS,SH,MBE,ME } },
2155   -{ "rotlwi.", MME(21,31,1), MMBME_MASK, PPC, { RA,RS,SH } },
2156   -{ "clrlwi.", MME(21,31,1), MSHME_MASK, PPC, { RA, RS, MB } },
2157   -{ "rlwinm.", M(21,1), M_MASK, PPC, { RA,RS,SH,MBE,ME } },
2158   -{ "rlinm.", M(21,1), M_MASK, POWER, { RA,RS,SH,MBE,ME } },
2159   -
2160   -{ "rlmi", M(22,0), M_MASK, POWER|M601, { RA,RS,RB,MBE,ME } },
2161   -{ "rlmi.", M(22,1), M_MASK, POWER|M601, { RA,RS,RB,MBE,ME } },
2162   -
2163   -{ "rotlw", MME(23,31,0), MMBME_MASK, PPC, { RA, RS, RB } },
2164   -{ "rlwnm", M(23,0), M_MASK, PPC, { RA,RS,RB,MBE,ME } },
2165   -{ "rlnm", M(23,0), M_MASK, POWER, { RA,RS,RB,MBE,ME } },
2166   -{ "rotlw.", MME(23,31,1), MMBME_MASK, PPC, { RA, RS, RB } },
2167   -{ "rlwnm.", M(23,1), M_MASK, PPC, { RA,RS,RB,MBE,ME } },
2168   -{ "rlnm.", M(23,1), M_MASK, POWER, { RA,RS,RB,MBE,ME } },
2169   -
2170   -{ "nop", OP(24), 0xffffffff, PPC, { 0 } },
2171   -{ "ori", OP(24), OP_MASK, PPC, { RA, RS, UI } },
2172   -{ "oril", OP(24), OP_MASK, POWER, { RA, RS, UI } },
2173   -
2174   -{ "oris", OP(25), OP_MASK, PPC, { RA, RS, UI } },
2175   -{ "oriu", OP(25), OP_MASK, POWER, { RA, RS, UI } },
2176   -
2177   -{ "xori", OP(26), OP_MASK, PPC, { RA, RS, UI } },
2178   -{ "xoril", OP(26), OP_MASK, POWER, { RA, RS, UI } },
2179   -
2180   -{ "xoris", OP(27), OP_MASK, PPC, { RA, RS, UI } },
2181   -{ "xoriu", OP(27), OP_MASK, POWER, { RA, RS, UI } },
2182   -
2183   -{ "andi.", OP(28), OP_MASK, PPC, { RA, RS, UI } },
2184   -{ "andil.", OP(28), OP_MASK, POWER, { RA, RS, UI } },
2185   -
2186   -{ "andis.", OP(29), OP_MASK, PPC, { RA, RS, UI } },
2187   -{ "andiu.", OP(29), OP_MASK, POWER, { RA, RS, UI } },
2188   -
2189   -{ "rotldi", MD(30,0,0), MDMB_MASK, PPC|B64, { RA, RS, SH6 } },
2190   -{ "clrldi", MD(30,0,0), MDSH_MASK, PPC|B64, { RA, RS, MB6 } },
2191   -{ "rldicl", MD(30,0,0), MD_MASK, PPC|B64, { RA, RS, SH6, MB6 } },
2192   -{ "rotldi.", MD(30,0,1), MDMB_MASK, PPC|B64, { RA, RS, SH6 } },
2193   -{ "clrldi.", MD(30,0,1), MDSH_MASK, PPC|B64, { RA, RS, MB6 } },
2194   -{ "rldicl.", MD(30,0,1), MD_MASK, PPC|B64, { RA, RS, SH6, MB6 } },
2195   -
2196   -{ "rldicr", MD(30,1,0), MD_MASK, PPC|B64, { RA, RS, SH6, ME6 } },
2197   -{ "rldicr.", MD(30,1,1), MD_MASK, PPC|B64, { RA, RS, SH6, ME6 } },
2198   -
2199   -{ "rldic", MD(30,2,0), MD_MASK, PPC|B64, { RA, RS, SH6, MB6 } },
2200   -{ "rldic.", MD(30,2,1), MD_MASK, PPC|B64, { RA, RS, SH6, MB6 } },
2201   -
2202   -{ "rldimi", MD(30,3,0), MD_MASK, PPC|B64, { RA, RS, SH6, MB6 } },
2203   -{ "rldimi.", MD(30,3,1), MD_MASK, PPC|B64, { RA, RS, SH6, MB6 } },
2204   -
2205   -{ "rotld", MDS(30,8,0), MDSMB_MASK, PPC|B64, { RA, RS, RB } },
2206   -{ "rldcl", MDS(30,8,0), MDS_MASK, PPC|B64, { RA, RS, RB, MB6 } },
2207   -{ "rotld.", MDS(30,8,1), MDSMB_MASK, PPC|B64, { RA, RS, RB } },
2208   -{ "rldcl.", MDS(30,8,1), MDS_MASK, PPC|B64, { RA, RS, RB, MB6 } },
2209   -
2210   -{ "rldcr", MDS(30,9,0), MDS_MASK, PPC|B64, { RA, RS, RB, ME6 } },
2211   -{ "rldcr.", MDS(30,9,1), MDS_MASK, PPC|B64, { RA, RS, RB, ME6 } },
2212   -
2213   -{ "cmpw", XCMPL(31,0,0), XCMPL_MASK, PPC, { OBF, RA, RB } },
2214   -{ "cmpd", XCMPL(31,0,1), XCMPL_MASK, PPC|B64, { OBF, RA, RB } },
  3335 +{ "crandc", XL(19,129), XL_MASK, COM, { BT, BA, BB } },
  3336 +
  3337 +{ "isync", XL(19,150), 0xffffffff, PPCCOM, { 0 } },
  3338 +{ "ics", XL(19,150), 0xffffffff, PWRCOM, { 0 } },
  3339 +
  3340 +{ "crclr", XL(19,193), XL_MASK, PPCCOM, { BT, BAT, BBA } },
  3341 +{ "crxor", XL(19,193), XL_MASK, COM, { BT, BA, BB } },
  3342 +
  3343 +{ "crnand", XL(19,225), XL_MASK, COM, { BT, BA, BB } },
  3344 +
  3345 +{ "crand", XL(19,257), XL_MASK, COM, { BT, BA, BB } },
  3346 +
  3347 +{ "hrfid", XL(19,274), 0xffffffff, POWER5, { 0 } },
  3348 +
  3349 +{ "crset", XL(19,289), XL_MASK, PPCCOM, { BT, BAT, BBA } },
  3350 +{ "creqv", XL(19,289), XL_MASK, COM, { BT, BA, BB } },
  3351 +
  3352 +{ "crorc", XL(19,417), XL_MASK, COM, { BT, BA, BB } },
  3353 +
  3354 +{ "crmove", XL(19,449), XL_MASK, PPCCOM, { BT, BA, BBA } },
  3355 +{ "cror", XL(19,449), XL_MASK, COM, { BT, BA, BB } },
  3356 +
  3357 +{ "bctr", XLO(19,BOU,528,0), XLBOBIBB_MASK, COM, { 0 } },
  3358 +{ "bctrl", XLO(19,BOU,528,1), XLBOBIBB_MASK, COM, { 0 } },
  3359 +{ "bltctr", XLOCB(19,BOT,CBLT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3360 +{ "bltctr-", XLOCB(19,BOT,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3361 +{ "bltctr-", XLOCB(19,BOTM4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3362 +{ "bltctr+", XLOCB(19,BOTP,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3363 +{ "bltctr+", XLOCB(19,BOTP4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3364 +{ "bltctrl", XLOCB(19,BOT,CBLT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3365 +{ "bltctrl-",XLOCB(19,BOT,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3366 +{ "bltctrl-",XLOCB(19,BOTM4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3367 +{ "bltctrl+",XLOCB(19,BOTP,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3368 +{ "bltctrl+",XLOCB(19,BOTP4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3369 +{ "bgtctr", XLOCB(19,BOT,CBGT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3370 +{ "bgtctr-", XLOCB(19,BOT,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3371 +{ "bgtctr-", XLOCB(19,BOTM4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3372 +{ "bgtctr+", XLOCB(19,BOTP,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3373 +{ "bgtctr+", XLOCB(19,BOTP4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3374 +{ "bgtctrl", XLOCB(19,BOT,CBGT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3375 +{ "bgtctrl-",XLOCB(19,BOT,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3376 +{ "bgtctrl-",XLOCB(19,BOTM4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3377 +{ "bgtctrl+",XLOCB(19,BOTP,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3378 +{ "bgtctrl+",XLOCB(19,BOTP4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3379 +{ "beqctr", XLOCB(19,BOT,CBEQ,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3380 +{ "beqctr-", XLOCB(19,BOT,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3381 +{ "beqctr-", XLOCB(19,BOTM4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3382 +{ "beqctr+", XLOCB(19,BOTP,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3383 +{ "beqctr+", XLOCB(19,BOTP4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3384 +{ "beqctrl", XLOCB(19,BOT,CBEQ,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3385 +{ "beqctrl-",XLOCB(19,BOT,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3386 +{ "beqctrl-",XLOCB(19,BOTM4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3387 +{ "beqctrl+",XLOCB(19,BOTP,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3388 +{ "beqctrl+",XLOCB(19,BOTP4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3389 +{ "bsoctr", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3390 +{ "bsoctr-", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3391 +{ "bsoctr-", XLOCB(19,BOTM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3392 +{ "bsoctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3393 +{ "bsoctr+", XLOCB(19,BOTP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3394 +{ "bsoctrl", XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3395 +{ "bsoctrl-",XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3396 +{ "bsoctrl-",XLOCB(19,BOTM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3397 +{ "bsoctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3398 +{ "bsoctrl+",XLOCB(19,BOTP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3399 +{ "bunctr", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3400 +{ "bunctr-", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3401 +{ "bunctr-", XLOCB(19,BOTM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3402 +{ "bunctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3403 +{ "bunctr+", XLOCB(19,BOTP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3404 +{ "bunctrl", XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3405 +{ "bunctrl-",XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3406 +{ "bunctrl-",XLOCB(19,BOTM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3407 +{ "bunctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3408 +{ "bunctrl+",XLOCB(19,BOTP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3409 +{ "bgectr", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3410 +{ "bgectr-", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3411 +{ "bgectr-", XLOCB(19,BOFM4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3412 +{ "bgectr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3413 +{ "bgectr+", XLOCB(19,BOFP4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3414 +{ "bgectrl", XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3415 +{ "bgectrl-",XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3416 +{ "bgectrl-",XLOCB(19,BOFM4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3417 +{ "bgectrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3418 +{ "bgectrl+",XLOCB(19,BOFP4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3419 +{ "bnlctr", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3420 +{ "bnlctr-", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3421 +{ "bnlctr-", XLOCB(19,BOFM4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3422 +{ "bnlctr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3423 +{ "bnlctr+", XLOCB(19,BOFP4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3424 +{ "bnlctrl", XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3425 +{ "bnlctrl-",XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3426 +{ "bnlctrl-",XLOCB(19,BOFM4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3427 +{ "bnlctrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3428 +{ "bnlctrl+",XLOCB(19,BOFP4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3429 +{ "blectr", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3430 +{ "blectr-", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3431 +{ "blectr-", XLOCB(19,BOFM4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3432 +{ "blectr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3433 +{ "blectr+", XLOCB(19,BOFP4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3434 +{ "blectrl", XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3435 +{ "blectrl-",XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3436 +{ "blectrl-",XLOCB(19,BOFM4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3437 +{ "blectrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3438 +{ "blectrl+",XLOCB(19,BOFP4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3439 +{ "bngctr", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3440 +{ "bngctr-", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3441 +{ "bngctr-", XLOCB(19,BOFM4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3442 +{ "bngctr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3443 +{ "bngctr+", XLOCB(19,BOFP4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3444 +{ "bngctrl", XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3445 +{ "bngctrl-",XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3446 +{ "bngctrl-",XLOCB(19,BOFM4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3447 +{ "bngctrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3448 +{ "bngctrl+",XLOCB(19,BOFP4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3449 +{ "bnectr", XLOCB(19,BOF,CBEQ,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3450 +{ "bnectr-", XLOCB(19,BOF,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3451 +{ "bnectr-", XLOCB(19,BOFM4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3452 +{ "bnectr+", XLOCB(19,BOFP,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3453 +{ "bnectr+", XLOCB(19,BOFP4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3454 +{ "bnectrl", XLOCB(19,BOF,CBEQ,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3455 +{ "bnectrl-",XLOCB(19,BOF,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3456 +{ "bnectrl-",XLOCB(19,BOFM4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3457 +{ "bnectrl+",XLOCB(19,BOFP,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3458 +{ "bnectrl+",XLOCB(19,BOFP4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3459 +{ "bnsctr", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3460 +{ "bnsctr-", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3461 +{ "bnsctr-", XLOCB(19,BOFM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3462 +{ "bnsctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3463 +{ "bnsctr+", XLOCB(19,BOFP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3464 +{ "bnsctrl", XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3465 +{ "bnsctrl-",XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3466 +{ "bnsctrl-",XLOCB(19,BOFM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3467 +{ "bnsctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3468 +{ "bnsctrl+",XLOCB(19,BOFP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3469 +{ "bnuctr", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
  3470 +{ "bnuctr-", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3471 +{ "bnuctr-", XLOCB(19,BOFM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3472 +{ "bnuctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3473 +{ "bnuctr+", XLOCB(19,BOFP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
  3474 +{ "bnuctrl", XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
  3475 +{ "bnuctrl-",XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3476 +{ "bnuctrl-",XLOCB(19,BOFM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3477 +{ "bnuctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
  3478 +{ "bnuctrl+",XLOCB(19,BOFP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
  3479 +{ "btctr", XLO(19,BOT,528,0), XLBOBB_MASK, PPCCOM, { BI } },
  3480 +{ "btctr-", XLO(19,BOT,528,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3481 +{ "btctr-", XLO(19,BOTM4,528,0), XLBOBB_MASK, POWER4, { BI } },
  3482 +{ "btctr+", XLO(19,BOTP,528,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3483 +{ "btctr+", XLO(19,BOTP4,528,0), XLBOBB_MASK, POWER4, { BI } },
  3484 +{ "btctrl", XLO(19,BOT,528,1), XLBOBB_MASK, PPCCOM, { BI } },
  3485 +{ "btctrl-", XLO(19,BOT,528,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3486 +{ "btctrl-", XLO(19,BOTM4,528,1), XLBOBB_MASK, POWER4, { BI } },
  3487 +{ "btctrl+", XLO(19,BOTP,528,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3488 +{ "btctrl+", XLO(19,BOTP4,528,1), XLBOBB_MASK, POWER4, { BI } },
  3489 +{ "bfctr", XLO(19,BOF,528,0), XLBOBB_MASK, PPCCOM, { BI } },
  3490 +{ "bfctr-", XLO(19,BOF,528,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3491 +{ "bfctr-", XLO(19,BOFM4,528,0), XLBOBB_MASK, POWER4, { BI } },
  3492 +{ "bfctr+", XLO(19,BOFP,528,0), XLBOBB_MASK, NOPOWER4, { BI } },
  3493 +{ "bfctr+", XLO(19,BOFP4,528,0), XLBOBB_MASK, POWER4, { BI } },
  3494 +{ "bfctrl", XLO(19,BOF,528,1), XLBOBB_MASK, PPCCOM, { BI } },
  3495 +{ "bfctrl-", XLO(19,BOF,528,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3496 +{ "bfctrl-", XLO(19,BOFM4,528,1), XLBOBB_MASK, POWER4, { BI } },
  3497 +{ "bfctrl+", XLO(19,BOFP,528,1), XLBOBB_MASK, NOPOWER4, { BI } },
  3498 +{ "bfctrl+", XLO(19,BOFP4,528,1), XLBOBB_MASK, POWER4, { BI } },
  3499 +{ "bcctr-", XLYLK(19,528,0,0), XLYBB_MASK, PPCCOM, { BOE, BI } },
  3500 +{ "bcctr+", XLYLK(19,528,1,0), XLYBB_MASK, PPCCOM, { BOE, BI } },
  3501 +{ "bcctrl-", XLYLK(19,528,0,1), XLYBB_MASK, PPCCOM, { BOE, BI } },
  3502 +{ "bcctrl+", XLYLK(19,528,1,1), XLYBB_MASK, PPCCOM, { BOE, BI } },
  3503 +{ "bcctr", XLLK(19,528,0), XLBH_MASK, PPCCOM, { BO, BI, BH } },
  3504 +{ "bcctrl", XLLK(19,528,1), XLBH_MASK, PPCCOM, { BO, BI, BH } },
  3505 +{ "bcc", XLLK(19,528,0), XLBB_MASK, PWRCOM, { BO, BI } },
  3506 +{ "bccl", XLLK(19,528,1), XLBB_MASK, PWRCOM, { BO, BI } },
  3507 +{ "bcctre", XLLK(19,529,0), XLYBB_MASK, BOOKE64, { BO, BI } },
  3508 +{ "bcctrel", XLLK(19,529,1), XLYBB_MASK, BOOKE64, { BO, BI } },
  3509 +
  3510 +{ "rlwimi", M(20,0), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
  3511 +{ "rlimi", M(20,0), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
  3512 +
  3513 +{ "rlwimi.", M(20,1), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
  3514 +{ "rlimi.", M(20,1), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
  3515 +
  3516 +{ "rotlwi", MME(21,31,0), MMBME_MASK, PPCCOM, { RA, RS, SH } },
  3517 +{ "clrlwi", MME(21,31,0), MSHME_MASK, PPCCOM, { RA, RS, MB } },
  3518 +{ "rlwinm", M(21,0), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
  3519 +{ "rlinm", M(21,0), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
  3520 +{ "rotlwi.", MME(21,31,1), MMBME_MASK, PPCCOM, { RA,RS,SH } },
  3521 +{ "clrlwi.", MME(21,31,1), MSHME_MASK, PPCCOM, { RA, RS, MB } },
  3522 +{ "rlwinm.", M(21,1), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
  3523 +{ "rlinm.", M(21,1), M_MASK, PWRCOM, { RA,RS,SH,MBE,ME } },
  3524 +
  3525 +{ "rlmi", M(22,0), M_MASK, M601, { RA,RS,RB,MBE,ME } },
  3526 +{ "rlmi.", M(22,1), M_MASK, M601, { RA,RS,RB,MBE,ME } },
  3527 +
  3528 +{ "be", B(22,0,0), B_MASK, BOOKE64, { LI } },
  3529 +{ "bel", B(22,0,1), B_MASK, BOOKE64, { LI } },
  3530 +{ "bea", B(22,1,0), B_MASK, BOOKE64, { LIA } },
  3531 +{ "bela", B(22,1,1), B_MASK, BOOKE64, { LIA } },
  3532 +
  3533 +{ "rotlw", MME(23,31,0), MMBME_MASK, PPCCOM, { RA, RS, RB } },
  3534 +{ "rlwnm", M(23,0), M_MASK, PPCCOM, { RA,RS,RB,MBE,ME } },
  3535 +{ "rlnm", M(23,0), M_MASK, PWRCOM, { RA,RS,RB,MBE,ME } },
  3536 +{ "rotlw.", MME(23,31,1), MMBME_MASK, PPCCOM, { RA, RS, RB } },
  3537 +{ "rlwnm.", M(23,1), M_MASK, PPCCOM, { RA,RS,RB,MBE,ME } },
  3538 +{ "rlnm.", M(23,1), M_MASK, PWRCOM, { RA,RS,RB,MBE,ME } },
  3539 +
  3540 +{ "nop", OP(24), 0xffffffff, PPCCOM, { 0 } },
  3541 +{ "ori", OP(24), OP_MASK, PPCCOM, { RA, RS, UI } },
  3542 +{ "oril", OP(24), OP_MASK, PWRCOM, { RA, RS, UI } },
  3543 +
  3544 +{ "oris", OP(25), OP_MASK, PPCCOM, { RA, RS, UI } },
  3545 +{ "oriu", OP(25), OP_MASK, PWRCOM, { RA, RS, UI } },
  3546 +
  3547 +{ "xori", OP(26), OP_MASK, PPCCOM, { RA, RS, UI } },
  3548 +{ "xoril", OP(26), OP_MASK, PWRCOM, { RA, RS, UI } },
  3549 +
  3550 +{ "xoris", OP(27), OP_MASK, PPCCOM, { RA, RS, UI } },
  3551 +{ "xoriu", OP(27), OP_MASK, PWRCOM, { RA, RS, UI } },
  3552 +
  3553 +{ "andi.", OP(28), OP_MASK, PPCCOM, { RA, RS, UI } },
  3554 +{ "andil.", OP(28), OP_MASK, PWRCOM, { RA, RS, UI } },
  3555 +
  3556 +{ "andis.", OP(29), OP_MASK, PPCCOM, { RA, RS, UI } },
  3557 +{ "andiu.", OP(29), OP_MASK, PWRCOM, { RA, RS, UI } },
  3558 +
  3559 +{ "rotldi", MD(30,0,0), MDMB_MASK, PPC64, { RA, RS, SH6 } },
  3560 +{ "clrldi", MD(30,0,0), MDSH_MASK, PPC64, { RA, RS, MB6 } },
  3561 +{ "rldicl", MD(30,0,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
  3562 +{ "rotldi.", MD(30,0,1), MDMB_MASK, PPC64, { RA, RS, SH6 } },
  3563 +{ "clrldi.", MD(30,0,1), MDSH_MASK, PPC64, { RA, RS, MB6 } },
  3564 +{ "rldicl.", MD(30,0,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
  3565 +
  3566 +{ "rldicr", MD(30,1,0), MD_MASK, PPC64, { RA, RS, SH6, ME6 } },
  3567 +{ "rldicr.", MD(30,1,1), MD_MASK, PPC64, { RA, RS, SH6, ME6 } },
  3568 +
  3569 +{ "rldic", MD(30,2,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
  3570 +{ "rldic.", MD(30,2,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
  3571 +
  3572 +{ "rldimi", MD(30,3,0), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
  3573 +{ "rldimi.", MD(30,3,1), MD_MASK, PPC64, { RA, RS, SH6, MB6 } },
  3574 +
  3575 +{ "rotld", MDS(30,8,0), MDSMB_MASK, PPC64, { RA, RS, RB } },
  3576 +{ "rldcl", MDS(30,8,0), MDS_MASK, PPC64, { RA, RS, RB, MB6 } },
  3577 +{ "rotld.", MDS(30,8,1), MDSMB_MASK, PPC64, { RA, RS, RB } },
  3578 +{ "rldcl.", MDS(30,8,1), MDS_MASK, PPC64, { RA, RS, RB, MB6 } },
  3579 +
  3580 +{ "rldcr", MDS(30,9,0), MDS_MASK, PPC64, { RA, RS, RB, ME6 } },
  3581 +{ "rldcr.", MDS(30,9,1), MDS_MASK, PPC64, { RA, RS, RB, ME6 } },
  3582 +
  3583 +{ "cmpw", XOPL(31,0,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } },
  3584 +{ "cmpd", XOPL(31,0,1), XCMPL_MASK, PPC64, { OBF, RA, RB } },
2215 3585 { "cmp", X(31,0), XCMP_MASK, PPC, { BF, L, RA, RB } },
2216   -{ "cmp", X(31,0), XCMPL_MASK, POWER, { BF, RA, RB } },
2217   -
2218   -{ "twlgt", XTO(31,4,TOLGT), XTO_MASK, PPC, { RA, RB } },
2219   -{ "tlgt", XTO(31,4,TOLGT), XTO_MASK, POWER, { RA, RB } },
2220   -{ "twllt", XTO(31,4,TOLLT), XTO_MASK, PPC, { RA, RB } },
2221   -{ "tllt", XTO(31,4,TOLLT), XTO_MASK, POWER, { RA, RB } },
2222   -{ "tweq", XTO(31,4,TOEQ), XTO_MASK, PPC, { RA, RB } },
2223   -{ "teq", XTO(31,4,TOEQ), XTO_MASK, POWER, { RA, RB } },
2224   -{ "twlge", XTO(31,4,TOLGE), XTO_MASK, PPC, { RA, RB } },
2225   -{ "tlge", XTO(31,4,TOLGE), XTO_MASK, POWER, { RA, RB } },
2226   -{ "twlnl", XTO(31,4,TOLNL), XTO_MASK, PPC, { RA, RB } },
2227   -{ "tlnl", XTO(31,4,TOLNL), XTO_MASK, POWER, { RA, RB } },
2228   -{ "twlle", XTO(31,4,TOLLE), XTO_MASK, PPC, { RA, RB } },
2229   -{ "tlle", XTO(31,4,TOLLE), XTO_MASK, POWER, { RA, RB } },
2230   -{ "twlng", XTO(31,4,TOLNG), XTO_MASK, PPC, { RA, RB } },
2231   -{ "tlng", XTO(31,4,TOLNG), XTO_MASK, POWER, { RA, RB } },
2232   -{ "twgt", XTO(31,4,TOGT), XTO_MASK, PPC, { RA, RB } },
2233   -{ "tgt", XTO(31,4,TOGT), XTO_MASK, POWER, { RA, RB } },
2234   -{ "twge", XTO(31,4,TOGE), XTO_MASK, PPC, { RA, RB } },
2235   -{ "tge", XTO(31,4,TOGE), XTO_MASK, POWER, { RA, RB } },
2236   -{ "twnl", XTO(31,4,TONL), XTO_MASK, PPC, { RA, RB } },
2237   -{ "tnl", XTO(31,4,TONL), XTO_MASK, POWER, { RA, RB } },
2238   -{ "twlt", XTO(31,4,TOLT), XTO_MASK, PPC, { RA, RB } },
2239   -{ "tlt", XTO(31,4,TOLT), XTO_MASK, POWER, { RA, RB } },
2240   -{ "twle", XTO(31,4,TOLE), XTO_MASK, PPC, { RA, RB } },
2241   -{ "tle", XTO(31,4,TOLE), XTO_MASK, POWER, { RA, RB } },
2242   -{ "twng", XTO(31,4,TONG), XTO_MASK, PPC, { RA, RB } },
2243   -{ "tng", XTO(31,4,TONG), XTO_MASK, POWER, { RA, RB } },
2244   -{ "twne", XTO(31,4,TONE), XTO_MASK, PPC, { RA, RB } },
2245   -{ "tne", XTO(31,4,TONE), XTO_MASK, POWER, { RA, RB } },
2246   -{ "trap", XTO(31,4,TOU), 0xffffffff, PPC, { 0 } },
2247   -{ "tw", X(31,4), X_MASK, PPC, { TO, RA, RB } },
2248   -{ "t", X(31,4), X_MASK, POWER, { TO, RA, RB } },
2249   -
2250   -{ "subfc", XO(31,8,0,0), XO_MASK, PPC, { RT, RA, RB } },
2251   -{ "sf", XO(31,8,0,0), XO_MASK, POWER, { RT, RA, RB } },
  3586 +{ "cmp", X(31,0), XCMPL_MASK, PWRCOM, { BF, RA, RB } },
  3587 +
  3588 +{ "twlgt", XTO(31,4,TOLGT), XTO_MASK, PPCCOM, { RA, RB } },
  3589 +{ "tlgt", XTO(31,4,TOLGT), XTO_MASK, PWRCOM, { RA, RB } },
  3590 +{ "twllt", XTO(31,4,TOLLT), XTO_MASK, PPCCOM, { RA, RB } },
  3591 +{ "tllt", XTO(31,4,TOLLT), XTO_MASK, PWRCOM, { RA, RB } },
  3592 +{ "tweq", XTO(31,4,TOEQ), XTO_MASK, PPCCOM, { RA, RB } },
  3593 +{ "teq", XTO(31,4,TOEQ), XTO_MASK, PWRCOM, { RA, RB } },
  3594 +{ "twlge", XTO(31,4,TOLGE), XTO_MASK, PPCCOM, { RA, RB } },
  3595 +{ "tlge", XTO(31,4,TOLGE), XTO_MASK, PWRCOM, { RA, RB } },
  3596 +{ "twlnl", XTO(31,4,TOLNL), XTO_MASK, PPCCOM, { RA, RB } },
  3597 +{ "tlnl", XTO(31,4,TOLNL), XTO_MASK, PWRCOM, { RA, RB } },
  3598 +{ "twlle", XTO(31,4,TOLLE), XTO_MASK, PPCCOM, { RA, RB } },
  3599 +{ "tlle", XTO(31,4,TOLLE), XTO_MASK, PWRCOM, { RA, RB } },
  3600 +{ "twlng", XTO(31,4,TOLNG), XTO_MASK, PPCCOM, { RA, RB } },
  3601 +{ "tlng", XTO(31,4,TOLNG), XTO_MASK, PWRCOM, { RA, RB } },
  3602 +{ "twgt", XTO(31,4,TOGT), XTO_MASK, PPCCOM, { RA, RB } },
  3603 +{ "tgt", XTO(31,4,TOGT), XTO_MASK, PWRCOM, { RA, RB } },
  3604 +{ "twge", XTO(31,4,TOGE), XTO_MASK, PPCCOM, { RA, RB } },
  3605 +{ "tge", XTO(31,4,TOGE), XTO_MASK, PWRCOM, { RA, RB } },
  3606 +{ "twnl", XTO(31,4,TONL), XTO_MASK, PPCCOM, { RA, RB } },
  3607 +{ "tnl", XTO(31,4,TONL), XTO_MASK, PWRCOM, { RA, RB } },
  3608 +{ "twlt", XTO(31,4,TOLT), XTO_MASK, PPCCOM, { RA, RB } },
  3609 +{ "tlt", XTO(31,4,TOLT), XTO_MASK, PWRCOM, { RA, RB } },
  3610 +{ "twle", XTO(31,4,TOLE), XTO_MASK, PPCCOM, { RA, RB } },
  3611 +{ "tle", XTO(31,4,TOLE), XTO_MASK, PWRCOM, { RA, RB } },
  3612 +{ "twng", XTO(31,4,TONG), XTO_MASK, PPCCOM, { RA, RB } },
  3613 +{ "tng", XTO(31,4,TONG), XTO_MASK, PWRCOM, { RA, RB } },
  3614 +{ "twne", XTO(31,4,TONE), XTO_MASK, PPCCOM, { RA, RB } },
  3615 +{ "tne", XTO(31,4,TONE), XTO_MASK, PWRCOM, { RA, RB } },
  3616 +{ "trap", XTO(31,4,TOU), 0xffffffff, PPCCOM, { 0 } },
  3617 +{ "tw", X(31,4), X_MASK, PPCCOM, { TO, RA, RB } },
  3618 +{ "t", X(31,4), X_MASK, PWRCOM, { TO, RA, RB } },
  3619 +
  3620 +{ "subfc", XO(31,8,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
  3621 +{ "sf", XO(31,8,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
2252 3622 { "subc", XO(31,8,0,0), XO_MASK, PPC, { RT, RB, RA } },
2253   -{ "subfc.", XO(31,8,0,1), XO_MASK, PPC, { RT, RA, RB } },
2254   -{ "sf.", XO(31,8,0,1), XO_MASK, POWER, { RT, RA, RB } },
2255   -{ "subc.", XO(31,8,0,1), XO_MASK, PPC, { RT, RB, RA } },
2256   -{ "subfco", XO(31,8,1,0), XO_MASK, PPC, { RT, RA, RB } },
2257   -{ "sfo", XO(31,8,1,0), XO_MASK, POWER, { RT, RA, RB } },
  3623 +{ "subfc.", XO(31,8,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
  3624 +{ "sf.", XO(31,8,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
  3625 +{ "subc.", XO(31,8,0,1), XO_MASK, PPCCOM, { RT, RB, RA } },
  3626 +{ "subfco", XO(31,8,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
  3627 +{ "sfo", XO(31,8,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
2258 3628 { "subco", XO(31,8,1,0), XO_MASK, PPC, { RT, RB, RA } },
2259   -{ "subfco.", XO(31,8,1,1), XO_MASK, PPC, { RT, RA, RB } },
2260   -{ "sfo.", XO(31,8,1,1), XO_MASK, POWER, { RT, RA, RB } },
  3629 +{ "subfco.", XO(31,8,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
  3630 +{ "sfo.", XO(31,8,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
2261 3631 { "subco.", XO(31,8,1,1), XO_MASK, PPC, { RT, RB, RA } },
2262 3632  
2263   -{ "mulhdu", XO(31,9,0,0), XO_MASK, PPC|B64, { RT, RA, RB } },
2264   -{ "mulhdu.", XO(31,9,0,1), XO_MASK, PPC|B64, { RT, RA, RB } },
  3633 +{ "mulhdu", XO(31,9,0,0), XO_MASK, PPC64, { RT, RA, RB } },
  3634 +{ "mulhdu.", XO(31,9,0,1), XO_MASK, PPC64, { RT, RA, RB } },
2265 3635  
2266   -{ "addc", XO(31,10,0,0), XO_MASK, PPC, { RT, RA, RB } },
2267   -{ "a", XO(31,10,0,0), XO_MASK, POWER, { RT, RA, RB } },
2268   -{ "addc.", XO(31,10,0,1), XO_MASK, PPC, { RT, RA, RB } },
2269   -{ "a.", XO(31,10,0,1), XO_MASK, POWER, { RT, RA, RB } },
2270   -{ "addco", XO(31,10,1,0), XO_MASK, PPC, { RT, RA, RB } },
2271   -{ "ao", XO(31,10,1,0), XO_MASK, POWER, { RT, RA, RB } },
2272   -{ "addco.", XO(31,10,1,1), XO_MASK, PPC, { RT, RA, RB } },
2273   -{ "ao.", XO(31,10,1,1), XO_MASK, POWER, { RT, RA, RB } },
  3636 +{ "addc", XO(31,10,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
  3637 +{ "a", XO(31,10,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
  3638 +{ "addc.", XO(31,10,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
  3639 +{ "a.", XO(31,10,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
  3640 +{ "addco", XO(31,10,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
  3641 +{ "ao", XO(31,10,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
  3642 +{ "addco.", XO(31,10,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
  3643 +{ "ao.", XO(31,10,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
2274 3644  
2275 3645 { "mulhwu", XO(31,11,0,0), XO_MASK, PPC, { RT, RA, RB } },
2276 3646 { "mulhwu.", XO(31,11,0,1), XO_MASK, PPC, { RT, RA, RB } },
2277 3647  
2278   -{ "mfcr", X(31,19), XRARB_MASK, POWER|PPC, { RT } },
  3648 +{ "isellt", X(31,15), X_MASK, PPCISEL, { RT, RA, RB } },
  3649 +{ "iselgt", X(31,47), X_MASK, PPCISEL, { RT, RA, RB } },
  3650 +{ "iseleq", X(31,79), X_MASK, PPCISEL, { RT, RA, RB } },
  3651 +{ "isel", XISEL(31,15), XISEL_MASK, PPCISEL, { RT, RA, RB, CRB } },
  3652 +
  3653 +{ "mfocrf", XFXM(31,19,0,1), XFXFXM_MASK, COM, { RT, FXM } },
  3654 +{ "mfcr", X(31,19), XRARB_MASK, NOPOWER4, { RT } },
  3655 +{ "mfcr", X(31,19), XFXFXM_MASK, POWER4, { RT, FXM4 } },
  3656 +
  3657 +{ "lwarx", X(31,20), X_MASK, PPC, { RT, RA0, RB } },
  3658 +
  3659 +{ "ldx", X(31,21), X_MASK, PPC64, { RT, RA0, RB } },
  3660 +
  3661 +{ "icbt", X(31,22), X_MASK, BOOKE|PPCE300, { CT, RA, RB } },
  3662 +{ "icbt", X(31,262), XRT_MASK, PPC403, { RA, RB } },
2279 3663  
2280   -{ "lwarx", X(31,20), X_MASK, PPC, { RT, RA, RB } },
  3664 +{ "lwzx", X(31,23), X_MASK, PPCCOM, { RT, RA0, RB } },
  3665 +{ "lx", X(31,23), X_MASK, PWRCOM, { RT, RA, RB } },
2281 3666  
2282   -{ "ldx", X(31,21), X_MASK, PPC|B64, { RT, RA, RB } },
  3667 +{ "slw", XRC(31,24,0), X_MASK, PPCCOM, { RA, RS, RB } },
  3668 +{ "sl", XRC(31,24,0), X_MASK, PWRCOM, { RA, RS, RB } },
  3669 +{ "slw.", XRC(31,24,1), X_MASK, PPCCOM, { RA, RS, RB } },
  3670 +{ "sl.", XRC(31,24,1), X_MASK, PWRCOM, { RA, RS, RB } },
2283 3671  
2284   -{ "lwzx", X(31,23), X_MASK, PPC, { RT, RA, RB } },
2285   -{ "lx", X(31,23), X_MASK, POWER, { RT, RA, RB } },
  3672 +{ "cntlzw", XRC(31,26,0), XRB_MASK, PPCCOM, { RA, RS } },
  3673 +{ "cntlz", XRC(31,26,0), XRB_MASK, PWRCOM, { RA, RS } },
  3674 +{ "cntlzw.", XRC(31,26,1), XRB_MASK, PPCCOM, { RA, RS } },
  3675 +{ "cntlz.", XRC(31,26,1), XRB_MASK, PWRCOM, { RA, RS } },
2286 3676  
2287   -{ "slw", XRC(31,24,0), X_MASK, PPC, { RA, RS, RB } },
2288   -{ "sl", XRC(31,24,0), X_MASK, POWER, { RA, RS, RB } },
2289   -{ "slw.", XRC(31,24,1), X_MASK, PPC, { RA, RS, RB } },
2290   -{ "sl.", XRC(31,24,1), X_MASK, POWER, { RA, RS, RB } },
  3677 +{ "sld", XRC(31,27,0), X_MASK, PPC64, { RA, RS, RB } },
  3678 +{ "sld.", XRC(31,27,1), X_MASK, PPC64, { RA, RS, RB } },
2291 3679  
2292   -{ "cntlzw", XRC(31,26,0), XRB_MASK, PPC, { RA, RS } },
2293   -{ "cntlz", XRC(31,26,0), XRB_MASK, POWER, { RA, RS } },
2294   -{ "cntlzw.", XRC(31,26,1), XRB_MASK, PPC, { RA, RS } },
2295   -{ "cntlz.", XRC(31,26,1), XRB_MASK, POWER, { RA, RS } },
  3680 +{ "and", XRC(31,28,0), X_MASK, COM, { RA, RS, RB } },
  3681 +{ "and.", XRC(31,28,1), X_MASK, COM, { RA, RS, RB } },
2296 3682  
2297   -{ "sld", XRC(31,27,0), X_MASK, PPC|B64, { RA, RS, RB } },
2298   -{ "sld.", XRC(31,27,1), X_MASK, PPC|B64, { RA, RS, RB } },
  3683 +{ "maskg", XRC(31,29,0), X_MASK, M601, { RA, RS, RB } },
  3684 +{ "maskg.", XRC(31,29,1), X_MASK, M601, { RA, RS, RB } },
2299 3685  
2300   -{ "and", XRC(31,28,0), X_MASK, PPC|POWER, { RA, RS, RB } },
2301   -{ "and.", XRC(31,28,1), X_MASK, PPC|POWER, { RA, RS, RB } },
  3686 +{ "icbte", X(31,30), X_MASK, BOOKE64, { CT, RA, RB } },
2302 3687  
2303   -{ "maskg", XRC(31,29,0), X_MASK, POWER|M601, { RA, RS, RB } },
2304   -{ "maskg.", XRC(31,29,1), X_MASK, POWER|M601, { RA, RS, RB } },
  3688 +{ "lwzxe", X(31,31), X_MASK, BOOKE64, { RT, RA0, RB } },
2305 3689  
2306   -{ "cmplw", XCMPL(31,32,0), XCMPL_MASK, PPC, { OBF, RA, RB } },
2307   -{ "cmpld", XCMPL(31,32,1), XCMPL_MASK, PPC|B64, { OBF, RA, RB } },
2308   -{ "cmpl", X(31,32), XCMP_MASK, PPC, { BF, L, RA, RB } },
2309   -{ "cmpl", X(31,32), XCMPL_MASK, POWER, { BF, RA, RB } },
  3690 +{ "cmplw", XOPL(31,32,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } },
  3691 +{ "cmpld", XOPL(31,32,1), XCMPL_MASK, PPC64, { OBF, RA, RB } },
  3692 +{ "cmpl", X(31,32), XCMP_MASK, PPC, { BF, L, RA, RB } },
  3693 +{ "cmpl", X(31,32), XCMPL_MASK, PWRCOM, { BF, RA, RB } },
2310 3694  
2311 3695 { "subf", XO(31,40,0,0), XO_MASK, PPC, { RT, RA, RB } },
2312 3696 { "sub", XO(31,40,0,0), XO_MASK, PPC, { RT, RB, RA } },
... ... @@ -2317,278 +3701,558 @@ const struct powerpc_opcode powerpc_opcodes[] = {
2317 3701 { "subfo.", XO(31,40,1,1), XO_MASK, PPC, { RT, RA, RB } },
2318 3702 { "subo.", XO(31,40,1,1), XO_MASK, PPC, { RT, RB, RA } },
2319 3703  
2320   -{ "ldux", X(31,53), X_MASK, PPC|B64, { RT, RAL, RB } },
  3704 +{ "ldux", X(31,53), X_MASK, PPC64, { RT, RAL, RB } },
2321 3705  
2322 3706 { "dcbst", X(31,54), XRT_MASK, PPC, { RA, RB } },
2323 3707  
2324   -{ "lwzux", X(31,55), X_MASK, PPC, { RT, RAL, RB } },
2325   -{ "lux", X(31,55), X_MASK, POWER, { RT, RA, RB } },
2326   -
2327   -{ "cntlzd", XRC(31,58,0), XRB_MASK, PPC|B64, { RA, RS } },
2328   -{ "cntlzd.", XRC(31,58,1), XRB_MASK, PPC|B64, { RA, RS } },
2329   -
2330   -{ "andc", XRC(31,60,0), X_MASK, PPC|POWER, { RA, RS, RB } },
2331   -{ "andc.", XRC(31,60,1), X_MASK, PPC|POWER, { RA, RS, RB } },
2332   -
2333   -{ "tdlgt", XTO(31,68,TOLGT), XTO_MASK, PPC|B64, { RA, RB } },
2334   -{ "tdllt", XTO(31,68,TOLLT), XTO_MASK, PPC|B64, { RA, RB } },
2335   -{ "tdeq", XTO(31,68,TOEQ), XTO_MASK, PPC|B64, { RA, RB } },
2336   -{ "tdlge", XTO(31,68,TOLGE), XTO_MASK, PPC|B64, { RA, RB } },
2337   -{ "tdlnl", XTO(31,68,TOLNL), XTO_MASK, PPC|B64, { RA, RB } },
2338   -{ "tdlle", XTO(31,68,TOLLE), XTO_MASK, PPC|B64, { RA, RB } },
2339   -{ "tdlng", XTO(31,68,TOLNG), XTO_MASK, PPC|B64, { RA, RB } },
2340   -{ "tdgt", XTO(31,68,TOGT), XTO_MASK, PPC|B64, { RA, RB } },
2341   -{ "tdge", XTO(31,68,TOGE), XTO_MASK, PPC|B64, { RA, RB } },
2342   -{ "tdnl", XTO(31,68,TONL), XTO_MASK, PPC|B64, { RA, RB } },
2343   -{ "tdlt", XTO(31,68,TOLT), XTO_MASK, PPC|B64, { RA, RB } },
2344   -{ "tdle", XTO(31,68,TOLE), XTO_MASK, PPC|B64, { RA, RB } },
2345   -{ "tdng", XTO(31,68,TONG), XTO_MASK, PPC|B64, { RA, RB } },
2346   -{ "tdne", XTO(31,68,TONE), XTO_MASK, PPC|B64, { RA, RB } },
2347   -{ "td", X(31,68), X_MASK, PPC|B64, { TO, RA, RB } },
2348   -
2349   -{ "mulhd", XO(31,73,0,0), XO_MASK, PPC|B64, { RT, RA, RB } },
2350   -{ "mulhd.", XO(31,73,0,1), XO_MASK, PPC|B64, { RT, RA, RB } },
  3708 +{ "lwzux", X(31,55), X_MASK, PPCCOM, { RT, RAL, RB } },
  3709 +{ "lux", X(31,55), X_MASK, PWRCOM, { RT, RA, RB } },
  3710 +
  3711 +{ "dcbste", X(31,62), XRT_MASK, BOOKE64, { RA, RB } },
  3712 +
  3713 +{ "lwzuxe", X(31,63), X_MASK, BOOKE64, { RT, RAL, RB } },
  3714 +
  3715 +{ "cntlzd", XRC(31,58,0), XRB_MASK, PPC64, { RA, RS } },
  3716 +{ "cntlzd.", XRC(31,58,1), XRB_MASK, PPC64, { RA, RS } },
  3717 +
  3718 +{ "andc", XRC(31,60,0), X_MASK, COM, { RA, RS, RB } },
  3719 +{ "andc.", XRC(31,60,1), X_MASK, COM, { RA, RS, RB } },
  3720 +
  3721 +{ "tdlgt", XTO(31,68,TOLGT), XTO_MASK, PPC64, { RA, RB } },
  3722 +{ "tdllt", XTO(31,68,TOLLT), XTO_MASK, PPC64, { RA, RB } },
  3723 +{ "tdeq", XTO(31,68,TOEQ), XTO_MASK, PPC64, { RA, RB } },
  3724 +{ "tdlge", XTO(31,68,TOLGE), XTO_MASK, PPC64, { RA, RB } },
  3725 +{ "tdlnl", XTO(31,68,TOLNL), XTO_MASK, PPC64, { RA, RB } },
  3726 +{ "tdlle", XTO(31,68,TOLLE), XTO_MASK, PPC64, { RA, RB } },
  3727 +{ "tdlng", XTO(31,68,TOLNG), XTO_MASK, PPC64, { RA, RB } },
  3728 +{ "tdgt", XTO(31,68,TOGT), XTO_MASK, PPC64, { RA, RB } },
  3729 +{ "tdge", XTO(31,68,TOGE), XTO_MASK, PPC64, { RA, RB } },
  3730 +{ "tdnl", XTO(31,68,TONL), XTO_MASK, PPC64, { RA, RB } },
  3731 +{ "tdlt", XTO(31,68,TOLT), XTO_MASK, PPC64, { RA, RB } },
  3732 +{ "tdle", XTO(31,68,TOLE), XTO_MASK, PPC64, { RA, RB } },
  3733 +{ "tdng", XTO(31,68,TONG), XTO_MASK, PPC64, { RA, RB } },
  3734 +{ "tdne", XTO(31,68,TONE), XTO_MASK, PPC64, { RA, RB } },
  3735 +{ "td", X(31,68), X_MASK, PPC64, { TO, RA, RB } },
  3736 +
  3737 +{ "mulhd", XO(31,73,0,0), XO_MASK, PPC64, { RT, RA, RB } },
  3738 +{ "mulhd.", XO(31,73,0,1), XO_MASK, PPC64, { RT, RA, RB } },
2351 3739  
2352 3740 { "mulhw", XO(31,75,0,0), XO_MASK, PPC, { RT, RA, RB } },
2353 3741 { "mulhw.", XO(31,75,0,1), XO_MASK, PPC, { RT, RA, RB } },
2354 3742  
2355   -{ "mfmsr", X(31,83), XRARB_MASK, PPC|POWER, { RT } },
  3743 +{ "dlmzb", XRC(31,78,0), X_MASK, PPC403|PPC440, { RA, RS, RB } },
  3744 +{ "dlmzb.", XRC(31,78,1), X_MASK, PPC403|PPC440, { RA, RS, RB } },
2356 3745  
2357   -{ "ldarx", X(31,84), X_MASK, PPC|B64, { RT, RA, RB } },
  3746 +{ "mtsrd", X(31,82), XRB_MASK|(1<<20), PPC64, { SR, RS } },
  3747 +
  3748 +{ "mfmsr", X(31,83), XRARB_MASK, COM, { RT } },
  3749 +
  3750 +{ "ldarx", X(31,84), X_MASK, PPC64, { RT, RA0, RB } },
2358 3751  
2359 3752 { "dcbf", X(31,86), XRT_MASK, PPC, { RA, RB } },
2360 3753  
2361   -{ "lbzx", X(31,87), X_MASK, PPC|POWER, { RT, RA, RB } },
  3754 +{ "lbzx", X(31,87), X_MASK, COM, { RT, RA0, RB } },
  3755 +
  3756 +{ "dcbfe", X(31,94), XRT_MASK, BOOKE64, { RA, RB } },
  3757 +
  3758 +{ "lbzxe", X(31,95), X_MASK, BOOKE64, { RT, RA0, RB } },
  3759 +
  3760 +{ "neg", XO(31,104,0,0), XORB_MASK, COM, { RT, RA } },
  3761 +{ "neg.", XO(31,104,0,1), XORB_MASK, COM, { RT, RA } },
  3762 +{ "nego", XO(31,104,1,0), XORB_MASK, COM, { RT, RA } },
  3763 +{ "nego.", XO(31,104,1,1), XORB_MASK, COM, { RT, RA } },
  3764 +
  3765 +{ "mul", XO(31,107,0,0), XO_MASK, M601, { RT, RA, RB } },
  3766 +{ "mul.", XO(31,107,0,1), XO_MASK, M601, { RT, RA, RB } },
  3767 +{ "mulo", XO(31,107,1,0), XO_MASK, M601, { RT, RA, RB } },
  3768 +{ "mulo.", XO(31,107,1,1), XO_MASK, M601, { RT, RA, RB } },
  3769 +
  3770 +{ "mtsrdin", X(31,114), XRA_MASK, PPC64, { RS, RB } },
  3771 +
  3772 +{ "clf", X(31,118), XTO_MASK, POWER, { RA, RB } },
  3773 +
  3774 +{ "lbzux", X(31,119), X_MASK, COM, { RT, RAL, RB } },
  3775 +
  3776 +{ "popcntb", X(31,122), XRB_MASK, POWER5, { RA, RS } },
  3777 +
  3778 +{ "not", XRC(31,124,0), X_MASK, COM, { RA, RS, RBS } },
  3779 +{ "nor", XRC(31,124,0), X_MASK, COM, { RA, RS, RB } },
  3780 +{ "not.", XRC(31,124,1), X_MASK, COM, { RA, RS, RBS } },
  3781 +{ "nor.", XRC(31,124,1), X_MASK, COM, { RA, RS, RB } },
  3782 +
  3783 +{ "lwarxe", X(31,126), X_MASK, BOOKE64, { RT, RA0, RB } },
  3784 +
  3785 +{ "lbzuxe", X(31,127), X_MASK, BOOKE64, { RT, RAL, RB } },
  3786 +
  3787 +{ "wrtee", X(31,131), XRARB_MASK, PPC403 | BOOKE, { RS } },
  3788 +
  3789 +{ "dcbtstls",X(31,134), X_MASK, PPCCHLK, { CT, RA, RB }},
  3790 +
  3791 +{ "subfe", XO(31,136,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
  3792 +{ "sfe", XO(31,136,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
  3793 +{ "subfe.", XO(31,136,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
  3794 +{ "sfe.", XO(31,136,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
  3795 +{ "subfeo", XO(31,136,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
  3796 +{ "sfeo", XO(31,136,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
  3797 +{ "subfeo.", XO(31,136,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
  3798 +{ "sfeo.", XO(31,136,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
  3799 +
  3800 +{ "adde", XO(31,138,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
  3801 +{ "ae", XO(31,138,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
  3802 +{ "adde.", XO(31,138,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
  3803 +{ "ae.", XO(31,138,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
  3804 +{ "addeo", XO(31,138,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
  3805 +{ "aeo", XO(31,138,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
  3806 +{ "addeo.", XO(31,138,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
  3807 +{ "aeo.", XO(31,138,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
  3808 +
  3809 +{ "dcbtstlse",X(31,142),X_MASK, PPCCHLK64, { CT, RA, RB }},
  3810 +
  3811 +{ "mtocrf", XFXM(31,144,0,1), XFXFXM_MASK, COM, { FXM, RS } },
  3812 +{ "mtcr", XFXM(31,144,0xff,0), XRARB_MASK, COM, { RS }},
  3813 +{ "mtcrf", X(31,144), XFXFXM_MASK, COM, { FXM, RS } },
  3814 +
  3815 +{ "mtmsr", X(31,146), XRARB_MASK, COM, { RS } },
  3816 +
  3817 +{ "stdx", X(31,149), X_MASK, PPC64, { RS, RA0, RB } },
  3818 +
  3819 +{ "stwcx.", XRC(31,150,1), X_MASK, PPC, { RS, RA0, RB } },
  3820 +
  3821 +{ "stwx", X(31,151), X_MASK, PPCCOM, { RS, RA0, RB } },
  3822 +{ "stx", X(31,151), X_MASK, PWRCOM, { RS, RA, RB } },
  3823 +
  3824 +{ "stwcxe.", XRC(31,158,1), X_MASK, BOOKE64, { RS, RA0, RB } },
  3825 +
  3826 +{ "stwxe", X(31,159), X_MASK, BOOKE64, { RS, RA0, RB } },
2362 3827  
2363   -{ "neg", XO(31,104,0,0), XORB_MASK, PPC|POWER, { RT, RA } },
2364   -{ "neg.", XO(31,104,0,1), XORB_MASK, PPC|POWER, { RT, RA } },
2365   -{ "nego", XO(31,104,1,0), XORB_MASK, PPC|POWER, { RT, RA } },
2366   -{ "nego.", XO(31,104,1,1), XORB_MASK, PPC|POWER, { RT, RA } },
  3828 +{ "slq", XRC(31,152,0), X_MASK, M601, { RA, RS, RB } },
  3829 +{ "slq.", XRC(31,152,1), X_MASK, M601, { RA, RS, RB } },
2367 3830  
2368   -{ "mul", XO(31,107,0,0), XO_MASK, POWER|M601, { RT, RA, RB } },
2369   -{ "mul.", XO(31,107,0,1), XO_MASK, POWER|M601, { RT, RA, RB } },
2370   -{ "mulo", XO(31,107,1,0), XO_MASK, POWER|M601, { RT, RA, RB } },
2371   -{ "mulo.", XO(31,107,1,1), XO_MASK, POWER|M601, { RT, RA, RB } },
  3831 +{ "sle", XRC(31,153,0), X_MASK, M601, { RA, RS, RB } },
  3832 +{ "sle.", XRC(31,153,1), X_MASK, M601, { RA, RS, RB } },
2372 3833  
2373   -{ "clf", X(31,118), XRB_MASK, POWER, { RT, RA } },
  3834 +{ "wrteei", X(31,163), XE_MASK, PPC403 | BOOKE, { E } },
2374 3835  
2375   -{ "lbzux", X(31,119), X_MASK, PPC|POWER, { RT, RAL, RB } },
2376   -
2377   -{ "not", XRC(31,124,0), X_MASK, PPC|POWER, { RA, RS, RBS } },
2378   -{ "nor", XRC(31,124,0), X_MASK, PPC|POWER, { RA, RS, RB } },
2379   -{ "not.", XRC(31,124,1), X_MASK, PPC|POWER, { RA, RS, RBS } },
2380   -{ "nor.", XRC(31,124,1), X_MASK, PPC|POWER, { RA, RS, RB } },
2381   -
2382   -{ "subfe", XO(31,136,0,0), XO_MASK, PPC, { RT, RA, RB } },
2383   -{ "sfe", XO(31,136,0,0), XO_MASK, POWER, { RT, RA, RB } },
2384   -{ "subfe.", XO(31,136,0,1), XO_MASK, PPC, { RT, RA, RB } },
2385   -{ "sfe.", XO(31,136,0,1), XO_MASK, POWER, { RT, RA, RB } },
2386   -{ "subfeo", XO(31,136,1,0), XO_MASK, PPC, { RT, RA, RB } },
2387   -{ "sfeo", XO(31,136,1,0), XO_MASK, POWER, { RT, RA, RB } },
2388   -{ "subfeo.", XO(31,136,1,1), XO_MASK, PPC, { RT, RA, RB } },
2389   -{ "sfeo.", XO(31,136,1,1), XO_MASK, POWER, { RT, RA, RB } },
2390   -
2391   -{ "adde", XO(31,138,0,0), XO_MASK, PPC, { RT, RA, RB } },
2392   -{ "ae", XO(31,138,0,0), XO_MASK, POWER, { RT, RA, RB } },
2393   -{ "adde.", XO(31,138,0,1), XO_MASK, PPC, { RT, RA, RB } },
2394   -{ "ae.", XO(31,138,0,1), XO_MASK, POWER, { RT, RA, RB } },
2395   -{ "addeo", XO(31,138,1,0), XO_MASK, PPC, { RT, RA, RB } },
2396   -{ "aeo", XO(31,138,1,0), XO_MASK, POWER, { RT, RA, RB } },
2397   -{ "addeo.", XO(31,138,1,1), XO_MASK, PPC, { RT, RA, RB } },
2398   -{ "aeo.", XO(31,138,1,1), XO_MASK, POWER, { RT, RA, RB } },
2399   -
2400   -{ "mtcr", XFXM(31,144,0xff), XFXFXM_MASK|FXM_MASK, PPC|POWER, { RS }},
2401   -{ "mtcrf", X(31,144), XFXFXM_MASK, PPC|POWER, { FXM, RS } },
  3836 +{ "dcbtls", X(31,166), X_MASK, PPCCHLK, { CT, RA, RB }},
  3837 +{ "dcbtlse", X(31,174), X_MASK, PPCCHLK64, { CT, RA, RB }},
2402 3838  
2403   -{ "mtmsr", X(31,146), XRARB_MASK, PPC|POWER, { RS } },
2404   -
2405   -{ "stdx", X(31,149), X_MASK, PPC|B64, { RS, RA, RB } },
2406   -
2407   -{ "stwcx.", XRC(31,150,1), X_MASK, PPC, { RS, RA, RB } },
2408   -
2409   -{ "stwx", X(31,151), X_MASK, PPC, { RS, RA, RB } },
2410   -{ "stx", X(31,151), X_MASK, POWER, { RS, RA, RB } },
2411   -
2412   -{ "slq", XRC(31,152,0), X_MASK, POWER|M601, { RA, RS, RB } },
2413   -{ "slq.", XRC(31,152,1), X_MASK, POWER|M601, { RA, RS, RB } },
2414   -
2415   -{ "sle", XRC(31,153,0), X_MASK, POWER|M601, { RA, RS, RB } },
2416   -{ "sle.", XRC(31,153,1), X_MASK, POWER|M601, { RA, RS, RB } },
2417   -
2418   -{ "stdux", X(31,181), X_MASK, PPC|B64, { RS, RAS, RB } },
2419   -
2420   -{ "stwux", X(31,183), X_MASK, PPC, { RS, RAS, RB } },
2421   -{ "stux", X(31,183), X_MASK, POWER, { RS, RA, RB } },
  3839 +{ "mtmsrd", X(31,178), XRLARB_MASK, PPC64, { RS, MTMSRD_L } },
2422 3840  
2423   -{ "sliq", XRC(31,184,0), X_MASK, POWER|M601, { RA, RS, SH } },
2424   -{ "sliq.", XRC(31,184,1), X_MASK, POWER|M601, { RA, RS, SH } },
  3841 +{ "stdux", X(31,181), X_MASK, PPC64, { RS, RAS, RB } },
2425 3842  
2426   -{ "subfze", XO(31,200,0,0), XORB_MASK, PPC, { RT, RA } },
2427   -{ "sfze", XO(31,200,0,0), XORB_MASK, POWER, { RT, RA } },
2428   -{ "subfze.", XO(31,200,0,1), XORB_MASK, PPC, { RT, RA } },
2429   -{ "sfze.", XO(31,200,0,1), XORB_MASK, POWER, { RT, RA } },
2430   -{ "subfzeo", XO(31,200,1,0), XORB_MASK, PPC, { RT, RA } },
2431   -{ "sfzeo", XO(31,200,1,0), XORB_MASK, POWER, { RT, RA } },
2432   -{ "subfzeo.",XO(31,200,1,1), XORB_MASK, PPC, { RT, RA } },
2433   -{ "sfzeo.", XO(31,200,1,1), XORB_MASK, POWER, { RT, RA } },
  3843 +{ "stwux", X(31,183), X_MASK, PPCCOM, { RS, RAS, RB } },
  3844 +{ "stux", X(31,183), X_MASK, PWRCOM, { RS, RA0, RB } },
2434 3845  
2435   -{ "addze", XO(31,202,0,0), XORB_MASK, PPC, { RT, RA } },
2436   -{ "aze", XO(31,202,0,0), XORB_MASK, POWER, { RT, RA } },
2437   -{ "addze.", XO(31,202,0,1), XORB_MASK, PPC, { RT, RA } },
2438   -{ "aze.", XO(31,202,0,1), XORB_MASK, POWER, { RT, RA } },
2439   -{ "addzeo", XO(31,202,1,0), XORB_MASK, PPC, { RT, RA } },
2440   -{ "azeo", XO(31,202,1,0), XORB_MASK, POWER, { RT, RA } },
2441   -{ "addzeo.", XO(31,202,1,1), XORB_MASK, PPC, { RT, RA } },
2442   -{ "azeo.", XO(31,202,1,1), XORB_MASK, POWER, { RT, RA } },
  3846 +{ "sliq", XRC(31,184,0), X_MASK, M601, { RA, RS, SH } },
  3847 +{ "sliq.", XRC(31,184,1), X_MASK, M601, { RA, RS, SH } },
2443 3848  
2444   -{ "mtsr", X(31,210), XRB_MASK|(1<<20), PPC|POWER|B32, { SR, RS } },
  3849 +{ "stwuxe", X(31,191), X_MASK, BOOKE64, { RS, RAS, RB } },
2445 3850  
2446   -{ "stdcx.", XRC(31,214,1), X_MASK, PPC|B64, { RS, RA, RB } },
  3851 +{ "subfze", XO(31,200,0,0), XORB_MASK, PPCCOM, { RT, RA } },
  3852 +{ "sfze", XO(31,200,0,0), XORB_MASK, PWRCOM, { RT, RA } },
  3853 +{ "subfze.", XO(31,200,0,1), XORB_MASK, PPCCOM, { RT, RA } },
  3854 +{ "sfze.", XO(31,200,0,1), XORB_MASK, PWRCOM, { RT, RA } },
  3855 +{ "subfzeo", XO(31,200,1,0), XORB_MASK, PPCCOM, { RT, RA } },
  3856 +{ "sfzeo", XO(31,200,1,0), XORB_MASK, PWRCOM, { RT, RA } },
  3857 +{ "subfzeo.",XO(31,200,1,1), XORB_MASK, PPCCOM, { RT, RA } },
  3858 +{ "sfzeo.", XO(31,200,1,1), XORB_MASK, PWRCOM, { RT, RA } },
2447 3859  
2448   -{ "stbx", X(31,215), X_MASK, PPC|POWER, { RS, RA, RB } },
  3860 +{ "addze", XO(31,202,0,0), XORB_MASK, PPCCOM, { RT, RA } },
  3861 +{ "aze", XO(31,202,0,0), XORB_MASK, PWRCOM, { RT, RA } },
  3862 +{ "addze.", XO(31,202,0,1), XORB_MASK, PPCCOM, { RT, RA } },
  3863 +{ "aze.", XO(31,202,0,1), XORB_MASK, PWRCOM, { RT, RA } },
  3864 +{ "addzeo", XO(31,202,1,0), XORB_MASK, PPCCOM, { RT, RA } },
  3865 +{ "azeo", XO(31,202,1,0), XORB_MASK, PWRCOM, { RT, RA } },
  3866 +{ "addzeo.", XO(31,202,1,1), XORB_MASK, PPCCOM, { RT, RA } },
  3867 +{ "azeo.", XO(31,202,1,1), XORB_MASK, PWRCOM, { RT, RA } },
2449 3868  
2450   -{ "sllq", XRC(31,216,0), X_MASK, POWER|M601, { RA, RS, RB } },
2451   -{ "sllq.", XRC(31,216,1), X_MASK, POWER|M601, { RA, RS, RB } },
  3869 +{ "mtsr", X(31,210), XRB_MASK|(1<<20), COM32, { SR, RS } },
2452 3870  
2453   -{ "sleq", XRC(31,217,0), X_MASK, POWER|M601, { RA, RS, RB } },
2454   -{ "sleq.", XRC(31,217,1), X_MASK, POWER|M601, { RA, RS, RB } },
  3871 +{ "stdcx.", XRC(31,214,1), X_MASK, PPC64, { RS, RA0, RB } },
2455 3872  
2456   -{ "subfme", XO(31,232,0,0), XORB_MASK, PPC, { RT, RA } },
2457   -{ "sfme", XO(31,232,0,0), XORB_MASK, POWER, { RT, RA } },
2458   -{ "subfme.", XO(31,232,0,1), XORB_MASK, PPC, { RT, RA } },
2459   -{ "sfme.", XO(31,232,0,1), XORB_MASK, POWER, { RT, RA } },
2460   -{ "subfmeo", XO(31,232,1,0), XORB_MASK, PPC, { RT, RA } },
2461   -{ "sfmeo", XO(31,232,1,0), XORB_MASK, POWER, { RT, RA } },
2462   -{ "subfmeo.",XO(31,232,1,1), XORB_MASK, PPC, { RT, RA } },
2463   -{ "sfmeo.", XO(31,232,1,1), XORB_MASK, POWER, { RT, RA } },
  3873 +{ "stbx", X(31,215), X_MASK, COM, { RS, RA0, RB } },
2464 3874  
2465   -{ "mulld", XO(31,233,0,0), XO_MASK, PPC|B64, { RT, RA, RB } },
2466   -{ "mulld.", XO(31,233,0,1), XO_MASK, PPC|B64, { RT, RA, RB } },
2467   -{ "mulldo", XO(31,233,1,0), XO_MASK, PPC|B64, { RT, RA, RB } },
2468   -{ "mulldo.", XO(31,233,1,1), XO_MASK, PPC|B64, { RT, RA, RB } },
  3875 +{ "sllq", XRC(31,216,0), X_MASK, M601, { RA, RS, RB } },
  3876 +{ "sllq.", XRC(31,216,1), X_MASK, M601, { RA, RS, RB } },
2469 3877  
2470   -{ "addme", XO(31,234,0,0), XORB_MASK, PPC, { RT, RA } },
2471   -{ "ame", XO(31,234,0,0), XORB_MASK, POWER, { RT, RA } },
2472   -{ "addme.", XO(31,234,0,1), XORB_MASK, PPC, { RT, RA } },
2473   -{ "ame.", XO(31,234,0,1), XORB_MASK, POWER, { RT, RA } },
2474   -{ "addmeo", XO(31,234,1,0), XORB_MASK, PPC, { RT, RA } },
2475   -{ "ameo", XO(31,234,1,0), XORB_MASK, POWER, { RT, RA } },
2476   -{ "addmeo.", XO(31,234,1,1), XORB_MASK, PPC, { RT, RA } },
2477   -{ "ameo.", XO(31,234,1,1), XORB_MASK, POWER, { RT, RA } },
2478   -
2479   -{ "mullw", XO(31,235,0,0), XO_MASK, PPC, { RT, RA, RB } },
2480   -{ "muls", XO(31,235,0,0), XO_MASK, POWER, { RT, RA, RB } },
2481   -{ "mullw.", XO(31,235,0,1), XO_MASK, PPC, { RT, RA, RB } },
2482   -{ "muls.", XO(31,235,0,1), XO_MASK, POWER, { RT, RA, RB } },
2483   -{ "mullwo", XO(31,235,1,0), XO_MASK, PPC, { RT, RA, RB } },
2484   -{ "mulso", XO(31,235,1,0), XO_MASK, POWER, { RT, RA, RB } },
2485   -{ "mullwo.", XO(31,235,1,1), XO_MASK, PPC, { RT, RA, RB } },
2486   -{ "mulso.", XO(31,235,1,1), XO_MASK, POWER, { RT, RA, RB } },
  3878 +{ "sleq", XRC(31,217,0), X_MASK, M601, { RA, RS, RB } },
  3879 +{ "sleq.", XRC(31,217,1), X_MASK, M601, { RA, RS, RB } },
2487 3880  
2488   -{ "mtsrin", X(31,242), XRA_MASK, PPC|B32, { RS, RB } },
2489   -{ "mtsri", X(31,242), XRA_MASK, POWER|B32, { RS, RB } },
  3881 +{ "stbxe", X(31,223), X_MASK, BOOKE64, { RS, RA0, RB } },
2490 3882  
2491   -{ "dcbtst", X(31,246), XRT_MASK, PPC, { RA, RB } },
  3883 +{ "icblc", X(31,230), X_MASK, PPCCHLK, { CT, RA, RB }},
2492 3884  
2493   -{ "stbux", X(31,247), X_MASK, PPC|POWER, { RS, RAS, RB } },
  3885 +{ "subfme", XO(31,232,0,0), XORB_MASK, PPCCOM, { RT, RA } },
  3886 +{ "sfme", XO(31,232,0,0), XORB_MASK, PWRCOM, { RT, RA } },
  3887 +{ "subfme.", XO(31,232,0,1), XORB_MASK, PPCCOM, { RT, RA } },
  3888 +{ "sfme.", XO(31,232,0,1), XORB_MASK, PWRCOM, { RT, RA } },
  3889 +{ "subfmeo", XO(31,232,1,0), XORB_MASK, PPCCOM, { RT, RA } },
  3890 +{ "sfmeo", XO(31,232,1,0), XORB_MASK, PWRCOM, { RT, RA } },
  3891 +{ "subfmeo.",XO(31,232,1,1), XORB_MASK, PPCCOM, { RT, RA } },
  3892 +{ "sfmeo.", XO(31,232,1,1), XORB_MASK, PWRCOM, { RT, RA } },
2494 3893  
2495   -{ "slliq", XRC(31,248,0), X_MASK, POWER|M601, { RA, RS, SH } },
2496   -{ "slliq.", XRC(31,248,1), X_MASK, POWER|M601, { RA, RS, SH } },
  3894 +{ "mulld", XO(31,233,0,0), XO_MASK, PPC64, { RT, RA, RB } },
  3895 +{ "mulld.", XO(31,233,0,1), XO_MASK, PPC64, { RT, RA, RB } },
  3896 +{ "mulldo", XO(31,233,1,0), XO_MASK, PPC64, { RT, RA, RB } },
  3897 +{ "mulldo.", XO(31,233,1,1), XO_MASK, PPC64, { RT, RA, RB } },
2497 3898  
2498   -{ "doz", XO(31,264,0,0), XO_MASK, POWER|M601, { RT, RA, RB } },
2499   -{ "doz.", XO(31,264,0,1), XO_MASK, POWER|M601, { RT, RA, RB } },
2500   -{ "dozo", XO(31,264,1,0), XO_MASK, POWER|M601, { RT, RA, RB } },
2501   -{ "dozo.", XO(31,264,1,1), XO_MASK, POWER|M601, { RT, RA, RB } },
  3899 +{ "addme", XO(31,234,0,0), XORB_MASK, PPCCOM, { RT, RA } },
  3900 +{ "ame", XO(31,234,0,0), XORB_MASK, PWRCOM, { RT, RA } },
  3901 +{ "addme.", XO(31,234,0,1), XORB_MASK, PPCCOM, { RT, RA } },
  3902 +{ "ame.", XO(31,234,0,1), XORB_MASK, PWRCOM, { RT, RA } },
  3903 +{ "addmeo", XO(31,234,1,0), XORB_MASK, PPCCOM, { RT, RA } },
  3904 +{ "ameo", XO(31,234,1,0), XORB_MASK, PWRCOM, { RT, RA } },
  3905 +{ "addmeo.", XO(31,234,1,1), XORB_MASK, PPCCOM, { RT, RA } },
  3906 +{ "ameo.", XO(31,234,1,1), XORB_MASK, PWRCOM, { RT, RA } },
2502 3907  
2503   -{ "add", XO(31,266,0,0), XO_MASK, PPC, { RT, RA, RB } },
2504   -{ "cax", XO(31,266,0,0), XO_MASK, POWER, { RT, RA, RB } },
2505   -{ "add.", XO(31,266,0,1), XO_MASK, PPC, { RT, RA, RB } },
2506   -{ "cax.", XO(31,266,0,1), XO_MASK, POWER, { RT, RA, RB } },
2507   -{ "addo", XO(31,266,1,0), XO_MASK, PPC, { RT, RA, RB } },
2508   -{ "caxo", XO(31,266,1,0), XO_MASK, POWER, { RT, RA, RB } },
2509   -{ "addo.", XO(31,266,1,1), XO_MASK, PPC, { RT, RA, RB } },
2510   -{ "caxo.", XO(31,266,1,1), XO_MASK, POWER, { RT, RA, RB } },
  3908 +{ "mullw", XO(31,235,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
  3909 +{ "muls", XO(31,235,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
  3910 +{ "mullw.", XO(31,235,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
  3911 +{ "muls.", XO(31,235,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
  3912 +{ "mullwo", XO(31,235,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
  3913 +{ "mulso", XO(31,235,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
  3914 +{ "mullwo.", XO(31,235,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
  3915 +{ "mulso.", XO(31,235,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
2511 3916  
2512   -{ "lscbx", XRC(31,277,0), X_MASK, POWER|M601, { RT, RA, RB } },
2513   -{ "lscbx.", XRC(31,277,1), X_MASK, POWER|M601, { RT, RA, RB } },
  3917 +{ "icblce", X(31,238), X_MASK, PPCCHLK64, { CT, RA, RB }},
  3918 +{ "mtsrin", X(31,242), XRA_MASK, PPC32, { RS, RB } },
  3919 +{ "mtsri", X(31,242), XRA_MASK, POWER32, { RS, RB } },
2514 3920  
2515   -{ "dcbt", X(31,278), XRT_MASK, PPC, { RA, RB } },
  3921 +{ "dcbtst", X(31,246), X_MASK, PPC, { CT, RA, RB } },
2516 3922  
2517   -{ "lhzx", X(31,279), X_MASK, PPC|POWER, { RT, RA, RB } },
2518   -
2519   -{ "icbt", X(31,262), XRT_MASK, PPC, { RA, RB } },
2520   -
2521   -{ "eqv", XRC(31,284,0), X_MASK, PPC|POWER, { RA, RS, RB } },
2522   -{ "eqv.", XRC(31,284,1), X_MASK, PPC|POWER, { RA, RS, RB } },
2523   -
2524   -{ "tlbie", X(31,306), XRTRA_MASK, PPC, { RB } },
2525   -{ "tlbi", X(31,306), XRTRA_MASK, POWER, { RB } },
  3923 +{ "stbux", X(31,247), X_MASK, COM, { RS, RAS, RB } },
  3924 +
  3925 +{ "slliq", XRC(31,248,0), X_MASK, M601, { RA, RS, SH } },
  3926 +{ "slliq.", XRC(31,248,1), X_MASK, M601, { RA, RS, SH } },
  3927 +
  3928 +{ "dcbtste", X(31,253), X_MASK, BOOKE64, { CT, RA, RB } },
  3929 +
  3930 +{ "stbuxe", X(31,255), X_MASK, BOOKE64, { RS, RAS, RB } },
  3931 +
  3932 +{ "mfdcrx", X(31,259), X_MASK, BOOKE, { RS, RA } },
  3933 +
  3934 +{ "doz", XO(31,264,0,0), XO_MASK, M601, { RT, RA, RB } },
  3935 +{ "doz.", XO(31,264,0,1), XO_MASK, M601, { RT, RA, RB } },
  3936 +{ "dozo", XO(31,264,1,0), XO_MASK, M601, { RT, RA, RB } },
  3937 +{ "dozo.", XO(31,264,1,1), XO_MASK, M601, { RT, RA, RB } },
  3938 +
  3939 +{ "add", XO(31,266,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
  3940 +{ "cax", XO(31,266,0,0), XO_MASK, PWRCOM, { RT, RA, RB } },
  3941 +{ "add.", XO(31,266,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
  3942 +{ "cax.", XO(31,266,0,1), XO_MASK, PWRCOM, { RT, RA, RB } },
  3943 +{ "addo", XO(31,266,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
  3944 +{ "caxo", XO(31,266,1,0), XO_MASK, PWRCOM, { RT, RA, RB } },
  3945 +{ "addo.", XO(31,266,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
  3946 +{ "caxo.", XO(31,266,1,1), XO_MASK, PWRCOM, { RT, RA, RB } },
  3947 +
  3948 +{ "tlbiel", X(31,274), XRTLRA_MASK, POWER4, { RB, L } },
  3949 +
  3950 +{ "mfapidi", X(31,275), X_MASK, BOOKE, { RT, RA } },
  3951 +
  3952 +{ "lscbx", XRC(31,277,0), X_MASK, M601, { RT, RA, RB } },
  3953 +{ "lscbx.", XRC(31,277,1), X_MASK, M601, { RT, RA, RB } },
  3954 +
  3955 +{ "dcbt", X(31,278), X_MASK, PPC, { CT, RA, RB } },
  3956 +
  3957 +{ "lhzx", X(31,279), X_MASK, COM, { RT, RA0, RB } },
  3958 +
  3959 +{ "eqv", XRC(31,284,0), X_MASK, COM, { RA, RS, RB } },
  3960 +{ "eqv.", XRC(31,284,1), X_MASK, COM, { RA, RS, RB } },
  3961 +
  3962 +{ "dcbte", X(31,286), X_MASK, BOOKE64, { CT, RA, RB } },
  3963 +
  3964 +{ "lhzxe", X(31,287), X_MASK, BOOKE64, { RT, RA0, RB } },
  3965 +
  3966 +{ "tlbie", X(31,306), XRTLRA_MASK, PPC, { RB, L } },
  3967 +{ "tlbi", X(31,306), XRT_MASK, POWER, { RA0, RB } },
2526 3968  
2527 3969 { "eciwx", X(31,310), X_MASK, PPC, { RT, RA, RB } },
2528 3970  
2529   -{ "lhzux", X(31,311), X_MASK, PPC|POWER, { RT, RAL, RB } },
2530   -
2531   -{ "xor", XRC(31,316,0), X_MASK, PPC|POWER, { RA, RS, RB } },
2532   -{ "xor.", XRC(31,316,1), X_MASK, PPC|POWER, { RA, RS, RB } },
2533   -
2534   -{ "mfdcr", X(31,323), X_MASK, PPC, { RT, SPR } },
2535   -
2536   -{ "div", XO(31,331,0,0), XO_MASK, POWER|M601, { RT, RA, RB } },
2537   -{ "div.", XO(31,331,0,1), XO_MASK, POWER|M601, { RT, RA, RB } },
2538   -{ "divo", XO(31,331,1,0), XO_MASK, POWER|M601, { RT, RA, RB } },
2539   -{ "divo.", XO(31,331,1,1), XO_MASK, POWER|M601, { RT, RA, RB } },
2540   -
2541   -{ "mfmq", XSPR(31,339,0), XSPR_MASK, POWER|M601, { RT } },
2542   -{ "mfxer", XSPR(31,339,1), XSPR_MASK, PPC|POWER, { RT } },
2543   -{ "mfrtcu", XSPR(31,339,4), XSPR_MASK, PPC|POWER, { RT } },
2544   -{ "mfrtcl", XSPR(31,339,5), XSPR_MASK, PPC|POWER, { RT } },
2545   -{ "mfdec", XSPR(31,339,6), XSPR_MASK, POWER|M601, { RT } },
2546   -{ "mflr", XSPR(31,339,8), XSPR_MASK, PPC|POWER, { RT } },
2547   -{ "mfctr", XSPR(31,339,9), XSPR_MASK, PPC|POWER, { RT } },
2548   -{ "mftid", XSPR(31,339,17), XSPR_MASK, POWER, { RT } },
2549   -{ "mfdsisr", XSPR(31,339,18), XSPR_MASK, PPC|POWER, { RT } },
2550   -{ "mfdar", XSPR(31,339,19), XSPR_MASK, PPC|POWER, { RT } },
2551   -{ "mfdec", XSPR(31,339,22), XSPR_MASK, PPC, { RT } },
2552   -{ "mfsdr0", XSPR(31,339,24), XSPR_MASK, POWER, { RT } },
2553   -{ "mfsdr1", XSPR(31,339,25), XSPR_MASK, PPC|POWER, { RT } },
2554   -{ "mfsrr0", XSPR(31,339,26), XSPR_MASK, PPC|POWER, { RT } },
2555   -{ "mfsrr1", XSPR(31,339,27), XSPR_MASK, PPC|POWER, { RT } },
2556   -{ "mfsprg", XSPR(31,339,272), XSPRG_MASK, PPC, { RT, SPRG } },
2557   -{ "mfasr", XSPR(31,339,280), XSPR_MASK, PPC|B64, { RT } },
2558   -{ "mfear", XSPR(31,339,282), XSPR_MASK, PPC, { RT } },
2559   -{ "mfpvr", XSPR(31,339,287), XSPR_MASK, PPC, { RT } },
2560   -{ "mfibatu", XSPR(31,339,528), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
2561   -{ "mfibatl", XSPR(31,339,529), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
2562   -{ "mfdbatu", XSPR(31,339,536), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
2563   -{ "mfdbatl", XSPR(31,339,537), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
2564   -{ "mfspr", X(31,339), X_MASK, PPC|POWER, { RT, SPR } },
2565   -
2566   -{ "lwax", X(31,341), X_MASK, PPC|B64, { RT, RA, RB } },
2567   -
2568   -{ "lhax", X(31,343), X_MASK, PPC|POWER, { RT, RA, RB } },
2569   -
2570   -{ "dccci", X(31,454), XRT_MASK, PPC, { RA, RB } },
2571   -
2572   -{ "abs", XO(31,360,0,0), XORB_MASK, POWER|M601, { RT, RA } },
2573   -{ "abs.", XO(31,360,0,1), XORB_MASK, POWER|M601, { RT, RA } },
2574   -{ "abso", XO(31,360,1,0), XORB_MASK, POWER|M601, { RT, RA } },
2575   -{ "abso.", XO(31,360,1,1), XORB_MASK, POWER|M601, { RT, RA } },
2576   -
2577   -{ "divs", XO(31,363,0,0), XO_MASK, POWER|M601, { RT, RA, RB } },
2578   -{ "divs.", XO(31,363,0,1), XO_MASK, POWER|M601, { RT, RA, RB } },
2579   -{ "divso", XO(31,363,1,0), XO_MASK, POWER|M601, { RT, RA, RB } },
2580   -{ "divso.", XO(31,363,1,1), XO_MASK, POWER|M601, { RT, RA, RB } },
  3971 +{ "lhzux", X(31,311), X_MASK, COM, { RT, RAL, RB } },
  3972 +
  3973 +{ "xor", XRC(31,316,0), X_MASK, COM, { RA, RS, RB } },
  3974 +{ "xor.", XRC(31,316,1), X_MASK, COM, { RA, RS, RB } },
  3975 +
  3976 +{ "lhzuxe", X(31,319), X_MASK, BOOKE64, { RT, RAL, RB } },
  3977 +
  3978 +{ "mfexisr", XSPR(31,323,64), XSPR_MASK, PPC403, { RT } },
  3979 +{ "mfexier", XSPR(31,323,66), XSPR_MASK, PPC403, { RT } },
  3980 +{ "mfbr0", XSPR(31,323,128), XSPR_MASK, PPC403, { RT } },
  3981 +{ "mfbr1", XSPR(31,323,129), XSPR_MASK, PPC403, { RT } },
  3982 +{ "mfbr2", XSPR(31,323,130), XSPR_MASK, PPC403, { RT } },
  3983 +{ "mfbr3", XSPR(31,323,131), XSPR_MASK, PPC403, { RT } },
  3984 +{ "mfbr4", XSPR(31,323,132), XSPR_MASK, PPC403, { RT } },
  3985 +{ "mfbr5", XSPR(31,323,133), XSPR_MASK, PPC403, { RT } },
  3986 +{ "mfbr6", XSPR(31,323,134), XSPR_MASK, PPC403, { RT } },
  3987 +{ "mfbr7", XSPR(31,323,135), XSPR_MASK, PPC403, { RT } },
  3988 +{ "mfbear", XSPR(31,323,144), XSPR_MASK, PPC403, { RT } },
  3989 +{ "mfbesr", XSPR(31,323,145), XSPR_MASK, PPC403, { RT } },
  3990 +{ "mfiocr", XSPR(31,323,160), XSPR_MASK, PPC403, { RT } },
  3991 +{ "mfdmacr0", XSPR(31,323,192), XSPR_MASK, PPC403, { RT } },
  3992 +{ "mfdmact0", XSPR(31,323,193), XSPR_MASK, PPC403, { RT } },
  3993 +{ "mfdmada0", XSPR(31,323,194), XSPR_MASK, PPC403, { RT } },
  3994 +{ "mfdmasa0", XSPR(31,323,195), XSPR_MASK, PPC403, { RT } },
  3995 +{ "mfdmacc0", XSPR(31,323,196), XSPR_MASK, PPC403, { RT } },
  3996 +{ "mfdmacr1", XSPR(31,323,200), XSPR_MASK, PPC403, { RT } },
  3997 +{ "mfdmact1", XSPR(31,323,201), XSPR_MASK, PPC403, { RT } },
  3998 +{ "mfdmada1", XSPR(31,323,202), XSPR_MASK, PPC403, { RT } },
  3999 +{ "mfdmasa1", XSPR(31,323,203), XSPR_MASK, PPC403, { RT } },
  4000 +{ "mfdmacc1", XSPR(31,323,204), XSPR_MASK, PPC403, { RT } },
  4001 +{ "mfdmacr2", XSPR(31,323,208), XSPR_MASK, PPC403, { RT } },
  4002 +{ "mfdmact2", XSPR(31,323,209), XSPR_MASK, PPC403, { RT } },
  4003 +{ "mfdmada2", XSPR(31,323,210), XSPR_MASK, PPC403, { RT } },
  4004 +{ "mfdmasa2", XSPR(31,323,211), XSPR_MASK, PPC403, { RT } },
  4005 +{ "mfdmacc2", XSPR(31,323,212), XSPR_MASK, PPC403, { RT } },
  4006 +{ "mfdmacr3", XSPR(31,323,216), XSPR_MASK, PPC403, { RT } },
  4007 +{ "mfdmact3", XSPR(31,323,217), XSPR_MASK, PPC403, { RT } },
  4008 +{ "mfdmada3", XSPR(31,323,218), XSPR_MASK, PPC403, { RT } },
  4009 +{ "mfdmasa3", XSPR(31,323,219), XSPR_MASK, PPC403, { RT } },
  4010 +{ "mfdmacc3", XSPR(31,323,220), XSPR_MASK, PPC403, { RT } },
  4011 +{ "mfdmasr", XSPR(31,323,224), XSPR_MASK, PPC403, { RT } },
  4012 +{ "mfdcr", X(31,323), X_MASK, PPC403 | BOOKE, { RT, SPR } },
  4013 +
  4014 +{ "div", XO(31,331,0,0), XO_MASK, M601, { RT, RA, RB } },
  4015 +{ "div.", XO(31,331,0,1), XO_MASK, M601, { RT, RA, RB } },
  4016 +{ "divo", XO(31,331,1,0), XO_MASK, M601, { RT, RA, RB } },
  4017 +{ "divo.", XO(31,331,1,1), XO_MASK, M601, { RT, RA, RB } },
  4018 +
  4019 +{ "mfpmr", X(31,334), X_MASK, PPCPMR, { RT, PMR }},
  4020 +
  4021 +{ "mfmq", XSPR(31,339,0), XSPR_MASK, M601, { RT } },
  4022 +{ "mfxer", XSPR(31,339,1), XSPR_MASK, COM, { RT } },
  4023 +{ "mfrtcu", XSPR(31,339,4), XSPR_MASK, COM, { RT } },
  4024 +{ "mfrtcl", XSPR(31,339,5), XSPR_MASK, COM, { RT } },
  4025 +{ "mfdec", XSPR(31,339,6), XSPR_MASK, MFDEC1, { RT } },
  4026 +{ "mfdec", XSPR(31,339,22), XSPR_MASK, MFDEC2, { RT } },
  4027 +{ "mflr", XSPR(31,339,8), XSPR_MASK, COM, { RT } },
  4028 +{ "mfctr", XSPR(31,339,9), XSPR_MASK, COM, { RT } },
  4029 +{ "mftid", XSPR(31,339,17), XSPR_MASK, POWER, { RT } },
  4030 +{ "mfdsisr", XSPR(31,339,18), XSPR_MASK, COM, { RT } },
  4031 +{ "mfdar", XSPR(31,339,19), XSPR_MASK, COM, { RT } },
  4032 +{ "mfsdr0", XSPR(31,339,24), XSPR_MASK, POWER, { RT } },
  4033 +{ "mfsdr1", XSPR(31,339,25), XSPR_MASK, COM, { RT } },
  4034 +{ "mfsrr0", XSPR(31,339,26), XSPR_MASK, COM, { RT } },
  4035 +{ "mfsrr1", XSPR(31,339,27), XSPR_MASK, COM, { RT } },
  4036 +{ "mfpid", XSPR(31,339,48), XSPR_MASK, BOOKE, { RT } },
  4037 +{ "mfpid", XSPR(31,339,945), XSPR_MASK, PPC403, { RT } },
  4038 +{ "mfcsrr0", XSPR(31,339,58), XSPR_MASK, BOOKE, { RT } },
  4039 +{ "mfcsrr1", XSPR(31,339,59), XSPR_MASK, BOOKE, { RT } },
  4040 +{ "mfdear", XSPR(31,339,61), XSPR_MASK, BOOKE, { RT } },
  4041 +{ "mfdear", XSPR(31,339,981), XSPR_MASK, PPC403, { RT } },
  4042 +{ "mfesr", XSPR(31,339,62), XSPR_MASK, BOOKE, { RT } },
  4043 +{ "mfesr", XSPR(31,339,980), XSPR_MASK, PPC403, { RT } },
  4044 +{ "mfivpr", XSPR(31,339,63), XSPR_MASK, BOOKE, { RT } },
  4045 +{ "mfcmpa", XSPR(31,339,144), XSPR_MASK, PPC860, { RT } },
  4046 +{ "mfcmpb", XSPR(31,339,145), XSPR_MASK, PPC860, { RT } },
  4047 +{ "mfcmpc", XSPR(31,339,146), XSPR_MASK, PPC860, { RT } },
  4048 +{ "mfcmpd", XSPR(31,339,147), XSPR_MASK, PPC860, { RT } },
  4049 +{ "mficr", XSPR(31,339,148), XSPR_MASK, PPC860, { RT } },
  4050 +{ "mfder", XSPR(31,339,149), XSPR_MASK, PPC860, { RT } },
  4051 +{ "mfcounta", XSPR(31,339,150), XSPR_MASK, PPC860, { RT } },
  4052 +{ "mfcountb", XSPR(31,339,151), XSPR_MASK, PPC860, { RT } },
  4053 +{ "mfcmpe", XSPR(31,339,152), XSPR_MASK, PPC860, { RT } },
  4054 +{ "mfcmpf", XSPR(31,339,153), XSPR_MASK, PPC860, { RT } },
  4055 +{ "mfcmpg", XSPR(31,339,154), XSPR_MASK, PPC860, { RT } },
  4056 +{ "mfcmph", XSPR(31,339,155), XSPR_MASK, PPC860, { RT } },
  4057 +{ "mflctrl1", XSPR(31,339,156), XSPR_MASK, PPC860, { RT } },
  4058 +{ "mflctrl2", XSPR(31,339,157), XSPR_MASK, PPC860, { RT } },
  4059 +{ "mfictrl", XSPR(31,339,158), XSPR_MASK, PPC860, { RT } },
  4060 +{ "mfbar", XSPR(31,339,159), XSPR_MASK, PPC860, { RT } },
  4061 +{ "mfvrsave", XSPR(31,339,256), XSPR_MASK, PPCVEC, { RT } },
  4062 +{ "mfusprg0", XSPR(31,339,256), XSPR_MASK, BOOKE, { RT } },
  4063 +{ "mftb", X(31,371), X_MASK, CLASSIC, { RT, TBR } },
  4064 +{ "mftb", XSPR(31,339,268), XSPR_MASK, BOOKE, { RT } },
  4065 +{ "mftbl", XSPR(31,371,268), XSPR_MASK, CLASSIC, { RT } },
  4066 +{ "mftbl", XSPR(31,339,268), XSPR_MASK, BOOKE, { RT } },
  4067 +{ "mftbu", XSPR(31,371,269), XSPR_MASK, CLASSIC, { RT } },
  4068 +{ "mftbu", XSPR(31,339,269), XSPR_MASK, BOOKE, { RT } },
  4069 +{ "mfsprg", XSPR(31,339,256), XSPRG_MASK, PPC, { RT, SPRG } },
  4070 +{ "mfsprg0", XSPR(31,339,272), XSPR_MASK, PPC, { RT } },
  4071 +{ "mfsprg1", XSPR(31,339,273), XSPR_MASK, PPC, { RT } },
  4072 +{ "mfsprg2", XSPR(31,339,274), XSPR_MASK, PPC, { RT } },
  4073 +{ "mfsprg3", XSPR(31,339,275), XSPR_MASK, PPC, { RT } },
  4074 +{ "mfsprg4", XSPR(31,339,260), XSPR_MASK, PPC405 | BOOKE, { RT } },
  4075 +{ "mfsprg5", XSPR(31,339,261), XSPR_MASK, PPC405 | BOOKE, { RT } },
  4076 +{ "mfsprg6", XSPR(31,339,262), XSPR_MASK, PPC405 | BOOKE, { RT } },
  4077 +{ "mfsprg7", XSPR(31,339,263), XSPR_MASK, PPC405 | BOOKE, { RT } },
  4078 +{ "mfasr", XSPR(31,339,280), XSPR_MASK, PPC64, { RT } },
  4079 +{ "mfear", XSPR(31,339,282), XSPR_MASK, PPC, { RT } },
  4080 +{ "mfpir", XSPR(31,339,286), XSPR_MASK, BOOKE, { RT } },
  4081 +{ "mfpvr", XSPR(31,339,287), XSPR_MASK, PPC, { RT } },
  4082 +{ "mfdbsr", XSPR(31,339,304), XSPR_MASK, BOOKE, { RT } },
  4083 +{ "mfdbsr", XSPR(31,339,1008), XSPR_MASK, PPC403, { RT } },
  4084 +{ "mfdbcr0", XSPR(31,339,308), XSPR_MASK, BOOKE, { RT } },
  4085 +{ "mfdbcr0", XSPR(31,339,1010), XSPR_MASK, PPC405, { RT } },
  4086 +{ "mfdbcr1", XSPR(31,339,309), XSPR_MASK, BOOKE, { RT } },
  4087 +{ "mfdbcr1", XSPR(31,339,957), XSPR_MASK, PPC405, { RT } },
  4088 +{ "mfdbcr2", XSPR(31,339,310), XSPR_MASK, BOOKE, { RT } },
  4089 +{ "mfiac1", XSPR(31,339,312), XSPR_MASK, BOOKE, { RT } },
  4090 +{ "mfiac1", XSPR(31,339,1012), XSPR_MASK, PPC403, { RT } },
  4091 +{ "mfiac2", XSPR(31,339,313), XSPR_MASK, BOOKE, { RT } },
  4092 +{ "mfiac2", XSPR(31,339,1013), XSPR_MASK, PPC403, { RT } },
  4093 +{ "mfiac3", XSPR(31,339,314), XSPR_MASK, BOOKE, { RT } },
  4094 +{ "mfiac3", XSPR(31,339,948), XSPR_MASK, PPC405, { RT } },
  4095 +{ "mfiac4", XSPR(31,339,315), XSPR_MASK, BOOKE, { RT } },
  4096 +{ "mfiac4", XSPR(31,339,949), XSPR_MASK, PPC405, { RT } },
  4097 +{ "mfdac1", XSPR(31,339,316), XSPR_MASK, BOOKE, { RT } },
  4098 +{ "mfdac1", XSPR(31,339,1014), XSPR_MASK, PPC403, { RT } },
  4099 +{ "mfdac2", XSPR(31,339,317), XSPR_MASK, BOOKE, { RT } },
  4100 +{ "mfdac2", XSPR(31,339,1015), XSPR_MASK, PPC403, { RT } },
  4101 +{ "mfdvc1", XSPR(31,339,318), XSPR_MASK, BOOKE, { RT } },
  4102 +{ "mfdvc1", XSPR(31,339,950), XSPR_MASK, PPC405, { RT } },
  4103 +{ "mfdvc2", XSPR(31,339,319), XSPR_MASK, BOOKE, { RT } },
  4104 +{ "mfdvc2", XSPR(31,339,951), XSPR_MASK, PPC405, { RT } },
  4105 +{ "mftsr", XSPR(31,339,336), XSPR_MASK, BOOKE, { RT } },
  4106 +{ "mftsr", XSPR(31,339,984), XSPR_MASK, PPC403, { RT } },
  4107 +{ "mftcr", XSPR(31,339,340), XSPR_MASK, BOOKE, { RT } },
  4108 +{ "mftcr", XSPR(31,339,986), XSPR_MASK, PPC403, { RT } },
  4109 +{ "mfivor0", XSPR(31,339,400), XSPR_MASK, BOOKE, { RT } },
  4110 +{ "mfivor1", XSPR(31,339,401), XSPR_MASK, BOOKE, { RT } },
  4111 +{ "mfivor2", XSPR(31,339,402), XSPR_MASK, BOOKE, { RT } },
  4112 +{ "mfivor3", XSPR(31,339,403), XSPR_MASK, BOOKE, { RT } },
  4113 +{ "mfivor4", XSPR(31,339,404), XSPR_MASK, BOOKE, { RT } },
  4114 +{ "mfivor5", XSPR(31,339,405), XSPR_MASK, BOOKE, { RT } },
  4115 +{ "mfivor6", XSPR(31,339,406), XSPR_MASK, BOOKE, { RT } },
  4116 +{ "mfivor7", XSPR(31,339,407), XSPR_MASK, BOOKE, { RT } },
  4117 +{ "mfivor8", XSPR(31,339,408), XSPR_MASK, BOOKE, { RT } },
  4118 +{ "mfivor9", XSPR(31,339,409), XSPR_MASK, BOOKE, { RT } },
  4119 +{ "mfivor10", XSPR(31,339,410), XSPR_MASK, BOOKE, { RT } },
  4120 +{ "mfivor11", XSPR(31,339,411), XSPR_MASK, BOOKE, { RT } },
  4121 +{ "mfivor12", XSPR(31,339,412), XSPR_MASK, BOOKE, { RT } },
  4122 +{ "mfivor13", XSPR(31,339,413), XSPR_MASK, BOOKE, { RT } },
  4123 +{ "mfivor14", XSPR(31,339,414), XSPR_MASK, BOOKE, { RT } },
  4124 +{ "mfivor15", XSPR(31,339,415), XSPR_MASK, BOOKE, { RT } },
  4125 +{ "mfspefscr", XSPR(31,339,512), XSPR_MASK, PPCSPE, { RT } },
  4126 +{ "mfbbear", XSPR(31,339,513), XSPR_MASK, PPCBRLK, { RT } },
  4127 +{ "mfbbtar", XSPR(31,339,514), XSPR_MASK, PPCBRLK, { RT } },
  4128 +{ "mfivor32", XSPR(31,339,528), XSPR_MASK, PPCSPE, { RT } },
  4129 +{ "mfivor33", XSPR(31,339,529), XSPR_MASK, PPCSPE, { RT } },
  4130 +{ "mfivor34", XSPR(31,339,530), XSPR_MASK, PPCSPE, { RT } },
  4131 +{ "mfivor35", XSPR(31,339,531), XSPR_MASK, PPCPMR, { RT } },
  4132 +{ "mfibatu", XSPR(31,339,528), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
  4133 +{ "mfibatl", XSPR(31,339,529), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
  4134 +{ "mfdbatu", XSPR(31,339,536), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
  4135 +{ "mfdbatl", XSPR(31,339,537), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
  4136 +{ "mfic_cst", XSPR(31,339,560), XSPR_MASK, PPC860, { RT } },
  4137 +{ "mfic_adr", XSPR(31,339,561), XSPR_MASK, PPC860, { RT } },
  4138 +{ "mfic_dat", XSPR(31,339,562), XSPR_MASK, PPC860, { RT } },
  4139 +{ "mfdc_cst", XSPR(31,339,568), XSPR_MASK, PPC860, { RT } },
  4140 +{ "mfdc_adr", XSPR(31,339,569), XSPR_MASK, PPC860, { RT } },
  4141 +{ "mfmcsrr0", XSPR(31,339,570), XSPR_MASK, PPCRFMCI, { RT } },
  4142 +{ "mfdc_dat", XSPR(31,339,570), XSPR_MASK, PPC860, { RT } },
  4143 +{ "mfmcsrr1", XSPR(31,339,571), XSPR_MASK, PPCRFMCI, { RT } },
  4144 +{ "mfmcsr", XSPR(31,339,572), XSPR_MASK, PPCRFMCI, { RT } },
  4145 +{ "mfmcar", XSPR(31,339,573), XSPR_MASK, PPCRFMCI, { RT } },
  4146 +{ "mfdpdr", XSPR(31,339,630), XSPR_MASK, PPC860, { RT } },
  4147 +{ "mfdpir", XSPR(31,339,631), XSPR_MASK, PPC860, { RT } },
  4148 +{ "mfimmr", XSPR(31,339,638), XSPR_MASK, PPC860, { RT } },
  4149 +{ "mfmi_ctr", XSPR(31,339,784), XSPR_MASK, PPC860, { RT } },
  4150 +{ "mfmi_ap", XSPR(31,339,786), XSPR_MASK, PPC860, { RT } },
  4151 +{ "mfmi_epn", XSPR(31,339,787), XSPR_MASK, PPC860, { RT } },
  4152 +{ "mfmi_twc", XSPR(31,339,789), XSPR_MASK, PPC860, { RT } },
  4153 +{ "mfmi_rpn", XSPR(31,339,790), XSPR_MASK, PPC860, { RT } },
  4154 +{ "mfmd_ctr", XSPR(31,339,792), XSPR_MASK, PPC860, { RT } },
  4155 +{ "mfm_casid", XSPR(31,339,793), XSPR_MASK, PPC860, { RT } },
  4156 +{ "mfmd_ap", XSPR(31,339,794), XSPR_MASK, PPC860, { RT } },
  4157 +{ "mfmd_epn", XSPR(31,339,795), XSPR_MASK, PPC860, { RT } },
  4158 +{ "mfmd_twb", XSPR(31,339,796), XSPR_MASK, PPC860, { RT } },
  4159 +{ "mfmd_twc", XSPR(31,339,797), XSPR_MASK, PPC860, { RT } },
  4160 +{ "mfmd_rpn", XSPR(31,339,798), XSPR_MASK, PPC860, { RT } },
  4161 +{ "mfm_tw", XSPR(31,339,799), XSPR_MASK, PPC860, { RT } },
  4162 +{ "mfmi_dbcam", XSPR(31,339,816), XSPR_MASK, PPC860, { RT } },
  4163 +{ "mfmi_dbram0",XSPR(31,339,817), XSPR_MASK, PPC860, { RT } },
  4164 +{ "mfmi_dbram1",XSPR(31,339,818), XSPR_MASK, PPC860, { RT } },
  4165 +{ "mfmd_dbcam", XSPR(31,339,824), XSPR_MASK, PPC860, { RT } },
  4166 +{ "mfmd_dbram0",XSPR(31,339,825), XSPR_MASK, PPC860, { RT } },
  4167 +{ "mfmd_dbram1",XSPR(31,339,826), XSPR_MASK, PPC860, { RT } },
  4168 +{ "mfummcr0", XSPR(31,339,936), XSPR_MASK, PPC750, { RT } },
  4169 +{ "mfupmc1", XSPR(31,339,937), XSPR_MASK, PPC750, { RT } },
  4170 +{ "mfupmc2", XSPR(31,339,938), XSPR_MASK, PPC750, { RT } },
  4171 +{ "mfusia", XSPR(31,339,939), XSPR_MASK, PPC750, { RT } },
  4172 +{ "mfummcr1", XSPR(31,339,940), XSPR_MASK, PPC750, { RT } },
  4173 +{ "mfupmc3", XSPR(31,339,941), XSPR_MASK, PPC750, { RT } },
  4174 +{ "mfupmc4", XSPR(31,339,942), XSPR_MASK, PPC750, { RT } },
  4175 +{ "mfzpr", XSPR(31,339,944), XSPR_MASK, PPC403, { RT } },
  4176 +{ "mfccr0", XSPR(31,339,947), XSPR_MASK, PPC405, { RT } },
  4177 +{ "mfmmcr0", XSPR(31,339,952), XSPR_MASK, PPC750, { RT } },
  4178 +{ "mfpmc1", XSPR(31,339,953), XSPR_MASK, PPC750, { RT } },
  4179 +{ "mfsgr", XSPR(31,339,953), XSPR_MASK, PPC403, { RT } },
  4180 +{ "mfpmc2", XSPR(31,339,954), XSPR_MASK, PPC750, { RT } },
  4181 +{ "mfdcwr", XSPR(31,339,954), XSPR_MASK, PPC403, { RT } },
  4182 +{ "mfsia", XSPR(31,339,955), XSPR_MASK, PPC750, { RT } },
  4183 +{ "mfsler", XSPR(31,339,955), XSPR_MASK, PPC405, { RT } },
  4184 +{ "mfmmcr1", XSPR(31,339,956), XSPR_MASK, PPC750, { RT } },
  4185 +{ "mfsu0r", XSPR(31,339,956), XSPR_MASK, PPC405, { RT } },
  4186 +{ "mfpmc3", XSPR(31,339,957), XSPR_MASK, PPC750, { RT } },
  4187 +{ "mfpmc4", XSPR(31,339,958), XSPR_MASK, PPC750, { RT } },
  4188 +{ "mficdbdr", XSPR(31,339,979), XSPR_MASK, PPC403, { RT } },
  4189 +{ "mfevpr", XSPR(31,339,982), XSPR_MASK, PPC403, { RT } },
  4190 +{ "mfcdbcr", XSPR(31,339,983), XSPR_MASK, PPC403, { RT } },
  4191 +{ "mfpit", XSPR(31,339,987), XSPR_MASK, PPC403, { RT } },
  4192 +{ "mftbhi", XSPR(31,339,988), XSPR_MASK, PPC403, { RT } },
  4193 +{ "mftblo", XSPR(31,339,989), XSPR_MASK, PPC403, { RT } },
  4194 +{ "mfsrr2", XSPR(31,339,990), XSPR_MASK, PPC403, { RT } },
  4195 +{ "mfsrr3", XSPR(31,339,991), XSPR_MASK, PPC403, { RT } },
  4196 +{ "mfl2cr", XSPR(31,339,1017), XSPR_MASK, PPC750, { RT } },
  4197 +{ "mfdccr", XSPR(31,339,1018), XSPR_MASK, PPC403, { RT } },
  4198 +{ "mficcr", XSPR(31,339,1019), XSPR_MASK, PPC403, { RT } },
  4199 +{ "mfictc", XSPR(31,339,1019), XSPR_MASK, PPC750, { RT } },
  4200 +{ "mfpbl1", XSPR(31,339,1020), XSPR_MASK, PPC403, { RT } },
  4201 +{ "mfthrm1", XSPR(31,339,1020), XSPR_MASK, PPC750, { RT } },
  4202 +{ "mfpbu1", XSPR(31,339,1021), XSPR_MASK, PPC403, { RT } },
  4203 +{ "mfthrm2", XSPR(31,339,1021), XSPR_MASK, PPC750, { RT } },
  4204 +{ "mfpbl2", XSPR(31,339,1022), XSPR_MASK, PPC403, { RT } },
  4205 +{ "mfthrm3", XSPR(31,339,1022), XSPR_MASK, PPC750, { RT } },
  4206 +{ "mfpbu2", XSPR(31,339,1023), XSPR_MASK, PPC403, { RT } },
  4207 +{ "mfspr", X(31,339), X_MASK, COM, { RT, SPR } },
  4208 +
  4209 +{ "lwax", X(31,341), X_MASK, PPC64, { RT, RA0, RB } },
  4210 +
  4211 +{ "dst", XDSS(31,342,0), XDSS_MASK, PPCVEC, { RA, RB, STRM } },
  4212 +{ "dstt", XDSS(31,342,1), XDSS_MASK, PPCVEC, { RA, RB, STRM } },
  4213 +
  4214 +{ "lhax", X(31,343), X_MASK, COM, { RT, RA0, RB } },
  4215 +
  4216 +{ "lhaxe", X(31,351), X_MASK, BOOKE64, { RT, RA0, RB } },
  4217 +
  4218 +{ "dstst", XDSS(31,374,0), XDSS_MASK, PPCVEC, { RA, RB, STRM } },
  4219 +{ "dststt", XDSS(31,374,1), XDSS_MASK, PPCVEC, { RA, RB, STRM } },
  4220 +
  4221 +{ "dccci", X(31,454), XRT_MASK, PPC403|PPC440, { RA, RB } },
  4222 +
  4223 +{ "abs", XO(31,360,0,0), XORB_MASK, M601, { RT, RA } },
  4224 +{ "abs.", XO(31,360,0,1), XORB_MASK, M601, { RT, RA } },
  4225 +{ "abso", XO(31,360,1,0), XORB_MASK, M601, { RT, RA } },
  4226 +{ "abso.", XO(31,360,1,1), XORB_MASK, M601, { RT, RA } },
  4227 +
  4228 +{ "divs", XO(31,363,0,0), XO_MASK, M601, { RT, RA, RB } },
  4229 +{ "divs.", XO(31,363,0,1), XO_MASK, M601, { RT, RA, RB } },
  4230 +{ "divso", XO(31,363,1,0), XO_MASK, M601, { RT, RA, RB } },
  4231 +{ "divso.", XO(31,363,1,1), XO_MASK, M601, { RT, RA, RB } },
2581 4232  
2582 4233 { "tlbia", X(31,370), 0xffffffff, PPC, { 0 } },
2583 4234  
2584   -{ "mftbu", XSPR(31,371,269), XSPR_MASK, PPC, { RT } },
2585   -{ "mftb", X(31,371), X_MASK, PPC, { RT, TBR } },
  4235 +{ "lwaux", X(31,373), X_MASK, PPC64, { RT, RAL, RB } },
  4236 +
  4237 +{ "lhaux", X(31,375), X_MASK, COM, { RT, RAL, RB } },
  4238 +
  4239 +{ "lhauxe", X(31,383), X_MASK, BOOKE64, { RT, RAL, RB } },
  4240 +
  4241 +{ "mtdcrx", X(31,387), X_MASK, BOOKE, { RA, RS } },
  4242 +
  4243 +{ "dcblc", X(31,390), X_MASK, PPCCHLK, { CT, RA, RB }},
2586 4244  
2587   -{ "lwaux", X(31,373), X_MASK, PPC|B64, { RT, RAL, RB } },
  4245 +{ "subfe64", XO(31,392,0,0), XO_MASK, BOOKE64, { RT, RA, RB } },
  4246 +{ "subfe64o",XO(31,392,1,0), XO_MASK, BOOKE64, { RT, RA, RB } },
2588 4247  
2589   -{ "lhaux", X(31,375), X_MASK, PPC|POWER, { RT, RAL, RB } },
  4248 +{ "adde64", XO(31,394,0,0), XO_MASK, BOOKE64, { RT, RA, RB } },
  4249 +{ "adde64o", XO(31,394,1,0), XO_MASK, BOOKE64, { RT, RA, RB } },
2590 4250  
2591   -{ "sthx", X(31,407), X_MASK, PPC|POWER, { RS, RA, RB } },
  4251 +{ "dcblce", X(31,398), X_MASK, PPCCHLK64, { CT, RA, RB }},
  4252 +
  4253 +{ "slbmte", X(31,402), XRA_MASK, PPC64, { RS, RB } },
  4254 +
  4255 +{ "sthx", X(31,407), X_MASK, COM, { RS, RA0, RB } },
2592 4256  
2593 4257 { "lfqx", X(31,791), X_MASK, POWER2, { FRT, RA, RB } },
2594 4258  
... ... @@ -2598,280 +4262,577 @@ const struct powerpc_opcode powerpc_opcodes[] = {
2598 4262  
2599 4263 { "stfqux", X(31,951), X_MASK, POWER2, { FRS, RA, RB } },
2600 4264  
2601   -{ "orc", XRC(31,412,0), X_MASK, PPC|POWER, { RA, RS, RB } },
2602   -{ "orc.", XRC(31,412,1), X_MASK, PPC|POWER, { RA, RS, RB } },
2603   -
2604   -{ "sradi", XS(31,413,0), XS_MASK, PPC|B64, { RA, RS, SH6 } },
2605   -{ "sradi.", XS(31,413,1), XS_MASK, PPC|B64, { RA, RS, SH6 } },
  4265 +{ "orc", XRC(31,412,0), X_MASK, COM, { RA, RS, RB } },
  4266 +{ "orc.", XRC(31,412,1), X_MASK, COM, { RA, RS, RB } },
2606 4267  
2607   -{ "slbie", X(31,434), XRTRA_MASK, PPC|B64, { RB } },
  4268 +{ "sradi", XS(31,413,0), XS_MASK, PPC64, { RA, RS, SH6 } },
  4269 +{ "sradi.", XS(31,413,1), XS_MASK, PPC64, { RA, RS, SH6 } },
2608 4270  
2609   -{ "ecowx", X(31,438), X_MASK, PPC, { RT, RA, RB } },
2610   -
2611   -{ "sthux", X(31,439), X_MASK, PPC|POWER, { RS, RAS, RB } },
  4271 +{ "sthxe", X(31,415), X_MASK, BOOKE64, { RS, RA0, RB } },
2612 4272  
2613   -{ "mr", XRC(31,444,0), X_MASK, PPC|POWER, { RA, RS, RBS } },
2614   -{ "or", XRC(31,444,0), X_MASK, PPC|POWER, { RA, RS, RB } },
2615   -{ "mr.", XRC(31,444,1), X_MASK, PPC|POWER, { RA, RS, RBS } },
2616   -{ "or.", XRC(31,444,1), X_MASK, PPC|POWER, { RA, RS, RB } },
  4273 +{ "slbie", X(31,434), XRTRA_MASK, PPC64, { RB } },
2617 4274  
2618   -{ "mtdcr", X(31,451), X_MASK, PPC, { SPR, RS } },
  4275 +{ "ecowx", X(31,438), X_MASK, PPC, { RT, RA, RB } },
2619 4276  
2620   -{ "divdu", XO(31,457,0,0), XO_MASK, PPC|B64, { RT, RA, RB } },
2621   -{ "divdu.", XO(31,457,0,1), XO_MASK, PPC|B64, { RT, RA, RB } },
2622   -{ "divduo", XO(31,457,1,0), XO_MASK, PPC|B64, { RT, RA, RB } },
2623   -{ "divduo.", XO(31,457,1,1), XO_MASK, PPC|B64, { RT, RA, RB } },
  4277 +{ "sthux", X(31,439), X_MASK, COM, { RS, RAS, RB } },
  4278 +
  4279 +{ "sthuxe", X(31,447), X_MASK, BOOKE64, { RS, RAS, RB } },
  4280 +
  4281 +{ "mr", XRC(31,444,0), X_MASK, COM, { RA, RS, RBS } },
  4282 +{ "or", XRC(31,444,0), X_MASK, COM, { RA, RS, RB } },
  4283 +{ "mr.", XRC(31,444,1), X_MASK, COM, { RA, RS, RBS } },
  4284 +{ "or.", XRC(31,444,1), X_MASK, COM, { RA, RS, RB } },
  4285 +
  4286 +{ "mtexisr", XSPR(31,451,64), XSPR_MASK, PPC403, { RS } },
  4287 +{ "mtexier", XSPR(31,451,66), XSPR_MASK, PPC403, { RS } },
  4288 +{ "mtbr0", XSPR(31,451,128), XSPR_MASK, PPC403, { RS } },
  4289 +{ "mtbr1", XSPR(31,451,129), XSPR_MASK, PPC403, { RS } },
  4290 +{ "mtbr2", XSPR(31,451,130), XSPR_MASK, PPC403, { RS } },
  4291 +{ "mtbr3", XSPR(31,451,131), XSPR_MASK, PPC403, { RS } },
  4292 +{ "mtbr4", XSPR(31,451,132), XSPR_MASK, PPC403, { RS } },
  4293 +{ "mtbr5", XSPR(31,451,133), XSPR_MASK, PPC403, { RS } },
  4294 +{ "mtbr6", XSPR(31,451,134), XSPR_MASK, PPC403, { RS } },
  4295 +{ "mtbr7", XSPR(31,451,135), XSPR_MASK, PPC403, { RS } },
  4296 +{ "mtbear", XSPR(31,451,144), XSPR_MASK, PPC403, { RS } },
  4297 +{ "mtbesr", XSPR(31,451,145), XSPR_MASK, PPC403, { RS } },
  4298 +{ "mtiocr", XSPR(31,451,160), XSPR_MASK, PPC403, { RS } },
  4299 +{ "mtdmacr0", XSPR(31,451,192), XSPR_MASK, PPC403, { RS } },
  4300 +{ "mtdmact0", XSPR(31,451,193), XSPR_MASK, PPC403, { RS } },
  4301 +{ "mtdmada0", XSPR(31,451,194), XSPR_MASK, PPC403, { RS } },
  4302 +{ "mtdmasa0", XSPR(31,451,195), XSPR_MASK, PPC403, { RS } },
  4303 +{ "mtdmacc0", XSPR(31,451,196), XSPR_MASK, PPC403, { RS } },
  4304 +{ "mtdmacr1", XSPR(31,451,200), XSPR_MASK, PPC403, { RS } },
  4305 +{ "mtdmact1", XSPR(31,451,201), XSPR_MASK, PPC403, { RS } },
  4306 +{ "mtdmada1", XSPR(31,451,202), XSPR_MASK, PPC403, { RS } },
  4307 +{ "mtdmasa1", XSPR(31,451,203), XSPR_MASK, PPC403, { RS } },
  4308 +{ "mtdmacc1", XSPR(31,451,204), XSPR_MASK, PPC403, { RS } },
  4309 +{ "mtdmacr2", XSPR(31,451,208), XSPR_MASK, PPC403, { RS } },
  4310 +{ "mtdmact2", XSPR(31,451,209), XSPR_MASK, PPC403, { RS } },
  4311 +{ "mtdmada2", XSPR(31,451,210), XSPR_MASK, PPC403, { RS } },
  4312 +{ "mtdmasa2", XSPR(31,451,211), XSPR_MASK, PPC403, { RS } },
  4313 +{ "mtdmacc2", XSPR(31,451,212), XSPR_MASK, PPC403, { RS } },
  4314 +{ "mtdmacr3", XSPR(31,451,216), XSPR_MASK, PPC403, { RS } },
  4315 +{ "mtdmact3", XSPR(31,451,217), XSPR_MASK, PPC403, { RS } },
  4316 +{ "mtdmada3", XSPR(31,451,218), XSPR_MASK, PPC403, { RS } },
  4317 +{ "mtdmasa3", XSPR(31,451,219), XSPR_MASK, PPC403, { RS } },
  4318 +{ "mtdmacc3", XSPR(31,451,220), XSPR_MASK, PPC403, { RS } },
  4319 +{ "mtdmasr", XSPR(31,451,224), XSPR_MASK, PPC403, { RS } },
  4320 +{ "mtdcr", X(31,451), X_MASK, PPC403 | BOOKE, { SPR, RS } },
  4321 +
  4322 +{ "subfze64",XO(31,456,0,0), XORB_MASK, BOOKE64, { RT, RA } },
  4323 +{ "subfze64o",XO(31,456,1,0), XORB_MASK, BOOKE64, { RT, RA } },
  4324 +
  4325 +{ "divdu", XO(31,457,0,0), XO_MASK, PPC64, { RT, RA, RB } },
  4326 +{ "divdu.", XO(31,457,0,1), XO_MASK, PPC64, { RT, RA, RB } },
  4327 +{ "divduo", XO(31,457,1,0), XO_MASK, PPC64, { RT, RA, RB } },
  4328 +{ "divduo.", XO(31,457,1,1), XO_MASK, PPC64, { RT, RA, RB } },
  4329 +
  4330 +{ "addze64", XO(31,458,0,0), XORB_MASK, BOOKE64, { RT, RA } },
  4331 +{ "addze64o",XO(31,458,1,0), XORB_MASK, BOOKE64, { RT, RA } },
2624 4332  
2625 4333 { "divwu", XO(31,459,0,0), XO_MASK, PPC, { RT, RA, RB } },
2626 4334 { "divwu.", XO(31,459,0,1), XO_MASK, PPC, { RT, RA, RB } },
2627 4335 { "divwuo", XO(31,459,1,0), XO_MASK, PPC, { RT, RA, RB } },
2628 4336 { "divwuo.", XO(31,459,1,1), XO_MASK, PPC, { RT, RA, RB } },
2629 4337  
2630   -{ "mtmq", XSPR(31,467,0), XSPR_MASK, POWER|M601, { RS } },
2631   -{ "mtxer", XSPR(31,467,1), XSPR_MASK, PPC|POWER, { RS } },
2632   -{ "mtlr", XSPR(31,467,8), XSPR_MASK, PPC|POWER, { RS } },
2633   -{ "mtctr", XSPR(31,467,9), XSPR_MASK, PPC|POWER, { RS } },
2634   -{ "mttid", XSPR(31,467,17), XSPR_MASK, POWER, { RS } },
2635   -{ "mtdsisr", XSPR(31,467,18), XSPR_MASK, PPC|POWER, { RS } },
2636   -{ "mtdar", XSPR(31,467,19), XSPR_MASK, PPC|POWER, { RS } },
2637   -{ "mtrtcu", XSPR(31,467,20), XSPR_MASK, PPC|POWER, { RS } },
2638   -{ "mtrtcl", XSPR(31,467,21), XSPR_MASK, PPC|POWER, { RS } },
2639   -{ "mtdec", XSPR(31,467,22), XSPR_MASK, PPC|POWER, { RS } },
2640   -{ "mtsdr0", XSPR(31,467,24), XSPR_MASK, POWER, { RS } },
2641   -{ "mtsdr1", XSPR(31,467,25), XSPR_MASK, PPC|POWER, { RS } },
2642   -{ "mtsrr0", XSPR(31,467,26), XSPR_MASK, PPC|POWER, { RS } },
2643   -{ "mtsrr1", XSPR(31,467,27), XSPR_MASK, PPC|POWER, { RS } },
2644   -{ "mtsprg", XSPR(31,467,272), XSPRG_MASK, PPC, { SPRG, RS } },
2645   -{ "mtasr", XSPR(31,467,280), XSPR_MASK, PPC|B64, { RS } },
2646   -{ "mtear", XSPR(31,467,282), XSPR_MASK, PPC, { RS } },
2647   -{ "mttbl", XSPR(31,467,284), XSPR_MASK, PPC, { RS } },
2648   -{ "mttbu", XSPR(31,467,285), XSPR_MASK, PPC, { RS } },
2649   -{ "mtibatu", XSPR(31,467,528), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
2650   -{ "mtibatl", XSPR(31,467,529), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
2651   -{ "mtdbatu", XSPR(31,467,536), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
2652   -{ "mtdbatl", XSPR(31,467,537), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
2653   -{ "mtspr", X(31,467), X_MASK, PPC|POWER, { SPR, RS } },
  4338 +{ "mtmq", XSPR(31,467,0), XSPR_MASK, M601, { RS } },
  4339 +{ "mtxer", XSPR(31,467,1), XSPR_MASK, COM, { RS } },
  4340 +{ "mtlr", XSPR(31,467,8), XSPR_MASK, COM, { RS } },
  4341 +{ "mtctr", XSPR(31,467,9), XSPR_MASK, COM, { RS } },
  4342 +{ "mttid", XSPR(31,467,17), XSPR_MASK, POWER, { RS } },
  4343 +{ "mtdsisr", XSPR(31,467,18), XSPR_MASK, COM, { RS } },
  4344 +{ "mtdar", XSPR(31,467,19), XSPR_MASK, COM, { RS } },
  4345 +{ "mtrtcu", XSPR(31,467,20), XSPR_MASK, COM, { RS } },
  4346 +{ "mtrtcl", XSPR(31,467,21), XSPR_MASK, COM, { RS } },
  4347 +{ "mtdec", XSPR(31,467,22), XSPR_MASK, COM, { RS } },
  4348 +{ "mtsdr0", XSPR(31,467,24), XSPR_MASK, POWER, { RS } },
  4349 +{ "mtsdr1", XSPR(31,467,25), XSPR_MASK, COM, { RS } },
  4350 +{ "mtsrr0", XSPR(31,467,26), XSPR_MASK, COM, { RS } },
  4351 +{ "mtsrr1", XSPR(31,467,27), XSPR_MASK, COM, { RS } },
  4352 +{ "mtpid", XSPR(31,467,48), XSPR_MASK, BOOKE, { RS } },
  4353 +{ "mtpid", XSPR(31,467,945), XSPR_MASK, PPC403, { RS } },
  4354 +{ "mtdecar", XSPR(31,467,54), XSPR_MASK, BOOKE, { RS } },
  4355 +{ "mtcsrr0", XSPR(31,467,58), XSPR_MASK, BOOKE, { RS } },
  4356 +{ "mtcsrr1", XSPR(31,467,59), XSPR_MASK, BOOKE, { RS } },
  4357 +{ "mtdear", XSPR(31,467,61), XSPR_MASK, BOOKE, { RS } },
  4358 +{ "mtdear", XSPR(31,467,981), XSPR_MASK, PPC403, { RS } },
  4359 +{ "mtesr", XSPR(31,467,62), XSPR_MASK, BOOKE, { RS } },
  4360 +{ "mtesr", XSPR(31,467,980), XSPR_MASK, PPC403, { RS } },
  4361 +{ "mtivpr", XSPR(31,467,63), XSPR_MASK, BOOKE, { RS } },
  4362 +{ "mtcmpa", XSPR(31,467,144), XSPR_MASK, PPC860, { RS } },
  4363 +{ "mtcmpb", XSPR(31,467,145), XSPR_MASK, PPC860, { RS } },
  4364 +{ "mtcmpc", XSPR(31,467,146), XSPR_MASK, PPC860, { RS } },
  4365 +{ "mtcmpd", XSPR(31,467,147), XSPR_MASK, PPC860, { RS } },
  4366 +{ "mticr", XSPR(31,467,148), XSPR_MASK, PPC860, { RS } },
  4367 +{ "mtder", XSPR(31,467,149), XSPR_MASK, PPC860, { RS } },
  4368 +{ "mtcounta", XSPR(31,467,150), XSPR_MASK, PPC860, { RS } },
  4369 +{ "mtcountb", XSPR(31,467,151), XSPR_MASK, PPC860, { RS } },
  4370 +{ "mtcmpe", XSPR(31,467,152), XSPR_MASK, PPC860, { RS } },
  4371 +{ "mtcmpf", XSPR(31,467,153), XSPR_MASK, PPC860, { RS } },
  4372 +{ "mtcmpg", XSPR(31,467,154), XSPR_MASK, PPC860, { RS } },
  4373 +{ "mtcmph", XSPR(31,467,155), XSPR_MASK, PPC860, { RS } },
  4374 +{ "mtlctrl1", XSPR(31,467,156), XSPR_MASK, PPC860, { RS } },
  4375 +{ "mtlctrl2", XSPR(31,467,157), XSPR_MASK, PPC860, { RS } },
  4376 +{ "mtictrl", XSPR(31,467,158), XSPR_MASK, PPC860, { RS } },
  4377 +{ "mtbar", XSPR(31,467,159), XSPR_MASK, PPC860, { RS } },
  4378 +{ "mtvrsave", XSPR(31,467,256), XSPR_MASK, PPCVEC, { RS } },
  4379 +{ "mtusprg0", XSPR(31,467,256), XSPR_MASK, BOOKE, { RS } },
  4380 +{ "mtsprg", XSPR(31,467,256), XSPRG_MASK,PPC, { SPRG, RS } },
  4381 +{ "mtsprg0", XSPR(31,467,272), XSPR_MASK, PPC, { RS } },
  4382 +{ "mtsprg1", XSPR(31,467,273), XSPR_MASK, PPC, { RS } },
  4383 +{ "mtsprg2", XSPR(31,467,274), XSPR_MASK, PPC, { RS } },
  4384 +{ "mtsprg3", XSPR(31,467,275), XSPR_MASK, PPC, { RS } },
  4385 +{ "mtsprg4", XSPR(31,467,276), XSPR_MASK, PPC405 | BOOKE, { RS } },
  4386 +{ "mtsprg5", XSPR(31,467,277), XSPR_MASK, PPC405 | BOOKE, { RS } },
  4387 +{ "mtsprg6", XSPR(31,467,278), XSPR_MASK, PPC405 | BOOKE, { RS } },
  4388 +{ "mtsprg7", XSPR(31,467,279), XSPR_MASK, PPC405 | BOOKE, { RS } },
  4389 +{ "mtasr", XSPR(31,467,280), XSPR_MASK, PPC64, { RS } },
  4390 +{ "mtear", XSPR(31,467,282), XSPR_MASK, PPC, { RS } },
  4391 +{ "mttbl", XSPR(31,467,284), XSPR_MASK, PPC, { RS } },
  4392 +{ "mttbu", XSPR(31,467,285), XSPR_MASK, PPC, { RS } },
  4393 +{ "mtdbsr", XSPR(31,467,304), XSPR_MASK, BOOKE, { RS } },
  4394 +{ "mtdbsr", XSPR(31,467,1008), XSPR_MASK, PPC403, { RS } },
  4395 +{ "mtdbcr0", XSPR(31,467,308), XSPR_MASK, BOOKE, { RS } },
  4396 +{ "mtdbcr0", XSPR(31,467,1010), XSPR_MASK, PPC405, { RS } },
  4397 +{ "mtdbcr1", XSPR(31,467,309), XSPR_MASK, BOOKE, { RS } },
  4398 +{ "mtdbcr1", XSPR(31,467,957), XSPR_MASK, PPC405, { RS } },
  4399 +{ "mtdbcr2", XSPR(31,467,310), XSPR_MASK, BOOKE, { RS } },
  4400 +{ "mtiac1", XSPR(31,467,312), XSPR_MASK, BOOKE, { RS } },
  4401 +{ "mtiac1", XSPR(31,467,1012), XSPR_MASK, PPC403, { RS } },
  4402 +{ "mtiac2", XSPR(31,467,313), XSPR_MASK, BOOKE, { RS } },
  4403 +{ "mtiac2", XSPR(31,467,1013), XSPR_MASK, PPC403, { RS } },
  4404 +{ "mtiac3", XSPR(31,467,314), XSPR_MASK, BOOKE, { RS } },
  4405 +{ "mtiac3", XSPR(31,467,948), XSPR_MASK, PPC405, { RS } },
  4406 +{ "mtiac4", XSPR(31,467,315), XSPR_MASK, BOOKE, { RS } },
  4407 +{ "mtiac4", XSPR(31,467,949), XSPR_MASK, PPC405, { RS } },
  4408 +{ "mtdac1", XSPR(31,467,316), XSPR_MASK, BOOKE, { RS } },
  4409 +{ "mtdac1", XSPR(31,467,1014), XSPR_MASK, PPC403, { RS } },
  4410 +{ "mtdac2", XSPR(31,467,317), XSPR_MASK, BOOKE, { RS } },
  4411 +{ "mtdac2", XSPR(31,467,1015), XSPR_MASK, PPC403, { RS } },
  4412 +{ "mtdvc1", XSPR(31,467,318), XSPR_MASK, BOOKE, { RS } },
  4413 +{ "mtdvc1", XSPR(31,467,950), XSPR_MASK, PPC405, { RS } },
  4414 +{ "mtdvc2", XSPR(31,467,319), XSPR_MASK, BOOKE, { RS } },
  4415 +{ "mtdvc2", XSPR(31,467,951), XSPR_MASK, PPC405, { RS } },
  4416 +{ "mttsr", XSPR(31,467,336), XSPR_MASK, BOOKE, { RS } },
  4417 +{ "mttsr", XSPR(31,467,984), XSPR_MASK, PPC403, { RS } },
  4418 +{ "mttcr", XSPR(31,467,340), XSPR_MASK, BOOKE, { RS } },
  4419 +{ "mttcr", XSPR(31,467,986), XSPR_MASK, PPC403, { RS } },
  4420 +{ "mtivor0", XSPR(31,467,400), XSPR_MASK, BOOKE, { RS } },
  4421 +{ "mtivor1", XSPR(31,467,401), XSPR_MASK, BOOKE, { RS } },
  4422 +{ "mtivor2", XSPR(31,467,402), XSPR_MASK, BOOKE, { RS } },
  4423 +{ "mtivor3", XSPR(31,467,403), XSPR_MASK, BOOKE, { RS } },
  4424 +{ "mtivor4", XSPR(31,467,404), XSPR_MASK, BOOKE, { RS } },
  4425 +{ "mtivor5", XSPR(31,467,405), XSPR_MASK, BOOKE, { RS } },
  4426 +{ "mtivor6", XSPR(31,467,406), XSPR_MASK, BOOKE, { RS } },
  4427 +{ "mtivor7", XSPR(31,467,407), XSPR_MASK, BOOKE, { RS } },
  4428 +{ "mtivor8", XSPR(31,467,408), XSPR_MASK, BOOKE, { RS } },
  4429 +{ "mtivor9", XSPR(31,467,409), XSPR_MASK, BOOKE, { RS } },
  4430 +{ "mtivor10", XSPR(31,467,410), XSPR_MASK, BOOKE, { RS } },
  4431 +{ "mtivor11", XSPR(31,467,411), XSPR_MASK, BOOKE, { RS } },
  4432 +{ "mtivor12", XSPR(31,467,412), XSPR_MASK, BOOKE, { RS } },
  4433 +{ "mtivor13", XSPR(31,467,413), XSPR_MASK, BOOKE, { RS } },
  4434 +{ "mtivor14", XSPR(31,467,414), XSPR_MASK, BOOKE, { RS } },
  4435 +{ "mtivor15", XSPR(31,467,415), XSPR_MASK, BOOKE, { RS } },
  4436 +{ "mtspefscr", XSPR(31,467,512), XSPR_MASK, PPCSPE, { RS } },
  4437 +{ "mtbbear", XSPR(31,467,513), XSPR_MASK, PPCBRLK, { RS } },
  4438 +{ "mtbbtar", XSPR(31,467,514), XSPR_MASK, PPCBRLK, { RS } },
  4439 +{ "mtivor32", XSPR(31,467,528), XSPR_MASK, PPCSPE, { RS } },
  4440 +{ "mtivor33", XSPR(31,467,529), XSPR_MASK, PPCSPE, { RS } },
  4441 +{ "mtivor34", XSPR(31,467,530), XSPR_MASK, PPCSPE, { RS } },
  4442 +{ "mtivor35", XSPR(31,467,531), XSPR_MASK, PPCPMR, { RS } },
  4443 +{ "mtibatu", XSPR(31,467,528), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
  4444 +{ "mtibatl", XSPR(31,467,529), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
  4445 +{ "mtdbatu", XSPR(31,467,536), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
  4446 +{ "mtdbatl", XSPR(31,467,537), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
  4447 +{ "mtmcsrr0", XSPR(31,467,570), XSPR_MASK, PPCRFMCI, { RS } },
  4448 +{ "mtmcsrr1", XSPR(31,467,571), XSPR_MASK, PPCRFMCI, { RS } },
  4449 +{ "mtmcsr", XSPR(31,467,572), XSPR_MASK, PPCRFMCI, { RS } },
  4450 +{ "mtummcr0", XSPR(31,467,936), XSPR_MASK, PPC750, { RS } },
  4451 +{ "mtupmc1", XSPR(31,467,937), XSPR_MASK, PPC750, { RS } },
  4452 +{ "mtupmc2", XSPR(31,467,938), XSPR_MASK, PPC750, { RS } },
  4453 +{ "mtusia", XSPR(31,467,939), XSPR_MASK, PPC750, { RS } },
  4454 +{ "mtummcr1", XSPR(31,467,940), XSPR_MASK, PPC750, { RS } },
  4455 +{ "mtupmc3", XSPR(31,467,941), XSPR_MASK, PPC750, { RS } },
  4456 +{ "mtupmc4", XSPR(31,467,942), XSPR_MASK, PPC750, { RS } },
  4457 +{ "mtzpr", XSPR(31,467,944), XSPR_MASK, PPC403, { RS } },
  4458 +{ "mtccr0", XSPR(31,467,947), XSPR_MASK, PPC405, { RS } },
  4459 +{ "mtmmcr0", XSPR(31,467,952), XSPR_MASK, PPC750, { RS } },
  4460 +{ "mtsgr", XSPR(31,467,953), XSPR_MASK, PPC403, { RS } },
  4461 +{ "mtpmc1", XSPR(31,467,953), XSPR_MASK, PPC750, { RS } },
  4462 +{ "mtdcwr", XSPR(31,467,954), XSPR_MASK, PPC403, { RS } },
  4463 +{ "mtpmc2", XSPR(31,467,954), XSPR_MASK, PPC750, { RS } },
  4464 +{ "mtsler", XSPR(31,467,955), XSPR_MASK, PPC405, { RS } },
  4465 +{ "mtsia", XSPR(31,467,955), XSPR_MASK, PPC750, { RS } },
  4466 +{ "mtsu0r", XSPR(31,467,956), XSPR_MASK, PPC405, { RS } },
  4467 +{ "mtmmcr1", XSPR(31,467,956), XSPR_MASK, PPC750, { RS } },
  4468 +{ "mtpmc3", XSPR(31,467,957), XSPR_MASK, PPC750, { RS } },
  4469 +{ "mtpmc4", XSPR(31,467,958), XSPR_MASK, PPC750, { RS } },
  4470 +{ "mticdbdr", XSPR(31,467,979), XSPR_MASK, PPC403, { RS } },
  4471 +{ "mtevpr", XSPR(31,467,982), XSPR_MASK, PPC403, { RS } },
  4472 +{ "mtcdbcr", XSPR(31,467,983), XSPR_MASK, PPC403, { RS } },
  4473 +{ "mtpit", XSPR(31,467,987), XSPR_MASK, PPC403, { RS } },
  4474 +{ "mttbhi", XSPR(31,467,988), XSPR_MASK, PPC403, { RS } },
  4475 +{ "mttblo", XSPR(31,467,989), XSPR_MASK, PPC403, { RS } },
  4476 +{ "mtsrr2", XSPR(31,467,990), XSPR_MASK, PPC403, { RS } },
  4477 +{ "mtsrr3", XSPR(31,467,991), XSPR_MASK, PPC403, { RS } },
  4478 +{ "mtl2cr", XSPR(31,467,1017), XSPR_MASK, PPC750, { RS } },
  4479 +{ "mtdccr", XSPR(31,467,1018), XSPR_MASK, PPC403, { RS } },
  4480 +{ "mticcr", XSPR(31,467,1019), XSPR_MASK, PPC403, { RS } },
  4481 +{ "mtictc", XSPR(31,467,1019), XSPR_MASK, PPC750, { RS } },
  4482 +{ "mtpbl1", XSPR(31,467,1020), XSPR_MASK, PPC403, { RS } },
  4483 +{ "mtthrm1", XSPR(31,467,1020), XSPR_MASK, PPC750, { RS } },
  4484 +{ "mtpbu1", XSPR(31,467,1021), XSPR_MASK, PPC403, { RS } },
  4485 +{ "mtthrm2", XSPR(31,467,1021), XSPR_MASK, PPC750, { RS } },
  4486 +{ "mtpbl2", XSPR(31,467,1022), XSPR_MASK, PPC403, { RS } },
  4487 +{ "mtthrm3", XSPR(31,467,1022), XSPR_MASK, PPC750, { RS } },
  4488 +{ "mtpbu2", XSPR(31,467,1023), XSPR_MASK, PPC403, { RS } },
  4489 +{ "mtspr", X(31,467), X_MASK, COM, { SPR, RS } },
2654 4490  
2655 4491 { "dcbi", X(31,470), XRT_MASK, PPC, { RA, RB } },
2656 4492  
2657   -{ "nand", XRC(31,476,0), X_MASK, PPC|POWER, { RA, RS, RB } },
2658   -{ "nand.", XRC(31,476,1), X_MASK, PPC|POWER, { RA, RS, RB } },
  4493 +{ "nand", XRC(31,476,0), X_MASK, COM, { RA, RS, RB } },
  4494 +{ "nand.", XRC(31,476,1), X_MASK, COM, { RA, RS, RB } },
2659 4495  
2660   -{ "nabs", XO(31,488,0,0), XORB_MASK, POWER|M601, { RT, RA } },
2661   -{ "nabs.", XO(31,488,0,1), XORB_MASK, POWER|M601, { RT, RA } },
2662   -{ "nabso", XO(31,488,1,0), XORB_MASK, POWER|M601, { RT, RA } },
2663   -{ "nabso.", XO(31,488,1,1), XORB_MASK, POWER|M601, { RT, RA } },
  4496 +{ "dcbie", X(31,478), XRT_MASK, BOOKE64, { RA, RB } },
2664 4497  
2665   -{ "divd", XO(31,489,0,0), XO_MASK, PPC|B64, { RT, RA, RB } },
2666   -{ "divd.", XO(31,489,0,1), XO_MASK, PPC|B64, { RT, RA, RB } },
2667   -{ "divdo", XO(31,489,1,0), XO_MASK, PPC|B64, { RT, RA, RB } },
2668   -{ "divdo.", XO(31,489,1,1), XO_MASK, PPC|B64, { RT, RA, RB } },
  4498 +{ "dcread", X(31,486), X_MASK, PPC403|PPC440, { RT, RA, RB }},
  4499 +
  4500 +{ "mtpmr", X(31,462), X_MASK, PPCPMR, { PMR, RS }},
  4501 +
  4502 +{ "icbtls", X(31,486), X_MASK, PPCCHLK, { CT, RA, RB }},
  4503 +
  4504 +{ "nabs", XO(31,488,0,0), XORB_MASK, M601, { RT, RA } },
  4505 +{ "subfme64",XO(31,488,0,0), XORB_MASK, BOOKE64, { RT, RA } },
  4506 +{ "nabs.", XO(31,488,0,1), XORB_MASK, M601, { RT, RA } },
  4507 +{ "nabso", XO(31,488,1,0), XORB_MASK, M601, { RT, RA } },
  4508 +{ "subfme64o",XO(31,488,1,0), XORB_MASK, BOOKE64, { RT, RA } },
  4509 +{ "nabso.", XO(31,488,1,1), XORB_MASK, M601, { RT, RA } },
  4510 +
  4511 +{ "divd", XO(31,489,0,0), XO_MASK, PPC64, { RT, RA, RB } },
  4512 +{ "divd.", XO(31,489,0,1), XO_MASK, PPC64, { RT, RA, RB } },
  4513 +{ "divdo", XO(31,489,1,0), XO_MASK, PPC64, { RT, RA, RB } },
  4514 +{ "divdo.", XO(31,489,1,1), XO_MASK, PPC64, { RT, RA, RB } },
  4515 +
  4516 +{ "addme64", XO(31,490,0,0), XORB_MASK, BOOKE64, { RT, RA } },
  4517 +{ "addme64o",XO(31,490,1,0), XORB_MASK, BOOKE64, { RT, RA } },
2669 4518  
2670 4519 { "divw", XO(31,491,0,0), XO_MASK, PPC, { RT, RA, RB } },
2671 4520 { "divw.", XO(31,491,0,1), XO_MASK, PPC, { RT, RA, RB } },
2672 4521 { "divwo", XO(31,491,1,0), XO_MASK, PPC, { RT, RA, RB } },
2673 4522 { "divwo.", XO(31,491,1,1), XO_MASK, PPC, { RT, RA, RB } },
2674 4523  
2675   -{ "slbia", X(31,498), 0xffffffff, PPC|B64, { 0 } },
  4524 +{ "icbtlse", X(31,494), X_MASK, PPCCHLK64, { CT, RA, RB }},
  4525 +
  4526 +{ "slbia", X(31,498), 0xffffffff, PPC64, { 0 } },
2676 4527  
2677 4528 { "cli", X(31,502), XRB_MASK, POWER, { RT, RA } },
2678 4529  
2679   -{ "mcrxr", X(31,512), XRARB_MASK|(3<<21), PPC|POWER, { BF } },
  4530 +{ "stdcxe.", XRC(31,511,1), X_MASK, BOOKE64, { RS, RA, RB } },
  4531 +
  4532 +{ "mcrxr", X(31,512), XRARB_MASK|(3<<21), COM, { BF } },
2680 4533  
2681   -{ "clcs", X(31,531), XRB_MASK, POWER|M601, { RT, RA } },
  4534 +{ "bblels", X(31,518), X_MASK, PPCBRLK, { 0 }},
  4535 +{ "mcrxr64", X(31,544), XRARB_MASK|(3<<21), BOOKE64, { BF } },
2682 4536  
2683   -{ "lswx", X(31,533), X_MASK, PPC, { RT, RA, RB } },
2684   -{ "lsx", X(31,533), X_MASK, POWER, { RT, RA, RB } },
  4537 +{ "clcs", X(31,531), XRB_MASK, M601, { RT, RA } },
2685 4538  
2686   -{ "lwbrx", X(31,534), X_MASK, PPC, { RT, RA, RB } },
2687   -{ "lbrx", X(31,534), X_MASK, POWER, { RT, RA, RB } },
  4539 +{ "lswx", X(31,533), X_MASK, PPCCOM, { RT, RA0, RB } },
  4540 +{ "lsx", X(31,533), X_MASK, PWRCOM, { RT, RA, RB } },
2688 4541  
2689   -{ "lfsx", X(31,535), X_MASK, PPC|POWER, { FRT, RA, RB } },
  4542 +{ "lwbrx", X(31,534), X_MASK, PPCCOM, { RT, RA0, RB } },
  4543 +{ "lbrx", X(31,534), X_MASK, PWRCOM, { RT, RA, RB } },
2690 4544  
2691   -{ "srw", XRC(31,536,0), X_MASK, PPC, { RA, RS, RB } },
2692   -{ "sr", XRC(31,536,0), X_MASK, POWER, { RA, RS, RB } },
2693   -{ "srw.", XRC(31,536,1), X_MASK, PPC, { RA, RS, RB } },
2694   -{ "sr.", XRC(31,536,1), X_MASK, POWER, { RA, RS, RB } },
  4545 +{ "lfsx", X(31,535), X_MASK, COM, { FRT, RA0, RB } },
2695 4546  
2696   -{ "rrib", XRC(31,537,0), X_MASK, POWER|M601, { RA, RS, RB } },
2697   -{ "rrib.", XRC(31,537,1), X_MASK, POWER|M601, { RA, RS, RB } },
  4547 +{ "srw", XRC(31,536,0), X_MASK, PPCCOM, { RA, RS, RB } },
  4548 +{ "sr", XRC(31,536,0), X_MASK, PWRCOM, { RA, RS, RB } },
  4549 +{ "srw.", XRC(31,536,1), X_MASK, PPCCOM, { RA, RS, RB } },
  4550 +{ "sr.", XRC(31,536,1), X_MASK, PWRCOM, { RA, RS, RB } },
2698 4551  
2699   -{ "srd", XRC(31,539,0), X_MASK, PPC|B64, { RA, RS, RB } },
2700   -{ "srd.", XRC(31,539,1), X_MASK, PPC|B64, { RA, RS, RB } },
  4552 +{ "rrib", XRC(31,537,0), X_MASK, M601, { RA, RS, RB } },
  4553 +{ "rrib.", XRC(31,537,1), X_MASK, M601, { RA, RS, RB } },
2701 4554  
2702   -{ "maskir", XRC(31,541,0), X_MASK, POWER|M601, { RA, RS, RB } },
2703   -{ "maskir.", XRC(31,541,1), X_MASK, POWER|M601, { RA, RS, RB } },
  4555 +{ "srd", XRC(31,539,0), X_MASK, PPC64, { RA, RS, RB } },
  4556 +{ "srd.", XRC(31,539,1), X_MASK, PPC64, { RA, RS, RB } },
  4557 +
  4558 +{ "maskir", XRC(31,541,0), X_MASK, M601, { RA, RS, RB } },
  4559 +{ "maskir.", XRC(31,541,1), X_MASK, M601, { RA, RS, RB } },
  4560 +
  4561 +{ "lwbrxe", X(31,542), X_MASK, BOOKE64, { RT, RA0, RB } },
  4562 +
  4563 +{ "lfsxe", X(31,543), X_MASK, BOOKE64, { FRT, RA0, RB } },
  4564 +
  4565 +{ "bbelr", X(31,550), X_MASK, PPCBRLK, { 0 }},
2704 4566  
2705 4567 { "tlbsync", X(31,566), 0xffffffff, PPC, { 0 } },
2706 4568  
2707   -{ "lfsux", X(31,567), X_MASK, PPC|POWER, { FRT, RAS, RB } },
  4569 +{ "lfsux", X(31,567), X_MASK, COM, { FRT, RAS, RB } },
  4570 +
  4571 +{ "lfsuxe", X(31,575), X_MASK, BOOKE64, { FRT, RAS, RB } },
  4572 +
  4573 +{ "mfsr", X(31,595), XRB_MASK|(1<<20), COM32, { RT, SR } },
  4574 +
  4575 +{ "lswi", X(31,597), X_MASK, PPCCOM, { RT, RA0, NB } },
  4576 +{ "lsi", X(31,597), X_MASK, PWRCOM, { RT, RA0, NB } },
  4577 +
  4578 +{ "lwsync", XSYNC(31,598,1), 0xffffffff, PPC, { 0 } },
  4579 +{ "ptesync", XSYNC(31,598,2), 0xffffffff, PPC64, { 0 } },
  4580 +{ "msync", X(31,598), 0xffffffff, BOOKE, { 0 } },
  4581 +{ "sync", X(31,598), XSYNC_MASK, PPCCOM, { LS } },
  4582 +{ "dcs", X(31,598), 0xffffffff, PWRCOM, { 0 } },
  4583 +
  4584 +{ "lfdx", X(31,599), X_MASK, COM, { FRT, RA0, RB } },
  4585 +
  4586 +{ "lfdxe", X(31,607), X_MASK, BOOKE64, { FRT, RA0, RB } },
  4587 +
  4588 +{ "mfsri", X(31,627), X_MASK, PWRCOM, { RT, RA, RB } },
  4589 +
  4590 +{ "dclst", X(31,630), XRB_MASK, PWRCOM, { RS, RA } },
  4591 +
  4592 +{ "lfdux", X(31,631), X_MASK, COM, { FRT, RAS, RB } },
  4593 +
  4594 +{ "lfduxe", X(31,639), X_MASK, BOOKE64, { FRT, RAS, RB } },
  4595 +
  4596 +{ "mfsrin", X(31,659), XRA_MASK, PPC32, { RT, RB } },
  4597 +
  4598 +{ "stswx", X(31,661), X_MASK, PPCCOM, { RS, RA0, RB } },
  4599 +{ "stsx", X(31,661), X_MASK, PWRCOM, { RS, RA0, RB } },
  4600 +
  4601 +{ "stwbrx", X(31,662), X_MASK, PPCCOM, { RS, RA0, RB } },
  4602 +{ "stbrx", X(31,662), X_MASK, PWRCOM, { RS, RA0, RB } },
  4603 +
  4604 +{ "stfsx", X(31,663), X_MASK, COM, { FRS, RA0, RB } },
2708 4605  
2709   -{ "mfsr", X(31,595), XRB_MASK|(1<<20), PPC|POWER|B32, { RT, SR } },
  4606 +{ "srq", XRC(31,664,0), X_MASK, M601, { RA, RS, RB } },
  4607 +{ "srq.", XRC(31,664,1), X_MASK, M601, { RA, RS, RB } },
2710 4608  
2711   -{ "lswi", X(31,597), X_MASK, PPC, { RT, RA, NB } },
2712   -{ "lsi", X(31,597), X_MASK, POWER, { RT, RA, NB } },
  4609 +{ "sre", XRC(31,665,0), X_MASK, M601, { RA, RS, RB } },
  4610 +{ "sre.", XRC(31,665,1), X_MASK, M601, { RA, RS, RB } },
2713 4611  
2714   -{ "sync", X(31,598), 0xffffffff, PPC, { 0 } },
2715   -{ "dcs", X(31,598), 0xffffffff, POWER, { 0 } },
  4612 +{ "stwbrxe", X(31,670), X_MASK, BOOKE64, { RS, RA0, RB } },
2716 4613  
2717   -{ "lfdx", X(31,599), X_MASK, PPC|POWER, { FRT, RA, RB } },
  4614 +{ "stfsxe", X(31,671), X_MASK, BOOKE64, { FRS, RA0, RB } },
2718 4615  
2719   -{ "mfsri", X(31,627), X_MASK, POWER, { RT, RA, RB } },
  4616 +{ "stfsux", X(31,695), X_MASK, COM, { FRS, RAS, RB } },
2720 4617  
2721   -{ "dclst", X(31,630), XRB_MASK, POWER, { RS, RA } },
  4618 +{ "sriq", XRC(31,696,0), X_MASK, M601, { RA, RS, SH } },
  4619 +{ "sriq.", XRC(31,696,1), X_MASK, M601, { RA, RS, SH } },
2722 4620  
2723   -{ "lfdux", X(31,631), X_MASK, PPC|POWER, { FRT, RAS, RB } },
  4621 +{ "stfsuxe", X(31,703), X_MASK, BOOKE64, { FRS, RAS, RB } },
2724 4622  
2725   -{ "mfsrin", X(31,659), XRA_MASK, PPC|B32, { RT, RB } },
  4623 +{ "stswi", X(31,725), X_MASK, PPCCOM, { RS, RA0, NB } },
  4624 +{ "stsi", X(31,725), X_MASK, PWRCOM, { RS, RA0, NB } },
2726 4625  
2727   -{ "stswx", X(31,661), X_MASK, PPC, { RS, RA, RB } },
2728   -{ "stsx", X(31,661), X_MASK, POWER, { RS, RA, RB } },
  4626 +{ "stfdx", X(31,727), X_MASK, COM, { FRS, RA0, RB } },
2729 4627  
2730   -{ "stwbrx", X(31,662), X_MASK, PPC, { RS, RA, RB } },
2731   -{ "stbrx", X(31,662), X_MASK, POWER, { RS, RA, RB } },
  4628 +{ "srlq", XRC(31,728,0), X_MASK, M601, { RA, RS, RB } },
  4629 +{ "srlq.", XRC(31,728,1), X_MASK, M601, { RA, RS, RB } },
2732 4630  
2733   -{ "stfsx", X(31,663), X_MASK, PPC|POWER, { FRS, RA, RB } },
  4631 +{ "sreq", XRC(31,729,0), X_MASK, M601, { RA, RS, RB } },
  4632 +{ "sreq.", XRC(31,729,1), X_MASK, M601, { RA, RS, RB } },
2734 4633  
2735   -{ "srq", XRC(31,664,0), X_MASK, POWER|M601, { RA, RS, RB } },
2736   -{ "srq.", XRC(31,664,1), X_MASK, POWER|M601, { RA, RS, RB } },
  4634 +{ "stfdxe", X(31,735), X_MASK, BOOKE64, { FRS, RA0, RB } },
2737 4635  
2738   -{ "sre", XRC(31,665,0), X_MASK, POWER|M601, { RA, RS, RB } },
2739   -{ "sre.", XRC(31,665,1), X_MASK, POWER|M601, { RA, RS, RB } },
  4636 +{ "dcba", X(31,758), XRT_MASK, PPC405 | BOOKE, { RA, RB } },
2740 4637  
2741   -{ "stfsux", X(31,695), X_MASK, PPC|POWER, { FRS, RAS, RB } },
  4638 +{ "stfdux", X(31,759), X_MASK, COM, { FRS, RAS, RB } },
2742 4639  
2743   -{ "sriq", XRC(31,696,0), X_MASK, POWER|M601, { RA, RS, SH } },
2744   -{ "sriq.", XRC(31,696,1), X_MASK, POWER|M601, { RA, RS, SH } },
  4640 +{ "srliq", XRC(31,760,0), X_MASK, M601, { RA, RS, SH } },
  4641 +{ "srliq.", XRC(31,760,1), X_MASK, M601, { RA, RS, SH } },
2745 4642  
2746   -{ "stswi", X(31,725), X_MASK, PPC, { RS, RA, NB } },
2747   -{ "stsi", X(31,725), X_MASK, POWER, { RS, RA, NB } },
  4643 +{ "dcbae", X(31,766), XRT_MASK, BOOKE64, { RA, RB } },
2748 4644  
2749   -{ "stfdx", X(31,727), X_MASK, PPC|POWER, { FRS, RA, RB } },
  4645 +{ "stfduxe", X(31,767), X_MASK, BOOKE64, { FRS, RAS, RB } },
2750 4646  
2751   -{ "srlq", XRC(31,728,0), X_MASK, POWER|M601, { RA, RS, RB } },
2752   -{ "srlq.", XRC(31,728,1), X_MASK, POWER|M601, { RA, RS, RB } },
  4647 +{ "tlbivax", X(31,786), XRT_MASK, BOOKE, { RA, RB } },
  4648 +{ "tlbivaxe",X(31,787), XRT_MASK, BOOKE64, { RA, RB } },
2753 4649  
2754   -{ "sreq", XRC(31,729,0), X_MASK, POWER|M601, { RA, RS, RB } },
2755   -{ "sreq.", XRC(31,729,1), X_MASK, POWER|M601, { RA, RS, RB } },
  4650 +{ "lhbrx", X(31,790), X_MASK, COM, { RT, RA0, RB } },
2756 4651  
2757   -{ "stfdux", X(31,759), X_MASK, PPC|POWER, { FRS, RAS, RB } },
  4652 +{ "sraw", XRC(31,792,0), X_MASK, PPCCOM, { RA, RS, RB } },
  4653 +{ "sra", XRC(31,792,0), X_MASK, PWRCOM, { RA, RS, RB } },
  4654 +{ "sraw.", XRC(31,792,1), X_MASK, PPCCOM, { RA, RS, RB } },
  4655 +{ "sra.", XRC(31,792,1), X_MASK, PWRCOM, { RA, RS, RB } },
2758 4656  
2759   -{ "srliq", XRC(31,760,0), X_MASK, POWER|M601, { RA, RS, SH } },
2760   -{ "srliq.", XRC(31,760,1), X_MASK, POWER|M601, { RA, RS, SH } },
  4657 +{ "srad", XRC(31,794,0), X_MASK, PPC64, { RA, RS, RB } },
  4658 +{ "srad.", XRC(31,794,1), X_MASK, PPC64, { RA, RS, RB } },
2761 4659  
2762   -{ "lhbrx", X(31,790), X_MASK, PPC|POWER, { RT, RA, RB } },
  4660 +{ "lhbrxe", X(31,798), X_MASK, BOOKE64, { RT, RA0, RB } },
2763 4661  
2764   -{ "sraw", XRC(31,792,0), X_MASK, PPC, { RA, RS, RB } },
2765   -{ "sra", XRC(31,792,0), X_MASK, POWER, { RA, RS, RB } },
2766   -{ "sraw.", XRC(31,792,1), X_MASK, PPC, { RA, RS, RB } },
2767   -{ "sra.", XRC(31,792,1), X_MASK, POWER, { RA, RS, RB } },
  4662 +{ "ldxe", X(31,799), X_MASK, BOOKE64, { RT, RA0, RB } },
  4663 +{ "lduxe", X(31,831), X_MASK, BOOKE64, { RT, RA0, RB } },
2768 4664  
2769   -{ "srad", XRC(31,794,0), X_MASK, PPC|B64, { RA, RS, RB } },
2770   -{ "srad.", XRC(31,794,1), X_MASK, PPC|B64, { RA, RS, RB } },
  4665 +{ "rac", X(31,818), X_MASK, PWRCOM, { RT, RA, RB } },
2771 4666  
2772   -{ "rac", X(31,818), X_MASK, POWER, { RT, RA, RB } },
  4667 +{ "dss", XDSS(31,822,0), XDSS_MASK, PPCVEC, { STRM } },
  4668 +{ "dssall", XDSS(31,822,1), XDSS_MASK, PPCVEC, { 0 } },
2773 4669  
2774   -{ "srawi", XRC(31,824,0), X_MASK, PPC, { RA, RS, SH } },
2775   -{ "srai", XRC(31,824,0), X_MASK, POWER, { RA, RS, SH } },
2776   -{ "srawi.", XRC(31,824,1), X_MASK, PPC, { RA, RS, SH } },
2777   -{ "srai.", XRC(31,824,1), X_MASK, POWER, { RA, RS, SH } },
  4670 +{ "srawi", XRC(31,824,0), X_MASK, PPCCOM, { RA, RS, SH } },
  4671 +{ "srai", XRC(31,824,0), X_MASK, PWRCOM, { RA, RS, SH } },
  4672 +{ "srawi.", XRC(31,824,1), X_MASK, PPCCOM, { RA, RS, SH } },
  4673 +{ "srai.", XRC(31,824,1), X_MASK, PWRCOM, { RA, RS, SH } },
2778 4674  
  4675 +{ "slbmfev", X(31,851), XRA_MASK, PPC64, { RT, RB } },
  4676 +
  4677 +{ "mbar", X(31,854), X_MASK, BOOKE, { MO } },
2779 4678 { "eieio", X(31,854), 0xffffffff, PPC, { 0 } },
2780 4679  
2781   -{ "sthbrx", X(31,918), X_MASK, PPC|POWER, { RS, RA, RB } },
  4680 +{ "tlbsx", XRC(31,914,0), X_MASK, PPC403|BOOKE, { RTO, RA, RB } },
  4681 +{ "tlbsx.", XRC(31,914,1), X_MASK, PPC403|BOOKE, { RTO, RA, RB } },
  4682 +{ "tlbsxe", XRC(31,915,0), X_MASK, BOOKE64, { RA, RB } },
  4683 +{ "tlbsxe.", XRC(31,915,1), X_MASK, BOOKE64, { RA, RB } },
  4684 +
  4685 +{ "slbmfee", X(31,915), XRA_MASK, PPC64, { RT, RB } },
  4686 +
  4687 +{ "sthbrx", X(31,918), X_MASK, COM, { RS, RA0, RB } },
  4688 +
  4689 +{ "sraq", XRC(31,920,0), X_MASK, M601, { RA, RS, RB } },
  4690 +{ "sraq.", XRC(31,920,1), X_MASK, M601, { RA, RS, RB } },
2782 4691  
2783   -{ "sraq", XRC(31,920,0), X_MASK, POWER|M601, { RA, RS, RB } },
2784   -{ "sraq.", XRC(31,920,1), X_MASK, POWER|M601, { RA, RS, RB } },
  4692 +{ "srea", XRC(31,921,0), X_MASK, M601, { RA, RS, RB } },
  4693 +{ "srea.", XRC(31,921,1), X_MASK, M601, { RA, RS, RB } },
2785 4694  
2786   -{ "srea", XRC(31,921,0), X_MASK, POWER|M601, { RA, RS, RB } },
2787   -{ "srea.", XRC(31,921,1), X_MASK, POWER|M601, { RA, RS, RB } },
  4695 +{ "extsh", XRC(31,922,0), XRB_MASK, PPCCOM, { RA, RS } },
  4696 +{ "exts", XRC(31,922,0), XRB_MASK, PWRCOM, { RA, RS } },
  4697 +{ "extsh.", XRC(31,922,1), XRB_MASK, PPCCOM, { RA, RS } },
  4698 +{ "exts.", XRC(31,922,1), XRB_MASK, PWRCOM, { RA, RS } },
2788 4699  
2789   -{ "extsh", XRC(31,922,0), XRB_MASK, PPC, { RA, RS } },
2790   -{ "exts", XRC(31,922,0), XRB_MASK, POWER, { RA, RS } },
2791   -{ "extsh.", XRC(31,922,1), XRB_MASK, PPC, { RA, RS } },
2792   -{ "exts.", XRC(31,922,1), XRB_MASK, POWER, { RA, RS } },
  4700 +{ "sthbrxe", X(31,926), X_MASK, BOOKE64, { RS, RA0, RB } },
2793 4701  
2794   -{ "sraiq", XRC(31,952,0), X_MASK, POWER|M601, { RA, RS, SH } },
2795   -{ "sraiq.", XRC(31,952,1), X_MASK, POWER|M601, { RA, RS, SH } },
  4702 +{ "stdxe", X(31,927), X_MASK, BOOKE64, { RS, RA0, RB } },
  4703 +
  4704 +{ "tlbrehi", XTLB(31,946,0), XTLB_MASK, PPC403, { RT, RA } },
  4705 +{ "tlbrelo", XTLB(31,946,1), XTLB_MASK, PPC403, { RT, RA } },
  4706 +{ "tlbre", X(31,946), X_MASK, PPC403|BOOKE, { RSO, RAOPT, SHO } },
  4707 +
  4708 +{ "sraiq", XRC(31,952,0), X_MASK, M601, { RA, RS, SH } },
  4709 +{ "sraiq.", XRC(31,952,1), X_MASK, M601, { RA, RS, SH } },
2796 4710  
2797 4711 { "extsb", XRC(31,954,0), XRB_MASK, PPC, { RA, RS} },
2798 4712 { "extsb.", XRC(31,954,1), XRB_MASK, PPC, { RA, RS} },
2799 4713  
2800   -{ "iccci", X(31,966), XRT_MASK, PPC, { RA, RB } },
  4714 +{ "stduxe", X(31,959), X_MASK, BOOKE64, { RS, RAS, RB } },
  4715 +
  4716 +{ "iccci", X(31,966), XRT_MASK, PPC403|PPC440, { RA, RB } },
  4717 +
  4718 +{ "tlbwehi", XTLB(31,978,0), XTLB_MASK, PPC403, { RT, RA } },
  4719 +{ "tlbwelo", XTLB(31,978,1), XTLB_MASK, PPC403, { RT, RA } },
  4720 +{ "tlbwe", X(31,978), X_MASK, PPC403|BOOKE, { RSO, RAOPT, SHO } },
  4721 +{ "tlbld", X(31,978), XRTRA_MASK, PPC, { RB } },
2801 4722  
2802 4723 { "icbi", X(31,982), XRT_MASK, PPC, { RA, RB } },
2803 4724  
2804   -{ "stfiwx", X(31,983), X_MASK, PPC, { FRS, RA, RB } },
  4725 +{ "stfiwx", X(31,983), X_MASK, PPC, { FRS, RA0, RB } },
  4726 +
  4727 +{ "extsw", XRC(31,986,0), XRB_MASK, PPC64 | BOOKE64,{ RA, RS } },
  4728 +{ "extsw.", XRC(31,986,1), XRB_MASK, PPC64, { RA, RS } },
  4729 +
  4730 +{ "icread", X(31,998), XRT_MASK, PPC403|PPC440, { RA, RB } },
2805 4731  
2806   -{ "extsw", XRC(31,986,0), XRB_MASK, PPC, { RA, RS } },
2807   -{ "extsw.", XRC(31,986,1), XRB_MASK, PPC, { RA, RS } },
  4732 +{ "icbie", X(31,990), XRT_MASK, BOOKE64, { RA, RB } },
  4733 +{ "stfiwxe", X(31,991), X_MASK, BOOKE64, { FRS, RA0, RB } },
2808 4734  
  4735 +{ "tlbli", X(31,1010), XRTRA_MASK, PPC, { RB } },
  4736 +
  4737 +{ "dcbzl", XOPL(31,1014,1), XRT_MASK,POWER4, { RA, RB } },
2809 4738 { "dcbz", X(31,1014), XRT_MASK, PPC, { RA, RB } },
2810 4739 { "dclz", X(31,1014), XRT_MASK, PPC, { RA, RB } },
2811 4740  
2812   -{ "lwz", OP(32), OP_MASK, PPC, { RT, D, RA } },
2813   -{ "l", OP(32), OP_MASK, POWER, { RT, D, RA } },
  4741 +{ "dcbze", X(31,1022), XRT_MASK, BOOKE64, { RA, RB } },
  4742 +
  4743 +{ "lvebx", X(31, 7), X_MASK, PPCVEC, { VD, RA, RB } },
  4744 +{ "lvehx", X(31, 39), X_MASK, PPCVEC, { VD, RA, RB } },
  4745 +{ "lvewx", X(31, 71), X_MASK, PPCVEC, { VD, RA, RB } },
  4746 +{ "lvsl", X(31, 6), X_MASK, PPCVEC, { VD, RA, RB } },
  4747 +{ "lvsr", X(31, 38), X_MASK, PPCVEC, { VD, RA, RB } },
  4748 +{ "lvx", X(31, 103), X_MASK, PPCVEC, { VD, RA, RB } },
  4749 +{ "lvxl", X(31, 359), X_MASK, PPCVEC, { VD, RA, RB } },
  4750 +{ "stvebx", X(31, 135), X_MASK, PPCVEC, { VS, RA, RB } },
  4751 +{ "stvehx", X(31, 167), X_MASK, PPCVEC, { VS, RA, RB } },
  4752 +{ "stvewx", X(31, 199), X_MASK, PPCVEC, { VS, RA, RB } },
  4753 +{ "stvx", X(31, 231), X_MASK, PPCVEC, { VS, RA, RB } },
  4754 +{ "stvxl", X(31, 487), X_MASK, PPCVEC, { VS, RA, RB } },
  4755 +
  4756 +{ "lwz", OP(32), OP_MASK, PPCCOM, { RT, D, RA0 } },
  4757 +{ "l", OP(32), OP_MASK, PWRCOM, { RT, D, RA0 } },
2814 4758  
2815   -{ "lwzu", OP(33), OP_MASK, PPC, { RT, D, RAL } },
2816   -{ "lu", OP(33), OP_MASK, POWER, { RT, D, RA } },
  4759 +{ "lwzu", OP(33), OP_MASK, PPCCOM, { RT, D, RAL } },
  4760 +{ "lu", OP(33), OP_MASK, PWRCOM, { RT, D, RA0 } },
2817 4761  
2818   -{ "lbz", OP(34), OP_MASK, PPC|POWER, { RT, D, RA } },
  4762 +{ "lbz", OP(34), OP_MASK, COM, { RT, D, RA0 } },
2819 4763  
2820   -{ "lbzu", OP(35), OP_MASK, PPC|POWER, { RT, D, RAL } },
  4764 +{ "lbzu", OP(35), OP_MASK, COM, { RT, D, RAL } },
2821 4765  
2822   -{ "stw", OP(36), OP_MASK, PPC, { RS, D, RA } },
2823   -{ "st", OP(36), OP_MASK, POWER, { RS, D, RA } },
  4766 +{ "stw", OP(36), OP_MASK, PPCCOM, { RS, D, RA0 } },
  4767 +{ "st", OP(36), OP_MASK, PWRCOM, { RS, D, RA0 } },
2824 4768  
2825   -{ "stwu", OP(37), OP_MASK, PPC, { RS, D, RAS } },
2826   -{ "stu", OP(37), OP_MASK, POWER, { RS, D, RA } },
  4769 +{ "stwu", OP(37), OP_MASK, PPCCOM, { RS, D, RAS } },
  4770 +{ "stu", OP(37), OP_MASK, PWRCOM, { RS, D, RA0 } },
2827 4771  
2828   -{ "stb", OP(38), OP_MASK, PPC|POWER, { RS, D, RA } },
  4772 +{ "stb", OP(38), OP_MASK, COM, { RS, D, RA0 } },
2829 4773  
2830   -{ "stbu", OP(39), OP_MASK, PPC|POWER, { RS, D, RAS } },
  4774 +{ "stbu", OP(39), OP_MASK, COM, { RS, D, RAS } },
2831 4775  
2832   -{ "lhz", OP(40), OP_MASK, PPC|POWER, { RT, D, RA } },
  4776 +{ "lhz", OP(40), OP_MASK, COM, { RT, D, RA0 } },
2833 4777  
2834   -{ "lhzu", OP(41), OP_MASK, PPC|POWER, { RT, D, RAL } },
  4778 +{ "lhzu", OP(41), OP_MASK, COM, { RT, D, RAL } },
2835 4779  
2836   -{ "lha", OP(42), OP_MASK, PPC|POWER, { RT, D, RA } },
  4780 +{ "lha", OP(42), OP_MASK, COM, { RT, D, RA0 } },
2837 4781  
2838   -{ "lhau", OP(43), OP_MASK, PPC|POWER, { RT, D, RAL } },
  4782 +{ "lhau", OP(43), OP_MASK, COM, { RT, D, RAL } },
2839 4783  
2840   -{ "sth", OP(44), OP_MASK, PPC|POWER, { RS, D, RA } },
  4784 +{ "sth", OP(44), OP_MASK, COM, { RS, D, RA0 } },
2841 4785  
2842   -{ "sthu", OP(45), OP_MASK, PPC|POWER, { RS, D, RAS } },
  4786 +{ "sthu", OP(45), OP_MASK, COM, { RS, D, RAS } },
2843 4787  
2844   -{ "lmw", OP(46), OP_MASK, PPC, { RT, D, RAM } },
2845   -{ "lm", OP(46), OP_MASK, POWER, { RT, D, RA } },
  4788 +{ "lmw", OP(46), OP_MASK, PPCCOM, { RT, D, RAM } },
  4789 +{ "lm", OP(46), OP_MASK, PWRCOM, { RT, D, RA0 } },
2846 4790  
2847   -{ "stmw", OP(47), OP_MASK, PPC, { RS, D, RA } },
2848   -{ "stm", OP(47), OP_MASK, POWER, { RS, D, RA } },
  4791 +{ "stmw", OP(47), OP_MASK, PPCCOM, { RS, D, RA0 } },
  4792 +{ "stm", OP(47), OP_MASK, PWRCOM, { RS, D, RA0 } },
2849 4793  
2850   -{ "lfs", OP(48), OP_MASK, PPC|POWER, { FRT, D, RA } },
  4794 +{ "lfs", OP(48), OP_MASK, COM, { FRT, D, RA0 } },
2851 4795  
2852   -{ "lfsu", OP(49), OP_MASK, PPC|POWER, { FRT, D, RAS } },
  4796 +{ "lfsu", OP(49), OP_MASK, COM, { FRT, D, RAS } },
2853 4797  
2854   -{ "lfd", OP(50), OP_MASK, PPC|POWER, { FRT, D, RA } },
  4798 +{ "lfd", OP(50), OP_MASK, COM, { FRT, D, RA0 } },
2855 4799  
2856   -{ "lfdu", OP(51), OP_MASK, PPC|POWER, { FRT, D, RAS } },
  4800 +{ "lfdu", OP(51), OP_MASK, COM, { FRT, D, RAS } },
2857 4801  
2858   -{ "stfs", OP(52), OP_MASK, PPC|POWER, { FRS, D, RA } },
  4802 +{ "stfs", OP(52), OP_MASK, COM, { FRS, D, RA0 } },
2859 4803  
2860   -{ "stfsu", OP(53), OP_MASK, PPC|POWER, { FRS, D, RAS } },
  4804 +{ "stfsu", OP(53), OP_MASK, COM, { FRS, D, RAS } },
2861 4805  
2862   -{ "stfd", OP(54), OP_MASK, PPC|POWER, { FRS, D, RA } },
  4806 +{ "stfd", OP(54), OP_MASK, COM, { FRS, D, RA0 } },
2863 4807  
2864   -{ "stfdu", OP(55), OP_MASK, PPC|POWER, { FRS, D, RAS } },
  4808 +{ "stfdu", OP(55), OP_MASK, COM, { FRS, D, RAS } },
2865 4809  
2866   -{ "lfq", OP(56), OP_MASK, POWER2, { FRT, D, RA } },
  4810 +{ "lq", OP(56), OP_MASK, POWER4, { RTQ, DQ, RAQ } },
2867 4811  
2868   -{ "lfqu", OP(57), OP_MASK, POWER2, { FRT, D, RA } },
  4812 +{ "lfq", OP(56), OP_MASK, POWER2, { FRT, D, RA0 } },
2869 4813  
2870   -{ "ld", DSO(58,0), DS_MASK, PPC|B64, { RT, DS, RA } },
  4814 +{ "lfqu", OP(57), OP_MASK, POWER2, { FRT, D, RA0 } },
2871 4815  
2872   -{ "ldu", DSO(58,1), DS_MASK, PPC|B64, { RT, DS, RAL } },
  4816 +{ "lbze", DEO(58,0), DE_MASK, BOOKE64, { RT, DE, RA0 } },
  4817 +{ "lbzue", DEO(58,1), DE_MASK, BOOKE64, { RT, DE, RAL } },
  4818 +{ "lhze", DEO(58,2), DE_MASK, BOOKE64, { RT, DE, RA0 } },
  4819 +{ "lhzue", DEO(58,3), DE_MASK, BOOKE64, { RT, DE, RAL } },
  4820 +{ "lhae", DEO(58,4), DE_MASK, BOOKE64, { RT, DE, RA0 } },
  4821 +{ "lhaue", DEO(58,5), DE_MASK, BOOKE64, { RT, DE, RAL } },
  4822 +{ "lwze", DEO(58,6), DE_MASK, BOOKE64, { RT, DE, RA0 } },
  4823 +{ "lwzue", DEO(58,7), DE_MASK, BOOKE64, { RT, DE, RAL } },
  4824 +{ "stbe", DEO(58,8), DE_MASK, BOOKE64, { RS, DE, RA0 } },
  4825 +{ "stbue", DEO(58,9), DE_MASK, BOOKE64, { RS, DE, RAS } },
  4826 +{ "sthe", DEO(58,10), DE_MASK, BOOKE64, { RS, DE, RA0 } },
  4827 +{ "sthue", DEO(58,11), DE_MASK, BOOKE64, { RS, DE, RAS } },
  4828 +{ "stwe", DEO(58,14), DE_MASK, BOOKE64, { RS, DE, RA0 } },
  4829 +{ "stwue", DEO(58,15), DE_MASK, BOOKE64, { RS, DE, RAS } },
2873 4830  
2874   -{ "lwa", DSO(58,2), DS_MASK, PPC|B64, { RT, DS, RA } },
  4831 +{ "ld", DSO(58,0), DS_MASK, PPC64, { RT, DS, RA0 } },
  4832 +
  4833 +{ "ldu", DSO(58,1), DS_MASK, PPC64, { RT, DS, RAL } },
  4834 +
  4835 +{ "lwa", DSO(58,2), DS_MASK, PPC64, { RT, DS, RA0 } },
2875 4836  
2876 4837 { "fdivs", A(59,18,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
2877 4838 { "fdivs.", A(59,18,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
... ... @@ -2891,6 +4852,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
2891 4852 { "fmuls", A(59,25,0), AFRB_MASK, PPC, { FRT, FRA, FRC } },
2892 4853 { "fmuls.", A(59,25,1), AFRB_MASK, PPC, { FRT, FRA, FRC } },
2893 4854  
  4855 +{ "frsqrtes", A(59,26,0), AFRAFRC_MASK, POWER5, { FRT, FRB } },
  4856 +{ "frsqrtes.",A(59,26,1), AFRAFRC_MASK, POWER5, { FRT, FRB } },
  4857 +
2894 4858 { "fmsubs", A(59,28,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2895 4859 { "fmsubs.", A(59,28,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2896 4860  
... ... @@ -2907,113 +4871,140 @@ const struct powerpc_opcode powerpc_opcodes[] = {
2907 4871  
2908 4872 { "stfqu", OP(61), OP_MASK, POWER2, { FRS, D, RA } },
2909 4873  
2910   -{ "std", DSO(62,0), DS_MASK, PPC|B64, { RS, DS, RA } },
  4874 +{ "lde", DEO(62,0), DE_MASK, BOOKE64, { RT, DES, RA0 } },
  4875 +{ "ldue", DEO(62,1), DE_MASK, BOOKE64, { RT, DES, RA0 } },
  4876 +{ "lfse", DEO(62,4), DE_MASK, BOOKE64, { FRT, DES, RA0 } },
  4877 +{ "lfsue", DEO(62,5), DE_MASK, BOOKE64, { FRT, DES, RAS } },
  4878 +{ "lfde", DEO(62,6), DE_MASK, BOOKE64, { FRT, DES, RA0 } },
  4879 +{ "lfdue", DEO(62,7), DE_MASK, BOOKE64, { FRT, DES, RAS } },
  4880 +{ "stde", DEO(62,8), DE_MASK, BOOKE64, { RS, DES, RA0 } },
  4881 +{ "stdue", DEO(62,9), DE_MASK, BOOKE64, { RS, DES, RAS } },
  4882 +{ "stfse", DEO(62,12), DE_MASK, BOOKE64, { FRS, DES, RA0 } },
  4883 +{ "stfsue", DEO(62,13), DE_MASK, BOOKE64, { FRS, DES, RAS } },
  4884 +{ "stfde", DEO(62,14), DE_MASK, BOOKE64, { FRS, DES, RA0 } },
  4885 +{ "stfdue", DEO(62,15), DE_MASK, BOOKE64, { FRS, DES, RAS } },
2911 4886  
2912   -{ "stdu", DSO(62,1), DS_MASK, PPC|B64, { RS, DS, RAS } },
  4887 +{ "std", DSO(62,0), DS_MASK, PPC64, { RS, DS, RA0 } },
2913 4888  
2914   -{ "fcmpu", X(63,0), X_MASK|(3<<21), PPC|POWER, { BF, FRA, FRB } },
  4889 +{ "stdu", DSO(62,1), DS_MASK, PPC64, { RS, DS, RAS } },
2915 4890  
2916   -{ "frsp", XRC(63,12,0), XRA_MASK, PPC|POWER, { FRT, FRB } },
2917   -{ "frsp.", XRC(63,12,1), XRA_MASK, PPC|POWER, { FRT, FRB } },
  4891 +{ "stq", DSO(62,2), DS_MASK, POWER4, { RSQ, DS, RA0 } },
2918 4892  
2919   -{ "fctiw", XRC(63,14,0), XRA_MASK, PPC, { FRT, FRB } },
  4893 +{ "fcmpu", X(63,0), X_MASK|(3<<21), COM, { BF, FRA, FRB } },
  4894 +
  4895 +{ "frsp", XRC(63,12,0), XRA_MASK, COM, { FRT, FRB } },
  4896 +{ "frsp.", XRC(63,12,1), XRA_MASK, COM, { FRT, FRB } },
  4897 +
  4898 +{ "fctiw", XRC(63,14,0), XRA_MASK, PPCCOM, { FRT, FRB } },
2920 4899 { "fcir", XRC(63,14,0), XRA_MASK, POWER2, { FRT, FRB } },
2921   -{ "fctiw.", XRC(63,14,1), XRA_MASK, PPC, { FRT, FRB } },
  4900 +{ "fctiw.", XRC(63,14,1), XRA_MASK, PPCCOM, { FRT, FRB } },
2922 4901 { "fcir.", XRC(63,14,1), XRA_MASK, POWER2, { FRT, FRB } },
2923 4902  
2924   -{ "fctiwz", XRC(63,15,0), XRA_MASK, PPC, { FRT, FRB } },
  4903 +{ "fctiwz", XRC(63,15,0), XRA_MASK, PPCCOM, { FRT, FRB } },
2925 4904 { "fcirz", XRC(63,15,0), XRA_MASK, POWER2, { FRT, FRB } },
2926   -{ "fctiwz.", XRC(63,15,1), XRA_MASK, PPC, { FRT, FRB } },
  4905 +{ "fctiwz.", XRC(63,15,1), XRA_MASK, PPCCOM, { FRT, FRB } },
2927 4906 { "fcirz.", XRC(63,15,1), XRA_MASK, POWER2, { FRT, FRB } },
2928 4907  
2929   -{ "fdiv", A(63,18,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
2930   -{ "fd", A(63,18,0), AFRC_MASK, POWER, { FRT, FRA, FRB } },
2931   -{ "fdiv.", A(63,18,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
2932   -{ "fd.", A(63,18,1), AFRC_MASK, POWER, { FRT, FRA, FRB } },
  4908 +{ "fdiv", A(63,18,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
  4909 +{ "fd", A(63,18,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
  4910 +{ "fdiv.", A(63,18,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
  4911 +{ "fd.", A(63,18,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
2933 4912  
2934   -{ "fsub", A(63,20,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
2935   -{ "fs", A(63,20,0), AFRC_MASK, POWER, { FRT, FRA, FRB } },
2936   -{ "fsub.", A(63,20,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
2937   -{ "fs.", A(63,20,1), AFRC_MASK, POWER, { FRT, FRA, FRB } },
  4913 +{ "fsub", A(63,20,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
  4914 +{ "fs", A(63,20,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
  4915 +{ "fsub.", A(63,20,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
  4916 +{ "fs.", A(63,20,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
2938 4917  
2939   -{ "fadd", A(63,21,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
2940   -{ "fa", A(63,21,0), AFRC_MASK, POWER, { FRT, FRA, FRB } },
2941   -{ "fadd.", A(63,21,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
2942   -{ "fa.", A(63,21,1), AFRC_MASK, POWER, { FRT, FRA, FRB } },
  4918 +{ "fadd", A(63,21,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
  4919 +{ "fa", A(63,21,0), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
  4920 +{ "fadd.", A(63,21,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
  4921 +{ "fa.", A(63,21,1), AFRC_MASK, PWRCOM, { FRT, FRA, FRB } },
2943 4922  
2944   -{ "fsqrt", A(63,22,0), AFRAFRC_MASK, PPC|POWER2, { FRT, FRB } },
2945   -{ "fsqrt.", A(63,22,1), AFRAFRC_MASK, PPC|POWER2, { FRT, FRB } },
  4923 +{ "fsqrt", A(63,22,0), AFRAFRC_MASK, PPCPWR2, { FRT, FRB } },
  4924 +{ "fsqrt.", A(63,22,1), AFRAFRC_MASK, PPCPWR2, { FRT, FRB } },
2946 4925  
2947 4926 { "fsel", A(63,23,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2948 4927 { "fsel.", A(63,23,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2949 4928  
2950   -{ "fmul", A(63,25,0), AFRB_MASK, PPC, { FRT, FRA, FRC } },
2951   -{ "fm", A(63,25,0), AFRB_MASK, POWER, { FRT, FRA, FRC } },
2952   -{ "fmul.", A(63,25,1), AFRB_MASK, PPC, { FRT, FRA, FRC } },
2953   -{ "fm.", A(63,25,1), AFRB_MASK, POWER, { FRT, FRA, FRC } },
  4929 +{ "fre", A(63,24,0), AFRAFRC_MASK, POWER5, { FRT, FRB } },
  4930 +{ "fre.", A(63,24,1), AFRAFRC_MASK, POWER5, { FRT, FRB } },
  4931 +
  4932 +{ "fmul", A(63,25,0), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } },
  4933 +{ "fm", A(63,25,0), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } },
  4934 +{ "fmul.", A(63,25,1), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } },
  4935 +{ "fm.", A(63,25,1), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } },
2954 4936  
2955 4937 { "frsqrte", A(63,26,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
2956 4938 { "frsqrte.",A(63,26,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
2957 4939  
2958   -{ "fmsub", A(63,28,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2959   -{ "fms", A(63,28,0), A_MASK, POWER, { FRT,FRA,FRC,FRB } },
2960   -{ "fmsub.", A(63,28,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2961   -{ "fms.", A(63,28,1), A_MASK, POWER, { FRT,FRA,FRC,FRB } },
  4940 +{ "fmsub", A(63,28,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
  4941 +{ "fms", A(63,28,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
  4942 +{ "fmsub.", A(63,28,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
  4943 +{ "fms.", A(63,28,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
2962 4944  
2963   -{ "fmadd", A(63,29,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2964   -{ "fma", A(63,29,0), A_MASK, POWER, { FRT,FRA,FRC,FRB } },
2965   -{ "fmadd.", A(63,29,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2966   -{ "fma.", A(63,29,1), A_MASK, POWER, { FRT,FRA,FRC,FRB } },
  4945 +{ "fmadd", A(63,29,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
  4946 +{ "fma", A(63,29,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
  4947 +{ "fmadd.", A(63,29,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
  4948 +{ "fma.", A(63,29,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
2967 4949  
2968   -{ "fnmsub", A(63,30,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2969   -{ "fnms", A(63,30,0), A_MASK, POWER, { FRT,FRA,FRC,FRB } },
2970   -{ "fnmsub.", A(63,30,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2971   -{ "fnms.", A(63,30,1), A_MASK, POWER, { FRT,FRA,FRC,FRB } },
  4950 +{ "fnmsub", A(63,30,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
  4951 +{ "fnms", A(63,30,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
  4952 +{ "fnmsub.", A(63,30,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
  4953 +{ "fnms.", A(63,30,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
2972 4954  
2973   -{ "fnmadd", A(63,31,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2974   -{ "fnma", A(63,31,0), A_MASK, POWER, { FRT,FRA,FRC,FRB } },
2975   -{ "fnmadd.", A(63,31,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2976   -{ "fnma.", A(63,31,1), A_MASK, POWER, { FRT,FRA,FRC,FRB } },
  4955 +{ "fnmadd", A(63,31,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
  4956 +{ "fnma", A(63,31,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
  4957 +{ "fnmadd.", A(63,31,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
  4958 +{ "fnma.", A(63,31,1), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } },
2977 4959  
2978   -{ "fcmpo", X(63,30), X_MASK|(3<<21), PPC|POWER, { BF, FRA, FRB } },
  4960 +{ "fcmpo", X(63,32), X_MASK|(3<<21), COM, { BF, FRA, FRB } },
2979 4961  
2980   -{ "mtfsb1", XRC(63,38,0), XRARB_MASK, PPC|POWER, { BT } },
2981   -{ "mtfsb1.", XRC(63,38,1), XRARB_MASK, PPC|POWER, { BT } },
  4962 +{ "mtfsb1", XRC(63,38,0), XRARB_MASK, COM, { BT } },
  4963 +{ "mtfsb1.", XRC(63,38,1), XRARB_MASK, COM, { BT } },
2982 4964  
2983   -{ "fneg", XRC(63,40,0), XRA_MASK, PPC|POWER, { FRT, FRB } },
2984   -{ "fneg.", XRC(63,40,1), XRA_MASK, PPC|POWER, { FRT, FRB } },
  4965 +{ "fneg", XRC(63,40,0), XRA_MASK, COM, { FRT, FRB } },
  4966 +{ "fneg.", XRC(63,40,1), XRA_MASK, COM, { FRT, FRB } },
2985 4967  
2986   -{ "mcrfs", X(63,64), XRB_MASK|(3<<21)|(3<<16), PPC|POWER, { BF, BFA } },
  4968 +{ "mcrfs", X(63,64), XRB_MASK|(3<<21)|(3<<16), COM, { BF, BFA } },
2987 4969  
2988   -{ "mtfsb0", XRC(63,70,0), XRARB_MASK, PPC|POWER, { BT } },
2989   -{ "mtfsb0.", XRC(63,70,1), XRARB_MASK, PPC|POWER, { BT } },
  4970 +{ "mtfsb0", XRC(63,70,0), XRARB_MASK, COM, { BT } },
  4971 +{ "mtfsb0.", XRC(63,70,1), XRARB_MASK, COM, { BT } },
2990 4972  
2991   -{ "fmr", XRC(63,72,0), XRA_MASK, PPC|POWER, { FRT, FRB } },
2992   -{ "fmr.", XRC(63,72,1), XRA_MASK, PPC|POWER, { FRT, FRB } },
  4973 +{ "fmr", XRC(63,72,0), XRA_MASK, COM, { FRT, FRB } },
  4974 +{ "fmr.", XRC(63,72,1), XRA_MASK, COM, { FRT, FRB } },
2993 4975  
2994   -{ "mtfsfi", XRC(63,134,0), XRA_MASK|(3<<21)|(1<<11), PPC|POWER, { BF, U } },
2995   -{ "mtfsfi.", XRC(63,134,1), XRA_MASK|(3<<21)|(1<<11), PPC|POWER, { BF, U } },
  4976 +{ "mtfsfi", XRC(63,134,0), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } },
  4977 +{ "mtfsfi.", XRC(63,134,1), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } },
2996 4978  
2997   -{ "fnabs", XRC(63,136,0), XRA_MASK, PPC|POWER, { FRT, FRB } },
2998   -{ "fnabs.", XRC(63,136,1), XRA_MASK, PPC|POWER, { FRT, FRB } },
  4979 +{ "fnabs", XRC(63,136,0), XRA_MASK, COM, { FRT, FRB } },
  4980 +{ "fnabs.", XRC(63,136,1), XRA_MASK, COM, { FRT, FRB } },
2999 4981  
3000   -{ "fabs", XRC(63,264,0), XRA_MASK, PPC|POWER, { FRT, FRB } },
3001   -{ "fabs.", XRC(63,264,1), XRA_MASK, PPC|POWER, { FRT, FRB } },
  4982 +{ "fabs", XRC(63,264,0), XRA_MASK, COM, { FRT, FRB } },
  4983 +{ "fabs.", XRC(63,264,1), XRA_MASK, COM, { FRT, FRB } },
3002 4984  
3003   -{ "mffs", XRC(63,583,0), XRARB_MASK, PPC|POWER, { FRT } },
3004   -{ "mffs.", XRC(63,583,1), XRARB_MASK, PPC|POWER, { FRT } },
  4985 +{ "frin", XRC(63,392,0), XRA_MASK, POWER5, { FRT, FRB } },
  4986 +{ "frin.", XRC(63,392,1), XRA_MASK, POWER5, { FRT, FRB } },
  4987 +{ "friz", XRC(63,424,0), XRA_MASK, POWER5, { FRT, FRB } },
  4988 +{ "friz.", XRC(63,424,1), XRA_MASK, POWER5, { FRT, FRB } },
  4989 +{ "frip", XRC(63,456,0), XRA_MASK, POWER5, { FRT, FRB } },
  4990 +{ "frip.", XRC(63,456,1), XRA_MASK, POWER5, { FRT, FRB } },
  4991 +{ "frim", XRC(63,488,0), XRA_MASK, POWER5, { FRT, FRB } },
  4992 +{ "frim.", XRC(63,488,1), XRA_MASK, POWER5, { FRT, FRB } },
3005 4993  
3006   -{ "mtfsf", XFL(63,711,0), XFL_MASK, PPC|POWER, { FLM, FRB } },
3007   -{ "mtfsf.", XFL(63,711,1), XFL_MASK, PPC|POWER, { FLM, FRB } },
  4994 +{ "mffs", XRC(63,583,0), XRARB_MASK, COM, { FRT } },
  4995 +{ "mffs.", XRC(63,583,1), XRARB_MASK, COM, { FRT } },
3008 4996  
3009   -{ "fctid", XRC(63,814,0), XRA_MASK, PPC|B64, { FRT, FRB } },
3010   -{ "fctid.", XRC(63,814,1), XRA_MASK, PPC|B64, { FRT, FRB } },
  4997 +{ "mtfsf", XFL(63,711,0), XFL_MASK, COM, { FLM, FRB } },
  4998 +{ "mtfsf.", XFL(63,711,1), XFL_MASK, COM, { FLM, FRB } },
3011 4999  
3012   -{ "fctidz", XRC(63,815,0), XRA_MASK, PPC|B64, { FRT, FRB } },
3013   -{ "fctidz.", XRC(63,815,1), XRA_MASK, PPC|B64, { FRT, FRB } },
  5000 +{ "fctid", XRC(63,814,0), XRA_MASK, PPC64, { FRT, FRB } },
  5001 +{ "fctid.", XRC(63,814,1), XRA_MASK, PPC64, { FRT, FRB } },
3014 5002  
3015   -{ "fcfid", XRC(63,846,0), XRA_MASK, PPC|B64, { FRT, FRB } },
3016   -{ "fcfid.", XRC(63,846,1), XRA_MASK, PPC|B64, { FRT, FRB } },
  5003 +{ "fctidz", XRC(63,815,0), XRA_MASK, PPC64, { FRT, FRB } },
  5004 +{ "fctidz.", XRC(63,815,1), XRA_MASK, PPC64, { FRT, FRB } },
  5005 +
  5006 +{ "fcfid", XRC(63,846,0), XRA_MASK, PPC64, { FRT, FRB } },
  5007 +{ "fcfid.", XRC(63,846,1), XRA_MASK, PPC64, { FRT, FRB } },
3017 5008  
3018 5009 };
3019 5010  
... ... @@ -3022,87 +5013,189 @@ const int powerpc_num_opcodes =
3022 5013  
3023 5014 /* The macro table. This is only used by the assembler. */
3024 5015  
3025   -const struct powerpc_macro powerpc_macros[] = {
3026   -{ "extldi", 4, PPC|B64, "rldicr %0,%1,%3,(%2)-1" },
3027   -{ "extldi.", 4, PPC|B64, "rldicr. %0,%1,%3,(%2)-1" },
3028   -{ "extrdi", 4, PPC|B64, "rldicl %0,%1,(%2)+(%3),64-(%2)" },
3029   -{ "extrdi.", 4, PPC|B64, "rldicl. %0,%1,(%2)+(%3),64-(%2)" },
3030   -{ "insrdi", 4, PPC|B64, "rldimi %0,%1,64-((%2)+(%3)),%3" },
3031   -{ "insrdi.", 4, PPC|B64, "rldimi. %0,%1,64-((%2)+(%3)),%3" },
3032   -{ "rotrdi", 3, PPC|B64, "rldicl %0,%1,64-(%2),0" },
3033   -{ "rotrdi.", 3, PPC|B64, "rldicl. %0,%1,64-(%2),0" },
3034   -{ "sldi", 3, PPC|B64, "rldicr %0,%1,%2,63-(%2)" },
3035   -{ "sldi.", 3, PPC|B64, "rldicr. %0,%1,%2,63-(%2)" },
3036   -{ "srdi", 3, PPC|B64, "rldicl %0,%1,64-(%2),%2" },
3037   -{ "srdi.", 3, PPC|B64, "rldicl. %0,%1,64-(%2),%2" },
3038   -{ "clrrdi", 3, PPC|B64, "rldicr %0,%1,0,63-(%2)" },
3039   -{ "clrrdi.", 3, PPC|B64, "rldicr. %0,%1,0,63-(%2)" },
3040   -{ "clrlsldi",4, PPC|B64, "rldic %0,%1,%3,(%2)-(%3)" },
3041   -{ "clrlsldi.",4, PPC|B64, "rldic. %0,%1,%3,(%2)-(%3)" },
3042   -
3043   -{ "extlwi", 4, PPC, "rlwinm %0,%1,%3,0,(%2)-1" },
3044   -{ "extlwi.", 4, PPC, "rlwinm. %0,%1,%3,0,(%2)-1" },
3045   -{ "extrwi", 4, PPC, "rlwinm %0,%1,(%2)+(%3),32-(%2),31" },
3046   -{ "extrwi.", 4, PPC, "rlwinm. %0,%1,(%2)+(%3),32-(%2),31" },
3047   -{ "inslwi", 4, PPC, "rlwimi %0,%1,32-(%3),%3,(%2)+(%3)-1" },
3048   -{ "inslwi.", 4, PPC, "rlwimi. %0,%1,32-(%3),%3,(%2)+(%3)-1" },
3049   -{ "insrwi", 4, PPC, "rlwimi %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1" },
3050   -{ "insrwi.", 4, PPC, "rlwimi. %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1"},
3051   -{ "rotrwi", 3, PPC, "rlwinm %0,%1,32-(%2),0,31" },
3052   -{ "rotrwi.", 3, PPC, "rlwinm. %0,%1,32-(%2),0,31" },
3053   -{ "slwi", 3, PPC, "rlwinm %0,%1,%2,0,31-(%2)" },
3054   -{ "sli", 3, POWER, "rlinm %0,%1,%2,0,31-(%2)" },
3055   -{ "slwi.", 3, PPC, "rlwinm. %0,%1,%2,0,31-(%2)" },
3056   -{ "sli.", 3, POWER, "rlinm. %0,%1,%2,0,31-(%2)" },
3057   -{ "srwi", 3, PPC, "rlwinm %0,%1,32-(%2),%2,31" },
3058   -{ "sri", 3, POWER, "rlinm %0,%1,32-(%2),%2,31" },
3059   -{ "srwi.", 3, PPC, "rlwinm. %0,%1,32-(%2),%2,31" },
3060   -{ "sri.", 3, POWER, "rlinm. %0,%1,32-(%2),%2,31" },
3061   -{ "clrrwi", 3, PPC, "rlwinm %0,%1,0,0,31-(%2)" },
3062   -{ "clrrwi.", 3, PPC, "rlwinm. %0,%1,0,0,31-(%2)" },
3063   -{ "clrlslwi",4, PPC, "rlwinm %0,%1,%3,(%2)-(%3),31-(%3)" },
3064   -{ "clrlslwi.",4, PPC, "rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)" },
  5016 +/* The expressions of the form (-x ! 31) & (x | 31) have the value 0
  5017 + when x=0; 32-x when x is between 1 and 31; are negative if x is
  5018 + negative; and are 32 or more otherwise. This is what you want
  5019 + when, for instance, you are emulating a right shift by a
  5020 + rotate-left-and-mask, because the underlying instructions support
  5021 + shifts of size 0 but not shifts of size 32. By comparison, when
  5022 + extracting x bits from some word you want to use just 32-x, because
  5023 + the underlying instructions don't support extracting 0 bits but do
  5024 + support extracting the whole word (32 bits in this case). */
3065 5025  
  5026 +const struct powerpc_macro powerpc_macros[] = {
  5027 +{ "extldi", 4, PPC64, "rldicr %0,%1,%3,(%2)-1" },
  5028 +{ "extldi.", 4, PPC64, "rldicr. %0,%1,%3,(%2)-1" },
  5029 +{ "extrdi", 4, PPC64, "rldicl %0,%1,(%2)+(%3),64-(%2)" },
  5030 +{ "extrdi.", 4, PPC64, "rldicl. %0,%1,(%2)+(%3),64-(%2)" },
  5031 +{ "insrdi", 4, PPC64, "rldimi %0,%1,64-((%2)+(%3)),%3" },
  5032 +{ "insrdi.", 4, PPC64, "rldimi. %0,%1,64-((%2)+(%3)),%3" },
  5033 +{ "rotrdi", 3, PPC64, "rldicl %0,%1,(-(%2)!63)&((%2)|63),0" },
  5034 +{ "rotrdi.", 3, PPC64, "rldicl. %0,%1,(-(%2)!63)&((%2)|63),0" },
  5035 +{ "sldi", 3, PPC64, "rldicr %0,%1,%2,63-(%2)" },
  5036 +{ "sldi.", 3, PPC64, "rldicr. %0,%1,%2,63-(%2)" },
  5037 +{ "srdi", 3, PPC64, "rldicl %0,%1,(-(%2)!63)&((%2)|63),%2" },
  5038 +{ "srdi.", 3, PPC64, "rldicl. %0,%1,(-(%2)!63)&((%2)|63),%2" },
  5039 +{ "clrrdi", 3, PPC64, "rldicr %0,%1,0,63-(%2)" },
  5040 +{ "clrrdi.", 3, PPC64, "rldicr. %0,%1,0,63-(%2)" },
  5041 +{ "clrlsldi",4, PPC64, "rldic %0,%1,%3,(%2)-(%3)" },
  5042 +{ "clrlsldi.",4, PPC64, "rldic. %0,%1,%3,(%2)-(%3)" },
  5043 +
  5044 +{ "extlwi", 4, PPCCOM, "rlwinm %0,%1,%3,0,(%2)-1" },
  5045 +{ "extlwi.", 4, PPCCOM, "rlwinm. %0,%1,%3,0,(%2)-1" },
  5046 +{ "extrwi", 4, PPCCOM, "rlwinm %0,%1,((%2)+(%3))&((%2)+(%3)<>32),32-(%2),31" },
  5047 +{ "extrwi.", 4, PPCCOM, "rlwinm. %0,%1,((%2)+(%3))&((%2)+(%3)<>32),32-(%2),31" },
  5048 +{ "inslwi", 4, PPCCOM, "rlwimi %0,%1,(-(%3)!31)&((%3)|31),%3,(%2)+(%3)-1" },
  5049 +{ "inslwi.", 4, PPCCOM, "rlwimi. %0,%1,(-(%3)!31)&((%3)|31),%3,(%2)+(%3)-1"},
  5050 +{ "insrwi", 4, PPCCOM, "rlwimi %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1" },
  5051 +{ "insrwi.", 4, PPCCOM, "rlwimi. %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1"},
  5052 +{ "rotrwi", 3, PPCCOM, "rlwinm %0,%1,(-(%2)!31)&((%2)|31),0,31" },
  5053 +{ "rotrwi.", 3, PPCCOM, "rlwinm. %0,%1,(-(%2)!31)&((%2)|31),0,31" },
  5054 +{ "slwi", 3, PPCCOM, "rlwinm %0,%1,%2,0,31-(%2)" },
  5055 +{ "sli", 3, PWRCOM, "rlinm %0,%1,%2,0,31-(%2)" },
  5056 +{ "slwi.", 3, PPCCOM, "rlwinm. %0,%1,%2,0,31-(%2)" },
  5057 +{ "sli.", 3, PWRCOM, "rlinm. %0,%1,%2,0,31-(%2)" },
  5058 +{ "srwi", 3, PPCCOM, "rlwinm %0,%1,(-(%2)!31)&((%2)|31),%2,31" },
  5059 +{ "sri", 3, PWRCOM, "rlinm %0,%1,(-(%2)!31)&((%2)|31),%2,31" },
  5060 +{ "srwi.", 3, PPCCOM, "rlwinm. %0,%1,(-(%2)!31)&((%2)|31),%2,31" },
  5061 +{ "sri.", 3, PWRCOM, "rlinm. %0,%1,(-(%2)!31)&((%2)|31),%2,31" },
  5062 +{ "clrrwi", 3, PPCCOM, "rlwinm %0,%1,0,0,31-(%2)" },
  5063 +{ "clrrwi.", 3, PPCCOM, "rlwinm. %0,%1,0,0,31-(%2)" },
  5064 +{ "clrlslwi",4, PPCCOM, "rlwinm %0,%1,%3,(%2)-(%3),31-(%3)" },
  5065 +{ "clrlslwi.",4, PPCCOM, "rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)" },
3066 5066 };
3067 5067  
3068 5068 const int powerpc_num_macros =
3069 5069 sizeof (powerpc_macros) / sizeof (powerpc_macros[0]);
3070 5070  
  5071 +/* This file provides several disassembler functions, all of which use
  5072 + the disassembler interface defined in dis-asm.h. Several functions
  5073 + are provided because this file handles disassembly for the PowerPC
  5074 + in both big and little endian mode and also for the POWER (RS/6000)
  5075 + chip. */
  5076 +
  5077 +static int print_insn_powerpc (bfd_vma, struct disassemble_info *, int, int);
  5078 +
  5079 +/* Determine which set of machines to disassemble for. PPC403/601 or
  5080 + BookE. For convenience, also disassemble instructions supported
  5081 + by the AltiVec vector unit. */
  5082 +
3071 5083 static int
3072   -print_insn_powerpc (disassemble_info *info, uint32_t insn, unsigned memaddr,
3073   - int dialect);
3074   -
3075   -/* Print a big endian PowerPC instruction. For convenience, also
3076   - disassemble instructions supported by the Motorola PowerPC 601. */
3077   -
3078   -int print_insn_ppc (bfd_vma pc, disassemble_info *info)
3079   -{
3080   - uint32_t opc;
3081   - bfd_byte buf[4];
3082   -
3083   - (*info->read_memory_func)(pc, buf, 4, info);
3084   - if (info->endian == BFD_ENDIAN_BIG)
3085   - opc = bfd_getb32(buf);
3086   - else
3087   - opc = bfd_getl32(buf);
3088   - if (info->mach == bfd_mach_ppc64) {
3089   - return print_insn_powerpc (info, opc, pc,
3090   - PPC | B64);
3091   - } else {
3092   - return print_insn_powerpc (info, opc, pc,
3093   - PPC | B32 | M601);
  5084 +powerpc_dialect (struct disassemble_info *info)
  5085 +{
  5086 + int dialect = PPC_OPCODE_PPC;
  5087 +
  5088 + if (BFD_DEFAULT_TARGET_SIZE == 64)
  5089 + dialect |= PPC_OPCODE_64;
  5090 +
  5091 + if (info->disassembler_options
  5092 + && strstr (info->disassembler_options, "booke") != NULL)
  5093 + dialect |= PPC_OPCODE_BOOKE | PPC_OPCODE_BOOKE64;
  5094 + else if ((info->mach == bfd_mach_ppc_e500)
  5095 + || (info->disassembler_options
  5096 + && strstr (info->disassembler_options, "e500") != NULL))
  5097 + dialect |= (PPC_OPCODE_BOOKE
  5098 + | PPC_OPCODE_SPE | PPC_OPCODE_ISEL
  5099 + | PPC_OPCODE_EFS | PPC_OPCODE_BRLOCK
  5100 + | PPC_OPCODE_PMR | PPC_OPCODE_CACHELCK
  5101 + | PPC_OPCODE_RFMCI);
  5102 + else if (info->disassembler_options
  5103 + && strstr (info->disassembler_options, "efs") != NULL)
  5104 + dialect |= PPC_OPCODE_EFS;
  5105 + else if (info->disassembler_options
  5106 + && strstr (info->disassembler_options, "e300") != NULL)
  5107 + dialect |= PPC_OPCODE_E300 | PPC_OPCODE_CLASSIC | PPC_OPCODE_COMMON;
  5108 + else
  5109 + dialect |= (PPC_OPCODE_403 | PPC_OPCODE_601 | PPC_OPCODE_CLASSIC
  5110 + | PPC_OPCODE_COMMON | PPC_OPCODE_ALTIVEC);
  5111 +
  5112 + if (info->disassembler_options
  5113 + && strstr (info->disassembler_options, "power4") != NULL)
  5114 + dialect |= PPC_OPCODE_POWER4;
  5115 +
  5116 + if (info->disassembler_options
  5117 + && strstr (info->disassembler_options, "power5") != NULL)
  5118 + dialect |= PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5;
  5119 +
  5120 + if (info->disassembler_options
  5121 + && strstr (info->disassembler_options, "any") != NULL)
  5122 + dialect |= PPC_OPCODE_ANY;
  5123 +
  5124 + if (info->disassembler_options)
  5125 + {
  5126 + if (strstr (info->disassembler_options, "32") != NULL)
  5127 + dialect &= ~PPC_OPCODE_64;
  5128 + else if (strstr (info->disassembler_options, "64") != NULL)
  5129 + dialect |= PPC_OPCODE_64;
3094 5130 }
  5131 +
  5132 + info->private_data = (char *) 0 + dialect;
  5133 + return dialect;
  5134 +}
  5135 +
  5136 +/* Qemu default */
  5137 +int
  5138 +print_insn_ppc (bfd_vma memaddr, struct disassemble_info *info)
  5139 +{
  5140 + int dialect = (char *) info->private_data - (char *) 0;
  5141 + return print_insn_powerpc (memaddr, info, 1, dialect);
  5142 +}
  5143 +
  5144 +/* Print a big endian PowerPC instruction. */
  5145 +
  5146 +int
  5147 +print_insn_big_powerpc (bfd_vma memaddr, struct disassemble_info *info)
  5148 +{
  5149 + int dialect = (char *) info->private_data - (char *) 0;
  5150 + return print_insn_powerpc (memaddr, info, 1, dialect);
  5151 +}
  5152 +
  5153 +/* Print a little endian PowerPC instruction. */
  5154 +
  5155 +int
  5156 +print_insn_little_powerpc (bfd_vma memaddr, struct disassemble_info *info)
  5157 +{
  5158 + int dialect = (char *) info->private_data - (char *) 0;
  5159 + return print_insn_powerpc (memaddr, info, 0, dialect);
  5160 +}
  5161 +
  5162 +/* Print a POWER (RS/6000) instruction. */
  5163 +
  5164 +int
  5165 +print_insn_rs6000 (bfd_vma memaddr, struct disassemble_info *info)
  5166 +{
  5167 + return print_insn_powerpc (memaddr, info, 1, PPC_OPCODE_POWER);
3095 5168 }
3096 5169  
3097 5170 /* Print a PowerPC or POWER instruction. */
3098 5171  
3099 5172 static int
3100   -print_insn_powerpc (disassemble_info *info, uint32_t insn, unsigned memaddr,
  5173 +print_insn_powerpc (bfd_vma memaddr,
  5174 + struct disassemble_info *info,
  5175 + int bigendian,
3101 5176 int dialect)
3102 5177 {
  5178 + bfd_byte buffer[4];
  5179 + int status;
  5180 + unsigned long insn;
3103 5181 const struct powerpc_opcode *opcode;
3104 5182 const struct powerpc_opcode *opcode_end;
3105   - uint32_t op;
  5183 + unsigned long op;
  5184 +
  5185 + if (dialect == 0)
  5186 + dialect = powerpc_dialect (info);
  5187 +
  5188 + status = (*info->read_memory_func) (memaddr, buffer, 4, info);
  5189 + if (status != 0)
  5190 + {
  5191 + (*info->memory_error_func) (status, memaddr, info);
  5192 + return -1;
  5193 + }
  5194 +
  5195 + if (bigendian)
  5196 + insn = bfd_getb32 (buffer);
  5197 + else
  5198 + insn = bfd_getl32 (buffer);
3106 5199  
3107 5200 /* Get the major opcode of the instruction. */
3108 5201 op = PPC_OP (insn);
... ... @@ -3110,9 +5203,10 @@ print_insn_powerpc (disassemble_info *info, uint32_t insn, unsigned memaddr,
3110 5203 /* Find the first match in the opcode table. We could speed this up
3111 5204 a bit by doing a binary search on the major opcode. */
3112 5205 opcode_end = powerpc_opcodes + powerpc_num_opcodes;
  5206 + again:
3113 5207 for (opcode = powerpc_opcodes; opcode < opcode_end; opcode++)
3114 5208 {
3115   - uint32_t table_op;
  5209 + unsigned long table_op;
3116 5210 const unsigned char *opindex;
3117 5211 const struct powerpc_operand *operand;
3118 5212 int invalid;
... ... @@ -3121,109 +5215,108 @@ print_insn_powerpc (disassemble_info *info, uint32_t insn, unsigned memaddr,
3121 5215  
3122 5216 table_op = PPC_OP (opcode->opcode);
3123 5217 if (op < table_op)
3124   - break;
  5218 + break;
3125 5219 if (op > table_op)
3126   - continue;
  5220 + continue;
3127 5221  
3128 5222 if ((insn & opcode->mask) != opcode->opcode
3129 5223 || (opcode->flags & dialect) == 0)
3130   - continue;
  5224 + continue;
3131 5225  
3132 5226 /* Make two passes over the operands. First see if any of them
3133   - have extraction functions, and, if they do, make sure the
3134   - instruction is valid. */
  5227 + have extraction functions, and, if they do, make sure the
  5228 + instruction is valid. */
3135 5229 invalid = 0;
3136 5230 for (opindex = opcode->operands; *opindex != 0; opindex++)
3137   - {
3138   - operand = powerpc_operands + *opindex;
3139   - if (operand->extract)
3140   - (*operand->extract) (insn, &invalid);
3141   - }
  5231 + {
  5232 + operand = powerpc_operands + *opindex;
  5233 + if (operand->extract)
  5234 + (*operand->extract) (insn, dialect, &invalid);
  5235 + }
3142 5236 if (invalid)
3143   - continue;
  5237 + continue;
3144 5238  
3145 5239 /* The instruction is valid. */
3146   - (*info->fprintf_func)(info->stream, "%s", opcode->name);
3147 5240 if (opcode->operands[0] != 0)
3148   - (*info->fprintf_func)(info->stream, "\t");
  5241 + (*info->fprintf_func) (info->stream, "%-7s ", opcode->name);
  5242 + else
  5243 + (*info->fprintf_func) (info->stream, "%s", opcode->name);
3149 5244  
3150 5245 /* Now extract and print the operands. */
3151 5246 need_comma = 0;
3152 5247 need_paren = 0;
3153 5248 for (opindex = opcode->operands; *opindex != 0; opindex++)
  5249 + {
  5250 + long value;
  5251 +
  5252 + operand = powerpc_operands + *opindex;
  5253 +
  5254 + /* Operands that are marked FAKE are simply ignored. We
  5255 + already made sure that the extract function considered
  5256 + the instruction to be valid. */
  5257 + if ((operand->flags & PPC_OPERAND_FAKE) != 0)
  5258 + continue;
  5259 +
  5260 + /* Extract the value from the instruction. */
  5261 + if (operand->extract)
  5262 + value = (*operand->extract) (insn, dialect, &invalid);
  5263 + else
  5264 + {
  5265 + value = (insn >> operand->shift) & ((1 << operand->bits) - 1);
  5266 + if ((operand->flags & PPC_OPERAND_SIGNED) != 0
  5267 + && (value & (1 << (operand->bits - 1))) != 0)
  5268 + value -= 1 << operand->bits;
  5269 + }
  5270 +
  5271 + /* If the operand is optional, and the value is zero, don't
  5272 + print anything. */
  5273 + if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0
  5274 + && (operand->flags & PPC_OPERAND_NEXT) == 0
  5275 + && value == 0)
  5276 + continue;
  5277 +
  5278 + if (need_comma)
  5279 + {
  5280 + (*info->fprintf_func) (info->stream, ",");
  5281 + need_comma = 0;
  5282 + }
  5283 +
  5284 + /* Print the operand as directed by the flags. */
  5285 + if ((operand->flags & PPC_OPERAND_GPR) != 0
  5286 + || ((operand->flags & PPC_OPERAND_GPR_0) != 0 && value != 0))
  5287 + (*info->fprintf_func) (info->stream, "r%ld", value);
  5288 + else if ((operand->flags & PPC_OPERAND_FPR) != 0)
  5289 + (*info->fprintf_func) (info->stream, "f%ld", value);
  5290 + else if ((operand->flags & PPC_OPERAND_VR) != 0)
  5291 + (*info->fprintf_func) (info->stream, "v%ld", value);
  5292 + else if ((operand->flags & PPC_OPERAND_RELATIVE) != 0)
  5293 + (*info->print_address_func) (memaddr + value, info);
  5294 + else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0)
  5295 + (*info->print_address_func) ((bfd_vma) value & 0xffffffff, info);
  5296 + else if ((operand->flags & PPC_OPERAND_CR) == 0
  5297 + || (dialect & PPC_OPCODE_PPC) == 0)
  5298 + (*info->fprintf_func) (info->stream, "%ld", value);
  5299 + else
  5300 + {
  5301 + if (operand->bits == 3)
  5302 + (*info->fprintf_func) (info->stream, "cr%ld", value);
  5303 + else
3154 5304 {
3155   - int32_t value;
3156   -
3157   - operand = powerpc_operands + *opindex;
3158   -
3159   - /* Operands that are marked FAKE are simply ignored. We
3160   - already made sure that the extract function considered
3161   - the instruction to be valid. */
3162   - if ((operand->flags & PPC_OPERAND_FAKE) != 0)
3163   - continue;
3164   -
3165   - /* Extract the value from the instruction. */
3166   - if (operand->extract)
3167   - value = (*operand->extract) (insn, (int *) 0);
3168   - else
3169   - {
3170   - value = (insn >> operand->shift) & ((1 << operand->bits) - 1);
3171   - if ((operand->flags & PPC_OPERAND_SIGNED) != 0
3172   - && (value & (1 << (operand->bits - 1))) != 0)
3173   - value -= 1 << operand->bits;
3174   - }
3175   -
3176   - /* If the operand is optional, and the value is zero, don't
3177   - print anything. */
3178   - if ((operand->flags & PPC_OPERAND_OPTIONAL) != 0
3179   - && (operand->flags & PPC_OPERAND_NEXT) == 0
3180   - && value == 0)
3181   - continue;
3182   -
3183   - if (need_comma)
3184   - {
3185   - (*info->fprintf_func)(info->stream, ",");
3186   - need_comma = 0;
3187   - }
3188   -
3189   - /* Print the operand as directed by the flags. */
3190   - if ((operand->flags & PPC_OPERAND_GPR) != 0)
3191   - (*info->fprintf_func)(info->stream, "r%d", value);
3192   - else if ((operand->flags & PPC_OPERAND_FPR) != 0)
3193   - (*info->fprintf_func)(info->stream, "f%d", value);
3194   - else if ((operand->flags & PPC_OPERAND_RELATIVE) != 0)
3195   - (*info->fprintf_func)(info->stream, "%08X", memaddr + value);
3196   - else if ((operand->flags & PPC_OPERAND_ABSOLUTE) != 0)
3197   - (*info->fprintf_func)(info->stream, "%08X", value & 0xffffffff);
3198   - else if ((operand->flags & PPC_OPERAND_CR) == 0
3199   - || (dialect & PPC_OPCODE_PPC) == 0)
3200   - (*info->fprintf_func)(info->stream, "%d", value);
3201   - else
3202   - {
3203   - if (operand->bits == 3)
3204   - (*info->fprintf_func)(info->stream, "cr%d", value);
3205   - else
3206   - {
3207   - static const char *cbnames[4] = { "lt", "gt", "eq", "so" };
3208   - int cr;
3209   - int cc;
3210   -
3211   - cr = value >> 2;
3212   - if (cr != 0)
3213   - (*info->fprintf_func)(info->stream, "4*cr%d", cr);
3214   - cc = value & 3;
3215   - if (cc != 0)
3216   - {
3217   - if (cr != 0)
3218   - (*info->fprintf_func)(info->stream, "+");
3219   - (*info->fprintf_func)(info->stream, "%s", cbnames[cc]);
3220   - }
3221   - }
  5305 + static const char *cbnames[4] = { "lt", "gt", "eq", "so" };
  5306 + int cr;
  5307 + int cc;
  5308 +
  5309 + cr = value >> 2;
  5310 + if (cr != 0)
  5311 + (*info->fprintf_func) (info->stream, "4*cr%d+", cr);
  5312 + cc = value & 3;
  5313 + (*info->fprintf_func) (info->stream, "%s", cbnames[cc]);
  5314 + }
3222 5315 }
3223 5316  
3224 5317 if (need_paren)
3225 5318 {
3226   - (*info->fprintf_func)(info->stream, ")");
  5319 + (*info->fprintf_func) (info->stream, ")");
3227 5320 need_paren = 0;
3228 5321 }
3229 5322  
... ... @@ -3231,7 +5324,7 @@ print_insn_powerpc (disassemble_info *info, uint32_t insn, unsigned memaddr,
3231 5324 need_comma = 1;
3232 5325 else
3233 5326 {
3234   - (*info->fprintf_func)(info->stream, "(");
  5327 + (*info->fprintf_func) (info->stream, "(");
3235 5328 need_paren = 1;
3236 5329 }
3237 5330 }
... ... @@ -3240,8 +5333,14 @@ print_insn_powerpc (disassemble_info *info, uint32_t insn, unsigned memaddr,
3240 5333 return 4;
3241 5334 }
3242 5335  
  5336 + if ((dialect & PPC_OPCODE_ANY) != 0)
  5337 + {
  5338 + dialect = ~PPC_OPCODE_ANY;
  5339 + goto again;
  5340 + }
  5341 +
3243 5342 /* We could not find a match. */
3244   - (*info->fprintf_func)(info->stream, ".long 0x%x", insn);
  5343 + (*info->fprintf_func) (info->stream, ".long 0x%lx", insn);
3245 5344  
3246 5345 return 4;
3247 5346 }
... ...