/[pearpc]/src/debug/ppcopc.cc
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /src/debug/ppcopc.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations)
Wed Sep 5 17:11:21 2007 UTC (16 years, 7 months ago) by dpavlin
File size: 116265 byte(s)
import upstream CVS
1 /*
2 * HT Editor
3 * ppcopc.cc
4 *
5 * Copyright (C) 1999-2003 Sebastian Biallas (sb@biallas.net)
6 * Copyright 1994 Free Software Foundation, Inc.
7 * Written by Ian Lance Taylor, Cygnus Support
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23 #include "ppcopc.h"
24
25 /* The functions used to insert and extract complicated operands. */
26
27 /* The BA field in an XL form instruction when it must be the same as
28 the BT field in the same instruction. This operand is marked FAKE.
29 The insertion function just copies the BT field into the BA field,
30 and the extraction function just checks that the fields are the
31 same. */
32
33 static uint32 extract_bat(uint32 insn, bool *invalid)
34 {
35 if (invalid != NULL && ((insn >> 21) & 0x1f) != ((insn >> 16) & 0x1f)) *invalid = 1;
36 return 0;
37 }
38
39 /* The BB field in an XL form instruction when it must be the same as
40 the BA field in the same instruction. This operand is marked FAKE.
41 The insertion function just copies the BA field into the BB field,
42 and the extraction function just checks that the fields are the
43 same. */
44
45 static uint32 extract_bba(uint32 insn, bool *invalid)
46 {
47 if (invalid != NULL && ((insn >> 16) & 0x1f) != ((insn >> 11) & 0x1f)) *invalid = 1;
48 return 0;
49 }
50
51 /* The BD field in a B form instruction. The lower two bits are
52 forced to zero. */
53
54
55 static uint32 extract_bd(uint32 insn, bool *invalid)
56 {
57 if ((insn & 0x8000) != 0) {
58 return (insn & 0xfffc) - 0x10000;
59 } else {
60 return insn & 0xfffc;
61 }
62 }
63
64 /* The BD field in a B form instruction when the - modifier is used.
65 This modifier means that the branch is not expected to be taken.
66 For chips built to versions of the architecture prior to version 2
67 (ie. not Power4 compatible), we set the y bit of the BO field to 1
68 if the offset is negative. When extracting, we require that the y
69 bit be 1 and that the offset be positive, since if the y bit is 0
70 we just want to print the normal form of the instruction.
71 Power4 compatible targets use two bits, "a", and "t", instead of
72 the "y" bit. "at" == 00 => no hint, "at" == 01 => unpredictable,
73 "at" == 10 => not taken, "at" == 11 => taken. The "t" bit is 00001
74 in BO field, the "a" bit is 00010 for branch on CR(BI) and 01000
75 for branch on CTR. We only handle the taken/not-taken hint here. */
76
77 static uint32 extract_bdm(uint32 insn, bool *invalid)
78 {
79 if (invalid) {
80 if ((insn & (0x17 << 21)) != (0x06 << 21)
81 && (insn & (0x1d << 21)) != (0x18 << 21))
82 *invalid = true;
83 }
84 return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
85 }
86
87 /* The BD field in a B form instruction when the + modifier is used.
88 This is like BDM, above, except that the branch is expected to be
89 taken. */
90
91 static uint32 extract_bdp(uint32 insn, bool *invalid)
92 {
93 if (invalid) {
94 if ((insn & (0x17 << 21)) != (0x07 << 21)
95 && (insn & (0x1d << 21)) != (0x19 << 21))
96 *invalid = true;
97 }
98 return ((insn & 0xfffc) ^ 0x8000) - 0x8000;
99 }
100
101 /* Check for legal values of a BO field. */
102
103 static bool valid_bo(uint32 value)
104 {
105 /* Certain encodings have bits that are required to be zero.
106 These are (z must be zero, a & t may be anything):
107 0000z
108 0001z
109 0100z
110 0101z
111 001at
112 011at
113 1a00t
114 1a01t
115 1z1zz
116 */
117 switch (value & 0x14) {
118 case 0:
119 return (value & 1) == 0;
120 case 0x4:
121 case 0x10:
122 return true;
123 case 0x14:
124 return value == 0x14;
125 }
126 return false;
127 }
128
129 /* The BO field in a B form instruction. Warn about attempts to set
130 the field to an illegal value. */
131
132 static uint32 extract_bo(uint32 insn, bool *invalid)
133 {
134 uint32 value;
135
136 value = (insn >> 21) & 0x1f;
137 if (invalid != NULL && !valid_bo(value))
138 *invalid = true;
139 return value;
140 }
141
142 /* The BO field in a B form instruction when the + or - modifier is
143 used. This is like the BO field, but it must be even. When
144 extracting it, we force it to be even. */
145
146 static uint32 extract_boe(uint32 insn, bool *invalid)
147 {
148 uint32 value;
149
150 value = (insn >> 21) & 0x1f;
151 if (invalid != NULL && !valid_bo(value)) *invalid = true;
152 return value & 0x1e;
153 }
154
155 /* The DS field in a DS form instruction. This is like D, but the
156 lower two bits are forced to zero. */
157
158
159 static uint32 extract_ds(uint32 insn, bool *invalid)
160 {
161 if ((insn & 0x8000) != 0) {
162 return (insn & 0xfffc) - 0x10000;
163 } else {
164 return insn & 0xfffc;
165 }
166 }
167
168 /* The LI field in an I form instruction. The lower two bits are
169 forced to zero. */
170
171
172 static uint32 extract_li(uint32 insn, bool *invalid)
173 {
174 if ((insn & 0x2000000) != 0) {
175 return (insn & 0x3fffffc) - 0x4000000;
176 } else {
177 return insn & 0x3fffffc;
178 }
179 }
180
181 /* The MB and ME fields in an M form instruction expressed as a single
182 operand which is itself a bitmask. The extraction function always
183 marks it as invalid, since we never want to recognize an
184 instruction which uses a field of this type. */
185
186 static uint32 extract_mbe(uint32 insn, bool *invalid)
187 {
188 uint32 ret;
189 int mb, me;
190 int i;
191
192 if (invalid != NULL) *invalid = 1;
193
194 ret = 0;
195 mb = (insn >> 6) & 0x1f;
196 me = (insn >> 1) & 0x1f;
197 for (i = mb; i < me; i++) ret |= 1 << (31 - i);
198 return ret;
199 }
200
201 /* The MB or ME field in an MD or MDS form instruction. The high bit
202 is wrapped to the low end. */
203
204
205 static uint32 extract_mb6(uint32 insn, bool *invalid)
206 {
207 return ((insn >> 6) & 0x1f) | (insn & 0x20);
208 }
209
210 /* The NB field in an X form instruction. The value 32 is stored as
211 0. */
212
213
214 static uint32 extract_nb(uint32 insn, bool *invalid)
215 {
216 uint32 ret;
217
218 ret = (insn >> 11) & 0x1f;
219 if (ret == 0) ret = 32;
220 return ret;
221 }
222
223 /* The NSI field in a D form instruction. This is the same as the SI
224 field, only negated. The extraction function always marks it as
225 invalid, since we never want to recognize an instruction which uses
226 a field of this type. */
227
228 static uint32 extract_nsi(uint32 insn, bool *invalid)
229 {
230 if (invalid != NULL) *invalid = 1;
231 if ((insn & 0x8000) != 0) {
232 return - ((insn & 0xffff) - 0x10000);
233 } else {
234 return - (insn & 0xffff);
235 }
236 }
237
238 /* The RA field in a D or X form instruction which is an updating
239 load, which means that the RA field may not be zero and may not
240 equal the RT field. */
241
242 /* The RB field in an X form instruction when it must be the same as
243 the RS field in the instruction. This is used for extended
244 mnemonics like mr. This operand is marked FAKE. The insertion
245 function just copies the BT field into the BA field, and the
246 extraction function just checks that the fields are the same. */
247
248 static uint32 extract_rbs(uint32 insn, bool *invalid)
249 {
250 if (invalid != NULL
251 && ((insn >> 21) & 0x1f) != ((insn >> 11) & 0x1f))
252 *invalid = 1;
253 return 0;
254 }
255
256 /* The SH field in an MD form instruction. This is split. */
257
258 static uint32 extract_sh6(uint32 insn, bool *invalid)
259 {
260 return ((insn >> 11) & 0x1f) | ((insn << 4) & 0x20);
261 }
262
263 /* The SPR field in an XFX form instruction. This is flipped--the
264 lower 5 bits are stored in the upper 5 and vice- versa. */
265
266 static uint32 extract_spr(uint32 insn, bool *invalid)
267 {
268 return ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
269 }
270
271 /* The TBR field in an XFX instruction. This is just like SPR, but it
272 is optional. When TBR is omitted, it must be inserted as 268 (the
273 magic number of the TB register). These functions treat 0
274 (indicating an omitted optional operand) as 268. This means that
275 ``mftb 4,0'' is not handled correctly. This does not matter very
276 much, since the architecture manual does not define mftb as
277 accepting any values other than 268 or 269. */
278
279 #define TB (268)
280
281 static uint32 extract_tbr(uint32 insn, bool *invalid)
282 {
283 uint32 ret = ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
284 if (ret == TB) ret = 0;
285 return ret;
286 }
287
288 /* The operands table.
289
290 The fields are bits, shift, signed, extract, flags. */
291
292 #undef UNUSED
293
294 const struct powerpc_operand powerpc_operands[] =
295 {
296 /* The zero index is used to indicate the end of the list of
297 operands. */
298 #define UNUSED 0
299 { 0, 0, 0, 0 },
300
301 /* The BA field in an XL form instruction. */
302 #define BA UNUSED + 1
303 #define BA_MASK (0x1f << 16)
304 { 5, 16, 0, PPC_OPERAND_CR },
305
306 /* The BA field in an XL form instruction when it must be the same
307 as the BT field in the same instruction. */
308 #define BAT BA + 1
309 { 5, 16, extract_bat, PPC_OPERAND_FAKE },
310
311 /* The BB field in an XL form instruction. */
312 #define BB BAT + 1
313 #define BB_MASK (0x1f << 11)
314 { 5, 11, 0, PPC_OPERAND_CR },
315
316 /* The BB field in an XL form instruction when it must be the same
317 as the BA field in the same instruction. */
318 #define BBA BB + 1
319 { 5, 11, extract_bba, PPC_OPERAND_FAKE },
320
321 /* The BD field in a B form instruction. The lower two bits are
322 forced to zero. */
323 #define BD BBA + 1
324 { 16, 0, extract_bd, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
325
326 /* The BD field in a B form instruction when absolute addressing is
327 used. */
328 #define BDA BD + 1
329 { 16, 0, extract_bd, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
330
331 /* The BD field in a B form instruction when the - modifier is used.
332 This sets the y bit of the BO field appropriately. */
333 #define BDM BDA + 1
334 { 16, 0, extract_bdm,
335 PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
336
337 /* The BD field in a B form instruction when the - modifier is used
338 and absolute address is used. */
339 #define BDMA BDM + 1
340 { 16, 0, extract_bdm,
341 PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
342
343 /* The BD field in a B form instruction when the + modifier is used.
344 This sets the y bit of the BO field appropriately. */
345 #define BDP BDMA + 1
346 { 16, 0, extract_bdp,
347 PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
348
349 /* The BD field in a B form instruction when the + modifier is used
350 and absolute addressing is used. */
351 #define BDPA BDP + 1
352 { 16, 0, extract_bdp,
353 PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
354
355 /* The BF field in an X or XL form instruction. */
356 #define BF BDPA + 1
357 { 3, 23, 0, PPC_OPERAND_CR },
358
359 /* An optional BF field. This is used for comparison instructions,
360 in which an omitted BF field is taken as zero. */
361 #define OBF BF + 1
362 { 3, 23, 0, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
363
364 /* The BFA field in an X or XL form instruction. */
365 #define BFA OBF + 1
366 { 3, 18, 0, PPC_OPERAND_CR },
367
368 /* The BI field in a B form or XL form instruction. */
369 #define BI BFA + 1
370 #define BI_MASK (0x1f << 16)
371 { 5, 16, 0, PPC_OPERAND_CR },
372
373 /* The BO field in a B form instruction. Certain values are
374 illegal. */
375 #define BO BI + 1
376 #define BO_MASK (0x1f << 21)
377 { 5, 21, extract_bo, 0 },
378
379 /* The BO field in a B form instruction when the + or - modifier is
380 used. This is like the BO field, but it must be even. */
381 #define BOE BO + 1
382 { 5, 21, extract_boe, 0 },
383
384 /* The BT field in an X or XL form instruction. */
385 #define BT BOE + 1
386 { 5, 21, 0, PPC_OPERAND_CR },
387
388 /* The condition register number portion of the BI field in a B form
389 or XL form instruction. This is used for the extended
390 conditional branch mnemonics, which set the lower two bits of the
391 BI field. This field is optional. */
392 #define CR BT + 1
393 { 3, 18, 0, PPC_OPERAND_CR | PPC_OPERAND_OPTIONAL },
394
395 /* The CRB field in an X form instruction. */
396 #define CRB CR + 1
397 { 5, 6, 0, 0 },
398
399 /* The CRFD field in an X form instruction. */
400 #define CRFD CRB + 1
401 { 3, 23, 0, PPC_OPERAND_CR },
402
403 /* The CRFS field in an X form instruction. */
404 #define CRFS CRFD + 1
405 { 3, 0, 0, PPC_OPERAND_CR },
406
407 /* The CT field in an X form instruction. */
408 #define CT CRFS + 1
409 { 5, 21, 0, PPC_OPERAND_OPTIONAL },
410
411 /* The D field in a D form instruction. This is a displacement off
412 a register, and implies that the next operand is a register in
413 parentheses. */
414 #define D CT + 1
415 { 16, 0, 0, PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED },
416
417 /* The DS field in a DS form instruction. This is like D, but the
418 lower two bits are forced to zero. */
419 #define DS D + 1
420 { 16, 0, extract_ds,
421 PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DS },
422
423 /* The FLM field in an XFL form instruction. */
424 #define FLM DS + 1
425 { 8, 17, 0, 0 },
426
427 /* The FRA field in an X or A form instruction. */
428 #define FRA FLM + 1
429 #define FRA_MASK (0x1f << 16)
430 { 5, 16, 0, PPC_OPERAND_FPR },
431
432 /* The FRB field in an X or A form instruction. */
433 #define FRB FRA + 1
434 #define FRB_MASK (0x1f << 11)
435 { 5, 11, 0, PPC_OPERAND_FPR },
436
437 /* The FRC field in an A form instruction. */
438 #define FRC FRB + 1
439 #define FRC_MASK (0x1f << 6)
440 { 5, 6, 0, PPC_OPERAND_FPR },
441
442 /* The FRS field in an X form instruction or the FRT field in a D, X
443 or A form instruction. */
444 #define FRS FRC + 1
445 #define FRT FRS
446 { 5, 21, 0, PPC_OPERAND_FPR },
447
448 /* The FXM field in an XFX instruction. */
449 #define FXM FRS + 1
450 #define FXM_MASK (0xff << 12)
451 { 8, 12, 0, 0 },
452
453 /* The L field in a D or X form instruction. */
454 #define L FXM + 1
455 { 1, 21, 0, PPC_OPERAND_OPTIONAL },
456
457 /* The LI field in an I form instruction. The lower two bits are
458 forced to zero. */
459 #define LI L + 1
460 { 26, 0, extract_li, PPC_OPERAND_RELATIVE | PPC_OPERAND_SIGNED },
461
462 /* The LI field in an I form instruction when used as an absolute
463 address. */
464 #define LIA LI + 1
465 { 26, 0, extract_li, PPC_OPERAND_ABSOLUTE | PPC_OPERAND_SIGNED },
466
467 /* The LS field in an X (sync) form instruction. */
468 #define LS LIA + 1
469 { 2, 21, 0, PPC_OPERAND_OPTIONAL },
470
471 /* The MB field in an M form instruction. */
472 #define MB LS + 1
473 #define MB_MASK (0x1f << 6)
474 { 5, 6, 0, 0 },
475
476 /* The ME field in an M form instruction. */
477 #define ME MB + 1
478 #define ME_MASK (0x1f << 1)
479 { 5, 1, 0, 0 },
480
481 /* The MB and ME fields in an M form instruction expressed a single
482 operand which is a bitmask indicating which bits to select. This
483 is a two operand form using PPC_OPERAND_NEXT. See the
484 description in opcode/ppc.h for what this means. */
485 #define MBE ME + 1
486 { 5, 6, 0, PPC_OPERAND_OPTIONAL | PPC_OPERAND_NEXT },
487 { 32, 0, extract_mbe, 0 },
488
489 /* The MB or ME field in an MD or MDS form instruction. The high
490 bit is wrapped to the low end. */
491 #define MB6 MBE + 2
492 #define ME6 MB6
493 #define MB6_MASK (0x3f << 5)
494 { 6, 5, extract_mb6, 0 },
495
496 /* The MO field in an mbar instruction. */
497 #define MO MB6 + 1
498 { 5, 21, 0, 0 },
499
500 /* The NB field in an X form instruction. The value 32 is stored as
501 0. */
502 #define NB MO + 1
503 { 6, 11, extract_nb, 0 },
504
505 /* The NSI field in a D form instruction. This is the same as the
506 SI field, only negated. */
507 #define NSI NB + 1
508 { 16, 0, extract_nsi,
509 PPC_OPERAND_NEGATIVE | PPC_OPERAND_SIGNED },
510
511 /* The RA field in an D, DS, X, XO, M, or MDS form instruction. */
512 #define RA NSI + 1
513 #define RA_MASK (0x1f << 16)
514 { 5, 16, 0, PPC_OPERAND_GPR },
515
516 /* The RA field in a D or X form instruction which is an updating
517 load, which means that the RA field may not be zero and may not
518 equal the RT field. */
519 #define RAL RA + 1
520 { 5, 16, 0, PPC_OPERAND_GPR },
521
522 /* The RA field in an lmw instruction, which has special value
523 restrictions. */
524 #define RAM RAL + 1
525 { 5, 16, 0, PPC_OPERAND_GPR },
526
527 /* The RA field in a D or X form instruction which is an updating
528 store or an updating floating point load, which means that the RA
529 field may not be zero. */
530 #define RAS RAM + 1
531 { 5, 16, 0, PPC_OPERAND_GPR },
532
533 /* The RB field in an X, XO, M, or MDS form instruction. */
534 #define RB RAS + 1
535 #define RB_MASK (0x1f << 11)
536 { 5, 11, 0, PPC_OPERAND_GPR },
537
538 /* The RB field in an X form instruction when it must be the same as
539 the RS field in the instruction. This is used for extended
540 mnemonics like mr. */
541 #define RBS RB + 1
542 { 5, 1, extract_rbs, PPC_OPERAND_FAKE },
543
544 /* The RS field in a D, DS, X, XFX, XS, M, MD or MDS form
545 instruction or the RT field in a D, DS, X, XFX or XO form
546 instruction. */
547 #define RS RBS + 1
548 #define RT RS
549 #define RT_MASK (0x1f << 21)
550 { 5, 21, 0, PPC_OPERAND_GPR },
551
552 /* The SH field in an X or M form instruction. */
553 #define SH RS + 1
554 #define SH_MASK (0x1f << 11)
555 { 5, 11, 0, 0 },
556
557 /* The SH field in an MD form instruction. This is split. */
558 #define SH6 SH + 1
559 #define SH6_MASK ((0x1f << 11) | (1 << 1))
560 { 6, 1, extract_sh6, 0 },
561
562 /* The SI field in a D form instruction. */
563 #define SI SH6 + 1
564 { 16, 0, 0, PPC_OPERAND_SIGNED },
565
566 /* The SI field in a D form instruction when we accept a wide range
567 of positive values. */
568 #define SISIGNOPT SI + 1
569 { 16, 0, 0, PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT },
570
571 /* The SPR field in an XFX form instruction. This is flipped--the
572 lower 5 bits are stored in the upper 5 and vice- versa. */
573 #define SPR SISIGNOPT + 1
574 #define PMR SPR
575 #define SPR_MASK (0x3ff << 11)
576 { 10, 11, extract_spr, 0 },
577
578 /* The BAT index number in an XFX form m[ft]ibat[lu] instruction. */
579 #define SPRBAT SPR + 1
580 #define SPRBAT_MASK (0x3 << 17)
581 { 2, 17, 0, 0 },
582
583 /* The SPRG register number in an XFX form m[ft]sprg instruction. */
584 #define SPRG SPRBAT + 1
585 #define SPRG_MASK (0x3 << 16)
586 { 2, 16, 0, 0 },
587
588 /* The SR field in an X form instruction. */
589 #define SR SPRG + 1
590 { 4, 16, 0, 0 },
591
592 /* The STRM field in an X AltiVec form instruction. */
593 #define STRM SR + 1
594 #define STRM_MASK (0x3 << 21)
595 { 2, 21, 0, 0 },
596
597 /* The SV field in a POWER SC form instruction. */
598 #define SV STRM + 1
599 { 14, 2, 0, 0 },
600
601 /* The TBR field in an XFX form instruction. This is like the SPR
602 field, but it is optional. */
603 #define TBR SV + 1
604 { 10, 11, extract_tbr, PPC_OPERAND_OPTIONAL },
605
606 /* The TO field in a D or X form instruction. */
607 #define TO TBR + 1
608 #define TO_MASK (0x1f << 21)
609 { 5, 21, 0, 0 },
610
611 /* The U field in an X form instruction. */
612 #define U TO + 1
613 { 4, 12, 0, 0 },
614
615 /* The UI field in a D form instruction. */
616 #define UI U + 1
617 { 16, 0, 0, 0 },
618
619 /* The VA field in a VA, VX or VXR form instruction. */
620 #define VA UI + 1
621 #define VA_MASK (0x1f << 16)
622 { 5, 16, 0, PPC_OPERAND_VR },
623
624 /* The VB field in a VA, VX or VXR form instruction. */
625 #define VB VA + 1
626 #define VB_MASK (0x1f << 11)
627 { 5, 11, 0, PPC_OPERAND_VR },
628
629 /* The VC field in a VA form instruction. */
630 #define VC VB + 1
631 #define VC_MASK (0x1f << 6)
632 { 5, 6, 0, PPC_OPERAND_VR },
633
634 /* The VD or VS field in a VA, VX, VXR or X form instruction. */
635 #define VD VC + 1
636 #define VS VD
637 #define VD_MASK (0x1f << 21)
638 { 5, 21, 0, PPC_OPERAND_VR },
639
640 /* The SIMM field in a VX form instruction. */
641 #define SIMM VD + 1
642 { 5, 16, 0, PPC_OPERAND_SIGNED},
643
644 /* The UIMM field in a VX form instruction. */
645 #define UIMM SIMM + 1
646 { 5, 16, 0, 0 },
647
648 /* The SHB field in a VA form instruction. */
649 #define SHB UIMM + 1
650 { 4, 6, 0, 0 },
651
652 /* The WS field. */
653 #define WS SHB + 1
654 #define WS_MASK (0x7 << 11)
655 { 3, 11, 0, 0 },
656
657 /* The L field in an mtmsrd instruction */
658 #define MTMSRD_L WS + 1
659 { 1, 16, 0, PPC_OPERAND_OPTIONAL },
660 };
661
662
663 /* Macros used to form opcodes. */
664
665 /* The main opcode. */
666 #define OP(x) ((((unsigned long)(x)) & 0x3f) << 26)
667 #define OP_MASK OP (0x3f)
668
669 /* The main opcode combined with a trap code in the TO field of a D
670 form instruction. Used for extended mnemonics for the trap
671 instructions. */
672 #define OPTO(x,to) (OP (x) | ((((unsigned long)(to)) & 0x1f) << 21))
673 #define OPTO_MASK (OP_MASK | TO_MASK)
674
675 /* The main opcode combined with a comparison size bit in the L field
676 of a D form or X form instruction. Used for extended mnemonics for
677 the comparison instructions. */
678 #define OPL(x,l) (OP (x) | ((((unsigned long)(l)) & 1) << 21))
679 #define OPL_MASK OPL (0x3f,1)
680
681 /* An A form instruction. */
682 #define A(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1) | (((unsigned long)(rc)) & 1))
683 #define A_MASK A (0x3f, 0x1f, 1)
684
685 /* An A_MASK with the FRB field fixed. */
686 #define AFRB_MASK (A_MASK | FRB_MASK)
687
688 /* An A_MASK with the FRC field fixed. */
689 #define AFRC_MASK (A_MASK | FRC_MASK)
690
691 /* An A_MASK with the FRA and FRC fields fixed. */
692 #define AFRAFRC_MASK (A_MASK | FRA_MASK | FRC_MASK)
693
694 /* A B form instruction. */
695 #define B(op, aa, lk) (OP (op) | ((((unsigned long)(aa)) & 1) << 1) | ((lk) & 1))
696 #define B_MASK B (0x3f, 1, 1)
697
698 /* A B form instruction setting the BO field. */
699 #define BBO(op, bo, aa, lk) (B ((op), (aa), (lk)) | ((((unsigned long)(bo)) & 0x1f) << 21))
700 #define BBO_MASK BBO (0x3f, 0x1f, 1, 1)
701
702 /* A BBO_MASK with the y bit of the BO field removed. This permits
703 matching a conditional branch regardless of the setting of the y
704 bit. Similarly for the 'at' bits used for power4 branch hints. */
705 #define Y_MASK (((unsigned long) 1) << 21)
706 #define AT1_MASK (((unsigned long) 3) << 21)
707 #define AT2_MASK (((unsigned long) 9) << 21)
708 #define BBOY_MASK (BBO_MASK &~ Y_MASK)
709 #define BBOAT_MASK (BBO_MASK &~ AT1_MASK)
710
711 /* A B form instruction setting the BO field and the condition bits of
712 the BI field. */
713 #define BBOCB(op, bo, cb, aa, lk) \
714 (BBO ((op), (bo), (aa), (lk)) | ((((unsigned long)(cb)) & 0x3) << 16))
715 #define BBOCB_MASK BBOCB (0x3f, 0x1f, 0x3, 1, 1)
716
717 /* A BBOCB_MASK with the y bit of the BO field removed. */
718 #define BBOYCB_MASK (BBOCB_MASK &~ Y_MASK)
719 #define BBOATCB_MASK (BBOCB_MASK &~ AT1_MASK)
720 #define BBOAT2CB_MASK (BBOCB_MASK &~ AT2_MASK)
721
722 /* A BBOYCB_MASK in which the BI field is fixed. */
723 #define BBOYBI_MASK (BBOYCB_MASK | BI_MASK)
724 #define BBOATBI_MASK (BBOAT2CB_MASK | BI_MASK)
725
726 /* An Context form instruction. */
727 #define CTX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7))
728 #define CTX_MASK CTX(0x3f, 0x7)
729
730 /* An User Context form instruction. */
731 #define UCTX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1f))
732 #define UCTX_MASK UCTX(0x3f, 0x1f)
733
734 /* The main opcode mask with the RA field clear. */
735 #define DRA_MASK (OP_MASK | RA_MASK)
736
737 /* A DS form instruction. */
738 #define DSO(op, xop) (OP (op) | ((xop) & 0x3))
739 #define DS_MASK DSO (0x3f, 3)
740
741 /* A DE form instruction. */
742 #define DEO(op, xop) (OP (op) | ((xop) & 0xf))
743 #define DE_MASK DEO (0x3e, 0xf)
744
745 /* An EVSEL form instruction. */
746 #define EVSEL(op, xop) (OP (op) | (((unsigned long)(xop)) & 0xff) << 3)
747 #define EVSEL_MASK EVSEL(0x3f, 0xff)
748
749 /* An M form instruction. */
750 #define M(op, rc) (OP (op) | ((rc) & 1))
751 #define M_MASK M (0x3f, 1)
752
753 /* An M form instruction with the ME field specified. */
754 #define MME(op, me, rc) (M ((op), (rc)) | ((((unsigned long)(me)) & 0x1f) << 1))
755
756 /* An M_MASK with the MB and ME fields fixed. */
757 #define MMBME_MASK (M_MASK | MB_MASK | ME_MASK)
758
759 /* An M_MASK with the SH and ME fields fixed. */
760 #define MSHME_MASK (M_MASK | SH_MASK | ME_MASK)
761
762 /* An MD form instruction. */
763 #define MD(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x7) << 2) | ((rc) & 1))
764 #define MD_MASK MD (0x3f, 0x7, 1)
765
766 /* An MD_MASK with the MB field fixed. */
767 #define MDMB_MASK (MD_MASK | MB6_MASK)
768
769 /* An MD_MASK with the SH field fixed. */
770 #define MDSH_MASK (MD_MASK | SH6_MASK)
771
772 /* An MDS form instruction. */
773 #define MDS(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0xf) << 1) | ((rc) & 1))
774 #define MDS_MASK MDS (0x3f, 0xf, 1)
775
776 /* An MDS_MASK with the MB field fixed. */
777 #define MDSMB_MASK (MDS_MASK | MB6_MASK)
778
779 /* An SC form instruction. */
780 #define SC(op, sa, lk) (OP (op) | ((((unsigned long)(sa)) & 1) << 1) | ((lk) & 1))
781 #define SC_MASK (OP_MASK | (((unsigned long)0x3ff) << 16) | (((unsigned long)1) << 1) | 1)
782
783 /* An VX form instruction. */
784 #define VX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7ff))
785
786 /* The mask for an VX form instruction. */
787 #define VX_MASK VX(0x3f, 0x7ff)
788
789 /* An VA form instruction. */
790 #define VXA(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x03f))
791
792 /* The mask for an VA form instruction. */
793 #define VXA_MASK VXA(0x3f, 0x3f)
794
795 /* An VXR form instruction. */
796 #define VXR(op, xop, rc) (OP (op) | (((rc) & 1) << 10) | (((unsigned long)(xop)) & 0x3ff))
797
798 /* The mask for a VXR form instruction. */
799 #define VXR_MASK VXR(0x3f, 0x3ff, 1)
800
801 /* An X form instruction. */
802 #define X(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))
803
804 /* An X form instruction with the RC bit specified. */
805 #define XRC(op, xop, rc) (X ((op), (xop)) | ((rc) & 1))
806
807 /* The mask for an X form instruction. */
808 #define X_MASK XRC (0x3f, 0x3ff, 1)
809
810 /* An X_MASK with the RA field fixed. */
811 #define XRA_MASK (X_MASK | RA_MASK)
812
813 /* An X_MASK with the RB field fixed. */
814 #define XRB_MASK (X_MASK | RB_MASK)
815
816 /* An X_MASK with the RT field fixed. */
817 #define XRT_MASK (X_MASK | RT_MASK)
818
819 /* An X_MASK with the RA and RB fields fixed. */
820 #define XRARB_MASK (X_MASK | RA_MASK | RB_MASK)
821
822 /* An XRARB_MASK, but with the L bit clear. */
823 #define XRLARB_MASK (XRARB_MASK & ~((unsigned long) 1 << 16))
824
825 /* An X_MASK with the RT and RA fields fixed. */
826 #define XRTRA_MASK (X_MASK | RT_MASK | RA_MASK)
827
828 /* An XRTRA_MASK, but with L bit clear. */
829 #define XRTLRA_MASK (XRTRA_MASK & ~((unsigned long) 1 << 21))
830
831 /* An X form comparison instruction. */
832 #define XCMPL(op, xop, l) (X ((op), (xop)) | ((((unsigned long)(l)) & 1) << 21))
833
834 /* The mask for an X form comparison instruction. */
835 #define XCMP_MASK (X_MASK | (((unsigned long)1) << 22))
836
837 /* The mask for an X form comparison instruction with the L field
838 fixed. */
839 #define XCMPL_MASK (XCMP_MASK | (((unsigned long)1) << 21))
840
841 /* An X form trap instruction with the TO field specified. */
842 #define XTO(op, xop, to) (X ((op), (xop)) | ((((unsigned long)(to)) & 0x1f) << 21))
843 #define XTO_MASK (X_MASK | TO_MASK)
844
845 /* An X form tlb instruction with the SH field specified. */
846 #define XTLB(op, xop, sh) (X ((op), (xop)) | ((((unsigned long)(sh)) & 0x1f) << 11))
847 #define XTLB_MASK (X_MASK | SH_MASK)
848
849 /* An X form sync instruction. */
850 #define XSYNC(op, xop, l) (X ((op), (xop)) | ((((unsigned long)(l)) & 3) << 21))
851
852 /* An X form sync instruction with everything filled in except the LS field. */
853 #define XSYNC_MASK (0xff9fffff)
854
855 /* An X form AltiVec dss instruction. */
856 #define XDSS(op, xop, a) (X ((op), (xop)) | ((((unsigned long)(a)) & 1) << 25))
857 #define XDSS_MASK XDSS(0x3f, 0x3ff, 1)
858
859 /* An XFL form instruction. */
860 #define XFL(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1) | (((unsigned long)(rc)) & 1))
861 #define XFL_MASK (XFL (0x3f, 0x3ff, 1) | (((unsigned long)1) << 25) | (((unsigned long)1) << 16))
862
863 /* An X form isel instruction. */
864 #define XISEL(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1f) << 1))
865 #define XISEL_MASK XISEL(0x3f, 0x1f)
866
867 /* An XL form instruction with the LK field set to 0. */
868 #define XL(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1))
869
870 /* An XL form instruction which uses the LK field. */
871 #define XLLK(op, xop, lk) (XL ((op), (xop)) | ((lk) & 1))
872
873 /* The mask for an XL form instruction. */
874 #define XL_MASK XLLK (0x3f, 0x3ff, 1)
875
876 /* An XL form instruction which explicitly sets the BO field. */
877 #define XLO(op, bo, xop, lk) \
878 (XLLK ((op), (xop), (lk)) | ((((unsigned long)(bo)) & 0x1f) << 21))
879 #define XLO_MASK (XL_MASK | BO_MASK)
880
881 /* An XL form instruction which explicitly sets the y bit of the BO
882 field. */
883 #define XLYLK(op, xop, y, lk) (XLLK ((op), (xop), (lk)) | ((((unsigned long)(y)) & 1) << 21))
884 #define XLYLK_MASK (XL_MASK | Y_MASK)
885
886 /* An XL form instruction which sets the BO field and the condition
887 bits of the BI field. */
888 #define XLOCB(op, bo, cb, xop, lk) \
889 (XLO ((op), (bo), (xop), (lk)) | ((((unsigned long)(cb)) & 3) << 16))
890 #define XLOCB_MASK XLOCB (0x3f, 0x1f, 0x3, 0x3ff, 1)
891
892 /* An XL_MASK or XLYLK_MASK or XLOCB_MASK with the BB field fixed. */
893 #define XLBB_MASK (XL_MASK | BB_MASK)
894 #define XLYBB_MASK (XLYLK_MASK | BB_MASK)
895 #define XLBOCBBB_MASK (XLOCB_MASK | BB_MASK)
896
897 /* An XL_MASK with the BO and BB fields fixed. */
898 #define XLBOBB_MASK (XL_MASK | BO_MASK | BB_MASK)
899
900 /* An XL_MASK with the BO, BI and BB fields fixed. */
901 #define XLBOBIBB_MASK (XL_MASK | BO_MASK | BI_MASK | BB_MASK)
902
903 /* An XO form instruction. */
904 #define XO(op, xop, oe, rc) \
905 (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 1) | ((((unsigned long)(oe)) & 1) << 10) | (((unsigned long)(rc)) & 1))
906 #define XO_MASK XO (0x3f, 0x1ff, 1, 1)
907
908 /* An XO_MASK with the RB field fixed. */
909 #define XORB_MASK (XO_MASK | RB_MASK)
910
911 /* An XS form instruction. */
912 #define XS(op, xop, rc) (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 2) | (((unsigned long)(rc)) & 1))
913 #define XS_MASK XS (0x3f, 0x1ff, 1)
914
915 /* A mask for the FXM version of an XFX form instruction. */
916 #define XFXFXM_MASK (X_MASK | (((unsigned long)1) << 20) | (((unsigned long)1) << 11))
917
918 /* An XFX form instruction with the FXM field filled in. */
919 #define XFXM(op, xop, fxm) \
920 (X ((op), (xop)) | ((((unsigned long)(fxm)) & 0xff) << 12))
921
922 /* An XFX form instruction with the SPR field filled in. */
923 #define XSPR(op, xop, spr) \
924 (X ((op), (xop)) | ((((unsigned long)(spr)) & 0x1f) << 16) | ((((unsigned long)(spr)) & 0x3e0) << 6))
925 #define XSPR_MASK (X_MASK | SPR_MASK)
926
927 /* An XFX form instruction with the SPR field filled in except for the
928 SPRBAT field. */
929 #define XSPRBAT_MASK (XSPR_MASK &~ SPRBAT_MASK)
930
931 /* An XFX form instruction with the SPR field filled in except for the
932 SPRG field. */
933 #define XSPRG_MASK (XSPR_MASK &~ SPRG_MASK)
934
935 /* An X form instruction with everything filled in except the E field. */
936 #define XE_MASK (0xffff7fff)
937
938 /* An X form user context instruction. */
939 #define XUC(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1f))
940 #define XUC_MASK XUC(0x3f, 0x1f)
941
942 /* The BO encodings used in extended conditional branch mnemonics. */
943 #define BODNZF (0x0)
944 #define BODNZFP (0x1)
945 #define BODZF (0x2)
946 #define BODZFP (0x3)
947 #define BODNZT (0x8)
948 #define BODNZTP (0x9)
949 #define BODZT (0xa)
950 #define BODZTP (0xb)
951
952 #define BOF (0x4)
953 #define BOFP (0x5)
954 #define BOFM4 (0x6)
955 #define BOFP4 (0x7)
956 #define BOT (0xc)
957 #define BOTP (0xd)
958 #define BOTM4 (0xe)
959 #define BOTP4 (0xf)
960
961 #define BODNZ (0x10)
962 #define BODNZP (0x11)
963 #define BODZ (0x12)
964 #define BODZP (0x13)
965 #define BODNZM4 (0x18)
966 #define BODNZP4 (0x19)
967 #define BODZM4 (0x1a)
968 #define BODZP4 (0x1b)
969
970 #define BOU (0x14)
971
972 /* The BI condition bit encodings used in extended conditional branch
973 mnemonics. */
974 #define CBLT (0)
975 #define CBGT (1)
976 #define CBEQ (2)
977 #define CBSO (3)
978
979 /* The TO encodings used in extended trap mnemonics. */
980 #define TOLGT (0x1)
981 #define TOLLT (0x2)
982 #define TOEQ (0x4)
983 #define TOLGE (0x5)
984 #define TOLNL (0x5)
985 #define TOLLE (0x6)
986 #define TOLNG (0x6)
987 #define TOGT (0x8)
988 #define TOGE (0xc)
989 #define TONL (0xc)
990 #define TOLT (0x10)
991 #define TOLE (0x14)
992 #define TONG (0x14)
993 #define TONE (0x18)
994 #define TOU (0x1f)
995
996 /* Smaller names for the flags so each entry in the opcodes table will
997 fit on a single line. */
998 #undef PPC
999 #define PPC PPC_OPCODE_PPC | PPC_OPCODE_ANY
1000 #define PPCCOM PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_ANY
1001 #define NOPOWER4 PPC_OPCODE_NOPOWER4 | PPCCOM
1002 #define POWER4 PPC_OPCODE_POWER4 | PPCCOM
1003 #define PPC32 PPC_OPCODE_32 | PPC_OPCODE_PPC | PPC_OPCODE_ANY
1004 #define PPC64 PPC_OPCODE_64 | PPC_OPCODE_PPC | PPC_OPCODE_ANY
1005 #define PPCONLY PPC_OPCODE_PPC
1006 #define PPC403 PPC_OPCODE_403
1007 #define PPC405 PPC403
1008 #define PPC750 PPC
1009 #define PPC860 PPC
1010 #define PPCVEC PPC_OPCODE_ALTIVEC | PPC_OPCODE_ANY | PPC_OPCODE_PPC
1011 #define POWER PPC_OPCODE_POWER | PPC_OPCODE_ANY
1012 #define POWER2 PPC_OPCODE_POWER | PPC_OPCODE_POWER2 | PPC_OPCODE_ANY
1013 #define PPCPWR2 PPC_OPCODE_PPC | PPC_OPCODE_POWER | PPC_OPCODE_POWER2 | PPC_OPCODE_ANY
1014 #define POWER32 PPC_OPCODE_POWER | PPC_OPCODE_ANY | PPC_OPCODE_32
1015 #define COM PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_ANY
1016 #define COM32 PPC_OPCODE_POWER | PPC_OPCODE_PPC | PPC_OPCODE_COMMON | PPC_OPCODE_ANY | PPC_OPCODE_32
1017 #define M601 PPC_OPCODE_POWER | PPC_OPCODE_601 | PPC_OPCODE_ANY
1018 #define PWRCOM PPC_OPCODE_POWER | PPC_OPCODE_601 | PPC_OPCODE_COMMON | PPC_OPCODE_ANY
1019 #define MFDEC1 PPC_OPCODE_POWER
1020 #define MFDEC2 PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE
1021 #define BOOKE PPC_OPCODE_BOOKE
1022 #define BOOKE64 PPC_OPCODE_BOOKE64
1023 #define CLASSIC PPC_OPCODE_CLASSIC
1024 #define PPCSPE PPC_OPCODE_SPE
1025 #define PPCISEL PPC_OPCODE_ISEL
1026 #define PPCEFS PPC_OPCODE_EFS
1027 #define PPCBRLK PPC_OPCODE_BRLOCK
1028 #define PPCPMR PPC_OPCODE_PMR
1029 #define PPCCHLK PPC_OPCODE_CACHELCK
1030 #define PPCCHLK64 PPC_OPCODE_CACHELCK | PPC_OPCODE_BOOKE64
1031 #define PPCRFMCI PPC_OPCODE_RFMCI
1032
1033 /* The opcode table.
1034
1035 The format of the opcode table is:
1036
1037 NAME OPCODE MASK FLAGS { OPERANDS }
1038
1039 NAME is the name of the instruction.
1040 OPCODE is the instruction opcode.
1041 MASK is the opcode mask; this is used to tell the disassembler
1042 which bits in the actual opcode must match OPCODE.
1043 FLAGS are flags indicated what processors support the instruction.
1044 OPERANDS is the list of operands.
1045
1046 The disassembler reads the table in order and prints the first
1047 instruction which matches, so this table is sorted to put more
1048 specific instructions before more general instructions. It is also
1049 sorted by major opcode. */
1050
1051 const struct powerpc_opcode powerpc_opcodes[] = {
1052
1053 { "twlgti", OPTO(3,TOLGT), OPTO_MASK, PPCCOM, { RA, SI } },
1054 { "tlgti", OPTO(3,TOLGT), OPTO_MASK, PWRCOM, { RA, SI } },
1055 { "twllti", OPTO(3,TOLLT), OPTO_MASK, PPCCOM, { RA, SI } },
1056 { "tllti", OPTO(3,TOLLT), OPTO_MASK, PWRCOM, { RA, SI } },
1057 { "tweqi", OPTO(3,TOEQ), OPTO_MASK, PPCCOM, { RA, SI } },
1058 { "teqi", OPTO(3,TOEQ), OPTO_MASK, PWRCOM, { RA, SI } },
1059 { "twlgei", OPTO(3,TOLGE), OPTO_MASK, PPCCOM, { RA, SI } },
1060 { "tlgei", OPTO(3,TOLGE), OPTO_MASK, PWRCOM, { RA, SI } },
1061 { "twlnli", OPTO(3,TOLNL), OPTO_MASK, PPCCOM, { RA, SI } },
1062 { "tlnli", OPTO(3,TOLNL), OPTO_MASK, PWRCOM, { RA, SI } },
1063 { "twllei", OPTO(3,TOLLE), OPTO_MASK, PPCCOM, { RA, SI } },
1064 { "tllei", OPTO(3,TOLLE), OPTO_MASK, PWRCOM, { RA, SI } },
1065 { "twlngi", OPTO(3,TOLNG), OPTO_MASK, PPCCOM, { RA, SI } },
1066 { "tlngi", OPTO(3,TOLNG), OPTO_MASK, PWRCOM, { RA, SI } },
1067 { "twgti", OPTO(3,TOGT), OPTO_MASK, PPCCOM, { RA, SI } },
1068 { "tgti", OPTO(3,TOGT), OPTO_MASK, PWRCOM, { RA, SI } },
1069 { "twgei", OPTO(3,TOGE), OPTO_MASK, PPCCOM, { RA, SI } },
1070 { "tgei", OPTO(3,TOGE), OPTO_MASK, PWRCOM, { RA, SI } },
1071 { "twnli", OPTO(3,TONL), OPTO_MASK, PPCCOM, { RA, SI } },
1072 { "tnli", OPTO(3,TONL), OPTO_MASK, PWRCOM, { RA, SI } },
1073 { "twlti", OPTO(3,TOLT), OPTO_MASK, PPCCOM, { RA, SI } },
1074 { "tlti", OPTO(3,TOLT), OPTO_MASK, PWRCOM, { RA, SI } },
1075 { "twlei", OPTO(3,TOLE), OPTO_MASK, PPCCOM, { RA, SI } },
1076 { "tlei", OPTO(3,TOLE), OPTO_MASK, PWRCOM, { RA, SI } },
1077 { "twngi", OPTO(3,TONG), OPTO_MASK, PPCCOM, { RA, SI } },
1078 { "tngi", OPTO(3,TONG), OPTO_MASK, PWRCOM, { RA, SI } },
1079 { "twnei", OPTO(3,TONE), OPTO_MASK, PPCCOM, { RA, SI } },
1080 { "tnei", OPTO(3,TONE), OPTO_MASK, PWRCOM, { RA, SI } },
1081 { "twi", OP(3), OP_MASK, PPCCOM, { TO, RA, SI } },
1082 { "ti", OP(3), OP_MASK, PWRCOM, { TO, RA, SI } },
1083
1084 { "mfvscr", VX(4, 1540), VX_MASK, PPCVEC, { VD } },
1085 { "mtvscr", VX(4, 1604), VX_MASK, PPCVEC, { VB } },
1086 { "vaddcuw", VX(4, 384), VX_MASK, PPCVEC, { VD, VA, VB } },
1087 { "vaddfp", VX(4, 10), VX_MASK, PPCVEC, { VD, VA, VB } },
1088 { "vaddsbs", VX(4, 768), VX_MASK, PPCVEC, { VD, VA, VB } },
1089 { "vaddshs", VX(4, 832), VX_MASK, PPCVEC, { VD, VA, VB } },
1090 { "vaddsws", VX(4, 896), VX_MASK, PPCVEC, { VD, VA, VB } },
1091 { "vaddubm", VX(4, 0), VX_MASK, PPCVEC, { VD, VA, VB } },
1092 { "vaddubs", VX(4, 512), VX_MASK, PPCVEC, { VD, VA, VB } },
1093 { "vadduhm", VX(4, 64), VX_MASK, PPCVEC, { VD, VA, VB } },
1094 { "vadduhs", VX(4, 576), VX_MASK, PPCVEC, { VD, VA, VB } },
1095 { "vadduwm", VX(4, 128), VX_MASK, PPCVEC, { VD, VA, VB } },
1096 { "vadduws", VX(4, 640), VX_MASK, PPCVEC, { VD, VA, VB } },
1097 { "vand", VX(4, 1028), VX_MASK, PPCVEC, { VD, VA, VB } },
1098 { "vandc", VX(4, 1092), VX_MASK, PPCVEC, { VD, VA, VB } },
1099 { "vavgsb", VX(4, 1282), VX_MASK, PPCVEC, { VD, VA, VB } },
1100 { "vavgsh", VX(4, 1346), VX_MASK, PPCVEC, { VD, VA, VB } },
1101 { "vavgsw", VX(4, 1410), VX_MASK, PPCVEC, { VD, VA, VB } },
1102 { "vavgub", VX(4, 1026), VX_MASK, PPCVEC, { VD, VA, VB } },
1103 { "vavguh", VX(4, 1090), VX_MASK, PPCVEC, { VD, VA, VB } },
1104 { "vavguw", VX(4, 1154), VX_MASK, PPCVEC, { VD, VA, VB } },
1105 { "vcfsx", VX(4, 842), VX_MASK, PPCVEC, { VD, VB, UIMM } },
1106 { "vcfux", VX(4, 778), VX_MASK, PPCVEC, { VD, VB, UIMM } },
1107 { "vcmpbfp", VXR(4, 966, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
1108 { "vcmpbfp.", VXR(4, 966, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
1109 { "vcmpeqfp", VXR(4, 198, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
1110 { "vcmpeqfp.", VXR(4, 198, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
1111 { "vcmpequb", VXR(4, 6, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
1112 { "vcmpequb.", VXR(4, 6, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
1113 { "vcmpequh", VXR(4, 70, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
1114 { "vcmpequh.", VXR(4, 70, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
1115 { "vcmpequw", VXR(4, 134, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
1116 { "vcmpequw.", VXR(4, 134, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
1117 { "vcmpgefp", VXR(4, 454, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
1118 { "vcmpgefp.", VXR(4, 454, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
1119 { "vcmpgtfp", VXR(4, 710, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
1120 { "vcmpgtfp.", VXR(4, 710, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
1121 { "vcmpgtsb", VXR(4, 774, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
1122 { "vcmpgtsb.", VXR(4, 774, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
1123 { "vcmpgtsh", VXR(4, 838, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
1124 { "vcmpgtsh.", VXR(4, 838, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
1125 { "vcmpgtsw", VXR(4, 902, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
1126 { "vcmpgtsw.", VXR(4, 902, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
1127 { "vcmpgtub", VXR(4, 518, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
1128 { "vcmpgtub.", VXR(4, 518, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
1129 { "vcmpgtuh", VXR(4, 582, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
1130 { "vcmpgtuh.", VXR(4, 582, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
1131 { "vcmpgtuw", VXR(4, 646, 0), VXR_MASK, PPCVEC, { VD, VA, VB } },
1132 { "vcmpgtuw.", VXR(4, 646, 1), VXR_MASK, PPCVEC, { VD, VA, VB } },
1133 { "vctsxs", VX(4, 970), VX_MASK, PPCVEC, { VD, VB, UIMM } },
1134 { "vctuxs", VX(4, 906), VX_MASK, PPCVEC, { VD, VB, UIMM } },
1135 { "vexptefp", VX(4, 394), VX_MASK, PPCVEC, { VD, VB } },
1136 { "vlogefp", VX(4, 458), VX_MASK, PPCVEC, { VD, VB } },
1137 { "vmaddfp", VXA(4, 46), VXA_MASK, PPCVEC, { VD, VA, VC, VB } },
1138 { "vmaxfp", VX(4, 1034), VX_MASK, PPCVEC, { VD, VA, VB } },
1139 { "vmaxsb", VX(4, 258), VX_MASK, PPCVEC, { VD, VA, VB } },
1140 { "vmaxsh", VX(4, 322), VX_MASK, PPCVEC, { VD, VA, VB } },
1141 { "vmaxsw", VX(4, 386), VX_MASK, PPCVEC, { VD, VA, VB } },
1142 { "vmaxub", VX(4, 2), VX_MASK, PPCVEC, { VD, VA, VB } },
1143 { "vmaxuh", VX(4, 66), VX_MASK, PPCVEC, { VD, VA, VB } },
1144 { "vmaxuw", VX(4, 130), VX_MASK, PPCVEC, { VD, VA, VB } },
1145 { "vmhaddshs", VXA(4, 32), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
1146 { "vmhraddshs", VXA(4, 33), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
1147 { "vminfp", VX(4, 1098), VX_MASK, PPCVEC, { VD, VA, VB } },
1148 { "vminsb", VX(4, 770), VX_MASK, PPCVEC, { VD, VA, VB } },
1149 { "vminsh", VX(4, 834), VX_MASK, PPCVEC, { VD, VA, VB } },
1150 { "vminsw", VX(4, 898), VX_MASK, PPCVEC, { VD, VA, VB } },
1151 { "vminub", VX(4, 514), VX_MASK, PPCVEC, { VD, VA, VB } },
1152 { "vminuh", VX(4, 578), VX_MASK, PPCVEC, { VD, VA, VB } },
1153 { "vminuw", VX(4, 642), VX_MASK, PPCVEC, { VD, VA, VB } },
1154 { "vmladduhm", VXA(4, 34), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
1155 { "vmrghb", VX(4, 12), VX_MASK, PPCVEC, { VD, VA, VB } },
1156 { "vmrghh", VX(4, 76), VX_MASK, PPCVEC, { VD, VA, VB } },
1157 { "vmrghw", VX(4, 140), VX_MASK, PPCVEC, { VD, VA, VB } },
1158 { "vmrglb", VX(4, 268), VX_MASK, PPCVEC, { VD, VA, VB } },
1159 { "vmrglh", VX(4, 332), VX_MASK, PPCVEC, { VD, VA, VB } },
1160 { "vmrglw", VX(4, 396), VX_MASK, PPCVEC, { VD, VA, VB } },
1161 { "vmsummbm", VXA(4, 37), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
1162 { "vmsumshm", VXA(4, 40), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
1163 { "vmsumshs", VXA(4, 41), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
1164 { "vmsumubm", VXA(4, 36), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
1165 { "vmsumuhm", VXA(4, 38), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
1166 { "vmsumuhs", VXA(4, 39), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
1167 { "vmulesb", VX(4, 776), VX_MASK, PPCVEC, { VD, VA, VB } },
1168 { "vmulesh", VX(4, 840), VX_MASK, PPCVEC, { VD, VA, VB } },
1169 { "vmuleub", VX(4, 520), VX_MASK, PPCVEC, { VD, VA, VB } },
1170 { "vmuleuh", VX(4, 584), VX_MASK, PPCVEC, { VD, VA, VB } },
1171 { "vmulosb", VX(4, 264), VX_MASK, PPCVEC, { VD, VA, VB } },
1172 { "vmulosh", VX(4, 328), VX_MASK, PPCVEC, { VD, VA, VB } },
1173 { "vmuloub", VX(4, 8), VX_MASK, PPCVEC, { VD, VA, VB } },
1174 { "vmulouh", VX(4, 72), VX_MASK, PPCVEC, { VD, VA, VB } },
1175 { "vnmsubfp", VXA(4, 47), VXA_MASK, PPCVEC, { VD, VA, VC, VB } },
1176 { "vnor", VX(4, 1284), VX_MASK, PPCVEC, { VD, VA, VB } },
1177 { "vor", VX(4, 1156), VX_MASK, PPCVEC, { VD, VA, VB } },
1178 { "vperm", VXA(4, 43), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
1179 { "vpkpx", VX(4, 782), VX_MASK, PPCVEC, { VD, VA, VB } },
1180 { "vpkshss", VX(4, 398), VX_MASK, PPCVEC, { VD, VA, VB } },
1181 { "vpkshus", VX(4, 270), VX_MASK, PPCVEC, { VD, VA, VB } },
1182 { "vpkswss", VX(4, 462), VX_MASK, PPCVEC, { VD, VA, VB } },
1183 { "vpkswus", VX(4, 334), VX_MASK, PPCVEC, { VD, VA, VB } },
1184 { "vpkuhum", VX(4, 14), VX_MASK, PPCVEC, { VD, VA, VB } },
1185 { "vpkuhus", VX(4, 142), VX_MASK, PPCVEC, { VD, VA, VB } },
1186 { "vpkuwum", VX(4, 78), VX_MASK, PPCVEC, { VD, VA, VB } },
1187 { "vpkuwus", VX(4, 206), VX_MASK, PPCVEC, { VD, VA, VB } },
1188 { "vrefp", VX(4, 266), VX_MASK, PPCVEC, { VD, VB } },
1189 { "vrfim", VX(4, 714), VX_MASK, PPCVEC, { VD, VB } },
1190 { "vrfin", VX(4, 522), VX_MASK, PPCVEC, { VD, VB } },
1191 { "vrfip", VX(4, 650), VX_MASK, PPCVEC, { VD, VB } },
1192 { "vrfiz", VX(4, 586), VX_MASK, PPCVEC, { VD, VB } },
1193 { "vrlb", VX(4, 4), VX_MASK, PPCVEC, { VD, VA, VB } },
1194 { "vrlh", VX(4, 68), VX_MASK, PPCVEC, { VD, VA, VB } },
1195 { "vrlw", VX(4, 132), VX_MASK, PPCVEC, { VD, VA, VB } },
1196 { "vrsqrtefp", VX(4, 330), VX_MASK, PPCVEC, { VD, VB } },
1197 { "vsel", VXA(4, 42), VXA_MASK, PPCVEC, { VD, VA, VB, VC } },
1198 { "vsl", VX(4, 452), VX_MASK, PPCVEC, { VD, VA, VB } },
1199 { "vslb", VX(4, 260), VX_MASK, PPCVEC, { VD, VA, VB } },
1200 { "vsldoi", VXA(4, 44), VXA_MASK, PPCVEC, { VD, VA, VB, SHB } },
1201 { "vslh", VX(4, 324), VX_MASK, PPCVEC, { VD, VA, VB } },
1202 { "vslo", VX(4, 1036), VX_MASK, PPCVEC, { VD, VA, VB } },
1203 { "vslw", VX(4, 388), VX_MASK, PPCVEC, { VD, VA, VB } },
1204 { "vspltb", VX(4, 524), VX_MASK, PPCVEC, { VD, VB, UIMM } },
1205 { "vsplth", VX(4, 588), VX_MASK, PPCVEC, { VD, VB, UIMM } },
1206 { "vspltisb", VX(4, 780), VX_MASK, PPCVEC, { VD, SIMM } },
1207 { "vspltish", VX(4, 844), VX_MASK, PPCVEC, { VD, SIMM } },
1208 { "vspltisw", VX(4, 908), VX_MASK, PPCVEC, { VD, SIMM } },
1209 { "vspltw", VX(4, 652), VX_MASK, PPCVEC, { VD, VB, UIMM } },
1210 { "vsr", VX(4, 708), VX_MASK, PPCVEC, { VD, VA, VB } },
1211 { "vsrab", VX(4, 772), VX_MASK, PPCVEC, { VD, VA, VB } },
1212 { "vsrah", VX(4, 836), VX_MASK, PPCVEC, { VD, VA, VB } },
1213 { "vsraw", VX(4, 900), VX_MASK, PPCVEC, { VD, VA, VB } },
1214 { "vsrb", VX(4, 516), VX_MASK, PPCVEC, { VD, VA, VB } },
1215 { "vsrh", VX(4, 580), VX_MASK, PPCVEC, { VD, VA, VB } },
1216 { "vsro", VX(4, 1100), VX_MASK, PPCVEC, { VD, VA, VB } },
1217 { "vsrw", VX(4, 644), VX_MASK, PPCVEC, { VD, VA, VB } },
1218 { "vsubcuw", VX(4, 1408), VX_MASK, PPCVEC, { VD, VA, VB } },
1219 { "vsubfp", VX(4, 74), VX_MASK, PPCVEC, { VD, VA, VB } },
1220 { "vsubsbs", VX(4, 1792), VX_MASK, PPCVEC, { VD, VA, VB } },
1221 { "vsubshs", VX(4, 1856), VX_MASK, PPCVEC, { VD, VA, VB } },
1222 { "vsubsws", VX(4, 1920), VX_MASK, PPCVEC, { VD, VA, VB } },
1223 { "vsububm", VX(4, 1024), VX_MASK, PPCVEC, { VD, VA, VB } },
1224 { "vsububs", VX(4, 1536), VX_MASK, PPCVEC, { VD, VA, VB } },
1225 { "vsubuhm", VX(4, 1088), VX_MASK, PPCVEC, { VD, VA, VB } },
1226 { "vsubuhs", VX(4, 1600), VX_MASK, PPCVEC, { VD, VA, VB } },
1227 { "vsubuwm", VX(4, 1152), VX_MASK, PPCVEC, { VD, VA, VB } },
1228 { "vsubuws", VX(4, 1664), VX_MASK, PPCVEC, { VD, VA, VB } },
1229 { "vsumsws", VX(4, 1928), VX_MASK, PPCVEC, { VD, VA, VB } },
1230 { "vsum2sws", VX(4, 1672), VX_MASK, PPCVEC, { VD, VA, VB } },
1231 { "vsum4sbs", VX(4, 1800), VX_MASK, PPCVEC, { VD, VA, VB } },
1232 { "vsum4shs", VX(4, 1608), VX_MASK, PPCVEC, { VD, VA, VB } },
1233 { "vsum4ubs", VX(4, 1544), VX_MASK, PPCVEC, { VD, VA, VB } },
1234 { "vupkhpx", VX(4, 846), VX_MASK, PPCVEC, { VD, VB } },
1235 { "vupkhsb", VX(4, 526), VX_MASK, PPCVEC, { VD, VB } },
1236 { "vupkhsh", VX(4, 590), VX_MASK, PPCVEC, { VD, VB } },
1237 { "vupklpx", VX(4, 974), VX_MASK, PPCVEC, { VD, VB } },
1238 { "vupklsb", VX(4, 654), VX_MASK, PPCVEC, { VD, VB } },
1239 { "vupklsh", VX(4, 718), VX_MASK, PPCVEC, { VD, VB } },
1240 { "vxor", VX(4, 1220), VX_MASK, PPCVEC, { VD, VA, VB } },
1241
1242 { "mulli", OP(7), OP_MASK, PPCCOM, { RT, RA, SI } },
1243
1244 { "subfic", OP(8), OP_MASK, PPCCOM, { RT, RA, SI } },
1245
1246 { "cmplwi", OPL(10,0), OPL_MASK, PPCCOM, { OBF, RA, UI } },
1247 { "cmpli", OP(10), OP_MASK, PPCONLY, { BF, L, RA, UI } },
1248
1249 { "cmpwi", OPL(11,0), OPL_MASK, PPCCOM, { OBF, RA, SI } },
1250 { "cmpi", OP(11), OP_MASK, PPCONLY, { BF, L, RA, SI } },
1251
1252 { "addic", OP(12), OP_MASK, PPCCOM, { RT, RA, SI } },
1253 { "subic", OP(12), OP_MASK, PPCCOM, { RT, RA, NSI } },
1254
1255 { "addic.", OP(13), OP_MASK, PPCCOM, { RT, RA, SI } },
1256 { "subic.", OP(13), OP_MASK, PPCCOM, { RT, RA, NSI } },
1257
1258 { "li", OP(14), DRA_MASK, PPCCOM, { RT, SI } },
1259 { "addi", OP(14), OP_MASK, PPCCOM, { RT, RA, SI } },
1260 { "subi", OP(14), OP_MASK, PPCCOM, { RT, RA, NSI } },
1261 { "la", OP(14), OP_MASK, PPCCOM, { RT, D, RA } },
1262
1263 { "lis", OP(15), DRA_MASK, PPCCOM, { RT, SISIGNOPT } },
1264 { "addis", OP(15), OP_MASK, PPCCOM, { RT,RA,SISIGNOPT } },
1265 { "subis", OP(15), OP_MASK, PPCCOM, { RT, RA, NSI } },
1266
1267 { "bdnz-", BBO(16,BODNZ,0,0), BBOATBI_MASK, PPCCOM, { BDM } },
1268 { "bdnz+", BBO(16,BODNZ,0,0), BBOATBI_MASK, PPCCOM, { BDP } },
1269 { "bdnz", BBO(16,BODNZ,0,0), BBOATBI_MASK, PPCCOM, { BD } },
1270 { "bdnzl-", BBO(16,BODNZ,0,1), BBOATBI_MASK, PPCCOM, { BDM } },
1271 { "bdnzl+", BBO(16,BODNZ,0,1), BBOATBI_MASK, PPCCOM, { BDP } },
1272 { "bdnzl", BBO(16,BODNZ,0,1), BBOATBI_MASK, PPCCOM, { BD } },
1273 { "bdnza-", BBO(16,BODNZ,1,0), BBOATBI_MASK, PPCCOM, { BDMA } },
1274 { "bdnza+", BBO(16,BODNZ,1,0), BBOATBI_MASK, PPCCOM, { BDPA } },
1275 { "bdnza", BBO(16,BODNZ,1,0), BBOATBI_MASK, PPCCOM, { BDA } },
1276 { "bdnzla-", BBO(16,BODNZ,1,1), BBOATBI_MASK, PPCCOM, { BDMA } },
1277 { "bdnzla+", BBO(16,BODNZ,1,1), BBOATBI_MASK, PPCCOM, { BDPA } },
1278 { "bdnzla", BBO(16,BODNZ,1,1), BBOATBI_MASK, PPCCOM, { BDA } },
1279 { "bdz-", BBO(16,BODZ,0,0), BBOATBI_MASK, PPCCOM, { BDM } },
1280 { "bdz+", BBO(16,BODZ,0,0), BBOATBI_MASK, PPCCOM, { BDP } },
1281 { "bdz", BBO(16,BODZ,0,0), BBOATBI_MASK, COM, { BD } },
1282 { "bdzl-", BBO(16,BODZ,0,1), BBOATBI_MASK, PPCCOM, { BDM } },
1283 { "bdzl+", BBO(16,BODZ,0,1), BBOATBI_MASK, PPCCOM, { BDP } },
1284 { "bdzl", BBO(16,BODZ,0,1), BBOATBI_MASK, COM, { BD } },
1285 { "bdza-", BBO(16,BODZ,1,0), BBOATBI_MASK, PPCCOM, { BDMA } },
1286 { "bdza+", BBO(16,BODZ,1,0), BBOATBI_MASK, PPCCOM, { BDPA } },
1287 { "bdza", BBO(16,BODZ,1,0), BBOATBI_MASK, COM, { BDA } },
1288 { "bdzla-", BBO(16,BODZ,1,1), BBOATBI_MASK, PPCCOM, { BDMA } },
1289 { "bdzla+", BBO(16,BODZ,1,1), BBOATBI_MASK, PPCCOM, { BDPA } },
1290 { "bdzla", BBO(16,BODZ,1,1), BBOATBI_MASK, COM, { BDA } },
1291 { "blt-", BBOCB(16,BOT,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1292 { "blt+", BBOCB(16,BOT,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1293 { "blt", BBOCB(16,BOT,CBLT,0,0), BBOATCB_MASK, COM, { CR, BD } },
1294 { "bltl-", BBOCB(16,BOT,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1295 { "bltl+", BBOCB(16,BOT,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1296 { "bltl", BBOCB(16,BOT,CBLT,0,1), BBOATCB_MASK, COM, { CR, BD } },
1297 { "blta-", BBOCB(16,BOT,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1298 { "blta+", BBOCB(16,BOT,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1299 { "blta", BBOCB(16,BOT,CBLT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
1300 { "bltla-", BBOCB(16,BOT,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1301 { "bltla+", BBOCB(16,BOT,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1302 { "bltla", BBOCB(16,BOT,CBLT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
1303 { "bgt-", BBOCB(16,BOT,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1304 { "bgt+", BBOCB(16,BOT,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1305 { "bgt", BBOCB(16,BOT,CBGT,0,0), BBOATCB_MASK, COM, { CR, BD } },
1306 { "bgtl-", BBOCB(16,BOT,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1307 { "bgtl+", BBOCB(16,BOT,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1308 { "bgtl", BBOCB(16,BOT,CBGT,0,1), BBOATCB_MASK, COM, { CR, BD } },
1309 { "bgta-", BBOCB(16,BOT,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1310 { "bgta+", BBOCB(16,BOT,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1311 { "bgta", BBOCB(16,BOT,CBGT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
1312 { "bgtla-", BBOCB(16,BOT,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1313 { "bgtla+", BBOCB(16,BOT,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1314 { "bgtla", BBOCB(16,BOT,CBGT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
1315 { "beq-", BBOCB(16,BOT,CBEQ,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1316 { "beq+", BBOCB(16,BOT,CBEQ,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1317 { "beq", BBOCB(16,BOT,CBEQ,0,0), BBOATCB_MASK, COM, { CR, BD } },
1318 { "beql-", BBOCB(16,BOT,CBEQ,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1319 { "beql+", BBOCB(16,BOT,CBEQ,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1320 { "beql", BBOCB(16,BOT,CBEQ,0,1), BBOATCB_MASK, COM, { CR, BD } },
1321 { "beqa-", BBOCB(16,BOT,CBEQ,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1322 { "beqa+", BBOCB(16,BOT,CBEQ,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1323 { "beqa", BBOCB(16,BOT,CBEQ,1,0), BBOATCB_MASK, COM, { CR, BDA } },
1324 { "beqla-", BBOCB(16,BOT,CBEQ,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1325 { "beqla+", BBOCB(16,BOT,CBEQ,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1326 { "beqla", BBOCB(16,BOT,CBEQ,1,1), BBOATCB_MASK, COM, { CR, BDA } },
1327 { "bso-", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1328 { "bso+", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1329 { "bso", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, COM, { CR, BD } },
1330 { "bsol-", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1331 { "bsol+", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1332 { "bsol", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, COM, { CR, BD } },
1333 { "bsoa-", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1334 { "bsoa+", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1335 { "bsoa", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, COM, { CR, BDA } },
1336 { "bsola-", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1337 { "bsola+", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1338 { "bsola", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, COM, { CR, BDA } },
1339 { "bun-", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1340 { "bun+", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1341 { "bun", BBOCB(16,BOT,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BD } },
1342 { "bunl-", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1343 { "bunl+", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1344 { "bunl", BBOCB(16,BOT,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BD } },
1345 { "buna-", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1346 { "buna+", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1347 { "buna", BBOCB(16,BOT,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDA } },
1348 { "bunla-", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1349 { "bunla+", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1350 { "bunla", BBOCB(16,BOT,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDA } },
1351 { "bge-", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1352 { "bge+", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1353 { "bge", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, COM, { CR, BD } },
1354 { "bgel-", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1355 { "bgel+", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1356 { "bgel", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, COM, { CR, BD } },
1357 { "bgea-", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1358 { "bgea+", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1359 { "bgea", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
1360 { "bgela-", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1361 { "bgela+", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1362 { "bgela", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
1363 { "bnl-", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1364 { "bnl+", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1365 { "bnl", BBOCB(16,BOF,CBLT,0,0), BBOATCB_MASK, COM, { CR, BD } },
1366 { "bnll-", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1367 { "bnll+", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1368 { "bnll", BBOCB(16,BOF,CBLT,0,1), BBOATCB_MASK, COM, { CR, BD } },
1369 { "bnla-", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1370 { "bnla+", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1371 { "bnla", BBOCB(16,BOF,CBLT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
1372 { "bnlla-", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1373 { "bnlla+", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1374 { "bnlla", BBOCB(16,BOF,CBLT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
1375 { "ble-", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1376 { "ble+", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1377 { "ble", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, COM, { CR, BD } },
1378 { "blel-", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1379 { "blel+", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1380 { "blel", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, COM, { CR, BD } },
1381 { "blea-", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1382 { "blea+", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1383 { "blea", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
1384 { "blela-", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1385 { "blela+", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1386 { "blela", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
1387 { "bng-", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1388 { "bng+", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1389 { "bng", BBOCB(16,BOF,CBGT,0,0), BBOATCB_MASK, COM, { CR, BD } },
1390 { "bngl-", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1391 { "bngl+", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1392 { "bngl", BBOCB(16,BOF,CBGT,0,1), BBOATCB_MASK, COM, { CR, BD } },
1393 { "bnga-", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1394 { "bnga+", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1395 { "bnga", BBOCB(16,BOF,CBGT,1,0), BBOATCB_MASK, COM, { CR, BDA } },
1396 { "bngla-", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1397 { "bngla+", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1398 { "bngla", BBOCB(16,BOF,CBGT,1,1), BBOATCB_MASK, COM, { CR, BDA } },
1399 { "bne-", BBOCB(16,BOF,CBEQ,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1400 { "bne+", BBOCB(16,BOF,CBEQ,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1401 { "bne", BBOCB(16,BOF,CBEQ,0,0), BBOATCB_MASK, COM, { CR, BD } },
1402 { "bnel-", BBOCB(16,BOF,CBEQ,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1403 { "bnel+", BBOCB(16,BOF,CBEQ,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1404 { "bnel", BBOCB(16,BOF,CBEQ,0,1), BBOATCB_MASK, COM, { CR, BD } },
1405 { "bnea-", BBOCB(16,BOF,CBEQ,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1406 { "bnea+", BBOCB(16,BOF,CBEQ,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1407 { "bnea", BBOCB(16,BOF,CBEQ,1,0), BBOATCB_MASK, COM, { CR, BDA } },
1408 { "bnela-", BBOCB(16,BOF,CBEQ,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1409 { "bnela+", BBOCB(16,BOF,CBEQ,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1410 { "bnela", BBOCB(16,BOF,CBEQ,1,1), BBOATCB_MASK, COM, { CR, BDA } },
1411 { "bns-", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1412 { "bns+", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1413 { "bns", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, COM, { CR, BD } },
1414 { "bnsl-", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1415 { "bnsl+", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1416 { "bnsl", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, COM, { CR, BD } },
1417 { "bnsa-", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1418 { "bnsa+", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1419 { "bnsa", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, COM, { CR, BDA } },
1420 { "bnsla-", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1421 { "bnsla+", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1422 { "bnsla", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, COM, { CR, BDA } },
1423 { "bnu-", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1424 { "bnu+", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1425 { "bnu", BBOCB(16,BOF,CBSO,0,0), BBOATCB_MASK, PPCCOM, { CR, BD } },
1426 { "bnul-", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDM } },
1427 { "bnul+", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BDP } },
1428 { "bnul", BBOCB(16,BOF,CBSO,0,1), BBOATCB_MASK, PPCCOM, { CR, BD } },
1429 { "bnua-", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1430 { "bnua+", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1431 { "bnua", BBOCB(16,BOF,CBSO,1,0), BBOATCB_MASK, PPCCOM, { CR, BDA } },
1432 { "bnula-", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDMA } },
1433 { "bnula+", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDPA } },
1434 { "bnula", BBOCB(16,BOF,CBSO,1,1), BBOATCB_MASK, PPCCOM, { CR, BDA } },
1435 { "bdnzt-", BBO(16,BODNZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
1436 { "bdnzt+", BBO(16,BODNZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
1437 { "bdnzt", BBO(16,BODNZT,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
1438 { "bdnztl-", BBO(16,BODNZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
1439 { "bdnztl+", BBO(16,BODNZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
1440 { "bdnztl", BBO(16,BODNZT,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
1441 { "bdnzta-", BBO(16,BODNZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
1442 { "bdnzta+", BBO(16,BODNZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
1443 { "bdnzta", BBO(16,BODNZT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
1444 { "bdnztla-",BBO(16,BODNZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
1445 { "bdnztla+",BBO(16,BODNZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
1446 { "bdnztla", BBO(16,BODNZT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
1447 { "bdnzf-", BBO(16,BODNZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
1448 { "bdnzf+", BBO(16,BODNZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
1449 { "bdnzf", BBO(16,BODNZF,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
1450 { "bdnzfl-", BBO(16,BODNZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
1451 { "bdnzfl+", BBO(16,BODNZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
1452 { "bdnzfl", BBO(16,BODNZF,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
1453 { "bdnzfa-", BBO(16,BODNZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
1454 { "bdnzfa+", BBO(16,BODNZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
1455 { "bdnzfa", BBO(16,BODNZF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
1456 { "bdnzfla-",BBO(16,BODNZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
1457 { "bdnzfla+",BBO(16,BODNZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
1458 { "bdnzfla", BBO(16,BODNZF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
1459 { "bt-", BBO(16,BOT,0,0), BBOAT_MASK, PPCCOM, { BI, BDM } },
1460 { "bt+", BBO(16,BOT,0,0), BBOAT_MASK, PPCCOM, { BI, BDP } },
1461 { "bt", BBO(16,BOT,0,0), BBOAT_MASK, PPCCOM, { BI, BD } },
1462 { "btl-", BBO(16,BOT,0,1), BBOAT_MASK, PPCCOM, { BI, BDM } },
1463 { "btl+", BBO(16,BOT,0,1), BBOAT_MASK, PPCCOM, { BI, BDP } },
1464 { "btl", BBO(16,BOT,0,1), BBOAT_MASK, PPCCOM, { BI, BD } },
1465 { "bta-", BBO(16,BOT,1,0), BBOAT_MASK, PPCCOM, { BI, BDMA } },
1466 { "bta+", BBO(16,BOT,1,0), BBOAT_MASK, PPCCOM, { BI, BDPA } },
1467 { "bta", BBO(16,BOT,1,0), BBOAT_MASK, PPCCOM, { BI, BDA } },
1468 { "btla-", BBO(16,BOT,1,1), BBOAT_MASK, PPCCOM, { BI, BDMA } },
1469 { "btla+", BBO(16,BOT,1,1), BBOAT_MASK, PPCCOM, { BI, BDPA } },
1470 { "btla", BBO(16,BOT,1,1), BBOAT_MASK, PPCCOM, { BI, BDA } },
1471 { "bf-", BBO(16,BOF,0,0), BBOAT_MASK, PPCCOM, { BI, BDM } },
1472 { "bf+", BBO(16,BOF,0,0), BBOAT_MASK, PPCCOM, { BI, BDP } },
1473 { "bf", BBO(16,BOF,0,0), BBOAT_MASK, PPCCOM, { BI, BD } },
1474 { "bfl-", BBO(16,BOF,0,1), BBOAT_MASK, PPCCOM, { BI, BDM } },
1475 { "bfl+", BBO(16,BOF,0,1), BBOAT_MASK, PPCCOM, { BI, BDP } },
1476 { "bfl", BBO(16,BOF,0,1), BBOAT_MASK, PPCCOM, { BI, BD } },
1477 { "bfa-", BBO(16,BOF,1,0), BBOAT_MASK, PPCCOM, { BI, BDMA } },
1478 { "bfa+", BBO(16,BOF,1,0), BBOAT_MASK, PPCCOM, { BI, BDPA } },
1479 { "bfa", BBO(16,BOF,1,0), BBOAT_MASK, PPCCOM, { BI, BDA } },
1480 { "bfla-", BBO(16,BOF,1,1), BBOAT_MASK, PPCCOM, { BI, BDMA } },
1481 { "bfla+", BBO(16,BOF,1,1), BBOAT_MASK, PPCCOM, { BI, BDPA } },
1482 { "bfla", BBO(16,BOF,1,1), BBOAT_MASK, PPCCOM, { BI, BDA } },
1483 { "bdzt-", BBO(16,BODZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
1484 { "bdzt+", BBO(16,BODZT,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
1485 { "bdzt", BBO(16,BODZT,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
1486 { "bdztl-", BBO(16,BODZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
1487 { "bdztl+", BBO(16,BODZT,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
1488 { "bdztl", BBO(16,BODZT,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
1489 { "bdzta-", BBO(16,BODZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
1490 { "bdzta+", BBO(16,BODZT,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
1491 { "bdzta", BBO(16,BODZT,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
1492 { "bdztla-", BBO(16,BODZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
1493 { "bdztla+", BBO(16,BODZT,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
1494 { "bdztla", BBO(16,BODZT,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
1495 { "bdzf-", BBO(16,BODZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDM } },
1496 { "bdzf+", BBO(16,BODZF,0,0), BBOY_MASK, NOPOWER4, { BI, BDP } },
1497 { "bdzf", BBO(16,BODZF,0,0), BBOY_MASK, PPCCOM, { BI, BD } },
1498 { "bdzfl-", BBO(16,BODZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDM } },
1499 { "bdzfl+", BBO(16,BODZF,0,1), BBOY_MASK, NOPOWER4, { BI, BDP } },
1500 { "bdzfl", BBO(16,BODZF,0,1), BBOY_MASK, PPCCOM, { BI, BD } },
1501 { "bdzfa-", BBO(16,BODZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDMA } },
1502 { "bdzfa+", BBO(16,BODZF,1,0), BBOY_MASK, NOPOWER4, { BI, BDPA } },
1503 { "bdzfa", BBO(16,BODZF,1,0), BBOY_MASK, PPCCOM, { BI, BDA } },
1504 { "bdzfla-", BBO(16,BODZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDMA } },
1505 { "bdzfla+", BBO(16,BODZF,1,1), BBOY_MASK, NOPOWER4, { BI, BDPA } },
1506 { "bdzfla", BBO(16,BODZF,1,1), BBOY_MASK, PPCCOM, { BI, BDA } },
1507 { "bc-", B(16,0,0), B_MASK, PPCCOM, { BOE, BI, BDM } },
1508 { "bc+", B(16,0,0), B_MASK, PPCCOM, { BOE, BI, BDP } },
1509 { "bc", B(16,0,0), B_MASK, COM, { BO, BI, BD } },
1510 { "bcl-", B(16,0,1), B_MASK, PPCCOM, { BOE, BI, BDM } },
1511 { "bcl+", B(16,0,1), B_MASK, PPCCOM, { BOE, BI, BDP } },
1512 { "bcl", B(16,0,1), B_MASK, COM, { BO, BI, BD } },
1513 { "bca-", B(16,1,0), B_MASK, PPCCOM, { BOE, BI, BDMA } },
1514 { "bca+", B(16,1,0), B_MASK, PPCCOM, { BOE, BI, BDPA } },
1515 { "bca", B(16,1,0), B_MASK, COM, { BO, BI, BDA } },
1516 { "bcla-", B(16,1,1), B_MASK, PPCCOM, { BOE, BI, BDMA } },
1517 { "bcla+", B(16,1,1), B_MASK, PPCCOM, { BOE, BI, BDPA } },
1518 { "bcla", B(16,1,1), B_MASK, COM, { BO, BI, BDA } },
1519
1520 { "sc", SC(17,1,0), 0xffffffff, PPC, { 0 } },
1521
1522 { "b", B(18,0,0), B_MASK, COM, { LI } },
1523 { "bl", B(18,0,1), B_MASK, COM, { LI } },
1524 { "ba", B(18,1,0), B_MASK, COM, { LIA } },
1525 { "bla", B(18,1,1), B_MASK, COM, { LIA } },
1526
1527 { "mcrf", XL(19,0), XLBB_MASK|(3<<21)|(3<<16), COM, { BF, BFA } },
1528
1529 { "blr", XLO(19,BOU,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
1530 { "blrl", XLO(19,BOU,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
1531 { "bdnzlr", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
1532 { "bdnzlr-", XLO(19,BODNZ,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
1533 { "bdnzlr+", XLO(19,BODNZP,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
1534 { "bdnzlr-", XLO(19,BODNZM4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
1535 { "bdnzlr+", XLO(19,BODNZP4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
1536 { "bdnzlrl", XLO(19,BODNZ,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
1537 { "bdnzlrl-",XLO(19,BODNZ,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
1538 { "bdnzlrl+",XLO(19,BODNZP,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
1539 { "bdnzlrl-",XLO(19,BODNZM4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
1540 { "bdnzlrl+",XLO(19,BODNZP4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
1541 { "bdzlr", XLO(19,BODZ,16,0), XLBOBIBB_MASK, PPCCOM, { 0 } },
1542 { "bdzlr-", XLO(19,BODZ,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
1543 { "bdzlr+", XLO(19,BODZP,16,0), XLBOBIBB_MASK, NOPOWER4, { 0 } },
1544 { "bdzlr-", XLO(19,BODZM4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
1545 { "bdzlr+", XLO(19,BODZP4,16,0), XLBOBIBB_MASK, POWER4, { 0 } },
1546 { "bdzlrl", XLO(19,BODZ,16,1), XLBOBIBB_MASK, PPCCOM, { 0 } },
1547 { "bdzlrl-", XLO(19,BODZ,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
1548 { "bdzlrl+", XLO(19,BODZP,16,1), XLBOBIBB_MASK, NOPOWER4, { 0 } },
1549 { "bdzlrl-", XLO(19,BODZM4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
1550 { "bdzlrl+", XLO(19,BODZP4,16,1), XLBOBIBB_MASK, POWER4, { 0 } },
1551 { "bltlr", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1552 { "bltlr-", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1553 { "bltlr+", XLOCB(19,BOTP,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1554 { "bltlr-", XLOCB(19,BOTM4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1555 { "bltlr+", XLOCB(19,BOTP4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1556 { "bltr", XLOCB(19,BOT,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
1557 { "bltlrl", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1558 { "bltlrl-", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1559 { "bltlrl+", XLOCB(19,BOTP,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1560 { "bltlrl-", XLOCB(19,BOTM4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1561 { "bltlrl+", XLOCB(19,BOTP4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1562 { "bltrl", XLOCB(19,BOT,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
1563 { "bgtlr", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1564 { "bgtlr-", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1565 { "bgtlr+", XLOCB(19,BOTP,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1566 { "bgtlr-", XLOCB(19,BOTM4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1567 { "bgtlr+", XLOCB(19,BOTP4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1568 { "bgtr", XLOCB(19,BOT,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
1569 { "bgtlrl", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1570 { "bgtlrl-", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1571 { "bgtlrl+", XLOCB(19,BOTP,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1572 { "bgtlrl-", XLOCB(19,BOTM4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1573 { "bgtlrl+", XLOCB(19,BOTP4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1574 { "bgtrl", XLOCB(19,BOT,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
1575 { "beqlr", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1576 { "beqlr-", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1577 { "beqlr+", XLOCB(19,BOTP,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1578 { "beqlr-", XLOCB(19,BOTM4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1579 { "beqlr+", XLOCB(19,BOTP4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1580 { "beqr", XLOCB(19,BOT,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
1581 { "beqlrl", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1582 { "beqlrl-", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1583 { "beqlrl+", XLOCB(19,BOTP,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1584 { "beqlrl-", XLOCB(19,BOTM4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1585 { "beqlrl+", XLOCB(19,BOTP4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1586 { "beqrl", XLOCB(19,BOT,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
1587 { "bsolr", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1588 { "bsolr-", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1589 { "bsolr+", XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1590 { "bsolr-", XLOCB(19,BOTM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1591 { "bsolr+", XLOCB(19,BOTP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1592 { "bsor", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
1593 { "bsolrl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1594 { "bsolrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1595 { "bsolrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1596 { "bsolrl-", XLOCB(19,BOTM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1597 { "bsolrl+", XLOCB(19,BOTP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1598 { "bsorl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
1599 { "bunlr", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1600 { "bunlr-", XLOCB(19,BOT,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1601 { "bunlr+", XLOCB(19,BOTP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1602 { "bunlr-", XLOCB(19,BOTM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1603 { "bunlr+", XLOCB(19,BOTP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1604 { "bunlrl", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1605 { "bunlrl-", XLOCB(19,BOT,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1606 { "bunlrl+", XLOCB(19,BOTP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1607 { "bunlrl-", XLOCB(19,BOTM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1608 { "bunlrl+", XLOCB(19,BOTP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1609 { "bgelr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1610 { "bgelr-", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1611 { "bgelr+", XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1612 { "bgelr-", XLOCB(19,BOFM4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1613 { "bgelr+", XLOCB(19,BOFP4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1614 { "bger", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
1615 { "bgelrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1616 { "bgelrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1617 { "bgelrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1618 { "bgelrl-", XLOCB(19,BOFM4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1619 { "bgelrl+", XLOCB(19,BOFP4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1620 { "bgerl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
1621 { "bnllr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1622 { "bnllr-", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1623 { "bnllr+", XLOCB(19,BOFP,CBLT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1624 { "bnllr-", XLOCB(19,BOFM4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1625 { "bnllr+", XLOCB(19,BOFP4,CBLT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1626 { "bnlr", XLOCB(19,BOF,CBLT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
1627 { "bnllrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1628 { "bnllrl-", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1629 { "bnllrl+", XLOCB(19,BOFP,CBLT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1630 { "bnllrl-", XLOCB(19,BOFM4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1631 { "bnllrl+", XLOCB(19,BOFP4,CBLT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1632 { "bnlrl", XLOCB(19,BOF,CBLT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
1633 { "blelr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1634 { "blelr-", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1635 { "blelr+", XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1636 { "blelr-", XLOCB(19,BOFM4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1637 { "blelr+", XLOCB(19,BOFP4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1638 { "bler", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
1639 { "blelrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1640 { "blelrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1641 { "blelrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1642 { "blelrl-", XLOCB(19,BOFM4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1643 { "blelrl+", XLOCB(19,BOFP4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1644 { "blerl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
1645 { "bnglr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1646 { "bnglr-", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1647 { "bnglr+", XLOCB(19,BOFP,CBGT,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1648 { "bnglr-", XLOCB(19,BOFM4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1649 { "bnglr+", XLOCB(19,BOFP4,CBGT,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1650 { "bngr", XLOCB(19,BOF,CBGT,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
1651 { "bnglrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1652 { "bnglrl-", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1653 { "bnglrl+", XLOCB(19,BOFP,CBGT,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1654 { "bnglrl-", XLOCB(19,BOFM4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1655 { "bnglrl+", XLOCB(19,BOFP4,CBGT,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1656 { "bngrl", XLOCB(19,BOF,CBGT,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
1657 { "bnelr", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1658 { "bnelr-", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1659 { "bnelr+", XLOCB(19,BOFP,CBEQ,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1660 { "bnelr-", XLOCB(19,BOFM4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1661 { "bnelr+", XLOCB(19,BOFP4,CBEQ,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1662 { "bner", XLOCB(19,BOF,CBEQ,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
1663 { "bnelrl", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1664 { "bnelrl-", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1665 { "bnelrl+", XLOCB(19,BOFP,CBEQ,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1666 { "bnelrl-", XLOCB(19,BOFM4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1667 { "bnelrl+", XLOCB(19,BOFP4,CBEQ,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1668 { "bnerl", XLOCB(19,BOF,CBEQ,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
1669 { "bnslr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1670 { "bnslr-", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1671 { "bnslr+", XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1672 { "bnslr-", XLOCB(19,BOFM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1673 { "bnslr+", XLOCB(19,BOFP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1674 { "bnsr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PWRCOM, { CR } },
1675 { "bnslrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1676 { "bnslrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1677 { "bnslrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1678 { "bnslrl-", XLOCB(19,BOFM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1679 { "bnslrl+", XLOCB(19,BOFP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1680 { "bnsrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PWRCOM, { CR } },
1681 { "bnulr", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1682 { "bnulr-", XLOCB(19,BOF,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1683 { "bnulr+", XLOCB(19,BOFP,CBSO,16,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1684 { "bnulr-", XLOCB(19,BOFM4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1685 { "bnulr+", XLOCB(19,BOFP4,CBSO,16,0), XLBOCBBB_MASK, POWER4, { CR } },
1686 { "bnulrl", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1687 { "bnulrl-", XLOCB(19,BOF,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1688 { "bnulrl+", XLOCB(19,BOFP,CBSO,16,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1689 { "bnulrl-", XLOCB(19,BOFM4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1690 { "bnulrl+", XLOCB(19,BOFP4,CBSO,16,1), XLBOCBBB_MASK, POWER4, { CR } },
1691 { "btlr", XLO(19,BOT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
1692 { "btlr-", XLO(19,BOT,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
1693 { "btlr+", XLO(19,BOTP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
1694 { "bbtr", XLO(19,BOT,16,0), XLBOBB_MASK, PWRCOM, { BI } },
1695 { "btlrl", XLO(19,BOT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
1696 { "btlrl-", XLO(19,BOT,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
1697 { "btlrl+", XLO(19,BOTP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
1698 { "bbtrl", XLO(19,BOT,16,1), XLBOBB_MASK, PWRCOM, { BI } },
1699 { "bflr", XLO(19,BOF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
1700 { "bflr-", XLO(19,BOF,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
1701 { "bflr+", XLO(19,BOFP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
1702 { "bflrl", XLO(19,BOF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
1703 { "bflrl-", XLO(19,BOF,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
1704 { "bflrl+", XLO(19,BOFP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
1705 { "bflrl-", XLO(19,BOFM4,16,1), XLBOBB_MASK, POWER4, { BI } },
1706 { "bflrl+", XLO(19,BOFP4,16,1), XLBOBB_MASK, POWER4, { BI } },
1707 { "bdnztlr", XLO(19,BODNZT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
1708 { "bdnztlr-",XLO(19,BODNZT,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
1709 { "bdnztlr+",XLO(19,BODNZTP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
1710 { "bdnztlrl",XLO(19,BODNZT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
1711 { "bdnztlrl-",XLO(19,BODNZT,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
1712 { "bdnztlrl+",XLO(19,BODNZTP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
1713 { "bdnzflr", XLO(19,BODNZF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
1714 { "bdnzflr-",XLO(19,BODNZF,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
1715 { "bdnzflr+",XLO(19,BODNZFP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
1716 { "bdnzflrl",XLO(19,BODNZF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
1717 { "bdnzflrl-",XLO(19,BODNZF,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
1718 { "bdnzflrl+",XLO(19,BODNZFP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
1719 { "bdztlr", XLO(19,BODZT,16,0), XLBOBB_MASK, PPCCOM, { BI } },
1720 { "bdztlr-", XLO(19,BODZT,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
1721 { "bdztlr+", XLO(19,BODZTP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
1722 { "bdztlrl", XLO(19,BODZT,16,1), XLBOBB_MASK, PPCCOM, { BI } },
1723 { "bdztlrl-",XLO(19,BODZT,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
1724 { "bdztlrl+",XLO(19,BODZTP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
1725 { "bdzflr", XLO(19,BODZF,16,0), XLBOBB_MASK, PPCCOM, { BI } },
1726 { "bdzflr-", XLO(19,BODZF,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
1727 { "bdzflr+", XLO(19,BODZFP,16,0), XLBOBB_MASK, NOPOWER4, { BI } },
1728 { "bdzflrl", XLO(19,BODZF,16,1), XLBOBB_MASK, PPCCOM, { BI } },
1729 { "bdzflrl-",XLO(19,BODZF,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
1730 { "bdzflrl+",XLO(19,BODZFP,16,1), XLBOBB_MASK, NOPOWER4, { BI } },
1731 { "bclr", XLLK(19,16,0), XLYBB_MASK, PPCCOM, { BO, BI } },
1732 { "bclrl", XLLK(19,16,1), XLYBB_MASK, PPCCOM, { BO, BI } },
1733 { "bclr+", XLYLK(19,16,1,0), XLYBB_MASK, PPCCOM, { BOE, BI } },
1734 { "bclrl+", XLYLK(19,16,1,1), XLYBB_MASK, PPCCOM, { BOE, BI } },
1735 { "bclr-", XLYLK(19,16,0,0), XLYBB_MASK, PPCCOM, { BOE, BI } },
1736 { "bclrl-", XLYLK(19,16,0,1), XLYBB_MASK, PPCCOM, { BOE, BI } },
1737 { "bcr", XLLK(19,16,0), XLBB_MASK, PWRCOM, { BO, BI } },
1738 { "bcrl", XLLK(19,16,1), XLBB_MASK, PWRCOM, { BO, BI } },
1739
1740 { "crnot", XL(19,33), XL_MASK, PPCCOM, { BT, BA, BBA } },
1741 { "crnor", XL(19,33), XL_MASK, COM, { BT, BA, BB } },
1742 // XXX
1743 { "rfmci", X(19,38), 0xffffffff, PPCRFMCI, { 0 } },
1744
1745
1746 { "rfi", XL(19,50), 0xffffffff, COM, { 0 } },
1747
1748 { "crandc", XL(19,129), XL_MASK, COM, { BT, BA, BB } },
1749
1750 { "isync", XL(19,150), 0xffffffff, PPCCOM, { 0 } },
1751
1752 { "crclr", XL(19,193), XL_MASK, PPCCOM, { BT, BAT, BBA } },
1753 { "crxor", XL(19,193), XL_MASK, COM, { BT, BA, BB } },
1754
1755 { "crnand", XL(19,225), XL_MASK, COM, { BT, BA, BB } },
1756
1757 { "crand", XL(19,257), XL_MASK, COM, { BT, BA, BB } },
1758
1759 { "crset", XL(19,289), XL_MASK, PPCCOM, { BT, BAT, BBA } },
1760 { "creqv", XL(19,289), XL_MASK, COM, { BT, BA, BB } },
1761
1762 { "crorc", XL(19,417), XL_MASK, COM, { BT, BA, BB } },
1763
1764 { "crmove", XL(19,449), XL_MASK, PPCCOM, { BT, BA, BBA } },
1765 { "cror", XL(19,449), XL_MASK, COM, { BT, BA, BB } },
1766
1767 { "bctr", XLO(19,BOU,528,0), XLBOBIBB_MASK, COM, { 0 } },
1768 { "bctrl", XLO(19,BOU,528,1), XLBOBIBB_MASK, COM, { 0 } },
1769 { "bltctr", XLOCB(19,BOT,CBLT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1770 { "bltctr-", XLOCB(19,BOT,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1771 { "bltctr+", XLOCB(19,BOTP,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1772 { "bltctr-", XLOCB(19,BOTM4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1773 { "bltctr+", XLOCB(19,BOTP4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1774 { "bltctrl", XLOCB(19,BOT,CBLT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1775 { "bltctrl-",XLOCB(19,BOT,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1776 { "bltctrl+",XLOCB(19,BOTP,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1777 { "bltctrl-",XLOCB(19,BOTM4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1778 { "bltctrl+",XLOCB(19,BOTP4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1779 { "bgtctr", XLOCB(19,BOT,CBGT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1780 { "bgtctr-", XLOCB(19,BOT,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1781 { "bgtctr+", XLOCB(19,BOTP,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1782 { "bgtctr-", XLOCB(19,BOTM4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1783 { "bgtctr+", XLOCB(19,BOTP4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1784 { "bgtctrl", XLOCB(19,BOT,CBGT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1785 { "bgtctrl-",XLOCB(19,BOT,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1786 { "bgtctrl+",XLOCB(19,BOTP,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1787 { "bgtctrl-",XLOCB(19,BOTM4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1788 { "bgtctrl+",XLOCB(19,BOTP4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1789 { "beqctr", XLOCB(19,BOT,CBEQ,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1790 { "beqctr-", XLOCB(19,BOT,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1791 { "beqctr+", XLOCB(19,BOTP,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1792 { "beqctr-", XLOCB(19,BOTM4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1793 { "beqctr+", XLOCB(19,BOTP4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1794 { "beqctrl", XLOCB(19,BOT,CBEQ,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1795 { "beqctrl-",XLOCB(19,BOT,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1796 { "beqctrl+",XLOCB(19,BOTP,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1797 { "beqctrl-",XLOCB(19,BOTM4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1798 { "beqctrl+",XLOCB(19,BOTP4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1799 { "bsoctr", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1800 { "bsoctr-", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1801 { "bsoctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1802 { "bsoctr-", XLOCB(19,BOTM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1803 { "bsoctr+", XLOCB(19,BOTP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1804 { "bsoctrl", XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1805 { "bsoctrl-",XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1806 { "bsoctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1807 { "bsoctrl-",XLOCB(19,BOTM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1808 { "bsoctrl+",XLOCB(19,BOTP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1809 { "bunctr", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1810 { "bunctr-", XLOCB(19,BOT,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1811 { "bunctr+", XLOCB(19,BOTP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1812 { "bunctr-", XLOCB(19,BOTM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1813 { "bunctr+", XLOCB(19,BOTP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1814 { "bunctrl", XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1815 { "bunctrl-",XLOCB(19,BOT,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1816 { "bunctrl+",XLOCB(19,BOTP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1817 { "bunctrl-",XLOCB(19,BOTM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1818 { "bunctrl+",XLOCB(19,BOTP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1819 { "bgectr", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1820 { "bgectr-", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1821 { "bgectr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1822 { "bgectr-", XLOCB(19,BOFM4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1823 { "bgectr+", XLOCB(19,BOFP4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1824 { "bgectrl", XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1825 { "bgectrl-",XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1826 { "bgectrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1827 { "bgectrl-",XLOCB(19,BOFM4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1828 { "bgectrl+",XLOCB(19,BOFP4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1829 { "bnlctr", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1830 { "bnlctr-", XLOCB(19,BOF,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1831 { "bnlctr+", XLOCB(19,BOFP,CBLT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1832 { "bnlctr-", XLOCB(19,BOFM4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1833 { "bnlctr+", XLOCB(19,BOFP4,CBLT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1834 { "bnlctrl", XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1835 { "bnlctrl-",XLOCB(19,BOF,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1836 { "bnlctrl+",XLOCB(19,BOFP,CBLT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1837 { "bnlctrl-",XLOCB(19,BOFM4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1838 { "bnlctrl+",XLOCB(19,BOFP4,CBLT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1839 { "blectr", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1840 { "blectr-", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1841 { "blectr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1842 { "blectr-", XLOCB(19,BOFM4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1843 { "blectr+", XLOCB(19,BOFP4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1844 { "blectrl", XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1845 { "blectrl-",XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1846 { "blectrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1847 { "blectrl-",XLOCB(19,BOFM4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1848 { "blectrl+",XLOCB(19,BOFP4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1849 { "bngctr", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1850 { "bngctr-", XLOCB(19,BOF,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1851 { "bngctr+", XLOCB(19,BOFP,CBGT,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1852 { "bngctr-", XLOCB(19,BOFM4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1853 { "bngctr+", XLOCB(19,BOFP4,CBGT,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1854 { "bngctrl", XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1855 { "bngctrl-",XLOCB(19,BOF,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1856 { "bngctrl+",XLOCB(19,BOFP,CBGT,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1857 { "bngctrl-",XLOCB(19,BOFM4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1858 { "bngctrl+",XLOCB(19,BOFP4,CBGT,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1859 { "bnectr", XLOCB(19,BOF,CBEQ,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1860 { "bnectr-", XLOCB(19,BOF,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1861 { "bnectr+", XLOCB(19,BOFP,CBEQ,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1862 { "bnectr-", XLOCB(19,BOFM4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1863 { "bnectr+", XLOCB(19,BOFP4,CBEQ,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1864 { "bnectrl", XLOCB(19,BOF,CBEQ,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1865 { "bnectrl-",XLOCB(19,BOF,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1866 { "bnectrl+",XLOCB(19,BOFP,CBEQ,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1867 { "bnectrl-",XLOCB(19,BOFM4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1868 { "bnectrl+",XLOCB(19,BOFP4,CBEQ,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1869 { "bnsctr", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1870 { "bnsctr-", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1871 { "bnsctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1872 { "bnsctr-", XLOCB(19,BOFM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1873 { "bnsctr+", XLOCB(19,BOFP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1874 { "bnsctrl", XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1875 { "bnsctrl-",XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1876 { "bnsctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1877 { "bnsctrl-",XLOCB(19,BOFM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1878 { "bnsctrl+",XLOCB(19,BOFP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1879 { "bnuctr", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, PPCCOM, { CR } },
1880 { "bnuctr-", XLOCB(19,BOF,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1881 { "bnuctr+", XLOCB(19,BOFP,CBSO,528,0), XLBOCBBB_MASK, NOPOWER4, { CR } },
1882 { "bnuctr-", XLOCB(19,BOFM4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1883 { "bnuctr+", XLOCB(19,BOFP4,CBSO,528,0), XLBOCBBB_MASK, POWER4, { CR } },
1884 { "bnuctrl", XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, PPCCOM, { CR } },
1885 { "bnuctrl-",XLOCB(19,BOF,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1886 { "bnuctrl+",XLOCB(19,BOFP,CBSO,528,1), XLBOCBBB_MASK, NOPOWER4, { CR } },
1887 { "bnuctrl-",XLOCB(19,BOFM4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1888 { "bnuctrl+",XLOCB(19,BOFP4,CBSO,528,1), XLBOCBBB_MASK, POWER4, { CR } },
1889 { "btctr", XLO(19,BOT,528,0), XLBOBB_MASK, PPCCOM, { BI } },
1890 { "btctr-", XLO(19,BOT,528,0), XLBOBB_MASK, NOPOWER4, { BI } },
1891 { "btctr+", XLO(19,BOTP,528,0), XLBOBB_MASK, NOPOWER4, { BI } },
1892 { "btctr-", XLO(19,BOTM4,528,0), XLBOBB_MASK, POWER4, { BI } },
1893 { "btctr+", XLO(19,BOTP4,528,0), XLBOBB_MASK, POWER4, { BI } },
1894 { "btctrl", XLO(19,BOT,528,1), XLBOBB_MASK, PPCCOM, { BI } },
1895 { "btctrl-", XLO(19,BOT,528,1), XLBOBB_MASK, NOPOWER4, { BI } },
1896 { "btctrl+", XLO(19,BOTP,528,1), XLBOBB_MASK, NOPOWER4, { BI } },
1897 { "btctrl-", XLO(19,BOTM4,528,1), XLBOBB_MASK, POWER4, { BI } },
1898 { "btctrl+", XLO(19,BOTP4,528,1), XLBOBB_MASK, POWER4, { BI } },
1899 { "bfctr", XLO(19,BOF,528,0), XLBOBB_MASK, PPCCOM, { BI } },
1900 { "bfctr-", XLO(19,BOF,528,0), XLBOBB_MASK, NOPOWER4, { BI } },
1901 { "bfctr+", XLO(19,BOFP,528,0), XLBOBB_MASK, NOPOWER4, { BI } },
1902 { "bfctr-", XLO(19,BOFM4,528,0), XLBOBB_MASK, POWER4, { BI } },
1903 { "bfctr+", XLO(19,BOFP4,528,0), XLBOBB_MASK, POWER4, { BI } },
1904 { "bfctrl", XLO(19,BOF,528,1), XLBOBB_MASK, PPCCOM, { BI } },
1905 { "bfctrl-", XLO(19,BOF,528,1), XLBOBB_MASK, NOPOWER4, { BI } },
1906 { "bfctrl+", XLO(19,BOFP,528,1), XLBOBB_MASK, NOPOWER4, { BI } },
1907 { "bfctrl-", XLO(19,BOFM4,528,1), XLBOBB_MASK, POWER4, { BI } },
1908 { "bfctrl+", XLO(19,BOFP4,528,1), XLBOBB_MASK, POWER4, { BI } },
1909 { "bcctr", XLLK(19,528,0), XLYBB_MASK, PPCCOM, { BO, BI } },
1910 { "bcctr-", XLYLK(19,528,0,0), XLYBB_MASK, PPCCOM, { BOE, BI } },
1911 { "bcctr+", XLYLK(19,528,1,0), XLYBB_MASK, PPCCOM, { BOE, BI } },
1912 { "bcctrl", XLLK(19,528,1), XLYBB_MASK, PPCCOM, { BO, BI } },
1913 { "bcctrl-", XLYLK(19,528,0,1), XLYBB_MASK, PPCCOM, { BOE, BI } },
1914 { "bcctrl+", XLYLK(19,528,1,1), XLYBB_MASK, PPCCOM, { BOE, BI } },
1915 { "bcc", XLLK(19,528,0), XLBB_MASK, PWRCOM, { BO, BI } },
1916 { "bccl", XLLK(19,528,1), XLBB_MASK, PWRCOM, { BO, BI } },
1917 { "bcctre", XLLK(19,529,0), XLYBB_MASK, BOOKE64, { BO, BI } },
1918 { "bcctrel", XLLK(19,529,1), XLYBB_MASK, BOOKE64, { BO, BI } },
1919
1920 { "rlwimi", M(20,0), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
1921
1922 { "rlwimi.", M(20,1), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
1923
1924 { "rotlwi", MME(21,31,0), MMBME_MASK, PPCCOM, { RA, RS, SH } },
1925 { "clrlwi", MME(21,31,0), MSHME_MASK, PPCCOM, { RA, RS, MB } },
1926 { "rlwinm", M(21,0), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
1927 { "rotlwi.", MME(21,31,1), MMBME_MASK, PPCCOM, { RA,RS,SH } },
1928 { "clrlwi.", MME(21,31,1), MSHME_MASK, PPCCOM, { RA, RS, MB } },
1929 { "rlwinm.", M(21,1), M_MASK, PPCCOM, { RA,RS,SH,MBE,ME } },
1930
1931 { "rotlw", MME(23,31,0), MMBME_MASK, PPCCOM, { RA, RS, RB } },
1932 { "rlwnm", M(23,0), M_MASK, PPCCOM, { RA,RS,RB,MBE,ME } },
1933 { "rotlw.", MME(23,31,1), MMBME_MASK, PPCCOM, { RA, RS, RB } },
1934 { "rlwnm.", M(23,1), M_MASK, PPCCOM, { RA,RS,RB,MBE,ME } },
1935
1936 { "nop", OP(24), 0xffffffff, PPCCOM, { 0 } },
1937 { "ori", OP(24), OP_MASK, PPCCOM, { RA, RS, UI } },
1938
1939 { "oris", OP(25), OP_MASK, PPCCOM, { RA, RS, UI } },
1940
1941 { "xori", OP(26), OP_MASK, PPCCOM, { RA, RS, UI } },
1942
1943 { "xoris", OP(27), OP_MASK, PPCCOM, { RA, RS, UI } },
1944
1945 { "andi.", OP(28), OP_MASK, PPCCOM, { RA, RS, UI } },
1946
1947 { "andis.", OP(29), OP_MASK, PPCCOM, { RA, RS, UI } },
1948
1949 { "cmpw", XCMPL(31,0,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } },
1950 { "cmp", X(31,0), XCMP_MASK, PPCONLY, { BF, L, RA, RB } },
1951
1952 { "twlgt", XTO(31,4,TOLGT), XTO_MASK, PPCCOM, { RA, RB } },
1953 { "twllt", XTO(31,4,TOLLT), XTO_MASK, PPCCOM, { RA, RB } },
1954 { "tweq", XTO(31,4,TOEQ), XTO_MASK, PPCCOM, { RA, RB } },
1955 { "twlge", XTO(31,4,TOLGE), XTO_MASK, PPCCOM, { RA, RB } },
1956 { "twlnl", XTO(31,4,TOLNL), XTO_MASK, PPCCOM, { RA, RB } },
1957 { "twlle", XTO(31,4,TOLLE), XTO_MASK, PPCCOM, { RA, RB } },
1958 { "twlng", XTO(31,4,TOLNG), XTO_MASK, PPCCOM, { RA, RB } },
1959 { "twgt", XTO(31,4,TOGT), XTO_MASK, PPCCOM, { RA, RB } },
1960 { "twge", XTO(31,4,TOGE), XTO_MASK, PPCCOM, { RA, RB } },
1961 { "twnl", XTO(31,4,TONL), XTO_MASK, PPCCOM, { RA, RB } },
1962 { "twlt", XTO(31,4,TOLT), XTO_MASK, PPCCOM, { RA, RB } },
1963 { "twle", XTO(31,4,TOLE), XTO_MASK, PPCCOM, { RA, RB } },
1964 { "twng", XTO(31,4,TONG), XTO_MASK, PPCCOM, { RA, RB } },
1965 { "twne", XTO(31,4,TONE), XTO_MASK, PPCCOM, { RA, RB } },
1966 { "trap", XTO(31,4,TOU), 0xffffffff, PPCCOM, { 0 } },
1967 { "tw", X(31,4), X_MASK, PPCCOM, { TO, RA, RB } },
1968
1969 { "subfc", XO(31,8,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
1970 { "subc", XO(31,8,0,0), XO_MASK, PPC, { RT, RB, RA } },
1971 { "subfc.", XO(31,8,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
1972 { "subc.", XO(31,8,0,1), XO_MASK, PPCCOM, { RT, RB, RA } },
1973 { "subfco", XO(31,8,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
1974 { "subco", XO(31,8,1,0), XO_MASK, PPC, { RT, RB, RA } },
1975 { "subfco.", XO(31,8,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
1976 { "subco.", XO(31,8,1,1), XO_MASK, PPC, { RT, RB, RA } },
1977
1978 { "addc", XO(31,10,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
1979 { "addc.", XO(31,10,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
1980 { "addco", XO(31,10,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
1981 { "addco.", XO(31,10,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
1982
1983 { "mulhwu", XO(31,11,0,0), XO_MASK, PPC, { RT, RA, RB } },
1984 { "mulhwu.", XO(31,11,0,1), XO_MASK, PPC, { RT, RA, RB } },
1985
1986 { "mfcr", X(31,19), XRARB_MASK, COM, { RT } },
1987
1988 { "lwarx", X(31,20), X_MASK, PPC, { RT, RA, RB } },
1989
1990 { "lwzx", X(31,23), X_MASK, PPCCOM, { RT, RA, RB } },
1991
1992 { "slw", XRC(31,24,0), X_MASK, PPCCOM, { RA, RS, RB } },
1993 { "slw.", XRC(31,24,1), X_MASK, PPCCOM, { RA, RS, RB } },
1994
1995 { "cntlzw", XRC(31,26,0), XRB_MASK, PPCCOM, { RA, RS } },
1996 { "cntlzw.", XRC(31,26,1), XRB_MASK, PPCCOM, { RA, RS } },
1997
1998 { "and", XRC(31,28,0), X_MASK, COM, { RA, RS, RB } },
1999 { "and.", XRC(31,28,1), X_MASK, COM, { RA, RS, RB } },
2000
2001 { "cmplw", XCMPL(31,32,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } },
2002 { "cmpl", X(31,32), XCMP_MASK, PPCONLY, { BF, L, RA, RB } },
2003
2004 { "subf", XO(31,40,0,0), XO_MASK, PPC, { RT, RA, RB } },
2005 { "sub", XO(31,40,0,0), XO_MASK, PPC, { RT, RB, RA } },
2006 { "subf.", XO(31,40,0,1), XO_MASK, PPC, { RT, RA, RB } },
2007 { "sub.", XO(31,40,0,1), XO_MASK, PPC, { RT, RB, RA } },
2008 { "subfo", XO(31,40,1,0), XO_MASK, PPC, { RT, RA, RB } },
2009 { "subo", XO(31,40,1,0), XO_MASK, PPC, { RT, RB, RA } },
2010 { "subfo.", XO(31,40,1,1), XO_MASK, PPC, { RT, RA, RB } },
2011 { "subo.", XO(31,40,1,1), XO_MASK, PPC, { RT, RB, RA } },
2012
2013 { "ldux", X(31,53), X_MASK, PPC64, { RT, RAL, RB } },
2014
2015 { "dcbst", X(31,54), XRT_MASK, PPC, { RA, RB } },
2016
2017 { "lwzux", X(31,55), X_MASK, PPCCOM, { RT, RAL, RB } },
2018
2019 { "andc", XRC(31,60,0), X_MASK, COM, { RA, RS, RB } },
2020 { "andc.", XRC(31,60,1), X_MASK, COM, { RA, RS, RB } },
2021
2022 { "mulhw", XO(31,75,0,0), XO_MASK, PPC, { RT, RA, RB } },
2023 { "mulhw.", XO(31,75,0,1), XO_MASK, PPC, { RT, RA, RB } },
2024
2025 { "mfmsr", X(31,83), XRARB_MASK, COM, { RT } },
2026
2027 { "dcbf", X(31,86), XRT_MASK, PPC, { RA, RB } },
2028
2029 { "lbzx", X(31,87), X_MASK, COM, { RT, RA, RB } },
2030
2031 { "neg", XO(31,104,0,0), XORB_MASK, COM, { RT, RA } },
2032 { "neg.", XO(31,104,0,1), XORB_MASK, COM, { RT, RA } },
2033 { "nego", XO(31,104,1,0), XORB_MASK, COM, { RT, RA } },
2034 { "nego.", XO(31,104,1,1), XORB_MASK, COM, { RT, RA } },
2035
2036 { "lbzux", X(31,119), X_MASK, COM, { RT, RAL, RB } },
2037
2038 { "not", XRC(31,124,0), X_MASK, COM, { RA, RS, RBS } },
2039 { "nor", XRC(31,124,0), X_MASK, COM, { RA, RS, RB } },
2040 { "not.", XRC(31,124,1), X_MASK, COM, { RA, RS, RBS } },
2041 { "nor.", XRC(31,124,1), X_MASK, COM, { RA, RS, RB } },
2042
2043 { "subfe", XO(31,136,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
2044 { "subfe.", XO(31,136,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
2045 { "subfeo", XO(31,136,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
2046 { "subfeo.", XO(31,136,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
2047
2048 { "adde", XO(31,138,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
2049 { "adde.", XO(31,138,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
2050 { "addeo", XO(31,138,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
2051 { "addeo.", XO(31,138,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
2052
2053 { "mtcr", XFXM(31,144,0xff), XFXFXM_MASK|FXM_MASK, COM, { RS }},
2054 { "mtcrf", X(31,144), XFXFXM_MASK, COM, { FXM, RS } },
2055
2056 { "mtmsr", X(31,146), XRARB_MASK, COM, { RS } },
2057
2058 { "stwcx.", XRC(31,150,1), X_MASK, PPC, { RS, RA, RB } },
2059
2060 { "stwx", X(31,151), X_MASK, PPCCOM, { RS, RA, RB } },
2061
2062 { "stwux", X(31,183), X_MASK, PPCCOM, { RS, RAS, RB } },
2063
2064 { "subfze", XO(31,200,0,0), XORB_MASK, PPCCOM, { RT, RA } },
2065 { "subfze.", XO(31,200,0,1), XORB_MASK, PPCCOM, { RT, RA } },
2066 { "subfzeo", XO(31,200,1,0), XORB_MASK, PPCCOM, { RT, RA } },
2067 { "subfzeo.",XO(31,200,1,1), XORB_MASK, PPCCOM, { RT, RA } },
2068
2069 { "addze", XO(31,202,0,0), XORB_MASK, PPCCOM, { RT, RA } },
2070 { "addze.", XO(31,202,0,1), XORB_MASK, PPCCOM, { RT, RA } },
2071 { "addzeo", XO(31,202,1,0), XORB_MASK, PPCCOM, { RT, RA } },
2072 { "addzeo.", XO(31,202,1,1), XORB_MASK, PPCCOM, { RT, RA } },
2073
2074 { "mtsr", X(31,210), XRB_MASK|(1<<20), COM32, { SR, RS } },
2075
2076 { "stdcx.", XRC(31,214,1), X_MASK, PPC64, { RS, RA, RB } },
2077
2078 { "stbx", X(31,215), X_MASK, COM, { RS, RA, RB } },
2079
2080 { "subfme", XO(31,232,0,0), XORB_MASK, PPCCOM, { RT, RA } },
2081 { "subfme.", XO(31,232,0,1), XORB_MASK, PPCCOM, { RT, RA } },
2082 { "subfmeo", XO(31,232,1,0), XORB_MASK, PPCCOM, { RT, RA } },
2083 { "subfmeo.",XO(31,232,1,1), XORB_MASK, PPCCOM, { RT, RA } },
2084
2085 { "addme", XO(31,234,0,0), XORB_MASK, PPCCOM, { RT, RA } },
2086 { "addme.", XO(31,234,0,1), XORB_MASK, PPCCOM, { RT, RA } },
2087 { "addmeo", XO(31,234,1,0), XORB_MASK, PPCCOM, { RT, RA } },
2088 { "addmeo.", XO(31,234,1,1), XORB_MASK, PPCCOM, { RT, RA } },
2089
2090 { "mullw", XO(31,235,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
2091 { "mullw.", XO(31,235,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
2092 { "mullwo", XO(31,235,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
2093 { "mullwo.", XO(31,235,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
2094
2095 { "mtsrin", X(31,242), XRA_MASK, PPC32, { RS, RB } },
2096 { "mtsri", X(31,242), XRA_MASK, POWER32, { RS, RB } },
2097
2098 { "dcbtst", X(31,246), XRT_MASK, PPC, { CT, RA, RB } },
2099
2100 { "stbux", X(31,247), X_MASK, COM, { RS, RAS, RB } },
2101
2102 { "add", XO(31,266,0,0), XO_MASK, PPCCOM, { RT, RA, RB } },
2103 { "add.", XO(31,266,0,1), XO_MASK, PPCCOM, { RT, RA, RB } },
2104 { "addo", XO(31,266,1,0), XO_MASK, PPCCOM, { RT, RA, RB } },
2105 { "addo.", XO(31,266,1,1), XO_MASK, PPCCOM, { RT, RA, RB } },
2106
2107 { "dcbt", X(31,278), XRT_MASK, PPC, { CT, RA, RB } },
2108
2109 { "lhzx", X(31,279), X_MASK, COM, { RT, RA, RB } },
2110
2111 { "eqv", XRC(31,284,0), X_MASK, COM, { RA, RS, RB } },
2112 { "eqv.", XRC(31,284,1), X_MASK, COM, { RA, RS, RB } },
2113
2114 { "tlbie", X(31,306), XRTLRA_MASK, PPC, { RB, L } },
2115
2116 { "eciwx", X(31,310), X_MASK, PPC, { RT, RA, RB } },
2117
2118 { "lhzux", X(31,311), X_MASK, COM, { RT, RAL, RB } },
2119
2120 { "xor", XRC(31,316,0), X_MASK, COM, { RA, RS, RB } },
2121 { "xor.", XRC(31,316,1), X_MASK, COM, { RA, RS, RB } },
2122
2123 { "mfxer", XSPR(31,339,1), XSPR_MASK, COM, { RT } },
2124 { "mfrtcu", XSPR(31,339,4), XSPR_MASK, COM, { RT } },
2125 { "mfrtcl", XSPR(31,339,5), XSPR_MASK, COM, { RT } },
2126 { "mfdec", XSPR(31,339,6), XSPR_MASK, MFDEC1, { RT } },
2127 { "mflr", XSPR(31,339,8), XSPR_MASK, COM, { RT } },
2128 { "mfctr", XSPR(31,339,9), XSPR_MASK, COM, { RT } },
2129 { "mfdsisr", XSPR(31,339,18), XSPR_MASK, COM, { RT } },
2130 { "mfdar", XSPR(31,339,19), XSPR_MASK, COM, { RT } },
2131 { "mfdec", XSPR(31,339,22), XSPR_MASK, MFDEC2, { RT } },
2132 { "mfsdr1", XSPR(31,339,25), XSPR_MASK, COM, { RT } },
2133 { "mfsrr0", XSPR(31,339,26), XSPR_MASK, COM, { RT } },
2134 { "mfsrr1", XSPR(31,339,27), XSPR_MASK, COM, { RT } },
2135 { "mfvrsave", XSPR(31,339,256), XSPR_MASK, PPCVEC, { RT } },
2136 { "mfsprg", XSPR(31,339,272), XSPRG_MASK, PPC, { RT, SPRG } },
2137 { "mfsprg0", XSPR(31,339,272), XSPR_MASK, PPC, { RT } },
2138 { "mfsprg1", XSPR(31,339,273), XSPR_MASK, PPC, { RT } },
2139 { "mfsprg2", XSPR(31,339,274), XSPR_MASK, PPC, { RT } },
2140 { "mfsprg3", XSPR(31,339,275), XSPR_MASK, PPC, { RT } },
2141 { "mfasr", XSPR(31,339,280), XSPR_MASK, PPC64, { RT } },
2142 { "mfear", XSPR(31,339,282), XSPR_MASK, PPC, { RT } },
2143 { "mfpvr", XSPR(31,339,287), XSPR_MASK, PPC, { RT } },
2144 { "mfibatu", XSPR(31,339,528), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
2145 { "mfibatl", XSPR(31,339,529), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
2146 { "mfdbatu", XSPR(31,339,536), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
2147 { "mfdbatl", XSPR(31,339,537), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
2148 { "mfummcr0", XSPR(31,339,936), XSPR_MASK, PPC750, { RT } },
2149 { "mfupmc1", XSPR(31,339,937), XSPR_MASK, PPC750, { RT } },
2150 { "mfupmc2", XSPR(31,339,938), XSPR_MASK, PPC750, { RT } },
2151 { "mfusia", XSPR(31,339,939), XSPR_MASK, PPC750, { RT } },
2152 { "mfummcr1", XSPR(31,339,940), XSPR_MASK, PPC750, { RT } },
2153 { "mfupmc3", XSPR(31,339,941), XSPR_MASK, PPC750, { RT } },
2154 { "mfupmc4", XSPR(31,339,942), XSPR_MASK, PPC750, { RT } },
2155 { "mfmmcr0", XSPR(31,339,952), XSPR_MASK, PPC750, { RT } },
2156 { "mfpmc1", XSPR(31,339,953), XSPR_MASK, PPC750, { RT } },
2157 { "mfpmc2", XSPR(31,339,954), XSPR_MASK, PPC750, { RT } },
2158 { "mfsia", XSPR(31,339,955), XSPR_MASK, PPC750, { RT } },
2159 { "mfmmcr1", XSPR(31,339,956), XSPR_MASK, PPC750, { RT } },
2160 { "mfpmc3", XSPR(31,339,957), XSPR_MASK, PPC750, { RT } },
2161 { "mfpmc4", XSPR(31,339,958), XSPR_MASK, PPC750, { RT } },
2162 { "mfl2cr", XSPR(31,339,1017), XSPR_MASK, PPC750, { RT } },
2163 { "mfictc", XSPR(31,339,1019), XSPR_MASK, PPC750, { RT } },
2164 { "mfthrm1", XSPR(31,339,1020), XSPR_MASK, PPC750, { RT } },
2165 { "mfthrm2", XSPR(31,339,1021), XSPR_MASK, PPC750, { RT } },
2166 { "mfthrm3", XSPR(31,339,1022), XSPR_MASK, PPC750, { RT } },
2167 { "mfspr", X(31,339), X_MASK, COM, { RT, SPR } },
2168
2169 { "lwax", X(31,341), X_MASK, PPC64, { RT, RA, RB } },
2170
2171 { "dst", XDSS(31,342,0), XDSS_MASK, PPCVEC, { RA, RB, STRM } },
2172 { "dstt", XDSS(31,342,1), XDSS_MASK, PPCVEC, { RA, RB, STRM } },
2173
2174 { "lhax", X(31,343), X_MASK, COM, { RT, RA, RB } },
2175
2176 { "dstst", XDSS(31,374,0), XDSS_MASK, PPCVEC, { RA, RB, STRM } },
2177 { "dststt", XDSS(31,374,1), XDSS_MASK, PPCVEC, { RA, RB, STRM } },
2178
2179 { "tlbia", X(31,370), 0xffffffff, PPC, { 0 } },
2180
2181 { "mftbl", XSPR(31,371,268), XSPR_MASK, CLASSIC, { RT } },
2182 { "mftbu", XSPR(31,371,269), XSPR_MASK, CLASSIC, { RT } },
2183 { "mftb", X(31,371), X_MASK, CLASSIC, { RT, TBR } },
2184
2185 { "lhaux", X(31,375), X_MASK, COM, { RT, RAL, RB } },
2186
2187 { "sthx", X(31,407), X_MASK, COM, { RS, RA, RB } },
2188
2189 { "orc", XRC(31,412,0), X_MASK, COM, { RA, RS, RB } },
2190 { "orc.", XRC(31,412,1), X_MASK, COM, { RA, RS, RB } },
2191
2192 { "ecowx", X(31,438), X_MASK, PPC, { RT, RA, RB } },
2193
2194 { "sthux", X(31,439), X_MASK, COM, { RS, RAS, RB } },
2195
2196 { "mr", XRC(31,444,0), X_MASK, COM, { RA, RS, RBS } },
2197 { "or", XRC(31,444,0), X_MASK, COM, { RA, RS, RB } },
2198 { "mr.", XRC(31,444,1), X_MASK, COM, { RA, RS, RBS } },
2199 { "or.", XRC(31,444,1), X_MASK, COM, { RA, RS, RB } },
2200
2201 { "divwu", XO(31,459,0,0), XO_MASK, PPC, { RT, RA, RB } },
2202 { "divwu.", XO(31,459,0,1), XO_MASK, PPC, { RT, RA, RB } },
2203 { "divwuo", XO(31,459,1,0), XO_MASK, PPC, { RT, RA, RB } },
2204 { "divwuo.", XO(31,459,1,1), XO_MASK, PPC, { RT, RA, RB } },
2205
2206 { "mtxer", XSPR(31,467,1), XSPR_MASK, COM, { RS } },
2207 { "mtlr", XSPR(31,467,8), XSPR_MASK, COM, { RS } },
2208 { "mtctr", XSPR(31,467,9), XSPR_MASK, COM, { RS } },
2209 { "mtdsisr", XSPR(31,467,18), XSPR_MASK, COM, { RS } },
2210 { "mtdar", XSPR(31,467,19), XSPR_MASK, COM, { RS } },
2211 { "mtrtcu", XSPR(31,467,20), XSPR_MASK, COM, { RS } },
2212 { "mtrtcl", XSPR(31,467,21), XSPR_MASK, COM, { RS } },
2213 { "mtdec", XSPR(31,467,22), XSPR_MASK, COM, { RS } },
2214 { "mtsdr1", XSPR(31,467,25), XSPR_MASK, COM, { RS } },
2215 { "mtsrr0", XSPR(31,467,26), XSPR_MASK, COM, { RS } },
2216 { "mtsrr1", XSPR(31,467,27), XSPR_MASK, COM, { RS } },
2217 { "mtvrsave", XSPR(31,467,256), XSPR_MASK, PPCVEC, { RT } },
2218 { "mtsprg", XSPR(31,467,272), XSPRG_MASK,PPC, { SPRG, RS } },
2219 { "mtsprg0", XSPR(31,467,272), XSPR_MASK, PPC, { RT } },
2220 { "mtsprg1", XSPR(31,467,273), XSPR_MASK, PPC, { RT } },
2221 { "mtsprg2", XSPR(31,467,274), XSPR_MASK, PPC, { RT } },
2222 { "mtsprg3", XSPR(31,467,275), XSPR_MASK, PPC, { RT } },
2223 { "mtear", XSPR(31,467,282), XSPR_MASK, PPC, { RS } },
2224 { "mttbl", XSPR(31,467,284), XSPR_MASK, PPC, { RS } },
2225 { "mttbu", XSPR(31,467,285), XSPR_MASK, PPC, { RS } },
2226 { "mtibatu", XSPR(31,467,528), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
2227 { "mtibatl", XSPR(31,467,529), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
2228 { "mtdbatu", XSPR(31,467,536), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
2229 { "mtdbatl", XSPR(31,467,537), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
2230 { "mtummcr0", XSPR(31,467,936), XSPR_MASK, PPC750, { RT } },
2231 { "mtupmc1", XSPR(31,467,937), XSPR_MASK, PPC750, { RT } },
2232 { "mtupmc2", XSPR(31,467,938), XSPR_MASK, PPC750, { RT } },
2233 { "mtusia", XSPR(31,467,939), XSPR_MASK, PPC750, { RT } },
2234 { "mtummcr1", XSPR(31,467,940), XSPR_MASK, PPC750, { RT } },
2235 { "mtupmc3", XSPR(31,467,941), XSPR_MASK, PPC750, { RT } },
2236 { "mtupmc4", XSPR(31,467,942), XSPR_MASK, PPC750, { RT } },
2237 { "mtmmcr0", XSPR(31,467,952), XSPR_MASK, PPC750, { RT } },
2238 { "mtpmc1", XSPR(31,467,953), XSPR_MASK, PPC750, { RT } },
2239 { "mtpmc2", XSPR(31,467,954), XSPR_MASK, PPC750, { RT } },
2240 { "mtsia", XSPR(31,467,955), XSPR_MASK, PPC750, { RT } },
2241 { "mtmmcr1", XSPR(31,467,956), XSPR_MASK, PPC750, { RT } },
2242 { "mtpmc3", XSPR(31,467,957), XSPR_MASK, PPC750, { RT } },
2243 { "mtpmc4", XSPR(31,467,958), XSPR_MASK, PPC750, { RT } },
2244 { "mtl2cr", XSPR(31,467,1017), XSPR_MASK, PPC750, { RT } },
2245 { "mtictc", XSPR(31,467,1019), XSPR_MASK, PPC750, { RT } },
2246 { "mtthrm1", XSPR(31,467,1020), XSPR_MASK, PPC750, { RT } },
2247 { "mtthrm2", XSPR(31,467,1021), XSPR_MASK, PPC750, { RT } },
2248 { "mtthrm3", XSPR(31,467,1022), XSPR_MASK, PPC750, { RT } },
2249 { "mtspr", X(31,467), X_MASK, COM, { SPR, RS } },
2250
2251 { "dcbi", X(31,470), XRT_MASK, PPC, { RA, RB } },
2252
2253 { "nand", XRC(31,476,0), X_MASK, COM, { RA, RS, RB } },
2254 { "nand.", XRC(31,476,1), X_MASK, COM, { RA, RS, RB } },
2255
2256 { "divw", XO(31,491,0,0), XO_MASK, PPC, { RT, RA, RB } },
2257 { "divw.", XO(31,491,0,1), XO_MASK, PPC, { RT, RA, RB } },
2258 { "divwo", XO(31,491,1,0), XO_MASK, PPC, { RT, RA, RB } },
2259 { "divwo.", XO(31,491,1,1), XO_MASK, PPC, { RT, RA, RB } },
2260
2261 { "cli", X(31,502), XRB_MASK, POWER, { RT, RA } },
2262
2263 { "mcrxr", X(31,512), XRARB_MASK|(3<<21), COM, { BF } },
2264
2265 { "lswx", X(31,533), X_MASK, PPCCOM, { RT, RA, RB } },
2266
2267 { "lwbrx", X(31,534), X_MASK, PPCCOM, { RT, RA, RB } },
2268
2269 { "lfsx", X(31,535), X_MASK, COM, { FRT, RA, RB } },
2270
2271 { "srw", XRC(31,536,0), X_MASK, PPCCOM, { RA, RS, RB } },
2272 { "srw.", XRC(31,536,1), X_MASK, PPCCOM, { RA, RS, RB } },
2273
2274 { "tlbsync", X(31,566), 0xffffffff, PPC, { 0 } },
2275
2276 { "lfsux", X(31,567), X_MASK, COM, { FRT, RAS, RB } },
2277
2278 { "mfsr", X(31,595), XRB_MASK|(1<<20), COM32, { RT, SR } },
2279
2280 { "lswi", X(31,597), X_MASK, PPCCOM, { RT, RA, NB } },
2281
2282 { "lwsync", XSYNC(31,598,1), 0xffffffff, PPCONLY, { 0 } },
2283 { "sync", X(31,598), XSYNC_MASK, PPCCOM, { LS } },
2284
2285 { "lfdx", X(31,599), X_MASK, COM, { FRT, RA, RB } },
2286
2287 { "lfdux", X(31,631), X_MASK, COM, { FRT, RAS, RB } },
2288
2289 { "mfsrin", X(31,659), XRA_MASK, PPC32, { RT, RB } },
2290
2291 { "stswx", X(31,661), X_MASK, PPCCOM, { RS, RA, RB } },
2292
2293 { "stwbrx", X(31,662), X_MASK, PPCCOM, { RS, RA, RB } },
2294
2295 { "stfsx", X(31,663), X_MASK, COM, { FRS, RA, RB } },
2296
2297 { "stfsux", X(31,695), X_MASK, COM, { FRS, RAS, RB } },
2298
2299 { "stswi", X(31,725), X_MASK, PPCCOM, { RS, RA, NB } },
2300
2301 { "stfdx", X(31,727), X_MASK, COM, { FRS, RA, RB } },
2302
2303 { "stfdux", X(31,759), X_MASK, COM, { FRS, RAS, RB } },
2304
2305 { "lhbrx", X(31,790), X_MASK, COM, { RT, RA, RB } },
2306
2307 { "sraw", XRC(31,792,0), X_MASK, PPCCOM, { RA, RS, RB } },
2308 { "sraw.", XRC(31,792,1), X_MASK, PPCCOM, { RA, RS, RB } },
2309
2310 { "dss", XDSS(31,822,0), XDSS_MASK, PPCVEC, { STRM } },
2311 { "dssall", XDSS(31,822,1), XDSS_MASK, PPCVEC, { 0 } },
2312
2313 { "srawi", XRC(31,824,0), X_MASK, PPCCOM, { RA, RS, SH } },
2314 { "srawi.", XRC(31,824,1), X_MASK, PPCCOM, { RA, RS, SH } },
2315
2316 { "eieio", X(31,854), 0xffffffff, PPC, { 0 } },
2317
2318 { "sthbrx", X(31,918), X_MASK, COM, { RS, RA, RB } },
2319
2320 { "extsh", XRC(31,922,0), XRB_MASK, PPCCOM, { RA, RS } },
2321 { "extsh.", XRC(31,922,1), XRB_MASK, PPCCOM, { RA, RS } },
2322
2323 { "extsb", XRC(31,954,0), XRB_MASK, PPC, { RA, RS} },
2324 { "extsb.", XRC(31,954,1), XRB_MASK, PPC, { RA, RS} },
2325
2326 { "tlbld", X(31,978), XRTRA_MASK, PPC, { RB } },
2327
2328 { "icbi", X(31,982), XRT_MASK, PPC, { RA, RB } },
2329
2330 { "stfiwx", X(31,983), X_MASK, PPC, { FRS, RA, RB } },
2331
2332 { "tlbli", X(31,1010), XRTRA_MASK, PPC, { RB } },
2333
2334 { "dcbz", X(31,1014), XRT_MASK, PPC, { RA, RB } },
2335 { "dclz", X(31,1014), XRT_MASK, PPC, { RA, RB } },
2336
2337 { "lvebx", X(31, 7), X_MASK, PPCVEC, { VD, RA, RB } },
2338 { "lvehx", X(31, 39), X_MASK, PPCVEC, { VD, RA, RB } },
2339 { "lvewx", X(31, 71), X_MASK, PPCVEC, { VD, RA, RB } },
2340 { "lvsl", X(31, 6), X_MASK, PPCVEC, { VD, RA, RB } },
2341 { "lvsr", X(31, 38), X_MASK, PPCVEC, { VD, RA, RB } },
2342 { "lvx", X(31, 103), X_MASK, PPCVEC, { VD, RA, RB } },
2343 { "lvxl", X(31, 359), X_MASK, PPCVEC, { VD, RA, RB } },
2344 { "stvebx", X(31, 135), X_MASK, PPCVEC, { VS, RA, RB } },
2345 { "stvehx", X(31, 167), X_MASK, PPCVEC, { VS, RA, RB } },
2346 { "stvewx", X(31, 199), X_MASK, PPCVEC, { VS, RA, RB } },
2347 { "stvx", X(31, 231), X_MASK, PPCVEC, { VS, RA, RB } },
2348 { "stvxl", X(31, 487), X_MASK, PPCVEC, { VS, RA, RB } },
2349
2350 { "lwz", OP(32), OP_MASK, PPCCOM, { RT, D, RA } },
2351
2352 { "lwzu", OP(33), OP_MASK, PPCCOM, { RT, D, RAL } },
2353
2354 { "lbz", OP(34), OP_MASK, COM, { RT, D, RA } },
2355
2356 { "lbzu", OP(35), OP_MASK, COM, { RT, D, RAL } },
2357
2358 { "stw", OP(36), OP_MASK, PPCCOM, { RS, D, RA } },
2359
2360 { "stwu", OP(37), OP_MASK, PPCCOM, { RS, D, RAS } },
2361
2362 { "stb", OP(38), OP_MASK, COM, { RS, D, RA } },
2363
2364 { "stbu", OP(39), OP_MASK, COM, { RS, D, RAS } },
2365
2366 { "lhz", OP(40), OP_MASK, COM, { RT, D, RA } },
2367
2368 { "lhzu", OP(41), OP_MASK, COM, { RT, D, RAL } },
2369
2370 { "lha", OP(42), OP_MASK, COM, { RT, D, RA } },
2371
2372 { "lhau", OP(43), OP_MASK, COM, { RT, D, RAL } },
2373
2374 { "sth", OP(44), OP_MASK, COM, { RS, D, RA } },
2375
2376 { "sthu", OP(45), OP_MASK, COM, { RS, D, RAS } },
2377
2378 { "lmw", OP(46), OP_MASK, PPCCOM, { RT, D, RAM } },
2379
2380 { "stmw", OP(47), OP_MASK, PPCCOM, { RS, D, RA } },
2381
2382 { "lfs", OP(48), OP_MASK, COM, { FRT, D, RA } },
2383
2384 { "lfsu", OP(49), OP_MASK, COM, { FRT, D, RAS } },
2385
2386 { "lfd", OP(50), OP_MASK, COM, { FRT, D, RA } },
2387
2388 { "lfdu", OP(51), OP_MASK, COM, { FRT, D, RAS } },
2389
2390 { "stfs", OP(52), OP_MASK, COM, { FRS, D, RA } },
2391
2392 { "stfsu", OP(53), OP_MASK, COM, { FRS, D, RAS } },
2393
2394 { "stfd", OP(54), OP_MASK, COM, { FRS, D, RA } },
2395
2396 { "stfdu", OP(55), OP_MASK, COM, { FRS, D, RAS } },
2397
2398 { "fdivs", A(59,18,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
2399 { "fdivs.", A(59,18,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
2400
2401 { "fsubs", A(59,20,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
2402 { "fsubs.", A(59,20,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
2403
2404 { "fadds", A(59,21,0), AFRC_MASK, PPC, { FRT, FRA, FRB } },
2405 { "fadds.", A(59,21,1), AFRC_MASK, PPC, { FRT, FRA, FRB } },
2406
2407 { "fsqrts", A(59,22,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
2408 { "fsqrts.", A(59,22,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
2409
2410 { "fres", A(59,24,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
2411 { "fres.", A(59,24,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
2412
2413 { "fmuls", A(59,25,0), AFRB_MASK, PPC, { FRT, FRA, FRC } },
2414 { "fmuls.", A(59,25,1), AFRB_MASK, PPC, { FRT, FRA, FRC } },
2415
2416 { "fmsubs", A(59,28,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2417 { "fmsubs.", A(59,28,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2418
2419 { "fmadds", A(59,29,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2420 { "fmadds.", A(59,29,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2421
2422 { "fnmsubs", A(59,30,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2423 { "fnmsubs.",A(59,30,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2424
2425 { "fnmadds", A(59,31,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2426 { "fnmadds.",A(59,31,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2427
2428 { "fcmpu", X(63,0), X_MASK|(3<<21), COM, { BF, FRA, FRB } },
2429
2430 { "frsp", XRC(63,12,0), XRA_MASK, COM, { FRT, FRB } },
2431 { "frsp.", XRC(63,12,1), XRA_MASK, COM, { FRT, FRB } },
2432
2433 { "fctiw", XRC(63,14,0), XRA_MASK, PPCCOM, { FRT, FRB } },
2434 { "fctiw.", XRC(63,14,1), XRA_MASK, PPCCOM, { FRT, FRB } },
2435
2436 { "fctiwz", XRC(63,15,0), XRA_MASK, PPCCOM, { FRT, FRB } },
2437 { "fctiwz.", XRC(63,15,1), XRA_MASK, PPCCOM, { FRT, FRB } },
2438
2439 { "fdiv", A(63,18,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
2440 { "fdiv.", A(63,18,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
2441
2442 { "fsub", A(63,20,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
2443 { "fsub.", A(63,20,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
2444
2445 { "fadd", A(63,21,0), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
2446 { "fadd.", A(63,21,1), AFRC_MASK, PPCCOM, { FRT, FRA, FRB } },
2447
2448 { "fsqrt", A(63,22,0), AFRAFRC_MASK, PPCPWR2, { FRT, FRB } },
2449 { "fsqrt.", A(63,22,1), AFRAFRC_MASK, PPCPWR2, { FRT, FRB } },
2450
2451 { "fsel", A(63,23,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2452 { "fsel.", A(63,23,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
2453
2454 { "fmul", A(63,25,0), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } },
2455 { "fmul.", A(63,25,1), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } },
2456
2457 { "frsqrte", A(63,26,0), AFRAFRC_MASK, PPC, { FRT, FRB } },
2458 { "frsqrte.",A(63,26,1), AFRAFRC_MASK, PPC, { FRT, FRB } },
2459
2460 { "fmsub", A(63,28,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
2461 { "fmsub.", A(63,28,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
2462
2463 { "fmadd", A(63,29,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
2464 { "fmadd.", A(63,29,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
2465
2466 { "fnmsub", A(63,30,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
2467 { "fnmsub.", A(63,30,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
2468
2469 { "fnmadd", A(63,31,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
2470 { "fnmadd.", A(63,31,1), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } },
2471
2472 { "fcmpo", X(63,32), X_MASK|(3<<21), COM, { BF, FRA, FRB } },
2473
2474 { "mtfsb1", XRC(63,38,0), XRARB_MASK, COM, { BT } },
2475 { "mtfsb1.", XRC(63,38,1), XRARB_MASK, COM, { BT } },
2476
2477 { "fneg", XRC(63,40,0), XRA_MASK, COM, { FRT, FRB } },
2478 { "fneg.", XRC(63,40,1), XRA_MASK, COM, { FRT, FRB } },
2479
2480 { "mcrfs", X(63,64), XRB_MASK|(3<<21)|(3<<16), COM, { BF, BFA } },
2481
2482 { "mtfsb0", XRC(63,70,0), XRARB_MASK, COM, { BT } },
2483 { "mtfsb0.", XRC(63,70,1), XRARB_MASK, COM, { BT } },
2484
2485 { "fmr", XRC(63,72,0), XRA_MASK, COM, { FRT, FRB } },
2486 { "fmr.", XRC(63,72,1), XRA_MASK, COM, { FRT, FRB } },
2487
2488 { "mtfsfi", XRC(63,134,0), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } },
2489 { "mtfsfi.", XRC(63,134,1), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } },
2490
2491 { "fnabs", XRC(63,136,0), XRA_MASK, COM, { FRT, FRB } },
2492 { "fnabs.", XRC(63,136,1), XRA_MASK, COM, { FRT, FRB } },
2493
2494 { "fabs", XRC(63,264,0), XRA_MASK, COM, { FRT, FRB } },
2495 { "fabs.", XRC(63,264,1), XRA_MASK, COM, { FRT, FRB } },
2496
2497 { "mffs", XRC(63,583,0), XRARB_MASK, COM, { FRT } },
2498 { "mffs.", XRC(63,583,1), XRARB_MASK, COM, { FRT } },
2499
2500 { "mtfsf", XFL(63,711,0), XFL_MASK, COM, { FLM, FRB } },
2501 { "mtfsf.", XFL(63,711,1), XFL_MASK, COM, { FLM, FRB } },
2502
2503 };
2504
2505 const int powerpc_num_opcodes =
2506 sizeof (powerpc_opcodes) / sizeof (powerpc_opcodes[0]);
2507

  ViewVC Help
Powered by ViewVC 1.1.26