Mon Mar 28 12:28:30 1994 David Edelsohn (edelsohn@npac.syr.edu)
[binutils-gdb.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]);