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