Mon Mar 28 12:28:30 1994 David Edelsohn (edelsohn@npac.syr.edu)
[external/binutils.git] / opcodes / ppc-opc.c
1 /* ppc-opc.c -- PowerPC opcode list
2    Copyright 1994 Free Software Foundation, Inc.
3    Written by Ian Lance Taylor, Cygnus Support
4
5 This file is part of GDB, GAS, and the GNU binutils.
6
7 GDB, GAS, and the GNU binutils are free software; you can redistribute
8 them and/or modify them under the terms of the GNU General Public
9 License as published by the Free Software Foundation; either version
10 2, or (at your option) any later version.
11
12 GDB, GAS, and the GNU binutils are distributed in the hope that they
13 will be useful, but WITHOUT ANY WARRANTY; without even the implied
14 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
15 the GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this file; see the file COPYING.  If not, write to the Free
19 Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
20
21 #include <stdio.h>
22 #include "ansidecl.h"
23 #include "opcode/ppc.h"
24
25 /* This file holds the PowerPC opcode table.  The opcode table
26    includes almost all of the extended instruction mnemonics.  This
27    permits the disassembler to use them, and simplifies the assembler
28    logic, at the cost of increasing the table size.  The table is
29    strictly constant data, so the compiler should be able to put it in
30    the .text section.
31
32    This file also holds the operand table.  All knowledge about
33    inserting operands into instructions and vice-versa is kept in this
34    file.  */
35 \f
36 /* Local insertion and extraction functions.  */
37
38 static unsigned long insert_bat PARAMS ((unsigned long, long, const char **));
39 static long extract_bat PARAMS ((unsigned long, int *));
40 static unsigned long insert_bba PARAMS ((unsigned long, long, const char **));
41 static long extract_bba PARAMS ((unsigned long, int *));
42 static unsigned long insert_bd PARAMS ((unsigned long, long, const char **));
43 static long extract_bd PARAMS ((unsigned long, int *));
44 static unsigned long insert_bdm PARAMS ((unsigned long, long, const char **));
45 static long extract_bdm PARAMS ((unsigned long, int *));
46 static unsigned long insert_bdp PARAMS ((unsigned long, long, const char **));
47 static long extract_bdp PARAMS ((unsigned long, int *));
48 static unsigned long insert_bo PARAMS ((unsigned long, long, const char **));
49 static long extract_bo PARAMS ((unsigned long, int *));
50 static unsigned long insert_boe PARAMS ((unsigned long, long, const char **));
51 static long extract_boe PARAMS ((unsigned long, int *));
52 static unsigned long insert_cr PARAMS ((unsigned long, long, const char **));
53 static long extract_cr PARAMS ((unsigned long, int *));
54 static unsigned long insert_ds PARAMS ((unsigned long, long, const char **));
55 static long extract_ds PARAMS ((unsigned long, int *));
56 static unsigned long insert_li PARAMS ((unsigned long, long, const char **));
57 static long extract_li PARAMS ((unsigned long, int *));
58 static unsigned long insert_mbe PARAMS ((unsigned long, long, const char **));
59 static long extract_mbe PARAMS ((unsigned long, int *));
60 static unsigned long insert_mb6 PARAMS ((unsigned long, long, const char **));
61 static long extract_mb6 PARAMS ((unsigned long, int *));
62 static unsigned long insert_nb PARAMS ((unsigned long, long, const char **));
63 static long extract_nb PARAMS ((unsigned long, int *));
64 static unsigned long insert_nsi PARAMS ((unsigned long, long, const char **));
65 static long extract_nsi PARAMS ((unsigned long, int *));
66 static unsigned long insert_rbs PARAMS ((unsigned long, long, const char **));
67 static long extract_rbs PARAMS ((unsigned long, int *));
68 static unsigned long insert_sh6 PARAMS ((unsigned long, long, const char **));
69 static long extract_sh6 PARAMS ((unsigned long, int *));
70 static unsigned long insert_spr PARAMS ((unsigned long, long, const char **));
71 static long extract_spr PARAMS ((unsigned long, int *));
72 \f
73 /* The operands table.
74
75    The fields are bits, shift, signed, insert, extract, flags.  */
76
77 const struct powerpc_operand powerpc_operands[] =
78 {
79   /* The zero index is used to indicate the end of the list of
80      operands.  */
81 #define UNUSED (0)
82   { 0, 0, 0, 0, 0, 0 },
83
84   /* The BA field in an XL form instruction.  */
85 #define BA (UNUSED + 1)
86 #define BA_MASK (0x1f << 16)
87   { 5, 16, 0, 0, 0, PPC_OPERAND_CR },
88
89   /* The BA field in an XL form instruction when it must be the same
90      as the BT field in the same instruction.  */
91 #define BAT (BA + 1)
92   { 5, 16, 0, insert_bat, extract_bat, PPC_OPERAND_FAKE },
93
94   /* The BB field in an XL form instruction.  */
95 #define BB (BAT + 1)
96 #define BB_MASK (0x1f << 11)
97   { 5, 11, 0, 0, 0, PPC_OPERAND_CR },
98
99   /* The BB field in an XL form instruction when it must be the same
100      as the BA field in the same instruction.  */
101 #define BBA (BB + 1)
102   { 5, 11, 0, insert_bba, extract_bba, PPC_OPERAND_FAKE },
103
104   /* The BD field in a B form instruction.  The lower two bits are
105      forced to zero.  */
106 #define BD (BBA + 1)
107   { 16, 0, 1, insert_bd, extract_bd, PPC_OPERAND_RELATIVE },
108
109   /* The BD field in a B form instruction when absolute addressing is
110      used.  */
111 #define BDA (BD + 1)
112   { 16, 0, 1, insert_bd, extract_bd, PPC_OPERAND_ABSOLUTE },
113
114   /* The BD field in a B form instruction when the - modifier is used.
115      This sets the y bit of the BO field appropriately.  */
116 #define BDM (BDA + 1)
117   { 16, 0, 1, insert_bdm, extract_bdm, PPC_OPERAND_RELATIVE },
118
119   /* The BD field in a B form instruction when the - modifier is used
120      and absolute address is used.  */
121 #define BDMA (BDM + 1)
122   { 16, 0, 1, insert_bdm, extract_bdm, PPC_OPERAND_ABSOLUTE },
123
124   /* The BD field in a B form instruction when the + modifier is used.
125      This sets the y bit of the BO field appropriately.  */
126 #define BDP (BDMA + 1)
127   { 16, 0, 1, insert_bdp, extract_bdp, PPC_OPERAND_RELATIVE },
128
129   /* The BD field in a B form instruction when the + modifier is used
130      and absolute addressing is used.  */
131 #define BDPA (BDP + 1)
132   { 16, 0, 1, insert_bdp, extract_bdp, PPC_OPERAND_ABSOLUTE },
133
134   /* The BF field in an X or XL form instruction.  */
135 #define BF (BDPA + 1)
136   { 3, 23, 0, 0, 0, PPC_OPERAND_CR },
137
138   /* An optional BF field.  This is used for comparison instructions,
139      in which an omitted BF field is taken as zero.  */
140 #define OBF (BF + 1)
141   { 3, 23, 0, 0, 0, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
142
143   /* The BFA field in an X or XL form instruction.  */
144 #define BFA (OBF + 1)
145   { 3, 18, 0, 0, 0, PPC_OPERAND_CR },
146
147   /* The BI field in a B form or XL form instruction.  */
148 #define BI (BFA + 1)
149 #define BI_MASK (0x1f << 16)
150   { 5, 16, 0, 0, 0, PPC_OPERAND_CR },
151
152   /* The BO field in a B form instruction.  Certain values are
153      illegal.  */
154 #define BO (BI + 1)
155 #define BO_MASK (0x1f << 21)
156   { 5, 21, 0, insert_bo, extract_bo, 0 },
157
158   /* The BO field in a B form instruction when the + or - modifier is
159      used.  This is like the BO field, but it must be even.  */
160 #define BOE (BO + 1)
161   { 5, 21, 0, insert_boe, extract_boe, 0 },
162
163   /* The BT field in an X or XL form instruction.  */
164 #define BT (BOE + 1)
165   { 5, 21, 0, 0, 0, PPC_OPERAND_CR },
166
167   /* The condition register number portion of the BI field in a B form
168      or XL form instruction.  This is used for the extended
169      conditional branch mnemonics, which set the lower two bits of the
170      BI field.  This field is optional.  */
171 #define CR (BT + 1)
172   { 5, 16, 0, insert_cr, extract_cr, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
173
174   /* The D field in a D form instruction.  This is a displacement off
175      a register, and implies that the next operand is a register in
176      parentheses.  */
177 #define D (CR + 1)
178   { 16, 0, 1, 0, 0, PPC_OPERAND_PARENS },
179
180   /* The DS field in a DS form instruction.  This is like D, but the
181      lower two bits are forced to zero.  */
182 #define DS (D + 1)
183   { 16, 0, 1, insert_ds, extract_ds, PPC_OPERAND_PARENS },
184
185   /* The FL1 field in a POWER SC form instruction.  */
186 #define FL1 (DS + 1)
187   { 4, 12, 0, 0, 0, 0 },
188
189   /* The FL2 field in a POWER SC form instruction.  */
190 #define FL2 (FL1 + 1)
191   { 3, 2, 0, 0, 0, 0 },
192
193   /* The FLM field in an XFL form instruction.  */
194 #define FLM (FL2 + 1)
195   { 8, 17, 0, 0, 0, 0 },
196
197   /* The FRA field in an X or A form instruction.  */
198 #define FRA (FLM + 1)
199 #define FRA_MASK (0x1f << 16)
200   { 5, 16, 0, 0, 0, PPC_OPERAND_FPR },
201
202   /* The FRB field in an X or A form instruction.  */
203 #define FRB (FRA + 1)
204 #define FRB_MASK (0x1f << 11)
205   { 5, 11, 0, 0, 0, PPC_OPERAND_FPR },
206
207   /* The FRC field in an A form instruction.  */
208 #define FRC (FRB + 1)
209 #define FRC_MASK (0x1f << 6)
210   { 5, 6, 0, 0, 0, PPC_OPERAND_FPR },
211
212   /* The FRS field in an X form instruction or the FRT field in a D, X
213      or A form instruction.  */
214 #define FRS (FRC + 1)
215 #define FRT (FRS)
216   { 5, 21, 0, 0, 0, PPC_OPERAND_FPR },
217
218   /* The FXM field in an XFX instruction.  */
219 #define FXM (FRS + 1)
220   { 8, 12, 0, 0, 0, 0 },
221
222   /* The L field in a D or X form instruction.  */
223 #define L (FXM + 1)
224   { 1, 21, 0, 0, 0, PPC_OPERAND_OPTIONAL },
225
226   /* The LEV field in a POWER SC form instruction.  */
227 #define LEV (L + 1)
228   { 7, 5, 0, 0, 0, 0 },
229
230   /* The LI field in an I form instruction.  The lower two bits are
231      forced to zero.  */
232 #define LI (LEV + 1)
233   { 26, 0, 1, insert_li, extract_li, PPC_OPERAND_RELATIVE },
234
235   /* The LI field in an I form instruction when used as an absolute
236      address.  */
237 #define LIA (LI + 1)
238   { 26, 0, 1, insert_li, extract_li, PPC_OPERAND_ABSOLUTE },
239
240   /* The MB field in an M form instruction.  */
241 #define MB (LIA + 1)
242 #define MB_MASK (0x1f << 6)
243   { 5, 6, 0, 0, 0, 0 },
244
245   /* The ME field in an M form instruction.  */
246 #define ME (MB + 1)
247 #define ME_MASK (0x1f << 1)
248   { 5, 1, 0, 0, 0, 0 },
249
250   /* The MB and ME fields in an M form instruction expressed a single
251      operand which is a bitmask indicating which bits to select.  This
252      is a two operand form using PPC_OPERAND_NEXT.  See the
253      description in opcode/ppc.h for what this means.  */
254 #define MBE (ME + 1)
255   { 5, 6, 0, 0, 0, PPC_OPERAND_OPTIONAL | PPC_OPERAND_NEXT },
256   { 32, 0, 0, insert_mbe, extract_mbe, 0 },
257
258   /* The MB or ME field in an MD or MDS form instruction.  The high
259      bit is wrapped to the low end.  */
260 #define MB6 (MBE + 2)
261 #define ME6 (MB6)
262 #define MB6_MASK (0x3f << 5)
263   { 6, 5, 0, insert_mb6, extract_mb6, 0 },
264
265   /* The NB field in an X form instruction.  The value 32 is stored as
266      0.  */
267 #define NB (MB6 + 1)
268   { 6, 11, 0, insert_nb, extract_nb, 0 },
269
270   /* The NSI field in a D form instruction.  This is the same as the
271      SI field, only negated.  */
272 #define NSI (NB + 1)
273   { 16, 0, 1, insert_nsi, extract_nsi, PPC_OPERAND_NEGATIVE },
274
275   /* The RA field in an D, DS, X, XO, M, or MDS form instruction.  */
276 #define RA (NSI + 1)
277 #define RA_MASK (0x1f << 16)
278   { 5, 16, 0, 0, 0, PPC_OPERAND_GPR },
279
280   /* The RB field in an X, XO, M, or MDS form instruction.  */
281 #define RB (RA + 1)
282 #define RB_MASK (0x1f << 11)
283   { 5, 11, 0, 0, 0, PPC_OPERAND_GPR },
284
285   /* The RB field in an X form instruction when it must be the same as
286      the RS field in the instruction.  This is used for extended
287      mnemonics like mr.  */
288 #define RBS (RB + 1)
289   { 5, 1, 0, insert_rbs, extract_rbs, PPC_OPERAND_FAKE },
290
291   /* The RS field in a D, DS, X, XFX, XS, M, MD or MDS form
292      instruction or the RT field in a D, DS, X, XFX or XO form
293      instruction.  */
294 #define RS (RBS + 1)
295 #define RT (RS)
296 #define RT_MASK (0x1f << 21)
297   { 5, 21, 0, 0, 0, PPC_OPERAND_GPR },
298
299   /* The SH field in an X or M form instruction.  */
300 #define SH (RS + 1)
301 #define SH_MASK (0x1f << 11)
302   { 5, 11, 0, 0, 0, 0 },
303
304   /* The SH field in an MD form instruction.  This is split.  */
305 #define SH6 (SH + 1)
306 #define SH6_MASK ((0x1f << 11) | (1 << 1))
307   { 6, 1, 0, insert_sh6, extract_sh6, 0 },
308
309   /* The SI field in a D form instruction.  */
310 #define SI (SH6 + 1)
311   { 16, 0, 1, 0, 0, 0 },
312
313   /* The SPR or TBR field in an XFX form instruction.  This is
314      flipped--the lower 5 bits are stored in the upper 5 and vice-
315      versa.  */
316 #define SPR (SI + 1)
317 #define TBR (SPR)
318 #define SPR_MASK (0x3ff << 11)
319   { 10, 11, 0, insert_spr, extract_spr, 0 },
320
321   /* The SR field in an X form instruction.  */
322 #define SR (SPR + 1)
323   { 4, 16, 0, 0, 0, 0 },
324
325   /* The SV field in a POWER SC form instruction.  */
326 #define SV (SR + 1)
327   { 14, 2, 0, 0, 0, 0 },
328
329   /* The TO field in a D or X form instruction.  */
330 #define TO (SV + 1)
331 #define TO_MASK (0x1f << 21)
332   { 5, 21, 0, 0, 0, 0 },
333
334   /* The U field in an X form instruction.  */
335 #define U (TO + 1)
336   { 4, 12, 0, 0, 0, 0 },
337
338   /* The UI field in a D form instruction.  */
339 #define UI (U + 1)
340   { 16, 0, 0, 0, 0, 0 },
341 };
342
343 /* The functions used to insert and extract complicated operands.  */
344
345 /* The BA field in an XL form instruction when it must be the same as
346    the BT field in the same instruction.  This operand is marked FAKE.
347    The insertion function just copies the BT field into the BA field,
348    and the extraction function just checks that the fields are the
349    same.  */
350
351 /*ARGSUSED*/
352 static unsigned long 
353 insert_bat (insn, value, errmsg)
354      unsigned long insn;
355      long value;
356      const char **errmsg;
357 {
358   return insn | (((insn >> 21) & 0x1f) << 16);
359 }
360
361 static long
362 extract_bat (insn, invalid)
363      unsigned long insn;
364      int *invalid;
365 {
366   if (invalid != (int *) NULL
367       && ((insn >> 21) & 0x1f) != ((insn >> 16) & 0x1f))
368     *invalid = 1;
369   return 0;
370 }
371
372 /* The BB field in an XL form instruction when it must be the same as
373    the BA field in the same instruction.  This operand is marked FAKE.
374    The insertion function just copies the BA field into the BB field,
375    and the extraction function just checks that the fields are the
376    same.  */
377
378 /*ARGSUSED*/
379 static unsigned long
380 insert_bba (insn, value, errmsg)
381      unsigned long insn;
382      long value;
383      const char **errmsg;
384 {
385   return insn | (((insn >> 16) & 0x1f) << 11);
386 }
387
388 static long
389 extract_bba (insn, invalid)
390      unsigned long insn;
391      int *invalid;
392 {
393   if (invalid != (int *) NULL
394       && ((insn >> 16) & 0x1f) != ((insn >> 11) & 0x1f))
395     *invalid = 1;
396   return 0;
397 }
398
399 /* The BD field in a B form instruction.  The lower two bits are
400    forced to zero.  */
401
402 /*ARGSUSED*/
403 static unsigned long
404 insert_bd (insn, value, errmsg)
405      unsigned long insn;
406      long value;
407      const char **errmsg;
408 {
409   return insn | (value & 0xfffc);
410 }
411
412 /*ARGSUSED*/
413 static long
414 extract_bd (insn, invalid)
415      unsigned long insn;
416      int *invalid;
417 {
418   if ((insn & 0x8000) != 0)
419     return (insn & 0xfffc) - 0x10000;
420   else
421     return insn & 0xfffc;
422 }
423
424 /* The BD field in a B form instruction when the - modifier is used.
425    This modifier means that the branch is not expected to be taken.
426    We must set the y bit of the BO field to 1 if the offset is
427    negative.  When extracting, we require that the y bit be 1 and that
428    the offset be positive, since if the y bit is 0 we just want to
429    print the normal form of the instruction.  */
430
431 /*ARGSUSED*/
432 static unsigned long
433 insert_bdm (insn, value, errmsg)
434      unsigned long insn;
435      long value;
436      const char **errmsg;
437 {
438   if ((value & 0x8000) != 0)
439     insn |= 1 << 21;
440   return insn | (value & 0xfffc);
441 }
442
443 static long
444 extract_bdm (insn, invalid)
445      unsigned long insn;
446      int *invalid;
447 {
448   if (invalid != (int *) NULL
449       && ((insn & (1 << 21)) == 0
450           || (insn & (1 << 15) == 0)))
451     *invalid = 1;
452   if ((insn & 0x8000) != 0)
453     return (insn & 0xfffc) - 0x10000;
454   else
455     return insn & 0xfffc;
456 }
457
458 /* The BD field in a B form instruction when the + modifier is used.
459    This is like BDM, above, except that the branch is expected to be
460    taken.  */
461
462 /*ARGSUSED*/
463 static unsigned long
464 insert_bdp (insn, value, errmsg)
465      unsigned long insn;
466      long value;
467      const char **errmsg;
468 {
469   if ((value & 0x8000) == 0)
470     insn |= 1 << 21;
471   return insn | (value & 0xfffc);
472 }
473
474 static long
475 extract_bdp (insn, invalid)
476      unsigned long insn;
477      int *invalid;
478 {
479   if (invalid != (int *) NULL
480       && ((insn & (1 << 21)) == 0
481           || (insn & (1 << 15)) != 0))
482     *invalid = 1;
483   if ((insn & 0x8000) != 0)
484     return (insn & 0xfffc) - 0x10000;
485   else
486     return insn & 0xfffc;
487 }
488
489 /* Check for legal values of a BO field.  */
490
491 static int
492 valid_bo (value)
493      long value;
494 {
495   /* Certain encodings have bits that are required to be zero.  These
496      are (z must be zero, y may be anything):
497          001zy
498          011zy
499          1z00y
500          1z01y
501          1z1zz
502      */
503   switch (value & 0x14)
504     {
505     default:
506     case 0:
507       return 1;
508     case 0x4:
509       return (value & 0x2) == 0;
510     case 0x10:
511       return (value & 0x8) == 0;
512     case 0x14:
513       return value == 0x14;
514     }
515 }
516
517 /* The BO field in a B form instruction.  Warn about attempts to set
518    the field to an illegal value.  */
519
520 static unsigned long
521 insert_bo (insn, value, errmsg)
522      unsigned long insn;
523      long value;
524      const char **errmsg;
525 {
526   if (errmsg != (const char **) NULL
527       && ! valid_bo (value))
528     *errmsg = "invalid conditional option";
529   return insn | ((value & 0x1f) << 21);
530 }
531
532 static long
533 extract_bo (insn, invalid)
534      unsigned long insn;
535      int *invalid;
536 {
537   long value;
538
539   value = (insn >> 21) & 0x1f;
540   if (invalid != (int *) NULL
541       && ! valid_bo (value))
542     *invalid = 1;
543   return value;
544 }
545
546 /* The BO field in a B form instruction when the + or - modifier is
547    used.  This is like the BO field, but it must be even.  When
548    extracting it, we force it to be even.  */
549
550 static unsigned long
551 insert_boe (insn, value, errmsg)
552      unsigned long insn;
553      long value;
554      const char **errmsg;
555 {
556   if (errmsg != (const char **) NULL)
557     {
558       if (! valid_bo (value))
559         *errmsg = "invalid conditional option";
560       else if ((value & 1) != 0)
561         *errmsg = "attempt to set y bit when using + or - modifier";
562     }
563   return insn | ((value & 0x1f) << 21);
564 }
565
566 static long
567 extract_boe (insn, invalid)
568      unsigned long insn;
569      int *invalid;
570 {
571   long value;
572
573   value = (insn >> 21) & 0x1f;
574   if (invalid != (int *) NULL
575       && ! valid_bo (value))
576     *invalid = 1;
577   return value & 0x1e;
578 }
579
580 /* The condition register number portion of the BI field in a B form
581    or XL form instruction.  This is used for the extended conditional
582    branch mnemonics, which set the lower two bits of the BI field.  It
583    is the BI field with the lower two bits ignored.  */
584
585 /*ARGSUSED*/
586 static unsigned long
587 insert_cr (insn, value, errmsg)
588      unsigned long insn;
589      long value;
590      const char **errmsg;
591 {
592   return insn | ((value & 0x1c) << 16);
593 }
594
595 /*ARGSUSED*/
596 static long
597 extract_cr (insn, invalid)
598      unsigned long insn;
599      int *invalid;
600 {
601   return (insn >> 16) & 0x1c;
602 }
603
604 /* The DS field in a DS form instruction.  This is like D, but the
605    lower two bits are forced to zero.  */
606
607 /*ARGSUSED*/
608 static unsigned long
609 insert_ds (insn, value, errmsg)
610      unsigned long insn;
611      long value;
612      const char **errmsg;
613 {
614   return insn | (value & 0xfffc);
615 }
616
617 /*ARGSUSED*/
618 static long
619 extract_ds (insn, invalid)
620      unsigned long insn;
621      int *invalid;
622 {
623   if ((insn & 0x8000) != 0)
624     return (insn & 0xfffc) - 0x10000;
625   else
626     return insn & 0xfffc;
627 }
628
629 /* The LI field in an I form instruction.  The lower two bits are
630    forced to zero.  */
631
632 /*ARGSUSED*/
633 static unsigned long
634 insert_li (insn, value, errmsg)
635      unsigned long insn;
636      long value;
637      const char **errmsg;
638 {
639   return insn | (value & 0x3fffffc);
640 }
641
642 /*ARGSUSED*/
643 static long
644 extract_li (insn, invalid)
645      unsigned long insn;
646      int *invalid;
647 {
648   if ((insn & 0x2000000) != 0)
649     return (insn & 0x3fffffc) - 0x4000000;
650   else
651     return insn & 0x3fffffc;
652 }
653
654 /* The MB and ME fields in an M form instruction expressed as a single
655    operand which is itself a bitmask.  The extraction function always
656    marks it as invalid, since we never want to recognize an
657    instruction which uses a field of this type.  */
658
659 static unsigned long
660 insert_mbe (insn, value, errmsg)
661      unsigned long insn;
662      long value;
663      const char **errmsg;
664 {
665   unsigned long uval;
666   int mb, me;
667
668   uval = value;
669
670   if (uval == 0)
671     {
672       if (errmsg != (const char **) NULL)
673         *errmsg = "illegal bitmask";
674       return insn;
675     }
676
677   me = 31;
678   while ((uval & 1) == 0)
679     {
680       uval >>= 1;
681       --me;
682     }
683
684   mb = me;
685   uval >>= 1;
686   while ((uval & 1) != 0)
687     {
688       uval >>= 1;
689       --mb;
690     }
691
692   if (uval != 0)
693     {
694       if (errmsg != (const char **) NULL)
695         *errmsg = "illegal bitmask";
696     }
697
698   return insn | (mb << 6) | (me << 1);
699 }
700
701 static long
702 extract_mbe (insn, invalid)
703      unsigned long insn;
704      int *invalid;
705 {
706   long ret;
707   int mb, me;
708   int i;
709
710   if (invalid != (int *) NULL)
711     *invalid = 1;
712
713   ret = 0;
714   mb = (insn >> 6) & 0x1f;
715   me = (insn >> 1) & 0x1f;
716   for (i = mb; i < me; i++)
717     ret |= 1 << (31 - i);
718   return ret;
719 }
720
721 /* The MB or ME field in an MD or MDS form instruction.  The high bit
722    is wrapped to the low end.  */
723
724 /*ARGSUSED*/
725 static unsigned long
726 insert_mb6 (insn, value, errmsg)
727      unsigned long insn;
728      long value;
729      const char **errmsg;
730 {
731   return insn | ((value & 0x1f) << 6) | (value & 0x20);
732 }
733
734 /*ARGSUSED*/
735 static long
736 extract_mb6 (insn, invalid)
737      unsigned long insn;
738      int *invalid;
739 {
740   return ((insn >> 6) & 0x1f) | (insn & 0x20);
741 }
742
743 /* The NB field in an X form instruction.  The value 32 is stored as
744    0.  */
745
746 static unsigned long
747 insert_nb (insn, value, errmsg)
748      unsigned long insn;
749      long value;
750      const char **errmsg;
751 {
752   if (value < 0 || value > 32)
753     *errmsg = "value out of range";
754   if (value == 32)
755     value = 0;
756   return insn | ((value & 0x1f) << 11);
757 }
758
759 /*ARGSUSED*/
760 static long
761 extract_nb (insn, invalid)
762      unsigned long insn;
763      int *invalid;
764 {
765   long ret;
766
767   ret = (insn >> 11) & 0x1f;
768   if (ret == 0)
769     ret = 32;
770   return ret;
771 }
772
773 /* The NSI field in a D form instruction.  This is the same as the SI
774    field, only negated.  The extraction function always marks it as
775    invalid, since we never want to recognize an instruction which uses
776    a field of this type.  */
777
778 /*ARGSUSED*/
779 static unsigned long
780 insert_nsi (insn, value, errmsg)
781      unsigned long insn;
782      long value;
783      const char **errmsg;
784 {
785   return insn | ((- value) & 0xffff);
786 }
787
788 static long
789 extract_nsi (insn, invalid)
790      unsigned long insn;
791      int *invalid;
792 {
793   if (invalid != (int *) NULL)
794     *invalid = 1;
795   if ((insn & 0x8000) != 0)
796     return - ((insn & 0xffff) - 0x10000);
797   else
798     return - (insn & 0xffff);
799 }
800
801 /* The RB field in an X form instruction when it must be the same as
802    the RS field in the instruction.  This is used for extended
803    mnemonics like mr.  This operand is marked FAKE.  The insertion
804    function just copies the BT field into the BA field, and the
805    extraction function just checks that the fields are the same.  */
806
807 /*ARGSUSED*/
808 static unsigned long 
809 insert_rbs (insn, value, errmsg)
810      unsigned long insn;
811      long value;
812      const char **errmsg;
813 {
814   return insn | (((insn >> 21) & 0x1f) << 11);
815 }
816
817 static long
818 extract_rbs (insn, invalid)
819      unsigned long insn;
820      int *invalid;
821 {
822   if (invalid != (int *) NULL
823       && ((insn >> 21) & 0x1f) != ((insn >> 11) & 0x1f))
824     *invalid = 1;
825   return 0;
826 }
827
828 /* The SH field in an MD form instruction.  This is split.  */
829
830 /*ARGSUSED*/
831 static unsigned long
832 insert_sh6 (insn, value, errmsg)
833      unsigned long insn;
834      long value;
835      const char **errmsg;
836 {
837   return insn | ((value & 0x1f) << 11) | ((value & 0x20) >> 4);
838 }
839
840 /*ARGSUSED*/
841 static long
842 extract_sh6 (insn, invalid)
843      unsigned long insn;
844      int *invalid;
845 {
846   return ((insn >> 11) & 0x1f) | ((insn << 4) & 0x20);
847 }
848
849 /* The SPR or TBR field in an XFX form instruction.  This is
850    flipped--the lower 5 bits are stored in the upper 5 and vice-
851    versa.  */
852
853 static unsigned long
854 insert_spr (insn, value, errmsg)
855      unsigned long insn;
856      long value;
857      const char **errmsg;
858 {
859   return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6);
860 }
861
862 static long
863 extract_spr (insn, invalid)
864      unsigned long insn;
865      int *invalid;
866 {
867   return ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
868 }
869 \f
870 /* Macros used to form opcodes.  */
871
872 /* The main opcode.  */
873 #define OP(x) (((x) & 0x3f) << 26)
874 #define OP_MASK OP (0x3f)
875
876 /* The main opcode combined with a trap code in the TO field of a D
877    form instruction.  Used for extended mnemonics for the trap
878    instructions.  */
879 #define OPTO(x,to) (OP (x) | (((to) & 0x1f) << 21))
880 #define OPTO_MASK (OP_MASK | TO_MASK)
881
882 /* The main opcode combined with a comparison size bit in the L field
883    of a D form or X form instruction.  Used for extended mnemonics for
884    the comparison instructions.  */
885 #define OPL(x,l) (OP (x) | (((l) & 1) << 21))
886 #define OPL_MASK OPL (0x3f,1)
887
888 /* An A form instruction.  */
889 #define A(op, xop, rc) (OP (op) | (((xop) & 0x1f) << 1) | ((rc) & 1))
890 #define A_MASK A (0x3f, 0x1f, 1)
891
892 /* An A_MASK with the FRB field fixed.  */
893 #define AFRB_MASK (A_MASK | FRB_MASK)
894
895 /* An A_MASK with the FRC field fixed.  */
896 #define AFRC_MASK (A_MASK | FRC_MASK)
897
898 /* An A_MASK with the FRA and FRC fields fixed.  */
899 #define AFRAFRC_MASK (A_MASK | FRA_MASK | FRC_MASK)
900
901 /* A B form instruction.  */
902 #define B(op, aa, lk) (OP (op) | (((aa) & 1) << 1) | ((lk) & 1))
903 #define B_MASK B (0x3f, 1, 1)
904
905 /* A B form instruction setting the BO field.  */
906 #define BBO(op, bo, aa, lk) (B ((op), (aa), (lk)) | (((bo) & 0x1f) << 21))
907 #define BBO_MASK BBO (0x3f, 0x1f, 1, 1)
908
909 /* A BBO_MASK with the y bit of the BO field removed.  This permits
910    matching a conditional branch regardless of the setting of the y
911    bit.  */
912 #define Y_MASK (1 << 21)
913 #define BBOY_MASK (BBO_MASK &~ Y_MASK)
914
915 /* A B form instruction setting the BO field and the condition bits of
916    the BI field.  */
917 #define BBOCB(op, bo, cb, aa, lk) \
918   (BBO ((op), (bo), (aa), (lk)) | (((cb) & 0x3) << 16))
919 #define BBOCB_MASK BBOCB (0x3f, 0x1f, 0x3, 1, 1)
920
921 /* A BBOCB_MASK with the y bit of the BO field removed.  */
922 #define BBOYCB_MASK (BBOCB_MASK &~ Y_MASK)
923
924 /* A BBOYCB_MASK in which the BI field is fixed.  */
925 #define BBOYBI_MASK (BBOYCB_MASK | BI_MASK)
926
927 /* The main opcode mask with the RA field clear.  */
928 #define DRA_MASK (OP_MASK | RA_MASK)
929
930 /* A DS form instruction.  */
931 #define DSO(op, xop) (OP (op) | ((xop) & 0x3))
932 #define DS_MASK DSO (0x3f, 3)
933
934 /* An M form instruction.  */
935 #define M(op, rc) (OP (op) | ((rc) & 1))
936 #define M_MASK M (0x3f, 1)
937
938 /* An M form instruction with the ME field specified.  */
939 #define MME(op, me, rc) (M ((op), (rc)) | (((me) & 0x1f) << 1))
940
941 /* An M_MASK with the MB and ME fields fixed.  */
942 #define MMBME_MASK (M_MASK | MB_MASK | ME_MASK)
943
944 /* An M_MASK with the SH and ME fields fixed.  */
945 #define MSHME_MASK (M_MASK | SH_MASK | ME_MASK)
946
947 /* An MD form instruction.  */
948 #define MD(op, xop, rc) (OP (op) | (((xop) & 0x7) << 2) | ((rc) & 1))
949 #define MD_MASK MD (0x3f, 0x7, 1)
950
951 /* An MD_MASK with the MB field fixed.  */
952 #define MDMB_MASK (MD_MASK | MB6_MASK)
953
954 /* An MD_MASK with the SH field fixed.  */
955 #define MDSH_MASK (MD_MASK | SH6_MASK)
956
957 /* An MDS form instruction.  */
958 #define MDS(op, xop, rc) (OP (op) | (((xop) & 0xf) << 1) | ((rc) & 1))
959 #define MDS_MASK MDS (0x3f, 0xf, 1)
960
961 /* An MDS_MASK with the MB field fixed.  */
962 #define MDSMB_MASK (MDS_MASK | MB6_MASK)
963
964 /* An SC form instruction.  */
965 #define SC(op, sa, lk) (OP (op) | (((sa) & 1) << 1) | ((lk) & 1))
966 #define SC_MASK (OP_MASK | (0x3ff << 16) | (1 << 1) | 1)
967
968 /* An X form instruction.  */
969 #define X(op, xop) (OP (op) | (((xop) & 0x3ff) << 1))
970
971 /* An X form instruction with the RC bit specified.  */
972 #define XRC(op, xop, rc) (X ((op), (xop)) | ((rc) & 1))
973
974 /* The mask for an X form instruction.  */
975 #define X_MASK XRC (0x3f, 0x3ff, 1)
976
977 /* An X_MASK with the RA field fixed.  */
978 #define XRA_MASK (X_MASK | RA_MASK)
979
980 /* An X_MASK with the RB field fixed.  */
981 #define XRB_MASK (X_MASK | RB_MASK)
982
983 /* An X_MASK with the RT field fixed.  */
984 #define XRT_MASK (X_MASK | RT_MASK)
985
986 /* An X_MASK with the RA and RB fields fixed.  */
987 #define XRARB_MASK (X_MASK | RA_MASK | RB_MASK)
988
989 /* An X_MASK with the RT and RA fields fixed.  */
990 #define XRTRA_MASK (X_MASK | RT_MASK | RA_MASK)
991
992 /* An X form comparison instruction.  */
993 #define XCMPL(op, xop, l) (X ((op), (xop)) | (((l) & 1) << 21))
994
995 /* The mask for an X form comparison instruction.  */
996 #define XCMP_MASK (X_MASK | (1 << 22))
997
998 /* The mask for an X form comparison instruction with the L field
999    fixed.  */
1000 #define XCMPL_MASK (XCMP_MASK | (1 << 21))
1001
1002 /* An X form trap instruction with the TO field specified.  */
1003 #define XTO(op, xop, to) (X ((op), (xop)) | (((to) & 0x1f) << 21))
1004 #define XTO_MASK (X_MASK | TO_MASK)
1005
1006 /* An XFL form instruction.  */
1007 #define XFL(op, xop, rc) (OP (op) | (((xop) & 0x3ff) << 1) | ((rc) & 1))
1008 #define XFL_MASK (XFL (0x3f, 0x3ff, 1) | (1 << 25) | (1 << 16))
1009
1010 /* An XL form instruction with the LK field set to 0.  */
1011 #define XL(op, xop) (OP (op) | (((xop) & 0x3ff) << 1))
1012
1013 /* An XL form instruction which uses the LK field.  */
1014 #define XLLK(op, xop, lk) (XL ((op), (xop)) | ((lk) & 1))
1015
1016 /* The mask for an XL form instruction.  */
1017 #define XL_MASK XLLK (0x3f, 0x3ff, 1)
1018
1019 /* An XL form instruction which explicitly sets the BO field.  */
1020 #define XLO(op, bo, xop, lk) \
1021   (XLLK ((op), (xop), (lk)) | (((bo) & 0x1f) << 21))
1022 #define XLO_MASK (XL_MASK | BO_MASK)
1023
1024 /* An XL form instruction which explicitly sets the y bit of the BO
1025    field.  */
1026 #define XLYLK(op, xop, y, lk) (XLLK ((op), (xop), (lk)) | (((y) & 1) << 21))
1027 #define XLYLK_MASK (XL_MASK | Y_MASK)
1028
1029 /* An XL form instruction which sets the BO field and the condition
1030    bits of the BI field.  */
1031 #define XLOCB(op, bo, cb, xop, lk) \
1032   (XLO ((op), (bo), (xop), (lk)) | (((cb) & 3) << 16))
1033 #define XLOCB_MASK XLOCB (0x3f, 0x1f, 0x3, 0x3ff, 1)
1034
1035 /* An XL_MASK or XLYLK_MASK or XLOCB_MASK with the BB field fixed.  */
1036 #define XLBB_MASK (XL_MASK | BB_MASK)
1037 #define XLYBB_MASK (XLYLK_MASK | BB_MASK)
1038 #define XLBOCBBB_MASK (XLOCB_MASK | BB_MASK)
1039
1040 /* An XL_MASK with the BO and BB fields fixed.  */
1041 #define XLBOBB_MASK (XL_MASK | BO_MASK | BB_MASK)
1042
1043 /* An XL_MASK with the BO, BI and BB fields fixed.  */
1044 #define XLBOBIBB_MASK (XL_MASK | BO_MASK | BI_MASK | BB_MASK)
1045
1046 /* An XO form instruction.  */
1047 #define XO(op, xop, oe, rc) \
1048   (OP (op) | (((xop) & 0x1ff) << 1) | (((oe) & 1) << 10) | ((rc) & 1))
1049 #define XO_MASK XO (0x3f, 0x1ff, 1, 1)
1050
1051 /* An XO_MASK with the RB field fixed.  */
1052 #define XORB_MASK (XO_MASK | RB_MASK)
1053
1054 /* An XS form instruction.  */
1055 #define XS(op, xop, rc) (OP (op) | (((xop) & 0x1ff) << 2) | ((rc) & 1))
1056 #define XS_MASK XS (0x3f, 0x1ff, 1)
1057
1058 /* An XFX form instruction with the SPR field filled in.  */
1059 #define XSPR(op, xop, spr) \
1060   (X ((op), (xop)) | (((spr) & 0x1f) << 16) | (((spr) & 0x3e0) << 6))
1061 #define XSPR_MASK (X_MASK | SPR_MASK)
1062
1063 /* The BO encodings used in extended conditional branch mnemonics.  */
1064 #define BODNZF  (0x0)
1065 #define BODNZFP (0x1)
1066 #define BODZF   (0x2)
1067 #define BODZFP  (0x3)
1068 #define BOF     (0x4)
1069 #define BOFP    (0x5)
1070 #define BODNZT  (0x8)
1071 #define BODNZTP (0x9)
1072 #define BODZT   (0xa)
1073 #define BODZTP  (0xb)
1074 #define BOT     (0xc)
1075 #define BOTP    (0xd)
1076 #define BODNZ   (0x10)
1077 #define BODNZP  (0x11)
1078 #define BODZ    (0x12)
1079 #define BODZP   (0x13)
1080 #define BOU     (0x14)
1081
1082 /* The BI condition bit encodings used in extended conditional branch
1083    mnemonics.  */
1084 #define CBLT    (0)
1085 #define CBGT    (1)
1086 #define CBEQ    (2)
1087 #define CBSO    (3)
1088
1089 /* The TO encodings used in extended trap mnemonics.  */
1090 #define TOLGT   (0x1)
1091 #define TOLLT   (0x2)
1092 #define TOEQ    (0x4)
1093 #define TOLGE   (0x5)
1094 #define TOLNL   (0x5)
1095 #define TOLLE   (0x6)
1096 #define TOLNG   (0x6)
1097 #define TOGT    (0x8)
1098 #define TOGE    (0xc)
1099 #define TONL    (0xc)
1100 #define TOLT    (0x10)
1101 #define TOLE    (0x14)
1102 #define TONG    (0x14)
1103 #define TONE    (0x18)
1104 #define TOU     (0x1f)
1105 \f
1106 /* Smaller names for the flags so each entry in the opcodes table will
1107    fit on a single line.  */
1108 #define PPC PPC_OPCODE_PPC
1109 #define POWER PPC_OPCODE_POWER
1110 #define POWER2 PPC_OPCODE_POWER2
1111 #define B32 PPC_OPCODE_32
1112 #define B64 PPC_OPCODE_64
1113 #define M601 PPC_OPCODE_601
1114 \f
1115 /* The opcode table.
1116
1117    The format of the opcode table is:
1118
1119    NAME      OPCODE     MASK            FLAGS           { OPERANDS }
1120
1121    NAME is the name of the instruction.
1122    OPCODE is the instruction opcode.
1123    MASK is the opcode mask; this is used to tell the disassembler
1124      which bits in the actual opcode must match OPCODE.
1125    FLAGS are flags indicated what processors support the instruction.
1126    OPERANDS is the list of operands.
1127
1128    The disassembler reads the table in order and prints the first
1129    instruction which matches, so this table is sorted to put more
1130    specific instructions before more general instructions.  It is also
1131    sorted by major opcode.  */
1132
1133 const struct powerpc_opcode powerpc_opcodes[] = {
1134 { "tdlgti",  OPTO(2,TOLGT), OPTO_MASK,  PPC|B64,        { RA, SI } },
1135 { "tdllti",  OPTO(2,TOLLT), OPTO_MASK,  PPC|B64,        { RA, SI } },
1136 { "tdeqi",   OPTO(2,TOEQ), OPTO_MASK,   PPC|B64,        { RA, SI } },
1137 { "tdlgei",  OPTO(2,TOLGE), OPTO_MASK,  PPC|B64,        { RA, SI } },
1138 { "tdlnli",  OPTO(2,TOLNL), OPTO_MASK,  PPC|B64,        { RA, SI } },
1139 { "tdllei",  OPTO(2,TOLLE), OPTO_MASK,  PPC|B64,        { RA, SI } },
1140 { "tdlngi",  OPTO(2,TOLNG), OPTO_MASK,  PPC|B64,        { RA, SI } },
1141 { "tdgti",   OPTO(2,TOGT), OPTO_MASK,   PPC|B64,        { RA, SI } },
1142 { "tdgei",   OPTO(2,TOGE), OPTO_MASK,   PPC|B64,        { RA, SI } },
1143 { "tdnli",   OPTO(2,TONL), OPTO_MASK,   PPC|B64,        { RA, SI } },
1144 { "tdlti",   OPTO(2,TOLT), OPTO_MASK,   PPC|B64,        { RA, SI } },
1145 { "tdlei",   OPTO(2,TOLE), OPTO_MASK,   PPC|B64,        { RA, SI } },
1146 { "tdngi",   OPTO(2,TONG), OPTO_MASK,   PPC|B64,        { RA, SI } },
1147 { "tdnei",   OPTO(2,TONE), OPTO_MASK,   PPC|B64,        { RA, SI } },
1148 { "tdi",     OP(2),     OP_MASK,        PPC|B64,        { TO, RA, SI } },
1149
1150 { "twlgti",  OPTO(3,TOLGT), OPTO_MASK,  PPC,            { RA, SI } },
1151 { "tlgti",   OPTO(3,TOLGT), OPTO_MASK,  POWER,          { RA, SI } },
1152 { "twllti",  OPTO(3,TOLLT), OPTO_MASK,  PPC,            { RA, SI } },
1153 { "tllti",   OPTO(3,TOLLT), OPTO_MASK,  POWER,          { RA, SI } },
1154 { "tweqi",   OPTO(3,TOEQ), OPTO_MASK,   PPC,            { RA, SI } },
1155 { "teqi",    OPTO(3,TOEQ), OPTO_MASK,   POWER,          { RA, SI } },
1156 { "twlgei",  OPTO(3,TOLGE), OPTO_MASK,  PPC,            { RA, SI } },
1157 { "tlgei",   OPTO(3,TOLGE), OPTO_MASK,  POWER,          { RA, SI } },
1158 { "twlnli",  OPTO(3,TOLNL), OPTO_MASK,  PPC,            { RA, SI } },
1159 { "tlnli",   OPTO(3,TOLNL), OPTO_MASK,  POWER,          { RA, SI } },
1160 { "twllei",  OPTO(3,TOLLE), OPTO_MASK,  PPC,            { RA, SI } },
1161 { "tllei",   OPTO(3,TOLLE), OPTO_MASK,  POWER,          { RA, SI } },
1162 { "twlngi",  OPTO(3,TOLNG), OPTO_MASK,  PPC,            { RA, SI } },
1163 { "tlngi",   OPTO(3,TOLNG), OPTO_MASK,  POWER,          { RA, SI } },
1164 { "twgti",   OPTO(3,TOGT), OPTO_MASK,   PPC,            { RA, SI } },
1165 { "tgti",    OPTO(3,TOGT), OPTO_MASK,   POWER,          { RA, SI } },
1166 { "twgei",   OPTO(3,TOGE), OPTO_MASK,   PPC,            { RA, SI } },
1167 { "tgei",    OPTO(3,TOGE), OPTO_MASK,   POWER,          { RA, SI } },
1168 { "twnli",   OPTO(3,TONL), OPTO_MASK,   PPC,            { RA, SI } },
1169 { "tnli",    OPTO(3,TONL), OPTO_MASK,   POWER,          { RA, SI } },
1170 { "twlti",   OPTO(3,TOLT), OPTO_MASK,   PPC,            { RA, SI } },
1171 { "tlti",    OPTO(3,TOLT), OPTO_MASK,   POWER,          { RA, SI } },
1172 { "twlei",   OPTO(3,TOLE), OPTO_MASK,   PPC,            { RA, SI } },
1173 { "tlei",    OPTO(3,TOLE), OPTO_MASK,   POWER,          { RA, SI } },
1174 { "twngi",   OPTO(3,TONG), OPTO_MASK,   PPC,            { RA, SI } },
1175 { "tngi",    OPTO(3,TONG), OPTO_MASK,   POWER,          { RA, SI } },
1176 { "twnei",   OPTO(3,TONE), OPTO_MASK,   PPC,            { RA, SI } },
1177 { "tnei",    OPTO(3,TONE), OPTO_MASK,   POWER,          { RA, SI } },
1178 { "twi",     OP(3),     OP_MASK,        PPC,            { TO, RA, SI } },
1179 { "ti",      OP(3),     OP_MASK,        POWER,          { TO, RA, SI } },
1180
1181 { "mulli",   OP(7),     OP_MASK,        PPC,            { RT, RA, SI } },
1182 { "muli",    OP(7),     OP_MASK,        POWER,          { RT, RA, SI } },
1183
1184 { "subfic",  OP(8),     OP_MASK,        PPC,            { RT, RA, SI } },
1185 { "sfi",     OP(8),     OP_MASK,        POWER,          { RT, RA, SI } },
1186
1187 { "dozi",    OP(9),     OP_MASK,        POWER|M601,     { RT, RA, SI } },
1188
1189 { "cmplwi",  OPL(10,0), OPL_MASK,       PPC,            { OBF, RA, UI } },
1190 { "cmpldi",  OPL(10,1), OPL_MASK,       PPC|B64,        { OBF, RA, UI } },
1191 { "cmpli",   OP(10),    OP_MASK,        PPC,            { BF, L, RA, UI } },
1192 { "cmpli",   OP(10),    OP_MASK,        POWER,          { BF, RA, UI } },
1193
1194 { "cmpwi",   OPL(11,0), OPL_MASK,       PPC,            { OBF, RA, SI } },
1195 { "cmpdi",   OPL(11,1), OPL_MASK,       PPC|B64,        { OBF, RA, SI } },
1196 { "cmpi",    OP(11),    OP_MASK,        PPC,            { BF, L, RA, SI } },
1197 { "cmpi",    OP(11),    OP_MASK,        POWER,          { BF, RA, SI } },
1198
1199 { "addic",   OP(12),    OP_MASK,        PPC,            { RT, RA, SI } },
1200 { "ai",      OP(12),    OP_MASK,        POWER,          { RT, RA, SI } },
1201 { "subic",   OP(12),    OP_MASK,        PPC,            { RT, RA, NSI } },
1202
1203 { "addic.",  OP(13),    OP_MASK,        PPC,            { RT, RA, SI } },
1204 { "ai.",     OP(13),    OP_MASK,        POWER,          { RT, RA, SI } },
1205 { "subic.",  OP(13),    OP_MASK,        PPC,            { RT, RA, NSI } },
1206
1207 { "li",      OP(14),    DRA_MASK,       PPC,            { RT, SI } },
1208 { "lil",     OP(14),    DRA_MASK,       POWER,          { RT, SI } },
1209 { "addi",    OP(14),    OP_MASK,        PPC,            { RT, RA, SI } },
1210 { "cal",     OP(14),    OP_MASK,        POWER,          { RT, D, RA } },
1211 { "subi",    OP(14),    OP_MASK,        PPC,            { RT, RA, NSI } },
1212 { "la",      OP(14),    OP_MASK,        PPC,            { RT, D, RA } },
1213
1214 { "lis",     OP(15),    DRA_MASK,       PPC,            { RT, SI } },
1215 { "liu",     OP(15),    DRA_MASK,       POWER,          { RT, UI } },
1216 { "addis",   OP(15),    OP_MASK,        PPC,            { RT, RA, SI } },
1217 { "cau",     OP(15),    OP_MASK,        POWER,          { RT, RA, UI } },
1218 { "subis",   OP(15),    OP_MASK,        PPC,            { RT, RA, NSI } },
1219
1220 { "bdnz-",   BBO(16,BODNZ,0,0), BBOYBI_MASK, PPC,       { BDM } },
1221 { "bdnz+",   BBO(16,BODNZ,0,0), BBOYBI_MASK, PPC,       { BDP } },
1222 { "bdnz",    BBO(16,BODNZ,0,0), BBOYBI_MASK, PPC,       { BD } },
1223 { "bdn",     BBO(16,BODNZ,0,0), BBOYBI_MASK, POWER,     { BD } },
1224 { "bdnzl-",  BBO(16,BODNZ,0,1), BBOYBI_MASK, PPC,       { BDM } },
1225 { "bdnzl+",  BBO(16,BODNZ,0,1), BBOYBI_MASK, PPC,       { BDP } },
1226 { "bdnzl",   BBO(16,BODNZ,0,1), BBOYBI_MASK, PPC,       { BD } },
1227 { "bdnl",    BBO(16,BODNZ,0,1), BBOYBI_MASK, POWER,     { BD } },
1228 { "bdnza-",  BBO(16,BODNZ,1,0), BBOYBI_MASK, PPC,       { BDMA } },
1229 { "bdnza+",  BBO(16,BODNZ,1,0), BBOYBI_MASK, PPC,       { BDPA } },
1230 { "bdnza",   BBO(16,BODNZ,1,0), BBOYBI_MASK, PPC,       { BDA } },
1231 { "bdna",    BBO(16,BODNZ,1,0), BBOYBI_MASK, POWER,     { BDA } },
1232 { "bdnzla-", BBO(16,BODNZ,1,1), BBOYBI_MASK, PPC,       { BDMA } },
1233 { "bdnzla+", BBO(16,BODNZ,1,1), BBOYBI_MASK, PPC,       { BDPA } },
1234 { "bdnzla",  BBO(16,BODNZ,1,1), BBOYBI_MASK, PPC,       { BDA } },
1235 { "bdnla",   BBO(16,BODNZ,1,1), BBOYBI_MASK, POWER,     { BDA } },
1236 { "bdz-",    BBO(16,BODZ,0,0), BBOYBI_MASK, PPC,        { BDM } },
1237 { "bdz+",    BBO(16,BODZ,0,0), BBOYBI_MASK, PPC,        { BDP } },
1238 { "bdz",     BBO(16,BODZ,0,0), BBOYBI_MASK, PPC|POWER,  { BD } },
1239 { "bdzl-",   BBO(16,BODZ,0,1), BBOYBI_MASK, PPC,        { BDM } },
1240 { "bdzl+",   BBO(16,BODZ,0,1), BBOYBI_MASK, PPC,        { BDP } },
1241 { "bdzl",    BBO(16,BODZ,0,1), BBOYBI_MASK, PPC|POWER,  { BD } },
1242 { "bdza-",   BBO(16,BODZ,1,0), BBOYBI_MASK, PPC,        { BDMA } },
1243 { "bdza+",   BBO(16,BODZ,1,0), BBOYBI_MASK, PPC,        { BDPA } },
1244 { "bdza",    BBO(16,BODZ,1,0), BBOYBI_MASK, PPC|POWER,  { BDA } },
1245 { "bdzla-",  BBO(16,BODZ,1,1), BBOYBI_MASK, PPC,        { BDMA } },
1246 { "bdzla+",  BBO(16,BODZ,1,1), BBOYBI_MASK, PPC,        { BDPA } },
1247 { "bdzla",   BBO(16,BODZ,1,1), BBOYBI_MASK, PPC|POWER,  { BDA } },
1248 { "blt-",    BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, PPC,  { CR, BDM } },
1249 { "blt+",    BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, PPC,  { CR, BDP } },
1250 { "blt",     BBOCB(16,BOT,CBLT,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1251 { "bltl-",   BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, PPC,  { CR, BDM } },
1252 { "bltl+",   BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, PPC,  { CR, BDP } },
1253 { "bltl",    BBOCB(16,BOT,CBLT,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1254 { "blta-",   BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, PPC,  { CR, BDMA } },
1255 { "blta+",   BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, PPC,  { CR, BDPA } },
1256 { "blta",    BBOCB(16,BOT,CBLT,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1257 { "bltla-",  BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, PPC,  { CR, BDMA } },
1258 { "bltla+",  BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, PPC,  { CR, BDPA } },
1259 { "bltla",   BBOCB(16,BOT,CBLT,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1260 { "bgt-",    BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, PPC,  { CR, BDM } },
1261 { "bgt+",    BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, PPC,  { CR, BDP } },
1262 { "bgt",     BBOCB(16,BOT,CBGT,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1263 { "bgtl-",   BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, PPC,  { CR, BDM } },
1264 { "bgtl+",   BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, PPC,  { CR, BDP } },
1265 { "bgtl",    BBOCB(16,BOT,CBGT,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1266 { "bgta-",   BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, PPC,  { CR, BDMA } },
1267 { "bgta+",   BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, PPC,  { CR, BDPA } },
1268 { "bgta",    BBOCB(16,BOT,CBGT,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1269 { "bgtla-",  BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, PPC,  { CR, BDMA } },
1270 { "bgtla+",  BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, PPC,  { CR, BDPA } },
1271 { "bgtla",   BBOCB(16,BOT,CBGT,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1272 { "beq-",    BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, PPC,  { CR, BDM } },
1273 { "beq+",    BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, PPC,  { CR, BDP } },
1274 { "beq",     BBOCB(16,BOT,CBEQ,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1275 { "beql-",   BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, PPC,  { CR, BDM } },
1276 { "beql+",   BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, PPC,  { CR, BDP } },
1277 { "beql",    BBOCB(16,BOT,CBEQ,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1278 { "beqa-",   BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, PPC,  { CR, BDMA } },
1279 { "beqa+",   BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, PPC,  { CR, BDPA } },
1280 { "beqa",    BBOCB(16,BOT,CBEQ,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1281 { "beqla-",  BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, PPC,  { CR, BDMA } },
1282 { "beqla+",  BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, PPC,  { CR, BDPA } },
1283 { "beqla",   BBOCB(16,BOT,CBEQ,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1284 { "bso-",    BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC,  { CR, BDM } },
1285 { "bso+",    BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC,  { CR, BDP } },
1286 { "bso",     BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1287 { "bsol-",   BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC,  { CR, BDM } },
1288 { "bsol+",   BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC,  { CR, BDP } },
1289 { "bsol",    BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1290 { "bsoa-",   BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC,  { CR, BDMA } },
1291 { "bsoa+",   BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC,  { CR, BDPA } },
1292 { "bsoa",    BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1293 { "bsola-",  BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC,  { CR, BDMA } },
1294 { "bsola+",  BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC,  { CR, BDPA } },
1295 { "bsola",   BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1296 { "bun-",    BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC,  { CR, BDM } },
1297 { "bun+",    BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC,  { CR, BDP } },
1298 { "bun",     BBOCB(16,BOT,CBSO,0,0), BBOYCB_MASK, PPC,  { CR, BD } },
1299 { "bunl-",   BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC,  { CR, BDM } },
1300 { "bunl+",   BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC,  { CR, BDP } },
1301 { "bunl",    BBOCB(16,BOT,CBSO,0,1), BBOYCB_MASK, PPC,  { CR, BD } },
1302 { "buna-",   BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC,  { CR, BDMA } },
1303 { "buna+",   BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC,  { CR, BDPA } },
1304 { "buna",    BBOCB(16,BOT,CBSO,1,0), BBOYCB_MASK, PPC,  { CR, BDA } },
1305 { "bunla-",  BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC,  { CR, BDMA } },
1306 { "bunla+",  BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC,  { CR, BDPA } },
1307 { "bunla",   BBOCB(16,BOT,CBSO,1,1), BBOYCB_MASK, PPC,  { CR, BDA } },
1308 { "bge-",    BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC,  { CR, BDM } },
1309 { "bge+",    BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC,  { CR, BDP } },
1310 { "bge",     BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1311 { "bgel-",   BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC,  { CR, BDM } },
1312 { "bgel+",   BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC,  { CR, BDP } },
1313 { "bgel",    BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1314 { "bgea-",   BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC,  { CR, BDMA } },
1315 { "bgea+",   BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC,  { CR, BDPA } },
1316 { "bgea",    BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1317 { "bgela-",  BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC,  { CR, BDMA } },
1318 { "bgela+",  BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC,  { CR, BDPA } },
1319 { "bgela",   BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1320 { "bnl-",    BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC,  { CR, BDM } },
1321 { "bnl+",    BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC,  { CR, BDP } },
1322 { "bnl",     BBOCB(16,BOF,CBLT,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1323 { "bnll-",   BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC,  { CR, BDM } },
1324 { "bnll+",   BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC,  { CR, BDP } },
1325 { "bnll",    BBOCB(16,BOF,CBLT,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1326 { "bnla-",   BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC,  { CR, BDMA } },
1327 { "bnla+",   BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC,  { CR, BDPA } },
1328 { "bnla",    BBOCB(16,BOF,CBLT,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1329 { "bnlla-",  BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC,  { CR, BDMA } },
1330 { "bnlla+",  BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC,  { CR, BDPA } },
1331 { "bnlla",   BBOCB(16,BOF,CBLT,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1332 { "ble-",    BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC,  { CR, BDM } },
1333 { "ble+",    BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC,  { CR, BDP } },
1334 { "ble",     BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1335 { "blel-",   BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC,  { CR, BDM } },
1336 { "blel+",   BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC,  { CR, BDP } },
1337 { "blel",    BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1338 { "blea-",   BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC,  { CR, BDMA } },
1339 { "blea+",   BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC,  { CR, BDPA } },
1340 { "blea",    BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1341 { "blela-",  BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC,  { CR, BDMA } },
1342 { "blela+",  BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC,  { CR, BDPA } },
1343 { "blela",   BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1344 { "bng-",    BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC,  { CR, BDM } },
1345 { "bng+",    BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC,  { CR, BDP } },
1346 { "bng",     BBOCB(16,BOF,CBGT,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1347 { "bngl-",   BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC,  { CR, BDM } },
1348 { "bngl+",   BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC,  { CR, BDP } },
1349 { "bngl",    BBOCB(16,BOF,CBGT,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1350 { "bnga-",   BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC,  { CR, BDMA } },
1351 { "bnga+",   BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC,  { CR, BDPA } },
1352 { "bnga",    BBOCB(16,BOF,CBGT,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1353 { "bngla-",  BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC,  { CR, BDMA } },
1354 { "bngla+",  BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC,  { CR, BDPA } },
1355 { "bngla",   BBOCB(16,BOF,CBGT,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1356 { "bne-",    BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, PPC,  { CR, BDM } },
1357 { "bne+",    BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, PPC,  { CR, BDP } },
1358 { "bne",     BBOCB(16,BOF,CBEQ,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1359 { "bnel-",   BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, PPC,  { CR, BDM } },
1360 { "bnel+",   BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, PPC,  { CR, BDP } },
1361 { "bnel",    BBOCB(16,BOF,CBEQ,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1362 { "bnea-",   BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, PPC,  { CR, BDMA } },
1363 { "bnea+",   BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, PPC,  { CR, BDPA } },
1364 { "bnea",    BBOCB(16,BOF,CBEQ,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1365 { "bnela-",  BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, PPC,  { CR, BDMA } },
1366 { "bnela+",  BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, PPC,  { CR, BDPA } },
1367 { "bnela",   BBOCB(16,BOF,CBEQ,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1368 { "bns-",    BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC,  { CR, BDM } },
1369 { "bns+",    BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC,  { CR, BDP } },
1370 { "bns",     BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1371 { "bnsl-",   BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC,  { CR, BDM } },
1372 { "bnsl+",   BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC,  { CR, BDP } },
1373 { "bnsl",    BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC|POWER, { CR, BD } },
1374 { "bnsa-",   BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC,  { CR, BDMA } },
1375 { "bnsa+",   BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC,  { CR, BDPA } },
1376 { "bnsa",    BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1377 { "bnsla-",  BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC,  { CR, BDMA } },
1378 { "bnsla+",  BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC,  { CR, BDPA } },
1379 { "bnsla",   BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC|POWER, { CR, BDA } },
1380 { "bnu-",    BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC,  { CR, BDM } },
1381 { "bnu+",    BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC,  { CR, BDP } },
1382 { "bnu",     BBOCB(16,BOF,CBSO,0,0), BBOYCB_MASK, PPC,  { CR, BD } },
1383 { "bnul-",   BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC,  { CR, BDM } },
1384 { "bnul+",   BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC,  { CR, BDP } },
1385 { "bnul",    BBOCB(16,BOF,CBSO,0,1), BBOYCB_MASK, PPC,  { CR, BD } },
1386 { "bnua-",   BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC,  { CR, BDMA } },
1387 { "bnua+",   BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC,  { CR, BDPA } },
1388 { "bnua",    BBOCB(16,BOF,CBSO,1,0), BBOYCB_MASK, PPC,  { CR, BDA } },
1389 { "bnula-",  BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC,  { CR, BDMA } },
1390 { "bnula+",  BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC,  { CR, BDPA } },
1391 { "bnula",   BBOCB(16,BOF,CBSO,1,1), BBOYCB_MASK, PPC,  { CR, BDA } },
1392 { "bdnzt-",  BBO(16,BODNZT,0,0), BBOY_MASK, PPC,        { BI, BDM } },
1393 { "bdnzt+",  BBO(16,BODNZT,0,0), BBOY_MASK, PPC,        { BI, BDP } },
1394 { "bdnzt",   BBO(16,BODNZT,0,0), BBOY_MASK, PPC,        { BI, BD } },
1395 { "bdnztl-", BBO(16,BODNZT,0,1), BBOY_MASK, PPC,        { BI, BDM } },
1396 { "bdnztl+", BBO(16,BODNZT,0,1), BBOY_MASK, PPC,        { BI, BDP } },
1397 { "bdnztl",  BBO(16,BODNZT,0,1), BBOY_MASK, PPC,        { BI, BD } },
1398 { "bdnzta-", BBO(16,BODNZT,1,0), BBOY_MASK, PPC,        { BI, BDMA } },
1399 { "bdnzta+", BBO(16,BODNZT,1,0), BBOY_MASK, PPC,        { BI, BDPA } },
1400 { "bdnzta",  BBO(16,BODNZT,1,0), BBOY_MASK, PPC,        { BI, BDA } },
1401 { "bdnztla-",BBO(16,BODNZT,1,1), BBOY_MASK, PPC,        { BI, BDMA } },
1402 { "bdnztla+",BBO(16,BODNZT,1,1), BBOY_MASK, PPC,        { BI, BDPA } },
1403 { "bdnztla", BBO(16,BODNZT,1,1), BBOY_MASK, PPC,        { BI, BDA } },
1404 { "bdnzf-",  BBO(16,BODNZF,0,0), BBOY_MASK, PPC,        { BI, BDM } },
1405 { "bdnzf+",  BBO(16,BODNZF,0,0), BBOY_MASK, PPC,        { BI, BDP } },
1406 { "bdnzf",   BBO(16,BODNZF,0,0), BBOY_MASK, PPC,        { BI, BD } },
1407 { "bdnzfl-", BBO(16,BODNZF,0,1), BBOY_MASK, PPC,        { BI, BDM } },
1408 { "bdnzfl+", BBO(16,BODNZF,0,1), BBOY_MASK, PPC,        { BI, BDP } },
1409 { "bdnzfl",  BBO(16,BODNZF,0,1), BBOY_MASK, PPC,        { BI, BD } },
1410 { "bdnzfa-", BBO(16,BODNZF,1,0), BBOY_MASK, PPC,        { BI, BDMA } },
1411 { "bdnzfa+", BBO(16,BODNZF,1,0), BBOY_MASK, PPC,        { BI, BDPA } },
1412 { "bdnzfa",  BBO(16,BODNZF,1,0), BBOY_MASK, PPC,        { BI, BDA } },
1413 { "bdnzfla-",BBO(16,BODNZF,1,1), BBOY_MASK, PPC,        { BI, BDMA } },
1414 { "bdnzfla+",BBO(16,BODNZF,1,1), BBOY_MASK, PPC,        { BI, BDPA } },
1415 { "bdnzfla", BBO(16,BODNZF,1,1), BBOY_MASK, PPC,        { BI, BDA } },
1416 { "bt-",     BBO(16,BOT,0,0), BBOY_MASK, PPC,           { BI, BDM } },
1417 { "bt+",     BBO(16,BOT,0,0), BBOY_MASK, PPC,           { BI, BDP } },
1418 { "bt",      BBO(16,BOT,0,0), BBOY_MASK, PPC,           { BI, BD } },
1419 { "bbt",     BBO(16,BOT,0,0), BBOY_MASK, POWER,         { BI, BD } },
1420 { "btl-",    BBO(16,BOT,0,1), BBOY_MASK, PPC,           { BI, BDM } },
1421 { "btl+",    BBO(16,BOT,0,1), BBOY_MASK, PPC,           { BI, BDP } },
1422 { "btl",     BBO(16,BOT,0,1), BBOY_MASK, PPC,           { BI, BD } },
1423 { "bbtl",    BBO(16,BOT,0,1), BBOY_MASK, POWER,         { BI, BD } },
1424 { "bta-",    BBO(16,BOT,1,0), BBOY_MASK, PPC,           { BI, BDMA } },
1425 { "bta+",    BBO(16,BOT,1,0), BBOY_MASK, PPC,           { BI, BDPA } },
1426 { "bta",     BBO(16,BOT,1,0), BBOY_MASK, PPC,           { BI, BDA } },
1427 { "bbta",    BBO(16,BOT,1,0), BBOY_MASK, POWER,         { BI, BDA } },
1428 { "btla-",   BBO(16,BOT,1,1), BBOY_MASK, PPC,           { BI, BDMA } },
1429 { "btla+",   BBO(16,BOT,1,1), BBOY_MASK, PPC,           { BI, BDPA } },
1430 { "btla",    BBO(16,BOT,1,1), BBOY_MASK, PPC,           { BI, BDA } },
1431 { "bbtla",   BBO(16,BOT,1,1), BBOY_MASK, POWER,         { BI, BDA } },
1432 { "bf-",     BBO(16,BOF,0,0), BBOY_MASK, PPC,           { BI, BDM } },
1433 { "bf+",     BBO(16,BOF,0,0), BBOY_MASK, PPC,           { BI, BDP } },
1434 { "bf",      BBO(16,BOF,0,0), BBOY_MASK, PPC,           { BI, BD } },
1435 { "bbf",     BBO(16,BOF,0,0), BBOY_MASK, POWER,         { BI, BD } },
1436 { "bfl-",    BBO(16,BOF,0,1), BBOY_MASK, PPC,           { BI, BDM } },
1437 { "bfl+",    BBO(16,BOF,0,1), BBOY_MASK, PPC,           { BI, BDP } },
1438 { "bfl",     BBO(16,BOF,0,1), BBOY_MASK, PPC,           { BI, BD } },
1439 { "bbfl",    BBO(16,BOF,0,1), BBOY_MASK, POWER,         { BI, BD } },
1440 { "bfa-",    BBO(16,BOF,1,0), BBOY_MASK, PPC,           { BI, BDMA } },
1441 { "bfa+",    BBO(16,BOF,1,0), BBOY_MASK, PPC,           { BI, BDPA } },
1442 { "bfa",     BBO(16,BOF,1,0), BBOY_MASK, PPC,           { BI, BDA } },
1443 { "bbfa",    BBO(16,BOF,1,0), BBOY_MASK, POWER,         { BI, BDA } },
1444 { "bfla-",   BBO(16,BOF,1,1), BBOY_MASK, PPC,           { BI, BDMA } },
1445 { "bfla+",   BBO(16,BOF,1,1), BBOY_MASK, PPC,           { BI, BDPA } },
1446 { "bfla",    BBO(16,BOF,1,1), BBOY_MASK, PPC,           { BI, BDA } },
1447 { "bbfla",   BBO(16,BOF,1,1), BBOY_MASK, POWER,         { BI, BDA } },
1448 { "bdzt-",   BBO(16,BODZT,0,0), BBOY_MASK, PPC,         { BI, BDM } },
1449 { "bdzt+",   BBO(16,BODZT,0,0), BBOY_MASK, PPC,         { BI, BDP } },
1450 { "bdzt",    BBO(16,BODZT,0,0), BBOY_MASK, PPC,         { BI, BD } },
1451 { "bdztl-",  BBO(16,BODZT,0,1), BBOY_MASK, PPC,         { BI, BDM } },
1452 { "bdztl+",  BBO(16,BODZT,0,1), BBOY_MASK, PPC,         { BI, BDP } },
1453 { "bdztl",   BBO(16,BODZT,0,1), BBOY_MASK, PPC,         { BI, BD } },
1454 { "bdzta-",  BBO(16,BODZT,1,0), BBOY_MASK, PPC,         { BI, BDMA } },
1455 { "bdzta+",  BBO(16,BODZT,1,0), BBOY_MASK, PPC,         { BI, BDPA } },
1456 { "bdzta",   BBO(16,BODZT,1,0), BBOY_MASK, PPC,         { BI, BDA } },
1457 { "bdztla-", BBO(16,BODZT,1,1), BBOY_MASK, PPC,         { BI, BDMA } },
1458 { "bdztla+", BBO(16,BODZT,1,1), BBOY_MASK, PPC,         { BI, BDPA } },
1459 { "bdztla",  BBO(16,BODZT,1,1), BBOY_MASK, PPC,         { BI, BDA } },
1460 { "bdzf-",   BBO(16,BODZF,0,0), BBOY_MASK, PPC,         { BI, BDM } },
1461 { "bdzf+",   BBO(16,BODZF,0,0), BBOY_MASK, PPC,         { BI, BDP } },
1462 { "bdzf",    BBO(16,BODZF,0,0), BBOY_MASK, PPC,         { BI, BD } },
1463 { "bdzfl-",  BBO(16,BODZF,0,1), BBOY_MASK, PPC,         { BI, BDM } },
1464 { "bdzfl+",  BBO(16,BODZF,0,1), BBOY_MASK, PPC,         { BI, BDP } },
1465 { "bdzfl",   BBO(16,BODZF,0,1), BBOY_MASK, PPC,         { BI, BD } },
1466 { "bdzfa-",  BBO(16,BODZF,1,0), BBOY_MASK, PPC,         { BI, BDMA } },
1467 { "bdzfa+",  BBO(16,BODZF,1,0), BBOY_MASK, PPC,         { BI, BDPA } },
1468 { "bdzfa",   BBO(16,BODZF,1,0), BBOY_MASK, PPC,         { BI, BDA } },
1469 { "bdzfla-", BBO(16,BODZF,1,1), BBOY_MASK, PPC,         { BI, BDMA } },
1470 { "bdzfla+", BBO(16,BODZF,1,1), BBOY_MASK, PPC,         { BI, BDPA } },
1471 { "bdzfla",  BBO(16,BODZF,1,1), BBOY_MASK, PPC,         { BI, BDA } },
1472 { "bc-",     B(16,0,0), B_MASK,         PPC,            { BOE, BI, BDM } },
1473 { "bc+",     B(16,0,0), B_MASK,         PPC,            { BOE, BI, BDP } },
1474 { "bc",      B(16,0,0), B_MASK,         PPC|POWER,      { BO, BI, BD } },
1475 { "bcl-",    B(16,0,1), B_MASK,         PPC,            { BOE, BI, BDM } },
1476 { "bcl+",    B(16,0,1), B_MASK,         PPC,            { BOE, BI, BDP } },
1477 { "bcl",     B(16,0,1), B_MASK,         PPC|POWER,      { BO, BI, BD } },
1478 { "bca-",    B(16,1,0), B_MASK,         PPC,            { BOE, BI, BDMA } },
1479 { "bca+",    B(16,1,0), B_MASK,         PPC,            { BOE, BI, BDPA } },
1480 { "bca",     B(16,1,0), B_MASK,         PPC|POWER,      { BO, BI, BDA } },
1481 { "bcla-",   B(16,1,1), B_MASK,         PPC,            { BOE, BI, BDMA } },
1482 { "bcla+",   B(16,1,1), B_MASK,         PPC,            { BOE, BI, BDPA } },
1483 { "bcla",    B(16,1,1), B_MASK,         PPC|POWER,      { BO, BI, BDA } },
1484
1485 { "sc",      SC(17,1,0), 0xffffffff,    PPC,            { 0 } },
1486 { "svc",     SC(17,0,0), SC_MASK,       POWER,          { LEV, FL1, FL2 } },
1487 { "svcl",    SC(17,0,1), SC_MASK,       POWER,          { LEV, FL1, FL2 } },
1488 { "svca",    SC(17,1,0), SC_MASK,       POWER,          { SV } },
1489 { "svcla",   SC(17,1,1), SC_MASK,       POWER,          { SV } },
1490
1491 { "b",       B(18,0,0), B_MASK,         PPC|POWER,      { LI } },
1492 { "bl",      B(18,0,1), B_MASK,         PPC|POWER,      { LI } },
1493 { "ba",      B(18,1,0), B_MASK,         PPC|POWER,      { LIA } },
1494 { "bla",     B(18,1,1), B_MASK,         PPC|POWER,      { LIA } },
1495
1496 { "mcrf",    XL(19,0),  XLBB_MASK|(3<<21)|(3<<16), PPC|POWER, { BF, BFA } },
1497
1498 { "blr",     XLO(19,BOU,16,0), XLBOBIBB_MASK, PPC,      { 0 } },
1499 { "br",      XLO(19,BOU,16,0), XLBOBIBB_MASK, POWER,    { 0 } },
1500 { "blrl",    XLO(19,BOU,16,1), XLBOBIBB_MASK, PPC,      { 0 } },
1501 { "brl",     XLO(19,BOU,16,1), XLBOBIBB_MASK, POWER,    { 0 } },
1502 { "bdnzlr",  XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPC,    { 0 } },
1503 { "bdnzlr-", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPC,    { 0 } },
1504 { "bdnzlr+", XLO(19,BODNZP,16,0), XLBOBIBB_MASK, PPC,   { 0 } },
1505 { "bdnzlrl", XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPC,    { 0 } },
1506 { "bdnzlrl-",XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPC,    { 0 } },
1507 { "bdnzlrl+",XLO(19,BODNZP,16,1), XLBOBIBB_MASK, PPC,   { 0 } },
1508 { "bdzlr",   XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPC,     { 0 } },
1509 { "bdzlr-",  XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPC,     { 0 } },
1510 { "bdzlr+",  XLO(19,BODZP,16,0), XLBOBIBB_MASK, PPC,    { 0 } },
1511 { "bdzlrl",  XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPC,     { 0 } },
1512 { "bdzlrl-", XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPC,     { 0 } },
1513 { "bdzlrl+", XLO(19,BODZP,16,1), XLBOBIBB_MASK, PPC,    { 0 } },
1514 { "bltlr",   XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1515 { "bltlr-",  XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1516 { "bltlr+",  XLOCB(19,BOTP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1517 { "bltr",    XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, POWER, { CR } },
1518 { "bltlrl",  XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1519 { "bltlrl-", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1520 { "bltlrl+", XLOCB(19,BOTP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1521 { "bltrl",   XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, POWER, { CR } },
1522 { "bgtlr",   XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1523 { "bgtlr-",  XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1524 { "bgtlr+",  XLOCB(19,BOTP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1525 { "bgtr",    XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, POWER, { CR } },
1526 { "bgtlrl",  XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1527 { "bgtlrl-", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1528 { "bgtlrl+", XLOCB(19,BOTP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1529 { "bgtrl",   XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, POWER, { CR } },
1530 { "beqlr",   XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
1531 { "beqlr-",  XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
1532 { "beqlr+",  XLOCB(19,BOTP,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
1533 { "beqr",    XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, POWER, { CR } },
1534 { "beqlrl",  XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
1535 { "beqlrl-", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
1536 { "beqlrl+", XLOCB(19,BOTP,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
1537 { "beqrl",   XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, POWER, { CR } },
1538 { "bsolr",   XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1539 { "bsolr-",  XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1540 { "bsolr+",  XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1541 { "bsor",    XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, POWER, { CR } },
1542 { "bsolrl",  XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1543 { "bsolrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1544 { "bsolrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1545 { "bsorl",   XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, POWER, { CR } },
1546 { "bunlr",   XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1547 { "bunlr-",  XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1548 { "bunlr+",  XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1549 { "bunlrl",  XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1550 { "bunlrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1551 { "bunlrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1552 { "bgelr",   XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1553 { "bgelr-",  XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1554 { "bgelr+",  XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1555 { "bger",    XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, POWER, { CR } },
1556 { "bgelrl",  XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1557 { "bgelrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1558 { "bgelrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1559 { "bgerl",   XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, POWER, { CR } },
1560 { "bnllr",   XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1561 { "bnllr-",  XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1562 { "bnllr+",  XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1563 { "bnlr",    XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, POWER, { CR } },
1564 { "bnllrl",  XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1565 { "bnllrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1566 { "bnllrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1567 { "bnlrl",   XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, POWER, { CR } },
1568 { "blelr",   XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1569 { "blelr-",  XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1570 { "blelr+",  XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1571 { "bler",    XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, POWER, { CR } },
1572 { "blelrl",  XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1573 { "blelrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1574 { "blelrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1575 { "blerl",   XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, POWER, { CR } },
1576 { "bnglr",   XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1577 { "bnglr-",  XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1578 { "bnglr+",  XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, PPC, { CR } },
1579 { "bngr",    XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, POWER, { CR } },
1580 { "bnglrl",  XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1581 { "bnglrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1582 { "bnglrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, PPC, { CR } },
1583 { "bngrl",   XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, POWER, { CR } },
1584 { "bnelr",   XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
1585 { "bnelr-",  XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
1586 { "bnelr+",  XLOCB(19,BOFP,CBEQ,16,0), XLBOCBBB_MASK, PPC, { CR } },
1587 { "bner",    XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, POWER, { CR } },
1588 { "bnelrl",  XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
1589 { "bnelrl-", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
1590 { "bnelrl+", XLOCB(19,BOFP,CBEQ,16,1), XLBOCBBB_MASK, PPC, { CR } },
1591 { "bnerl",   XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, POWER, { CR } },
1592 { "bnslr",   XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1593 { "bnslr-",  XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1594 { "bnslr+",  XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1595 { "bnsr",    XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, POWER, { CR } },
1596 { "bnslrl",  XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1597 { "bnslrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1598 { "bnslrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1599 { "bnsrl",   XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, POWER, { CR } },
1600 { "bnulr",   XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1601 { "bnulr-",  XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1602 { "bnulr+",  XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, PPC, { CR } },
1603 { "bnulrl",  XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1604 { "bnulrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1605 { "bnulrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, PPC, { CR } },
1606 { "btlr",    XLO(19,BOT,16,0), XLBOBB_MASK, PPC,        { BI } },
1607 { "btlr-",   XLO(19,BOT,16,0), XLBOBB_MASK, PPC,        { BI } },
1608 { "btlr+",   XLO(19,BOTP,16,0), XLBOBB_MASK, PPC,       { BI } },
1609 { "bbtr",    XLO(19,BOT,16,0), XLBOBB_MASK, POWER,      { BI } },
1610 { "btlrl",   XLO(19,BOT,16,1), XLBOBB_MASK, PPC,        { BI } },
1611 { "btlrl-",  XLO(19,BOT,16,1), XLBOBB_MASK, PPC,        { BI } },
1612 { "btlrl+",  XLO(19,BOTP,16,1), XLBOBB_MASK, PPC,       { BI } },
1613 { "bbtrl",   XLO(19,BOT,16,1), XLBOBB_MASK, POWER,      { BI } },
1614 { "bflr",    XLO(19,BOF,16,0), XLBOBB_MASK, PPC,        { BI } },
1615 { "bflr-",   XLO(19,BOF,16,0), XLBOBB_MASK, PPC,        { BI } },
1616 { "bflr+",   XLO(19,BOFP,16,0), XLBOBB_MASK, PPC,       { BI } },
1617 { "bbfr",    XLO(19,BOF,16,0), XLBOBB_MASK, POWER,      { BI } },
1618 { "bflrl",   XLO(19,BOF,16,1), XLBOBB_MASK, PPC,        { BI } },
1619 { "bflrl-",  XLO(19,BOF,16,1), XLBOBB_MASK, PPC,        { BI } },
1620 { "bflrl+",  XLO(19,BOFP,16,1), XLBOBB_MASK, PPC,       { BI } },
1621 { "bbfrl",   XLO(19,BOF,16,1), XLBOBB_MASK, POWER,      { BI } },
1622 { "bdnztlr", XLO(19,BODNZT,16,0), XLBOBB_MASK, PPC,     { BI } },
1623 { "bdnztlr-",XLO(19,BODNZT,16,0), XLBOBB_MASK, PPC,     { BI } },
1624 { "bdnztlr+",XLO(19,BODNZTP,16,0), XLBOBB_MASK, PPC,    { BI } },
1625 { "bdnztlrl",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPC,     { BI } },
1626 { "bdnztlrl-",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPC,    { BI } },
1627 { "bdnztlrl+",XLO(19,BODNZTP,16,1), XLBOBB_MASK, PPC,   { BI } },
1628 { "bdnzflr", XLO(19,BODNZF,16,0), XLBOBB_MASK, PPC,     { BI } },
1629 { "bdnzflr-",XLO(19,BODNZF,16,0), XLBOBB_MASK, PPC,     { BI } },
1630 { "bdnzflr+",XLO(19,BODNZFP,16,0), XLBOBB_MASK, PPC,    { BI } },
1631 { "bdnzflrl",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPC,     { BI } },
1632 { "bdnzflrl-",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPC,    { BI } },
1633 { "bdnzflrl+",XLO(19,BODNZFP,16,1), XLBOBB_MASK, PPC,   { BI } },
1634 { "bdztlr",  XLO(19,BODZT,16,0), XLBOBB_MASK, PPC,      { BI } },
1635 { "bdztlr-", XLO(19,BODZT,16,0), XLBOBB_MASK, PPC,      { BI } },
1636 { "bdztlr+", XLO(19,BODZTP,16,0), XLBOBB_MASK, PPC,     { BI } },
1637 { "bdztlrl", XLO(19,BODZT,16,1), XLBOBB_MASK, PPC,      { BI } },
1638 { "bdztlrl-",XLO(19,BODZT,16,1), XLBOBB_MASK, PPC,      { BI } },
1639 { "bdztlrl+",XLO(19,BODZTP,16,1), XLBOBB_MASK, PPC,     { BI } },
1640 { "bdzflr",  XLO(19,BODZF,16,0), XLBOBB_MASK, PPC,      { BI } },
1641 { "bdzflr-", XLO(19,BODZF,16,0), XLBOBB_MASK, PPC,      { BI } },
1642 { "bdzflr+", XLO(19,BODZFP,16,0), XLBOBB_MASK, PPC,     { BI } },
1643 { "bdzflrl", XLO(19,BODZF,16,1), XLBOBB_MASK, PPC,      { BI } },
1644 { "bdzflrl-",XLO(19,BODZF,16,1), XLBOBB_MASK, PPC,      { BI } },
1645 { "bdzflrl+",XLO(19,BODZFP,16,1), XLBOBB_MASK, PPC,     { BI } },
1646 { "bclr",    XLLK(19,16,0), XLYBB_MASK, PPC,            { BO, BI } },
1647 { "bclrl",   XLLK(19,16,1), XLYBB_MASK, PPC,            { BO, BI } },
1648 { "bclr+",   XLYLK(19,16,1,0), XLYBB_MASK, PPC,         { BOE, BI } },
1649 { "bclrl+",  XLYLK(19,16,1,1), XLYBB_MASK, PPC,         { BOE, BI } },
1650 { "bclr-",   XLYLK(19,16,0,0), XLYBB_MASK, PPC,         { BOE, BI } },
1651 { "bclrl-",  XLYLK(19,16,0,1), XLYBB_MASK, PPC,         { BOE, BI } },
1652 { "bcr",     XLLK(19,16,0), XLBB_MASK,  POWER,          { BO, BI } },
1653 { "bcrl",    XLLK(19,16,1), XLBB_MASK,  POWER,          { BO, BI } },
1654
1655 { "crnot",   XL(19,33), XL_MASK,        PPC,            { BT, BA, BBA } },
1656 { "crnor",   XL(19,33), XL_MASK,        PPC|POWER,      { BT, BA, BB } },
1657
1658 { "rfi",     XL(19,50), 0xffffffff,     PPC|POWER,      { 0 } },
1659
1660 { "rfsvc",   XL(19,82), 0xffffffff,     POWER,          { 0 } },
1661
1662 { "crandc",  XL(19,129), XL_MASK,       PPC|POWER,      { BT, BA, BB } },
1663
1664 { "isync",   XL(19,150), 0xffffffff,    PPC,            { 0 } },
1665 { "ics",     XL(19,150), 0xffffffff,    POWER,          { 0 } },
1666
1667 { "crclr",   XL(19,193), XL_MASK,       PPC,            { BT, BAT, BBA } },
1668 { "crxor",   XL(19,193), XL_MASK,       PPC|POWER,      { BT, BA, BB } },
1669
1670 { "crnand",  XL(19,225), XL_MASK,       PPC|POWER,      { BT, BA, BB } },
1671
1672 { "crand",   XL(19,257), XL_MASK,       PPC|POWER,      { BT, BA, BB } },
1673
1674 { "crset",   XL(19,289), XL_MASK,       PPC,            { BT, BAT, BBA } },
1675 { "creqv",   XL(19,289), XL_MASK,       PPC|POWER,      { BT, BA, BB } },
1676
1677 { "crorc",   XL(19,417), XL_MASK,       PPC|POWER,      { BT, BA, BB } },
1678
1679 { "crmove",  XL(19,449), XL_MASK,       PPC,            { BT, BA, BBA } },
1680 { "cror",    XL(19,449), XL_MASK,       PPC|POWER,      { BT, BA, BB } },
1681
1682 { "bctr",    XLO(19,BOU,528,0), XLBOBIBB_MASK, PPC|POWER, { 0 } },
1683 { "bctrl",   XLO(19,BOU,528,1), XLBOBIBB_MASK, PPC|POWER, { 0 } },
1684 { "bltctr",  XLOCB(19,BOT,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1685 { "bltctr-", XLOCB(19,BOT,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1686 { "bltctr+", XLOCB(19,BOTP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1687 { "bltctrl", XLOCB(19,BOT,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1688 { "bltctrl-",XLOCB(19,BOT,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1689 { "bltctrl+",XLOCB(19,BOTP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1690 { "bgtctr",  XLOCB(19,BOT,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1691 { "bgtctr-", XLOCB(19,BOT,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1692 { "bgtctr+", XLOCB(19,BOTP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1693 { "bgtctrl", XLOCB(19,BOT,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1694 { "bgtctrl-",XLOCB(19,BOT,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1695 { "bgtctrl+",XLOCB(19,BOTP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1696 { "beqctr",  XLOCB(19,BOT,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
1697 { "beqctr-", XLOCB(19,BOT,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
1698 { "beqctr+", XLOCB(19,BOTP,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
1699 { "beqctrl", XLOCB(19,BOT,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
1700 { "beqctrl-",XLOCB(19,BOT,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
1701 { "beqctrl+",XLOCB(19,BOTP,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
1702 { "bsoctr",  XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
1703 { "bsoctr-", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
1704 { "bsoctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
1705 { "bsoctrl", XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
1706 { "bsoctrl-",XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
1707 { "bsoctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
1708 { "bunctr",  XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
1709 { "bunctr-", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
1710 { "bunctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
1711 { "bunctrl", XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
1712 { "bunctrl-",XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
1713 { "bunctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
1714 { "bgectr",  XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1715 { "bgectr-", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1716 { "bgectr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1717 { "bgectrl", XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1718 { "bgectrl-",XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1719 { "bgectrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1720 { "bnlctr",  XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1721 { "bnlctr-", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1722 { "bnlctr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1723 { "bnlctrl", XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1724 { "bnlctrl-",XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1725 { "bnlctrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1726 { "blectr",  XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1727 { "blectr-", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1728 { "blectr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1729 { "blectrl", XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1730 { "blectrl-",XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1731 { "blectrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1732 { "bngctr",  XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1733 { "bngctr-", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1734 { "bngctr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, PPC, { CR } },
1735 { "bngctrl", XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1736 { "bngctrl-",XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1737 { "bngctrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, PPC, { CR } },
1738 { "bnectr",  XLOCB(19,BOF,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
1739 { "bnectr-", XLOCB(19,BOF,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
1740 { "bnectr+", XLOCB(19,BOFP,CBEQ,528,0), XLBOCBBB_MASK, PPC, { CR } },
1741 { "bnectrl", XLOCB(19,BOF,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
1742 { "bnectrl-",XLOCB(19,BOF,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
1743 { "bnectrl+",XLOCB(19,BOFP,CBEQ,528,1), XLBOCBBB_MASK, PPC, { CR } },
1744 { "bnsctr",  XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
1745 { "bnsctr-", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
1746 { "bnsctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
1747 { "bnsctrl", XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
1748 { "bnsctrl-",XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
1749 { "bnsctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
1750 { "bnuctr",  XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
1751 { "bnuctr-", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
1752 { "bnuctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, PPC, { CR } },
1753 { "bnuctrl", XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
1754 { "bnuctrl-",XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
1755 { "bnuctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, PPC, { CR } },
1756 { "btctr",   XLO(19,BOT,528,0), XLBOBB_MASK, PPC,       { BI } },
1757 { "btctr-",  XLO(19,BOT,528,0), XLBOBB_MASK, PPC,       { BI } },
1758 { "btctr+",  XLO(19,BOTP,528,0), XLBOBB_MASK, PPC,      { BI } },
1759 { "btctrl",  XLO(19,BOT,528,1), XLBOBB_MASK, PPC,       { BI } },
1760 { "btctrl-", XLO(19,BOT,528,1), XLBOBB_MASK, PPC,       { BI } },
1761 { "btctrl+", XLO(19,BOTP,528,1), XLBOBB_MASK, PPC,      { BI } },
1762 { "bfctr",   XLO(19,BOF,528,0), XLBOBB_MASK, PPC,       { BI } },
1763 { "bfctr-",  XLO(19,BOF,528,0), XLBOBB_MASK, PPC,       { BI } },
1764 { "bfctr+",  XLO(19,BOFP,528,0), XLBOBB_MASK, PPC,      { BI } },
1765 { "bfctrl",  XLO(19,BOF,528,1), XLBOBB_MASK, PPC,       { BI } },
1766 { "bfctrl-", XLO(19,BOF,528,1), XLBOBB_MASK, PPC,       { BI } },
1767 { "bfctrl+", XLO(19,BOFP,528,1), XLBOBB_MASK, PPC,      { BI } },
1768 { "bcctr",   XLLK(19,528,0), XLYBB_MASK, PPC,           { BO, BI } },
1769 { "bcctr-",  XLYLK(19,528,0,0), XLYBB_MASK, PPC,        { BOE, BI } },
1770 { "bcctr+",  XLYLK(19,528,1,0), XLYBB_MASK, PPC,        { BOE, BI } },
1771 { "bcctrl",  XLLK(19,528,1), XLYBB_MASK, PPC,           { BO, BI } },
1772 { "bcctrl-", XLYLK(19,528,0,1), XLYBB_MASK, PPC,        { BOE, BI } },
1773 { "bcctrl+", XLYLK(19,528,1,1), XLYBB_MASK, PPC,        { BOE, BI } },
1774 { "bcc",     XLLK(19,528,0), XLBB_MASK, POWER,          { BO, BI } },
1775 { "bccl",    XLLK(19,528,1), XLBB_MASK, POWER,          { BO, BI } },
1776
1777 { "rlwimi",  M(20,0),   M_MASK,         PPC,            { RA,RS,SH,MBE,ME } },
1778 { "rlimi",   M(20,0),   M_MASK,         POWER,          { RA,RS,SH,MBE,ME } },
1779
1780 { "rlwimi.", M(20,1),   M_MASK,         PPC,            { RA,RS,SH,MBE,ME } },
1781 { "rlimi.",  M(20,1),   M_MASK,         POWER,          { RA,RS,SH,MBE,ME } },
1782
1783 { "rotlwi",  MME(21,31,0), MMBME_MASK,  PPC,            { RA, RS, SH } },
1784 { "clrlwi",  MME(21,31,0), MSHME_MASK,  PPC,            { RA, RS, MB } },
1785 { "rlwinm",  M(21,0),   M_MASK,         PPC,            { RA,RS,SH,MBE,ME } },
1786 { "rlinm",   M(21,0),   M_MASK,         POWER,          { RA,RS,SH,MBE,ME } },
1787 { "rotlwi.", MME(21,31,1), MMBME_MASK,  PPC,            { RA,RS,SH } },
1788 { "clrlwi.", MME(21,31,1), MSHME_MASK,  PPC,            { RA, RS, MB } },
1789 { "rlwinm.", M(21,1),   M_MASK,         PPC,            { RA,RS,SH,MBE,ME } },
1790 { "rlinm.",  M(21,1),   M_MASK,         POWER,          { RA,RS,SH,MBE,ME } },
1791
1792 { "rlmi",    M(22,0),   M_MASK,         POWER|M601,     { RA,RS,RB,MBE,ME } },
1793 { "rlmi.",   M(22,1),   M_MASK,         POWER|M601,     { RA,RS,RB,MBE,ME } },
1794
1795 { "rotlw",   MME(23,31,0), MMBME_MASK,  PPC,            { RA, RS, RB } },
1796 { "rlwnm",   M(23,0),   M_MASK,         PPC,            { RA,RS,RB,MBE,ME } },
1797 { "rlnm",    M(23,0),   M_MASK,         POWER,          { RA,RS,RB,MBE,ME } },
1798 { "rotlw.",  MME(23,31,1), MMBME_MASK,  PPC,            { RA, RS, RB } },
1799 { "rlwnm.",  M(23,1),   M_MASK,         PPC,            { RA,RS,RB,MBE,ME } },
1800 { "rlnm.",   M(23,1),   M_MASK,         POWER,          { RA,RS,RB,MBE,ME } },
1801
1802 { "nop",     OP(24),    0xffffffff,     PPC,            { 0 } },
1803 { "ori",     OP(24),    OP_MASK,        PPC,            { RA, RS, UI } },
1804 { "oril",    OP(24),    OP_MASK,        POWER,          { RA, RS, UI } },
1805
1806 { "oris",    OP(25),    OP_MASK,        PPC,            { RA, RS, UI } },
1807 { "oriu",    OP(25),    OP_MASK,        POWER,          { RA, RS, UI } },
1808
1809 { "xori",    OP(26),    OP_MASK,        PPC,            { RA, RS, UI } },
1810 { "xoril",   OP(26),    OP_MASK,        POWER,          { RA, RS, UI } },
1811
1812 { "xoris",   OP(27),    OP_MASK,        PPC,            { RA, RS, UI } },
1813 { "xoriu",   OP(27),    OP_MASK,        POWER,          { RA, RS, UI } },
1814
1815 { "andi.",   OP(28),    OP_MASK,        PPC,            { RA, RS, UI } },
1816 { "andil.",  OP(28),    OP_MASK,        POWER,          { RA, RS, UI } },
1817
1818 { "andis.",  OP(29),    OP_MASK,        PPC,            { RA, RS, UI } },
1819 { "andiu.",  OP(29),    OP_MASK,        POWER,          { RA, RS, UI } },
1820
1821 { "rotldi",  MD(30,0,0), MDMB_MASK,     PPC|B64,        { RA, RS, SH6 } },
1822 { "clrldi",  MD(30,0,0), MDSH_MASK,     PPC|B64,        { RA, RS, MB6 } },
1823 { "rldicl",  MD(30,0,0), MD_MASK,       PPC|B64,        { RA, RS, SH6, MB6 } },
1824 { "rotldi.", MD(30,0,1), MDMB_MASK,     PPC|B64,        { RA, RS, SH6 } },
1825 { "clrldi.", MD(30,0,1), MDSH_MASK,     PPC|B64,        { RA, RS, MB6 } },
1826 { "rldicl.", MD(30,0,1), MD_MASK,       PPC|B64,        { RA, RS, SH6, MB6 } },
1827
1828 { "rldicr",  MD(30,1,0), MD_MASK,       PPC|B64,        { RA, RS, SH6, ME6 } },
1829 { "rldicr.", MD(30,1,1), MD_MASK,       PPC|B64,        { RA, RS, SH6, ME6 } },
1830
1831 { "rldic",   MD(30,2,0), MD_MASK,       PPC|B64,        { RA, RS, SH6, MB6 } },
1832 { "rldic.",  MD(30,2,1), MD_MASK,       PPC|B64,        { RA, RS, SH6, MB6 } },
1833
1834 { "rldimi",  MD(30,3,0), MD_MASK,       PPC|B64,        { RA, RS, SH6, MB6 } },
1835 { "rldimi.", MD(30,3,1), MD_MASK,       PPC|B64,        { RA, RS, SH6, MB6 } },
1836
1837 { "rotld",   MDS(30,8,0), MDSMB_MASK,   PPC|B64,        { RA, RS, RB } },
1838 { "rldcl",   MDS(30,8,0), MDS_MASK,     PPC|B64,        { RA, RS, RB, MB6 } },
1839 { "rotld.",  MDS(30,8,1), MDSMB_MASK,   PPC|B64,        { RA, RS, RB } },
1840 { "rldcl.",  MDS(30,8,1), MDS_MASK,     PPC|B64,        { RA, RS, RB, MB6 } },
1841
1842 { "rldcr",   MDS(30,9,0), MDS_MASK,     PPC|B64,        { RA, RS, RB, ME6 } },
1843 { "rldcr.",  MDS(30,9,1), MDS_MASK,     PPC|B64,        { RA, RS, RB, ME6 } },
1844
1845 { "cmpw",    XCMPL(31,0,0), XCMPL_MASK, PPC,            { OBF, RA, RB } },
1846 { "cmpd",    XCMPL(31,0,1), XCMPL_MASK, PPC|B64,        { OBF, RA, RB } },
1847 { "cmp",     X(31,0),   XCMPL_MASK,     POWER,          { BF, RA, RB } },
1848 { "cmp",     X(31,0),   XCMP_MASK,      PPC,            { BF, L, RA, RB } },
1849
1850 { "twlgt",   XTO(31,4,TOLGT), XTO_MASK, PPC,            { RA, RB } },
1851 { "tlgt",    XTO(31,4,TOLGT), XTO_MASK, POWER,          { RA, RB } },
1852 { "twllt",   XTO(31,4,TOLLT), XTO_MASK, PPC,            { RA, RB } },
1853 { "tllt",    XTO(31,4,TOLLT), XTO_MASK, POWER,          { RA, RB } },
1854 { "tweq",    XTO(31,4,TOEQ), XTO_MASK,  PPC,            { RA, RB } },
1855 { "teq",     XTO(31,4,TOEQ), XTO_MASK,  POWER,          { RA, RB } },
1856 { "twlge",   XTO(31,4,TOLGE), XTO_MASK, PPC,            { RA, RB } },
1857 { "tlge",    XTO(31,4,TOLGE), XTO_MASK, POWER,          { RA, RB } },
1858 { "twlnl",   XTO(31,4,TOLNL), XTO_MASK, PPC,            { RA, RB } },
1859 { "tlnl",    XTO(31,4,TOLNL), XTO_MASK, POWER,          { RA, RB } },
1860 { "twlle",   XTO(31,4,TOLLE), XTO_MASK, PPC,            { RA, RB } },
1861 { "tlle",    XTO(31,4,TOLLE), XTO_MASK, POWER,          { RA, RB } },
1862 { "twlng",   XTO(31,4,TOLNG), XTO_MASK, PPC,            { RA, RB } },
1863 { "tlng",    XTO(31,4,TOLNG), XTO_MASK, POWER,          { RA, RB } },
1864 { "twgt",    XTO(31,4,TOGT), XTO_MASK,  PPC,            { RA, RB } },
1865 { "tgt",     XTO(31,4,TOGT), XTO_MASK,  POWER,          { RA, RB } },
1866 { "twge",    XTO(31,4,TOGE), XTO_MASK,  PPC,            { RA, RB } },
1867 { "tge",     XTO(31,4,TOGE), XTO_MASK,  POWER,          { RA, RB } },
1868 { "twnl",    XTO(31,4,TONL), XTO_MASK,  PPC,            { RA, RB } },
1869 { "tnl",     XTO(31,4,TONL), XTO_MASK,  POWER,          { RA, RB } },
1870 { "twlt",    XTO(31,4,TOLT), XTO_MASK,  PPC,            { RA, RB } },
1871 { "tlt",     XTO(31,4,TOLT), XTO_MASK,  POWER,          { RA, RB } },
1872 { "twle",    XTO(31,4,TOLE), XTO_MASK,  PPC,            { RA, RB } },
1873 { "tle",     XTO(31,4,TOLE), XTO_MASK,  POWER,          { RA, RB } },
1874 { "twng",    XTO(31,4,TONG), XTO_MASK,  PPC,            { RA, RB } },
1875 { "tng",     XTO(31,4,TONG), XTO_MASK,  POWER,          { RA, RB } },
1876 { "twne",    XTO(31,4,TONE), XTO_MASK,  PPC,            { RA, RB } },
1877 { "tne",     XTO(31,4,TONE), XTO_MASK,  POWER,          { RA, RB } },
1878 { "trap",    XTO(31,4,TOU), 0xffffffff, PPC,            { 0 } },
1879 { "tw",      X(31,4),   X_MASK,         PPC,            { TO, RA, RB } },
1880 { "t",       X(31,4),   X_MASK,         POWER,          { TO, RA, RB } },
1881
1882 { "subfc",   XO(31,8,0,0), XO_MASK,     PPC,            { RT, RA, RB } },
1883 { "sf",      XO(31,8,0,0), XO_MASK,     POWER,          { RT, RA, RB } },
1884 { "subc",    XO(31,8,0,0), XO_MASK,     PPC,            { RT, RB, RA } },
1885 { "subfc.",  XO(31,8,0,1), XO_MASK,     PPC,            { RT, RA, RB } },
1886 { "sf.",     XO(31,8,0,1), XO_MASK,     POWER,          { RT, RA, RB } },
1887 { "subc.",   XO(31,8,0,1), XO_MASK,     PPC,            { RT, RB, RA } },
1888 { "subfco",  XO(31,8,1,0), XO_MASK,     PPC,            { RT, RA, RB } },
1889 { "sfo",     XO(31,8,1,0), XO_MASK,     POWER,          { RT, RA, RB } },
1890 { "subco",   XO(31,8,1,0), XO_MASK,     PPC,            { RT, RB, RA } },
1891 { "subfco.", XO(31,8,1,1), XO_MASK,     PPC,            { RT, RA, RB } },
1892 { "sfo.",    XO(31,8,1,1), XO_MASK,     POWER,          { RT, RA, RB } },
1893 { "subco.",  XO(31,8,1,1), XO_MASK,     PPC,            { RT, RB, RA } },
1894
1895 { "mulhdu",  XO(31,9,0,0), XO_MASK,     PPC|B64,        { RT, RA, RB } },
1896 { "mulhdu.", XO(31,9,0,1), XO_MASK,     PPC|B64,        { RT, RA, RB } },
1897
1898 { "addc",    XO(31,10,0,0), XO_MASK,    PPC,            { RT, RA, RB } },
1899 { "a",       XO(31,10,0,0), XO_MASK,    POWER,          { RT, RA, RB } },
1900 { "addc.",   XO(31,10,0,1), XO_MASK,    PPC,            { RT, RA, RB } },
1901 { "a.",      XO(31,10,0,1), XO_MASK,    POWER,          { RT, RA, RB } },
1902 { "addco",   XO(31,10,1,0), XO_MASK,    PPC,            { RT, RA, RB } },
1903 { "ao",      XO(31,10,1,0), XO_MASK,    POWER,          { RT, RA, RB } },
1904 { "addco.",  XO(31,10,1,1), XO_MASK,    PPC,            { RT, RA, RB } },
1905 { "ao.",     XO(31,10,1,1), XO_MASK,    POWER,          { RT, RA, RB } },
1906
1907 { "mulhwu",  XO(31,11,0,0), XO_MASK,    PPC,            { RT, RA, RB } },
1908 { "mulhwu.", XO(31,11,0,1), XO_MASK,    PPC,            { RT, RA, RB } },
1909
1910 { "mfcr",    X(31,19),  XRARB_MASK,     POWER|PPC,      { RT } },
1911
1912 { "lwarx",   X(31,20),  X_MASK,         PPC,            { RT, RA, RB } },
1913
1914 { "ldx",     X(31,21),  X_MASK,         PPC|B64,        { RT, RA, RB } },
1915
1916 { "lwzx",    X(31,23),  X_MASK,         PPC,            { RT, RA, RB } },
1917 { "lx",      X(31,23),  X_MASK,         POWER,          { RT, RA, RB } },
1918
1919 { "slw",     XRC(31,24,0), X_MASK,      PPC,            { RA, RS, RB } },
1920 { "sl",      XRC(31,24,0), X_MASK,      POWER,          { RA, RS, RB } },
1921 { "slw.",    XRC(31,24,1), X_MASK,      PPC,            { RA, RS, RB } },
1922 { "sl.",     XRC(31,24,1), X_MASK,      POWER,          { RA, RS, RB } },
1923
1924 { "cntlzw",  XRC(31,26,0), XRB_MASK,    PPC,            { RA, RS } },
1925 { "cntlz",   XRC(31,26,0), XRB_MASK,    POWER,          { RA, RS } },
1926 { "cntlzw.", XRC(31,26,1), XRB_MASK,    PPC,            { RA, RS } },
1927 { "cntlz.",  XRC(31,26,1), XRB_MASK,    POWER,          { RA, RS } },
1928
1929 { "sld",     XRC(31,27,0), X_MASK,      PPC|B64,        { RA, RS, RB } },
1930 { "sld.",    XRC(31,27,1), X_MASK,      PPC|B64,        { RA, RS, RB } },
1931
1932 { "and",     XRC(31,28,0), X_MASK,      PPC|POWER,      { RA, RS, RB } },
1933 { "and.",    XRC(31,28,1), X_MASK,      PPC|POWER,      { RA, RS, RB } },
1934
1935 { "maskg",   XRC(31,29,0), X_MASK,      POWER|M601,     { RA, RS, RB } },
1936 { "maskg.",  XRC(31,29,1), X_MASK,      POWER|M601,     { RA, RS, RB } },
1937
1938 { "cmplw",   XCMPL(31,32,0), XCMPL_MASK, PPC,           { OBF, RA, RB } },
1939 { "cmpld",   XCMPL(31,32,1), XCMPL_MASK, PPC|B64,       { OBF, RA, RB } },
1940 { "cmpl",    X(31,32),  XCMPL_MASK,     POWER,          { BF, RA, RB } },
1941 { "cmpl",    X(31,32),  XCMP_MASK,      PPC,            { BF, L, RA, RB } },
1942
1943 { "subf",    XO(31,40,0,0), XO_MASK,    PPC,            { RT, RA, RB } },
1944 { "sub",     XO(31,40,0,0), XO_MASK,    PPC,            { RT, RB, RA } },
1945 { "subf.",   XO(31,40,0,1), XO_MASK,    PPC,            { RT, RA, RB } },
1946 { "sub.",    XO(31,40,0,1), XO_MASK,    PPC,            { RT, RB, RA } },
1947 { "subfo",   XO(31,40,1,0), XO_MASK,    PPC,            { RT, RA, RB } },
1948 { "subo",    XO(31,40,1,0), XO_MASK,    PPC,            { RT, RB, RA } },
1949 { "subfo.",  XO(31,40,1,1), XO_MASK,    PPC,            { RT, RA, RB } },
1950 { "subo.",   XO(31,40,1,1), XO_MASK,    PPC,            { RT, RB, RA } },
1951
1952 { "ldux",    X(31,53),  X_MASK,         PPC|B64,        { RT, RA, RB } },
1953
1954 { "dcbst",   X(31,54),  XRT_MASK,       PPC,            { RA, RB } },
1955
1956 { "lwzux",   X(31,55),  X_MASK,         PPC,            { RT, RA, RB } },
1957 { "lux",     X(31,55),  X_MASK,         POWER,          { RT, RA, RB } },
1958
1959 { "cntlzd",  XRC(31,58,0), XRB_MASK,    PPC|B64,        { RA, RS } },
1960 { "cntlzd.", XRC(31,58,1), XRB_MASK,    PPC|B64,        { RA, RS } },
1961
1962 { "andc",    XRC(31,60,0), X_MASK,      PPC|POWER,      { RA, RS, RB } },
1963 { "andc.",   XRC(31,60,1), X_MASK,      PPC|POWER,      { RA, RS, RB } },
1964
1965 { "tdlgt",   XTO(31,68,TOLGT), XTO_MASK, PPC|B64,       { RA, RB } },
1966 { "tdllt",   XTO(31,68,TOLLT), XTO_MASK, PPC|B64,       { RA, RB } },
1967 { "tdeq",    XTO(31,68,TOEQ), XTO_MASK, PPC|B64,        { RA, RB } },
1968 { "tdlge",   XTO(31,68,TOLGE), XTO_MASK, PPC|B64,       { RA, RB } },
1969 { "tdlnl",   XTO(31,68,TOLNL), XTO_MASK, PPC|B64,       { RA, RB } },
1970 { "tdlle",   XTO(31,68,TOLLE), XTO_MASK, PPC|B64,       { RA, RB } },
1971 { "tdlng",   XTO(31,68,TOLNG), XTO_MASK, PPC|B64,       { RA, RB } },
1972 { "tdgt",    XTO(31,68,TOGT), XTO_MASK, PPC|B64,        { RA, RB } },
1973 { "tdge",    XTO(31,68,TOGE), XTO_MASK, PPC|B64,        { RA, RB } },
1974 { "tdnl",    XTO(31,68,TONL), XTO_MASK, PPC|B64,        { RA, RB } },
1975 { "tdlt",    XTO(31,68,TOLT), XTO_MASK, PPC|B64,        { RA, RB } },
1976 { "tdle",    XTO(31,68,TOLE), XTO_MASK, PPC|B64,        { RA, RB } },
1977 { "tdng",    XTO(31,68,TONG), XTO_MASK, PPC|B64,        { RA, RB } },
1978 { "tdne",    XTO(31,68,TONE), XTO_MASK, PPC|B64,        { RA, RB } },
1979 { "td",      X(31,68),  X_MASK,         PPC|B64,        { TO, RA, RB } },
1980
1981 { "mulhd",   XO(31,73,0,0), XO_MASK,    PPC|B64,        { RT, RA, RB } },
1982 { "mulhd.",  XO(31,73,0,1), XO_MASK,    PPC|B64,        { RT, RA, RB } },
1983
1984 { "mulhw",   XO(31,75,0,0), XO_MASK,    PPC,            { RT, RA, RB } },
1985 { "mulhw.",  XO(31,75,0,1), XO_MASK,    PPC,            { RT, RA, RB } },
1986
1987 { "mfmsr",   X(31,83),  XRARB_MASK,     PPC|POWER,      { RT } },
1988
1989 { "ldarx",   X(31,84),  X_MASK,         PPC|B64,        { RT, RA, RB } },
1990
1991 { "dcbf",    X(31,86),  XRT_MASK,       PPC,            { RA, RB } },
1992
1993 { "lbzx",    X(31,87),  X_MASK,         PPC|POWER,      { RT, RA, RB } },
1994
1995 { "neg",     XO(31,104,0,0), XORB_MASK, PPC|POWER,      { RT, RA } },
1996 { "neg.",    XO(31,104,0,1), XORB_MASK, PPC|POWER,      { RT, RA } },
1997 { "nego",    XO(31,104,1,0), XORB_MASK, PPC|POWER,      { RT, RA } },
1998 { "nego.",   XO(31,104,1,1), XORB_MASK, PPC|POWER,      { RT, RA } },
1999
2000 { "mul",     XO(31,107,0,0), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2001 { "mul.",    XO(31,107,0,1), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2002 { "mulo",    XO(31,107,1,0), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2003 { "mulo.",   XO(31,107,1,1), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2004
2005 { "clf",     X(31,118), XRB_MASK,       POWER,          { RT, RA } },
2006
2007 { "lbzux",   X(31,119), X_MASK,         PPC|POWER,      { RT, RA, RB } },
2008
2009 { "not",     XRC(31,124,0), X_MASK,     PPC|POWER,      { RA, RS, RBS } },
2010 { "nor",     XRC(31,124,0), X_MASK,     PPC|POWER,      { RA, RS, RB } },
2011 { "not.",    XRC(31,124,1), X_MASK,     PPC|POWER,      { RA, RS, RBS } },
2012 { "nor.",    XRC(31,124,1), X_MASK,     PPC|POWER,      { RA, RS, RB } },
2013
2014 { "subfe",   XO(31,136,0,0), XO_MASK,   PPC,            { RT, RA, RB } },
2015 { "sfe",     XO(31,136,0,0), XO_MASK,   POWER,          { RT, RA, RB } },
2016 { "subfe.",  XO(31,136,0,1), XO_MASK,   PPC,            { RT, RA, RB } },
2017 { "sfe.",    XO(31,136,0,1), XO_MASK,   POWER,          { RT, RA, RB } },
2018 { "subfeo",  XO(31,136,1,0), XO_MASK,   PPC,            { RT, RA, RB } },
2019 { "sfeo",    XO(31,136,1,0), XO_MASK,   POWER,          { RT, RA, RB } },
2020 { "subfeo.", XO(31,136,1,1), XO_MASK,   PPC,            { RT, RA, RB } },
2021 { "sfeo.",   XO(31,136,1,1), XO_MASK,   POWER,          { RT, RA, RB } },
2022
2023 { "adde",    XO(31,138,0,0), XO_MASK,   PPC,            { RT, RA, RB } },
2024 { "ae",      XO(31,138,0,0), XO_MASK,   POWER,          { RT, RA, RB } },
2025 { "adde.",   XO(31,138,0,1), XO_MASK,   PPC,            { RT, RA, RB } },
2026 { "ae.",     XO(31,138,0,1), XO_MASK,   POWER,          { RT, RA, RB } },
2027 { "addeo",   XO(31,138,1,0), XO_MASK,   PPC,            { RT, RA, RB } },
2028 { "aeo",     XO(31,138,1,0), XO_MASK,   POWER,          { RT, RA, RB } },
2029 { "addeo.",  XO(31,138,1,1), XO_MASK,   PPC,            { RT, RA, RB } },
2030 { "aeo.",    XO(31,138,1,1), XO_MASK,   POWER,          { RT, RA, RB } },
2031
2032 { "mtcrf",   X(31,144), X_MASK|(1<<20)|(1<<11), PPC|POWER, { FXM, RS } },
2033
2034 { "mtmsr",   X(31,146), XRARB_MASK,     PPC|POWER,      { RS } },
2035
2036 { "stdx",    X(31,149), X_MASK,         PPC|B64,        { RS, RA, RB } },
2037
2038 { "stwcx.",  XRC(31,150,1), X_MASK,     PPC,            { RS, RA, RB } },
2039
2040 { "stwx",    X(31,151), X_MASK,         PPC,            { RS, RA, RB } },
2041 { "stx",     X(31,151), X_MASK,         POWER,          { RS, RA, RB } },
2042
2043 { "slq",     XRC(31,152,0), X_MASK,     POWER|M601,     { RA, RS, RB } },
2044 { "slq.",    XRC(31,152,1), X_MASK,     POWER|M601,     { RA, RS, RB } },
2045
2046 { "sle",     XRC(31,153,0), X_MASK,     POWER|M601,     { RA, RS, RB } },
2047 { "sle.",    XRC(31,153,1), X_MASK,     POWER|M601,     { RA, RS, RB } },
2048
2049 { "stdux",   X(31,181), X_MASK,         PPC|B64,        { RS, RA, RB } },
2050
2051 { "stwux",   X(31,183), X_MASK,         PPC,            { RS, RA, RB } },
2052 { "stux",    X(31,183), X_MASK,         POWER,          { RS, RA, RB } },
2053
2054 { "sliq",    XRC(31,184,0), X_MASK,     POWER|M601,     { RA, RS, SH } },
2055 { "sliq.",   XRC(31,184,1), X_MASK,     POWER|M601,     { RA, RS, SH } },
2056
2057 { "subfze",  XO(31,200,0,0), XORB_MASK, PPC,            { RT, RA } },
2058 { "sfze",    XO(31,200,0,0), XORB_MASK, POWER,          { RT, RA } },
2059 { "subfze.", XO(31,200,0,1), XORB_MASK, PPC,            { RT, RA } },
2060 { "sfze.",   XO(31,200,0,1), XORB_MASK, POWER,          { RT, RA } },
2061 { "subfzeo", XO(31,200,1,0), XORB_MASK, PPC,            { RT, RA } },
2062 { "sfzeo",   XO(31,200,1,0), XORB_MASK, POWER,          { RT, RA } },
2063 { "subfzeo.",XO(31,200,1,1), XORB_MASK, PPC,            { RT, RA } },
2064 { "sfzeo.",  XO(31,200,1,1), XORB_MASK, POWER,          { RT, RA } },
2065
2066 { "addze",   XO(31,202,0,0), XORB_MASK, PPC,            { RT, RA } },
2067 { "aze",     XO(31,202,0,0), XORB_MASK, POWER,          { RT, RA } },
2068 { "addze.",  XO(31,202,0,1), XORB_MASK, PPC,            { RT, RA } },
2069 { "aze.",    XO(31,202,0,1), XORB_MASK, POWER,          { RT, RA } },
2070 { "addzeo",  XO(31,202,1,0), XORB_MASK, PPC,            { RT, RA } },
2071 { "azeo",    XO(31,202,1,0), XORB_MASK, POWER,          { RT, RA } },
2072 { "addzeo.", XO(31,202,1,1), XORB_MASK, PPC,            { RT, RA } },
2073 { "azeo.",   XO(31,202,1,1), XORB_MASK, POWER,          { RT, RA } },
2074
2075 { "mtsr",    X(31,210), XRB_MASK|(1<<20), PPC|POWER|B32, { SR, RS } },
2076
2077 { "stdcx.",  XRC(31,214,1), X_MASK,     PPC|B64,        { RS, RA, RB } },
2078
2079 { "stbx",    X(31,215), X_MASK,         PPC|POWER,      { RS, RA, RB } },
2080
2081 { "sllq",    XRC(31,216,0), X_MASK,     POWER|M601,     { RA, RS, RB } },
2082 { "sllq.",   XRC(31,216,1), X_MASK,     POWER|M601,     { RA, RS, RB } },
2083
2084 { "sleq",    XRC(31,217,0), X_MASK,     POWER|M601,     { RA, RS, RB } },
2085 { "sleq.",   XRC(31,217,1), X_MASK,     POWER|M601,     { RA, RS, RB } },
2086
2087 { "subfme",  XO(31,232,0,0), XORB_MASK, PPC,            { RT, RA } },
2088 { "sfme",    XO(31,232,0,0), XORB_MASK, POWER,          { RT, RA } },
2089 { "subfme.", XO(31,232,0,1), XORB_MASK, PPC,            { RT, RA } },
2090 { "sfme.",   XO(31,232,0,1), XORB_MASK, POWER,          { RT, RA } },
2091 { "subfmeo", XO(31,232,1,0), XORB_MASK, PPC,            { RT, RA } },
2092 { "sfmeo",   XO(31,232,1,0), XORB_MASK, POWER,          { RT, RA } },
2093 { "subfmeo.",XO(31,232,1,1), XORB_MASK, PPC,            { RT, RA } },
2094 { "sfmeo.",  XO(31,232,1,1), XORB_MASK, POWER,          { RT, RA } },
2095
2096 { "mulld",   XO(31,233,0,0), XO_MASK,   PPC|B64,        { RT, RA, RB } },
2097 { "mulld.",  XO(31,233,0,1), XO_MASK,   PPC|B64,        { RT, RA, RB } },
2098 { "mulldo",  XO(31,233,1,0), XO_MASK,   PPC|B64,        { RT, RA, RB } },
2099 { "mulldo.", XO(31,233,1,1), XO_MASK,   PPC|B64,        { RT, RA, RB } },
2100
2101 { "addme",   XO(31,234,0,0), XORB_MASK, PPC,            { RT, RA } },
2102 { "ame",     XO(31,234,0,0), XORB_MASK, POWER,          { RT, RA } },
2103 { "addme.",  XO(31,234,0,1), XORB_MASK, PPC,            { RT, RA } },
2104 { "ame.",    XO(31,234,0,1), XORB_MASK, POWER,          { RT, RA } },
2105 { "addmeo",  XO(31,234,1,0), XORB_MASK, PPC,            { RT, RA } },
2106 { "ameo",    XO(31,234,1,0), XORB_MASK, POWER,          { RT, RA } },
2107 { "addmeo.", XO(31,234,1,1), XORB_MASK, PPC,            { RT, RA } },
2108 { "ameo.",   XO(31,234,1,1), XORB_MASK, POWER,          { RT, RA } },
2109
2110 { "mullw",   XO(31,235,0,0), XO_MASK,   PPC,            { RT, RA, RB } },
2111 { "muls",    XO(31,235,0,0), XO_MASK,   POWER,          { RT, RA, RB } },
2112 { "mullw.",  XO(31,235,0,1), XO_MASK,   PPC,            { RT, RA, RB } },
2113 { "muls.",   XO(31,235,0,1), XO_MASK,   POWER,          { RT, RA, RB } },
2114 { "mullwo",  XO(31,235,1,0), XO_MASK,   PPC,            { RT, RA, RB } },
2115 { "mulso",   XO(31,235,1,0), XO_MASK,   POWER,          { RT, RA, RB } },
2116 { "mullwo.", XO(31,235,1,1), XO_MASK,   PPC,            { RT, RA, RB } },
2117 { "mulso.",  XO(31,235,1,1), XO_MASK,   POWER,          { RT, RA, RB } },
2118
2119 { "mtsrin",  X(31,242), XRA_MASK,       PPC|B32,        { RS, RB } },
2120 { "mtsri",   X(31,242), XRA_MASK,       POWER|B32,      { RS, RB } },
2121
2122 { "dcbtst",  X(31,246), XRT_MASK,       PPC,            { RA, RB } },
2123
2124 { "stbux",   X(31,247), X_MASK,         PPC|POWER,      { RS, RA, RB } },
2125
2126 { "slliq",   XRC(31,248,0), X_MASK,     POWER|M601,     { RA, RS, SH } },
2127 { "slliq.",  XRC(31,248,1), X_MASK,     POWER|M601,     { RA, RS, SH } },
2128
2129 { "doz",     XO(31,264,0,0), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2130 { "doz.",    XO(31,264,0,1), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2131 { "dozo",    XO(31,264,1,0), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2132 { "dozo.",   XO(31,264,1,1), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2133
2134 { "add",     XO(31,266,0,0), XO_MASK,   PPC,            { RT, RA, RB } },
2135 { "cax",     XO(31,266,0,0), XO_MASK,   POWER,          { RT, RA, RB } },
2136 { "add.",    XO(31,266,0,1), XO_MASK,   PPC,            { RT, RA, RB } },
2137 { "cax.",    XO(31,266,0,1), XO_MASK,   POWER,          { RT, RA, RB } },
2138 { "addo",    XO(31,266,1,0), XO_MASK,   PPC,            { RT, RA, RB } },
2139 { "caxo",    XO(31,266,1,0), XO_MASK,   POWER,          { RT, RA, RB } },
2140 { "addo.",   XO(31,266,1,1), XO_MASK,   PPC,            { RT, RA, RB } },
2141 { "caxo.",   XO(31,266,1,1), XO_MASK,   POWER,          { RT, RA, RB } },
2142
2143 { "lscbx",   XRC(31,277,0), X_MASK,     POWER|M601,     { RT, RA, RB } },
2144 { "lscbx.",  XRC(31,277,1), X_MASK,     POWER|M601,     { RT, RA, RB } },
2145
2146 { "dcbt",    X(31,278), XRT_MASK,       PPC,            { RA, RB } },
2147
2148 { "lhzx",    X(31,279), X_MASK,         PPC|POWER,      { RT, RA, RB } },
2149
2150 { "eqv",     XRC(31,284,0), X_MASK,     PPC|POWER,      { RA, RS, RB } },
2151 { "eqv.",    XRC(31,284,1), X_MASK,     PPC|POWER,      { RA, RS, RB } },
2152
2153 { "tlbie",   X(31,306), XRTRA_MASK,     PPC,            { RB } },
2154 { "tlbi",    X(31,306), XRTRA_MASK,     POWER,          { RB } },
2155
2156 { "eciwx",   X(31,310), X_MASK,         PPC,            { RT, RA, RB } },
2157
2158 { "lhzux",   X(31,311), X_MASK,         PPC|POWER,      { RT, RA, RB } },
2159
2160 { "xor",     XRC(31,316,0), X_MASK,     PPC|POWER,      { RA, RS, RB } },
2161 { "xor.",    XRC(31,316,1), X_MASK,     PPC|POWER,      { RA, RS, RB } },
2162
2163 { "div",     XO(31,331,0,0), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2164 { "div.",    XO(31,331,0,1), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2165 { "divo",    XO(31,331,1,0), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2166 { "divo.",   XO(31,331,1,1), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2167
2168 { "mfmq",    XSPR(31,339,0), XSPR_MASK, POWER|M601,     { RT } },
2169 { "mfxer",   XSPR(31,339,1), XSPR_MASK, PPC|POWER,      { RT } },
2170 { "mflr",    XSPR(31,339,8), XSPR_MASK, PPC|POWER,      { RT } },
2171 { "mfctr",   XSPR(31,339,9), XSPR_MASK, PPC|POWER,      { RT } },
2172 { "mfspr",   X(31,339), X_MASK,         PPC|POWER,      { RT, SPR } },
2173
2174 { "lwax",    X(31,341), X_MASK,         PPC|B64,        { RT, RA, RB } },
2175
2176 { "lhax",    X(31,343), X_MASK,         PPC|POWER,      { RT, RA, RB } },
2177
2178 { "abs",     XO(31,360,0,0), XORB_MASK, POWER|M601,     { RT, RA } },
2179 { "abs.",    XO(31,360,0,1), XORB_MASK, POWER|M601,     { RT, RA } },
2180 { "abso",    XO(31,360,1,0), XORB_MASK, POWER|M601,     { RT, RA } },
2181 { "abso.",   XO(31,360,1,1), XORB_MASK, POWER|M601,     { RT, RA } },
2182
2183 { "divs",    XO(31,363,0,0), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2184 { "divs.",   XO(31,363,0,1), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2185 { "divso",   XO(31,363,1,0), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2186 { "divso.",  XO(31,363,1,1), XO_MASK,   POWER|M601,     { RT, RA, RB } },
2187
2188 { "tlbia",   X(31,370), 0xffffffff,     PPC,            { 0 } },
2189
2190 { "mftb",    X(31,371), X_MASK,         PPC,            { RT, TBR } },
2191
2192 { "lwaux",   X(31,373), X_MASK,         PPC|B64,        { RT, RA, RB } },
2193
2194 { "lhaux",   X(31,375), X_MASK,         PPC|POWER,      { RT, RA, RB } },
2195
2196 { "sthx",    X(31,407), X_MASK,         PPC|POWER,      { RS, RA, RB } },
2197
2198 { "lfqx",    X(31,791), X_MASK,         POWER2,         { FRT, RA, RB } },
2199
2200 { "lfqux",   X(31,823), X_MASK,         POWER2,         { FRT, RA, RB } },
2201
2202 { "stfqx",   X(31,919), X_MASK,         POWER2,         { FRS, RA, RB } },
2203
2204 { "stfqux",  X(31,951), X_MASK,         POWER2,         { FRS, RA, RB } },
2205
2206 { "orc",     XRC(31,412,0), X_MASK,     PPC|POWER,      { RA, RS, RB } },
2207 { "orc.",    XRC(31,412,1), X_MASK,     PPC|POWER,      { RA, RS, RB } },
2208
2209 { "sradi",   XS(31,413,0), XS_MASK,     PPC|B64,        { RA, RS, SH6 } },
2210 { "sradi.",  XS(31,413,1), XS_MASK,     PPC|B64,        { RA, RS, SH6 } },
2211
2212 { "slbie",   X(31,434), XRTRA_MASK,     PPC|B64,        { RB } },
2213
2214 { "ecowx",   X(31,438), X_MASK,         PPC,            { RT, RA, RB } },
2215
2216 { "sthux",   X(31,439), X_MASK,         PPC|POWER,      { RS, RA, RB } },
2217
2218 { "mr",      XRC(31,444,0), X_MASK,     PPC|POWER,      { RA, RS, RBS } },
2219 { "or",      XRC(31,444,0), X_MASK,     PPC|POWER,      { RA, RS, RB } },
2220 { "mr.",     XRC(31,444,1), X_MASK,     PPC|POWER,      { RA, RS, RBS } },
2221 { "or.",     XRC(31,444,1), X_MASK,     PPC|POWER,      { RA, RS, RB } },
2222
2223 { "divdu",   XO(31,457,0,0), XO_MASK,   PPC|B64,        { RT, RA, RB } },
2224 { "divdu.",  XO(31,457,0,1), XO_MASK,   PPC|B64,        { RT, RA, RB } },
2225 { "divduo",  XO(31,457,1,0), XO_MASK,   PPC|B64,        { RT, RA, RB } },
2226 { "divduo.", XO(31,457,1,1), XO_MASK,   PPC|B64,        { RT, RA, RB } },
2227
2228 { "divwu",   XO(31,459,0,0), XO_MASK,   PPC,            { RT, RA, RB } },
2229 { "divwu.",  XO(31,459,0,1), XO_MASK,   PPC,            { RT, RA, RB } },
2230 { "divwuo",  XO(31,459,1,0), XO_MASK,   PPC,            { RT, RA, RB } },
2231 { "divwuo.", XO(31,459,1,1), XO_MASK,   PPC,            { RT, RA, RB } },
2232
2233 { "mtmq",    XSPR(31,467,0), XSPR_MASK, POWER|M601,     { RS } },
2234 { "mtxer",   XSPR(31,467,1), XSPR_MASK, PPC|POWER,      { RS } },
2235 { "mtlr",    XSPR(31,467,8), XSPR_MASK, PPC|POWER,      { RS } },
2236 { "mtctr",   XSPR(31,467,9), XSPR_MASK, PPC|POWER,      { RS } },
2237 { "mtspr",   X(31,467), X_MASK,         PPC|POWER,      { SPR, RS } },
2238
2239 { "dcbi",    X(31,470), XRT_MASK,       PPC,            { RA, RB } },
2240
2241 { "nand",    XRC(31,476,0), X_MASK,     PPC|POWER,      { RA, RS, RB } },
2242 { "nand.",   XRC(31,476,1), X_MASK,     PPC|POWER,      { RA, RS, RB } },
2243
2244 { "nabs",    XO(31,488,0,0), XORB_MASK, POWER|M601,     { RT, RA } },
2245 { "nabs.",   XO(31,488,0,1), XORB_MASK, POWER|M601,     { RT, RA } },
2246 { "nabso",   XO(31,488,1,0), XORB_MASK, POWER|M601,     { RT, RA } },
2247 { "nabso.",  XO(31,488,1,1), XORB_MASK, POWER|M601,     { RT, RA } },
2248
2249 { "divd",    XO(31,489,0,0), XO_MASK,   PPC|B64,        { RT, RA, RB } },
2250 { "divd.",   XO(31,489,0,1), XO_MASK,   PPC|B64,        { RT, RA, RB } },
2251 { "divdo",   XO(31,489,1,0), XO_MASK,   PPC|B64,        { RT, RA, RB } },
2252 { "divdo.",  XO(31,489,1,1), XO_MASK,   PPC|B64,        { RT, RA, RB } },
2253
2254 { "divw",    XO(31,491,0,0), XO_MASK,   PPC,            { RT, RA, RB } },
2255 { "divw.",   XO(31,491,0,1), XO_MASK,   PPC,            { RT, RA, RB } },
2256 { "divwo",   XO(31,491,1,0), XO_MASK,   PPC,            { RT, RA, RB } },
2257 { "divwo.",  XO(31,491,1,1), XO_MASK,   PPC,            { RT, RA, RB } },
2258
2259 { "slbia",   X(31,498), 0xffffffff,     PPC|B64,        { 0 } },
2260
2261 { "cli",     X(31,502), XRB_MASK,       POWER,          { RT, RA } },
2262
2263 { "mcrxr",   X(31,512), XRARB_MASK|(3<<21), PPC|POWER,  { BF } },
2264
2265 { "clcs",    X(31,531), XRB_MASK,       POWER|M601,     { RT, RA } },
2266
2267 { "lswx",    X(31,533), X_MASK,         PPC,            { RT, RA, RB } },
2268 { "lsx",     X(31,533), X_MASK,         POWER,          { RT, RA, RB } },
2269
2270 { "lwbrx",   X(31,534), X_MASK,         PPC,            { RT, RA, RB } },
2271 { "lbrx",    X(31,534), X_MASK,         POWER,          { RT, RA, RB } },
2272
2273 { "lfsx",    X(31,535), X_MASK,         PPC|POWER,      { FRT, RA, RB } },
2274
2275 { "srw",     XRC(31,536,0), X_MASK,     PPC,            { RA, RS, RB } },
2276 { "sr",      XRC(31,536,0), X_MASK,     POWER,          { RA, RS, RB } },
2277 { "srw.",    XRC(31,536,1), X_MASK,     PPC,            { RA, RS, RB } },
2278 { "sr.",     XRC(31,536,1), X_MASK,     POWER,          { RA, RS, RB } },
2279
2280 { "rrib",    XRC(31,537,0), X_MASK,     POWER|M601,     { RA, RS, RB } },
2281 { "rrib.",   XRC(31,537,1), X_MASK,     POWER|M601,     { RA, RS, RB } },
2282
2283 { "srd",     XRC(31,539,0), X_MASK,     PPC|B64,        { RA, RS, RB } },
2284 { "srd.",    XRC(31,539,1), X_MASK,     PPC|B64,        { RA, RS, RB } },
2285
2286 { "maskir",  XRC(31,541,0), X_MASK,     POWER|M601,     { RA, RS, RB } },
2287 { "maskir.", XRC(31,541,1), X_MASK,     POWER|M601,     { RA, RS, RB } },
2288
2289 { "tlbsync", X(31,566), 0xffffffff,     PPC,            { 0 } },
2290
2291 { "lfsux",   X(31,567), X_MASK,         PPC|POWER,      { FRT, RA, RB } },
2292
2293 { "mfsr",    X(31,595), XRB_MASK|(1<<20), PPC|POWER|B32, { RT, SR } },
2294
2295 { "lswi",    X(31,597), X_MASK,         PPC,            { RT, RA, NB } },
2296 { "lsi",     X(31,597), X_MASK,         POWER,          { RT, RA, NB } },
2297
2298 { "sync",    X(31,598), 0xffffffff,     PPC,            { 0 } },
2299 { "dcs",     X(31,598), 0xffffffff,     POWER,          { 0 } },
2300
2301 { "lfdx",    X(31,599), X_MASK,         PPC|POWER,      { FRT, RA, RB } },
2302
2303 { "mfsri",   X(31,627), X_MASK,         POWER,          { RT, RA, RB } },
2304
2305 { "dclst",   X(31,630), XRB_MASK,       POWER,          { RS, RA } },
2306
2307 { "lfdux",   X(31,631), X_MASK,         PPC|POWER,      { FRT, RA, RB } },
2308
2309 { "mfsrin",  X(31,659), XRA_MASK,       PPC|B32,        { RT, RB } },
2310
2311 { "stswx",   X(31,661), X_MASK,         PPC,            { RS, RA, RB } },
2312 { "stsx",    X(31,661), X_MASK,         POWER,          { RS, RA, RB } },
2313
2314 { "stwbrx",  X(31,662), X_MASK,         PPC,            { RS, RA, RB } },
2315 { "stbrx",   X(31,662), X_MASK,         POWER,          { RS, RA, RB } },
2316
2317 { "stfsx",   X(31,663), X_MASK,         PPC|POWER,      { FRS, RA, RB } },
2318
2319 { "srq",     XRC(31,664,0), X_MASK,     POWER|M601,     { RA, RS, RB } },
2320 { "srq.",    XRC(31,664,1), X_MASK,     POWER|M601,     { RA, RS, RB } },
2321
2322 { "sre",     XRC(31,665,0), X_MASK,     POWER|M601,     { RA, RS, RB } },
2323 { "sre.",    XRC(31,665,1), X_MASK,     POWER|M601,     { RA, RS, RB } },
2324
2325 { "stfsux",  X(31,695), X_MASK,         PPC|POWER,      { FRS, RA, RB } },
2326
2327 { "sriq",    XRC(31,696,0), X_MASK,     POWER|M601,     { RA, RS, SH } },
2328 { "sriq.",   XRC(31,696,1), X_MASK,     POWER|M601,     { RA, RS, SH } },
2329
2330 { "stswi",   X(31,725), X_MASK,         PPC,            { RS, RA, NB } },
2331 { "stsi",    X(31,725), X_MASK,         POWER,          { RS, RA, NB } },
2332
2333 { "stfdx",   X(31,727), X_MASK,         PPC|POWER,      { FRS, RA, RB } },
2334
2335 { "srlq",    XRC(31,728,0), X_MASK,     POWER|M601,     { RA, RS, RB } },
2336 { "srlq.",   XRC(31,728,1), X_MASK,     POWER|M601,     { RA, RS, RB } },
2337
2338 { "sreq",    XRC(31,729,0), X_MASK,     POWER|M601,     { RA, RS, RB } },
2339 { "sreq.",   XRC(31,729,1), X_MASK,     POWER|M601,     { RA, RS, RB } },
2340
2341 { "stfdux",  X(31,759), X_MASK,         PPC|POWER,      { FRS, RA, RB } },
2342
2343 { "srliq",   XRC(31,760,0), X_MASK,     POWER|M601,     { RA, RS, SH } },
2344 { "srliq.",  XRC(31,760,1), X_MASK,     POWER|M601,     { RA, RS, SH } },
2345
2346 { "lhbrx",   X(31,790), X_MASK,         PPC|POWER,      { RT, RA, RB } },
2347
2348 { "sraw",    XRC(31,792,0), X_MASK,     PPC,            { RA, RS, RB } },
2349 { "sra",     XRC(31,792,0), X_MASK,     POWER,          { RA, RS, RB } },
2350 { "sraw.",   XRC(31,792,1), X_MASK,     PPC,            { RA, RS, RB } },
2351 { "sra.",    XRC(31,792,1), X_MASK,     POWER,          { RA, RS, RB } },
2352
2353 { "srad",    XRC(31,794,0), X_MASK,     PPC|B64,        { RA, RS, RB } },
2354 { "srad.",   XRC(31,794,1), X_MASK,     PPC|B64,        { RA, RS, RB } },
2355
2356 { "rac",     X(31,818), X_MASK,         POWER,          { RT, RA, RB } },
2357
2358 { "srawi",   XRC(31,824,0), X_MASK,     PPC,            { RA, RS, SH } },
2359 { "srai",    XRC(31,824,0), X_MASK,     POWER,          { RA, RS, SH } },
2360 { "srawi.",  XRC(31,824,1), X_MASK,     PPC,            { RA, RS, SH } },
2361 { "srai.",   XRC(31,824,1), X_MASK,     POWER,          { RA, RS, SH } },
2362
2363 { "eieio",   X(31,854), 0xffffffff,     PPC,            { 0 } },
2364
2365 { "sthbrx",  X(31,918), X_MASK,         PPC|POWER,      { RS, RA, RB } },
2366
2367 { "sraq",    XRC(31,920,0), X_MASK,     POWER|M601,     { RA, RS, RB } },
2368 { "sraq.",   XRC(31,920,1), X_MASK,     POWER|M601,     { RA, RS, RB } },
2369
2370 { "srea",    XRC(31,921,0), X_MASK,     POWER|M601,     { RA, RS, RB } },
2371 { "srea.",   XRC(31,921,1), X_MASK,     POWER|M601,     { RA, RS, RB } },
2372
2373 { "extsh",   XRC(31,922,0), XRB_MASK,   PPC,            { RA, RS } },
2374 { "exts",    XRC(31,922,0), XRB_MASK,   POWER,          { RA, RS } },
2375 { "extsh.",  XRC(31,922,1), XRB_MASK,   PPC,            { RA, RS } },
2376 { "exts.",   XRC(31,922,1), XRB_MASK,   POWER,          { RA, RS } },
2377
2378 { "sraiq",   XRC(31,952,0), X_MASK,     POWER|M601,     { RA, RS, SH } },
2379 { "sraiq.",  XRC(31,952,1), X_MASK,     POWER|M601,     { RA, RS, SH } },
2380
2381 { "extsb",   XRC(31,954,0), XRB_MASK,   PPC,            { RA, RS} },
2382 { "extsb.",  XRC(31,954,1), XRB_MASK,   PPC,            { RA, RS} },
2383
2384 { "icbi",    X(31,982), XRT_MASK,       PPC,            { RA, RB } },
2385
2386 { "stfiwx",  X(31,983), X_MASK,         PPC,            { FRS, RA, RB } },
2387
2388 { "extsw",   XRC(31,986,0), XRB_MASK,   PPC,            { RA, RS } },
2389 { "extsw.",  XRC(31,986,1), XRB_MASK,   PPC,            { RA, RS } },
2390
2391 { "dcbz",    X(31,1014), XRT_MASK,      PPC,            { RA, RB } },
2392 { "dclz",    X(31,1014), XRT_MASK,      PPC,            { RA, RB } },
2393
2394 { "lwz",     OP(32),    OP_MASK,        PPC,            { RT, D, RA } },
2395 { "l",       OP(32),    OP_MASK,        POWER,          { RT, D, RA } },
2396
2397 { "lwzu",    OP(33),    OP_MASK,        PPC,            { RT, D, RA } },
2398 { "lu",      OP(33),    OP_MASK,        POWER,          { RT, D, RA } },
2399
2400 { "lbz",     OP(34),    OP_MASK,        PPC|POWER,      { RT, D, RA } },
2401
2402 { "lbzu",    OP(35),    OP_MASK,        PPC|POWER,      { RT, D, RA } },
2403
2404 { "stw",     OP(36),    OP_MASK,        PPC,            { RS, D, RA } },
2405 { "st",      OP(36),    OP_MASK,        POWER,          { RS, D, RA } },
2406
2407 { "stwu",    OP(37),    OP_MASK,        PPC,            { RS, D, RA } },
2408 { "stu",     OP(37),    OP_MASK,        POWER,          { RS, D, RA } },
2409
2410 { "stb",     OP(38),    OP_MASK,        PPC|POWER,      { RS, D, RA } },
2411
2412 { "stbu",    OP(39),    OP_MASK,        PPC|POWER,      { RS, D, RA } },
2413
2414 { "lhz",     OP(40),    OP_MASK,        PPC|POWER,      { RT, D, RA } },
2415
2416 { "lhzu",    OP(41),    OP_MASK,        PPC|POWER,      { RT, D, RA } },
2417
2418 { "lha",     OP(42),    OP_MASK,        PPC|POWER,      { RT, D, RA } },
2419
2420 { "lhau",    OP(43),    OP_MASK,        PPC|POWER,      { RT, D, RA } },
2421
2422 { "sth",     OP(44),    OP_MASK,        PPC|POWER,      { RS, D, RA } },
2423
2424 { "sthu",    OP(45),    OP_MASK,        PPC|POWER,      { RS, D, RA } },
2425
2426 { "lmw",     OP(46),    OP_MASK,        PPC,            { RT, D, RA } },
2427 { "lm",      OP(46),    OP_MASK,        POWER,          { RT, D, RA } },
2428
2429 { "stmw",    OP(47),    OP_MASK,        PPC,            { RS, D, RA } },
2430 { "stm",     OP(47),    OP_MASK,        POWER,          { RS, D, RA } },
2431
2432 { "lfs",     OP(48),    OP_MASK,        PPC|POWER,      { FRT, D, RA } },
2433
2434 { "lfsu",    OP(49),    OP_MASK,        PPC|POWER,      { FRT, D, RA } },
2435
2436 { "lfd",     OP(50),    OP_MASK,        PPC|POWER,      { FRT, D, RA } },
2437
2438 { "lfdu",    OP(51),    OP_MASK,        PPC|POWER,      { FRT, D, RA } },
2439
2440 { "stfs",    OP(52),    OP_MASK,        PPC|POWER,      { FRS, D, RA } },
2441
2442 { "stfsu",   OP(53),    OP_MASK,        PPC|POWER,      { FRS, D, RA } },
2443
2444 { "stfd",    OP(54),    OP_MASK,        PPC|POWER,      { FRS, D, RA } },
2445
2446 { "stfdu",   OP(55),    OP_MASK,        PPC|POWER,      { FRS, D, RA } },
2447
2448 { "lfq",     OP(56),    OP_MASK,        POWER2,         { FRT, D, RA } },
2449
2450 { "lfqu",    OP(57),    OP_MASK,        POWER2,         { FRT, D, RA } },
2451
2452 { "ld",      DSO(58,0), DS_MASK,        PPC|B64,        { RT, DS, RA } },
2453
2454 { "ldu",     DSO(58,1), DS_MASK,        PPC|B64,        { RT, DS, RA } },
2455
2456 { "lwa",     DSO(58,2), DS_MASK,        PPC|B64,        { RT, DS, RA } },
2457
2458 { "fdivs",   A(59,18,0), AFRC_MASK,     PPC,            { FRT, FRA, FRB } },
2459 { "fdivs.",  A(59,18,1), AFRC_MASK,     PPC,            { FRT, FRA, FRB } },
2460
2461 { "fsubs",   A(59,20,0), AFRC_MASK,     PPC,            { FRT, FRA, FRB } },
2462 { "fsubs.",  A(59,20,1), AFRC_MASK,     PPC,            { FRT, FRA, FRB } },
2463
2464 { "fadds",   A(59,21,0), AFRC_MASK,     PPC,            { FRT, FRA, FRB } },
2465 { "fadds.",  A(59,21,1), AFRC_MASK,     PPC,            { FRT, FRA, FRB } },
2466
2467 { "fsqrts",  A(59,22,0), AFRAFRC_MASK,  PPC,            { FRT, FRB } },
2468 { "fsqrts.", A(59,22,1), AFRAFRC_MASK,  PPC,            { FRT, FRB } },
2469
2470 { "fres",    A(59,24,0), AFRAFRC_MASK,  PPC,            { FRT, FRB } },
2471 { "fres.",   A(59,24,1), AFRAFRC_MASK,  PPC,            { FRT, FRB } },
2472
2473 { "fmuls",   A(59,25,0), AFRB_MASK,     PPC,            { FRT, FRA, FRC } },
2474 { "fmuls.",  A(59,25,1), AFRB_MASK,     PPC,            { FRT, FRA, FRC } },
2475
2476 { "fmsubs",  A(59,28,0), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2477 { "fmsubs.", A(59,28,1), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2478
2479 { "fmadds",  A(59,29,0), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2480 { "fmadds.", A(59,29,1), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2481
2482 { "fnmsubs", A(59,30,0), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2483 { "fnmsubs.",A(59,30,1), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2484
2485 { "fnmadds", A(59,31,0), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2486 { "fnmadds.",A(59,31,1), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2487
2488 { "stfq",    OP(60),    OP_MASK,        POWER2,         { FRS, D, RA } },
2489
2490 { "stfqu",   OP(61),    OP_MASK,        POWER2,         { FRS, D, RA } },
2491
2492 { "std",     DSO(62,0), DS_MASK,        PPC|B64,        { RS, DS, RA } },
2493
2494 { "stdu",    DSO(62,1), DS_MASK,        PPC|B64,        { RS, DS, RA } },
2495
2496 { "fcmpu",   X(63,0),   X_MASK|(3<<21), PPC|POWER,      { BF, FRA, FRB } },
2497
2498 { "frsp",    XRC(63,12,0), XRA_MASK,    PPC|POWER,      { FRT, FRB } },
2499 { "frsp.",   XRC(63,12,1), XRA_MASK,    PPC|POWER,      { FRT, FRB } },
2500
2501 { "fctiw",   XRC(63,14,0), XRA_MASK,    PPC,            { FRT, FRB } },
2502 { "fcir",    XRC(63,14,0), XRA_MASK,    POWER2,         { FRT, FRB } },
2503 { "fctiw.",  XRC(63,14,1), XRA_MASK,    PPC,            { FRT, FRB } },
2504 { "fcir.",   XRC(63,14,0), XRA_MASK,    POWER2,         { FRT, FRB } },
2505
2506 { "fctiwz",  XRC(63,15,0), XRA_MASK,    PPC,            { FRT, FRB } },
2507 { "fcirz",   XRC(63,15,0), XRA_MASK,    POWER2,         { FRT, FRB } },
2508 { "fctiwz.", XRC(63,15,1), XRA_MASK,    PPC,            { FRT, FRB } },
2509 { "fcirz.",  XRC(63,15,1), XRA_MASK,    POWER2,         { FRT, FRB } },
2510
2511 { "fdiv",    A(63,18,0), AFRC_MASK,     PPC,            { FRT, FRA, FRB } },
2512 { "fd",      A(63,18,0), AFRC_MASK,     POWER,          { FRT, FRA, FRB } },
2513 { "fdiv.",   A(63,18,1), AFRC_MASK,     PPC,            { FRT, FRA, FRB } },
2514 { "fd.",     A(63,18,1), AFRC_MASK,     POWER,          { FRT, FRA, FRB } },
2515
2516 { "fsub",    A(63,20,0), AFRC_MASK,     PPC,            { FRT, FRA, FRB } },
2517 { "fs",      A(63,20,0), AFRC_MASK,     POWER,          { FRT, FRA, FRB } },
2518 { "fsub.",   A(63,20,1), AFRC_MASK,     PPC,            { FRT, FRA, FRB } },
2519 { "fs.",     A(63,20,1), AFRC_MASK,     POWER,          { FRT, FRA, FRB } },
2520
2521 { "fadd",    A(63,21,0), AFRC_MASK,     PPC,            { FRT, FRA, FRB } },
2522 { "fa",      A(63,21,0), AFRC_MASK,     POWER,          { FRT, FRA, FRB } },
2523 { "fadd.",   A(63,21,1), AFRC_MASK,     PPC,            { FRT, FRA, FRB } },
2524 { "fa.",     A(63,21,1), AFRC_MASK,     POWER,          { FRT, FRA, FRB } },
2525
2526 { "fsqrt",   A(63,22,0), AFRAFRC_MASK,  PPC|POWER2,     { FRT, FRB } },
2527 { "fsqrt.",  A(63,22,1), AFRAFRC_MASK,  PPC|POWER2,     { FRT, FRB } },
2528
2529 { "fsel",    A(63,23,0), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2530 { "fsel.",   A(63,23,1), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2531
2532 { "fmul",    A(63,25,0), AFRB_MASK,     PPC,            { FRT, FRA, FRC } },
2533 { "fm",      A(63,25,0), AFRB_MASK,     POWER,          { FRT, FRA, FRC } },
2534 { "fmul.",   A(63,25,1), AFRB_MASK,     PPC,            { FRT, FRA, FRC } },
2535 { "fm.",     A(63,25,1), AFRB_MASK,     POWER,          { FRT, FRA, FRC } },
2536
2537 { "frsqrte", A(63,26,0), AFRAFRC_MASK,  PPC,            { FRT, FRB } },
2538 { "frsqrte.",A(63,26,1), AFRAFRC_MASK,  PPC,            { FRT, FRB } },
2539
2540 { "fmsub",   A(63,28,0), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2541 { "fms",     A(63,28,0), A_MASK,        POWER,          { FRT,FRA,FRC,FRB } },
2542 { "fmsub.",  A(63,28,1), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2543 { "fms.",    A(63,28,1), A_MASK,        POWER,          { FRT,FRA,FRC,FRB } },
2544
2545 { "fmadd",   A(63,29,0), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2546 { "fma",     A(63,29,0), A_MASK,        POWER,          { FRT,FRA,FRC,FRB } },
2547 { "fmadd.",  A(63,29,1), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2548 { "fma.",    A(63,29,1), A_MASK,        POWER,          { FRT,FRA,FRC,FRB } },
2549
2550 { "fnmsub",  A(63,30,0), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2551 { "fnms",    A(63,30,0), A_MASK,        POWER,          { FRT,FRA,FRC,FRB } },
2552 { "fnmsub.", A(63,30,1), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2553 { "fnms.",   A(63,30,1), A_MASK,        POWER,          { FRT,FRA,FRC,FRB } },
2554
2555 { "fnmadd",  A(63,31,0), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2556 { "fnma",    A(63,31,0), A_MASK,        POWER,          { FRT,FRA,FRC,FRB } },
2557 { "fnmadd.", A(63,31,1), A_MASK,        PPC,            { FRT,FRA,FRC,FRB } },
2558 { "fnma.",   A(63,31,1), A_MASK,        POWER,          { FRT,FRA,FRC,FRB } },
2559
2560 { "fcmpo",   X(63,30),  X_MASK|(3<<21), PPC|POWER,      { BF, FRA, FRB } },
2561
2562 { "mtfsb1",  XRC(63,38,0), XRARB_MASK,  PPC|POWER,      { BT } },
2563 { "mtfsb1.", XRC(63,38,1), XRARB_MASK,  PPC|POWER,      { BT } },
2564
2565 { "fneg",    XRC(63,40,0), XRA_MASK,    PPC|POWER,      { FRT, FRB } },
2566 { "fneg.",   XRC(63,40,1), XRA_MASK,    PPC|POWER,      { FRT, FRB } },
2567
2568 { "mcrfs",   X(63,64),  XRB_MASK|(3<<21)|(3<<16), PPC|POWER, { BF, BFA } },
2569
2570 { "mtfsb0",  XRC(63,70,0), XRARB_MASK,  PPC|POWER,      { BT } },
2571 { "mtfsb0.", XRC(63,70,1), XRARB_MASK,  PPC|POWER,      { BT } },
2572
2573 { "fmr",     XRC(63,72,0), XRA_MASK,    PPC|POWER,      { FRT, FRB } },
2574 { "fmr.",    XRC(63,72,1), XRA_MASK,    PPC|POWER,      { FRT, FRB } },
2575
2576 { "mtfsfi",  XRC(63,134,0), XRA_MASK|(3<<21)|(1<<11), PPC|POWER, { BF, U } },
2577 { "mtfsfi.", XRC(63,134,1), XRA_MASK|(3<<21)|(1<<11), PPC|POWER, { BF, U } },
2578
2579 { "fnabs",   XRC(63,136,0), XRA_MASK,   PPC|POWER,      { FRT, FRB } },
2580 { "fnabs.",  XRC(63,136,1), XRA_MASK,   PPC|POWER,      { FRT, FRB } },
2581
2582 { "fabs",    XRC(63,264,0), XRA_MASK,   PPC|POWER,      { FRT, FRB } },
2583 { "fabs.",   XRC(63,264,1), XRA_MASK,   PPC|POWER,      { FRT, FRB } },
2584
2585 { "mffs",    XRC(63,583,0), XRARB_MASK, PPC|POWER,      { FRT } },
2586 { "mffs.",   XRC(63,583,1), XRARB_MASK, PPC|POWER,      { FRT } },
2587
2588 { "mtfsf",   XFL(63,711,0), XFL_MASK,   PPC|POWER,      { FLM, FRB } },
2589 { "mtfsf.",  XFL(63,711,1), XFL_MASK,   PPC|POWER,      { FLM, FRB } },
2590
2591 { "fctid",   XRC(63,814,0), XRA_MASK,   PPC|B64,        { FRT, FRB } },
2592 { "fctid.",  XRC(63,814,1), XRA_MASK,   PPC|B64,        { FRT, FRB } },
2593
2594 { "fctidz",  XRC(63,815,0), XRA_MASK,   PPC|B64,        { FRT, FRB } },
2595 { "fctidz.", XRC(63,815,1), XRA_MASK,   PPC|B64,        { FRT, FRB } },
2596
2597 { "fcfid",   XRC(63,846,0), XRA_MASK,   PPC|B64,        { FRT, FRB } },
2598 { "fcfid.",  XRC(63,846,1), XRA_MASK,   PPC|B64,        { FRT, FRB } },
2599
2600 };
2601
2602 const int powerpc_num_opcodes =
2603   sizeof (powerpc_opcodes) / sizeof (powerpc_opcodes[0]);
2604 \f
2605 /* The macro table.  This is only used by the assembler.  */
2606
2607 const struct powerpc_macro powerpc_macros[] = {
2608 { "extldi",  4,   PPC|B64,      "rldicr %0,%1,%3,(%2)-1" },
2609 { "extldi.", 4,   PPC|B64,      "rldicr. %0,%1,%3,(%2)-1" },
2610 { "extrdi",  4,   PPC|B64,      "rldicl %0,%1,(%2)+(%3),64-(%2)" },
2611 { "extrdi.", 4,   PPC|B64,      "rldicl. %0,%1,(%2)+(%3),64-(%2)" },
2612 { "insrdi",  4,   PPC|B64,      "rldimi %0,%1,64-((%2)+(%3)),%3" },
2613 { "insrdi.", 4,   PPC|B64,      "rldimi. %0,%1,64-((%2)+(%3)),%3" },
2614 { "rotrdi",  3,   PPC|B64,      "rldicl %0,%1,64-(%2),0" },
2615 { "rotrdi.", 3,   PPC|B64,      "rldicl. %0,%1,64-(%2),0" },
2616 { "sldi",    3,   PPC|B64,      "rldicr %0,%1,%2,63-(%2)" },
2617 { "sldi.",   3,   PPC|B64,      "rldicr. %0,%1,%2,63-(%2)" },
2618 { "srdi",    3,   PPC|B64,      "rldicl %0,%1,64-(%2),%2" },
2619 { "srdi.",   3,   PPC|B64,      "rldicl. %0,%1,64-(%2),%2" },
2620 { "clrrdi",  3,   PPC|B64,      "rldicr %0,%1,0,63-(%2)" },
2621 { "clrrdi.", 3,   PPC|B64,      "rldicr. %0,%1,0,63-(%2)" },
2622 { "clrlsldi",4,   PPC|B64,      "rldic %0,%1,%3,(%2)-(%3)" },
2623 { "clrlsldi.",4,  PPC|B64,      "rldic. %0,%1,%3,(%2)-(%3)" },
2624
2625 { "extlwi",  4,   PPC,          "rlwinm %0,%1,%3,0,(%2)-1" },
2626 { "extlwi.", 4,   PPC,          "rlwinm. %0,%1,%3,0,(%2)-1" },
2627 { "extrwi",  4,   PPC,          "rlwinm %0,%1,(%2)+(%3),32-(%2),31" },
2628 { "extrwi.", 4,   PPC,          "rlwinm. %0,%1,(%2)+(%3),32-(%2),31" },
2629 { "inslwi",  4,   PPC,          "rlwimi %0,%1,32-(%3),%3,(%2)+(%3)-1" },
2630 { "inslwi.", 4,   PPC,          "rlwimi. %0,%1,32-(%3),%3,(%2)+(%3)-1" },
2631 { "insrwi",  4,   PPC,          "rlwimi %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1" },
2632 { "insrwi.", 4,   PPC,          "rlwimi. %0,%1,32-((%2)+(%3)),%3,(%2)+(%3)-1"},
2633 { "rotrwi",  3,   PPC,          "rlwinm %0,%1,32-(%2),0,31" },
2634 { "rotrwi.", 3,   PPC,          "rlwinm. %0,%1,32-(%2),0,31" },
2635 { "slwi",    3,   PPC,          "rlwinm %0,%1,%2,0,31-(%2)" },
2636 { "sli",     3,   POWER,        "rlinm %0,%1,%2,0,31-(%2)" },
2637 { "slwi.",   3,   PPC,          "rlwinm. %0,%1,%2,0,31-(%2)" },
2638 { "sli.",    3,   POWER,        "rlinm. %0,%1,%2,0,31-(%2)" },
2639 { "srwi",    3,   PPC,          "rlwinm %0,%1,32-(%2),%2,31" },
2640 { "sri",     3,   POWER,        "rlinm %0,%1,32-(%2),%2,31" },
2641 { "srwi.",   3,   PPC,          "rlwinm. %0,%1,32-(%2),%2,31" },
2642 { "sri.",    3,   POWER,        "rlinm. %0,%1,32-(%2),%2,31" },
2643 { "clrrwi",  3,   PPC,          "rlwinm %0,%1,0,0,31-(%2)" },
2644 { "clrrwi.", 3,   PPC,          "rlwinm. %0,%1,0,0,31-(%2)" },
2645 { "clrlslwi",4,   PPC,          "rlwinm %0,%1,%3,(%2)-(%3),31-(%3)" },
2646 { "clrlslwi.",4,  PPC,          "rlwinm. %0,%1,%3,(%2)-(%3),31-(%3)" },
2647
2648 };
2649
2650 const int powerpc_num_macros =
2651   sizeof (powerpc_macros) / sizeof (powerpc_macros[0]);