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

File Contents

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