Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[POWERPC] Import updated version of ppc disassembly code for xmon

This includes:
* version 1.24 of ppc-dis.c
* version 1.88 of ppc-opc.c
* version 1.23 of ppc.h

I can't vouch for the accuracy etc. of these changes, but it brings
us into line with binutils - and from a cursory test appears to work
fine.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>

authored by

Michael Ellerman and committed by
Paul Mackerras
897f112b 0b8e2e13

+618 -219
+16 -4
arch/powerpc/xmon/ppc-dis.c
··· 1 1 /* ppc-dis.c -- Disassemble PowerPC instructions 2 - Copyright 1994 Free Software Foundation, Inc. 2 + Copyright 1994, 1995, 2000, 2001, 2002, 2003, 2004, 2005, 2006 3 + Free Software Foundation, Inc. 3 4 Written by Ian Lance Taylor, Cygnus Support 4 5 5 6 This file is part of GDB, GAS, and the GNU binutils. ··· 17 16 18 17 You should have received a copy of the GNU General Public License 19 18 along with this file; see the file COPYING. If not, write to the Free 20 - Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 19 + Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ 21 20 21 + #include <asm/cputable.h> 22 22 #include "nonstdio.h" 23 23 #include "ansidecl.h" 24 24 #include "ppc.h" ··· 37 35 38 36 dialect = PPC_OPCODE_PPC | PPC_OPCODE_CLASSIC | PPC_OPCODE_COMMON 39 37 | PPC_OPCODE_64 | PPC_OPCODE_POWER4 | PPC_OPCODE_ALTIVEC; 38 + 39 + if (cpu_has_feature(CPU_FTRS_POWER5)) 40 + dialect |= PPC_OPCODE_POWER5; 41 + 42 + if (cpu_has_feature(CPU_FTRS_CELL)) 43 + dialect |= PPC_OPCODE_CELL | PPC_OPCODE_ALTIVEC; 44 + 45 + if (cpu_has_feature(CPU_FTRS_POWER6)) 46 + dialect |= PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6 | PPC_OPCODE_ALTIVEC; 40 47 41 48 /* Get the major opcode of the instruction. */ 42 49 op = PPC_OP (insn); ··· 131 120 } 132 121 133 122 /* Print the operand as directed by the flags. */ 134 - if ((operand->flags & PPC_OPERAND_GPR) != 0) 123 + if ((operand->flags & PPC_OPERAND_GPR) != 0 124 + || ((operand->flags & PPC_OPERAND_GPR_0) != 0 && value != 0)) 135 125 printf("r%ld", value); 136 126 else if ((operand->flags & PPC_OPERAND_FPR) != 0) 137 127 printf("f%ld", value); ··· 148 136 else 149 137 { 150 138 if (operand->bits == 3) 151 - printf("cr%d", value); 139 + printf("cr%ld", value); 152 140 else 153 141 { 154 142 static const char *cbnames[4] = { "lt", "gt", "eq", "so" };
+575 -203
arch/powerpc/xmon/ppc-opc.c
··· 1 1 /* ppc-opc.c -- PowerPC opcode list 2 - Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003 3 - Free Software Foundation, Inc. 2 + Copyright 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 3 + 2005 Free Software Foundation, Inc. 4 4 Written by Ian Lance Taylor, Cygnus Support 5 5 6 6 This file is part of GDB, GAS, and the GNU binutils. ··· 17 17 18 18 You should have received a copy of the GNU General Public License 19 19 along with this file; see the file COPYING. If not, write to the Free 20 - Software Foundation, 59 Temple Place - Suite 330, Boston, MA 21 - 02111-1307, USA. */ 20 + Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 21 + 02110-1301, USA. */ 22 22 23 23 #include <linux/stddef.h> 24 24 #include "nonstdio.h" ··· 86 86 static long extract_sh6 (unsigned long, int, int *); 87 87 static unsigned long insert_spr (unsigned long, long, int, const char **); 88 88 static long extract_spr (unsigned long, int, int *); 89 + static unsigned long insert_sprg (unsigned long, long, int, const char **); 90 + static long extract_sprg (unsigned long, int, int *); 89 91 static unsigned long insert_tbr (unsigned long, long, int, const char **); 90 92 static long extract_tbr (unsigned long, int, int *); 91 93 static unsigned long insert_ev2 (unsigned long, long, int, const char **); ··· 198 196 #define BOE BO + 1 199 197 { 5, 21, insert_boe, extract_boe, 0 }, 200 198 199 + #define BH BOE + 1 200 + { 2, 11, NULL, NULL, PPC_OPERAND_OPTIONAL }, 201 + 201 202 /* The BT field in an X or XL form instruction. */ 202 - #define BT BOE + 1 203 + #define BT BH + 1 203 204 { 5, 21, NULL, NULL, PPC_OPERAND_CR }, 204 205 205 206 /* The condition register number portion of the BI field in a B form ··· 306 301 #define L FXM4 + 1 307 302 { 1, 21, NULL, NULL, PPC_OPERAND_OPTIONAL }, 308 303 309 - /* The LEV field in a POWER SC form instruction. */ 310 - #define LEV L + 1 304 + /* The LEV field in a POWER SVC form instruction. */ 305 + #define SVC_LEV L + 1 311 306 { 7, 5, NULL, NULL, 0 }, 307 + 308 + /* The LEV field in an SC form instruction. */ 309 + #define LEV SVC_LEV + 1 310 + { 7, 5, NULL, NULL, PPC_OPERAND_OPTIONAL }, 312 311 313 312 /* The LI field in an I form instruction. The lower two bits are 314 313 forced to zero. */ ··· 355 346 356 347 /* The MO field in an mbar instruction. */ 357 348 #define MO MB6 + 1 358 - { 5, 21, NULL, NULL, 0 }, 349 + { 5, 21, NULL, NULL, PPC_OPERAND_OPTIONAL }, 359 350 360 351 /* The NB field in an X form instruction. The value 32 is stored as 361 352 0. */ ··· 373 364 #define RA_MASK (0x1f << 16) 374 365 { 5, 16, NULL, NULL, PPC_OPERAND_GPR }, 375 366 367 + /* As above, but 0 in the RA field means zero, not r0. */ 368 + #define RA0 RA + 1 369 + { 5, 16, NULL, NULL, PPC_OPERAND_GPR_0 }, 370 + 376 371 /* The RA field in the DQ form lq instruction, which has special 377 372 value restrictions. */ 378 - #define RAQ RA + 1 379 - { 5, 16, insert_raq, NULL, PPC_OPERAND_GPR }, 373 + #define RAQ RA0 + 1 374 + { 5, 16, insert_raq, NULL, PPC_OPERAND_GPR_0 }, 380 375 381 376 /* The RA field in a D or X form instruction which is an updating 382 377 load, which means that the RA field may not be zero and may not 383 378 equal the RT field. */ 384 379 #define RAL RAQ + 1 385 - { 5, 16, insert_ral, NULL, PPC_OPERAND_GPR }, 380 + { 5, 16, insert_ral, NULL, PPC_OPERAND_GPR_0 }, 386 381 387 382 /* The RA field in an lmw instruction, which has special value 388 383 restrictions. */ 389 384 #define RAM RAL + 1 390 - { 5, 16, insert_ram, NULL, PPC_OPERAND_GPR }, 385 + { 5, 16, insert_ram, NULL, PPC_OPERAND_GPR_0 }, 391 386 392 387 /* The RA field in a D or X form instruction which is an updating 393 388 store or an updating floating point load, which means that the RA 394 389 field may not be zero. */ 395 390 #define RAS RAM + 1 396 - { 5, 16, insert_ras, NULL, PPC_OPERAND_GPR }, 391 + { 5, 16, insert_ras, NULL, PPC_OPERAND_GPR_0 }, 392 + 393 + /* The RA field of the tlbwe instruction, which is optional. */ 394 + #define RAOPT RAS + 1 395 + { 5, 16, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL }, 397 396 398 397 /* The RB field in an X, XO, M, or MDS form instruction. */ 399 - #define RB RAS + 1 398 + #define RB RAOPT + 1 400 399 #define RB_MASK (0x1f << 11) 401 400 { 5, 11, NULL, NULL, PPC_OPERAND_GPR }, 402 401 ··· 425 408 /* The RS field of the DS form stq instruction, which has special 426 409 value restrictions. */ 427 410 #define RSQ RS + 1 428 - { 5, 21, insert_rsq, NULL, PPC_OPERAND_GPR }, 411 + { 5, 21, insert_rsq, NULL, PPC_OPERAND_GPR_0 }, 429 412 430 413 /* The RT field of the DQ form lq instruction, which has special 431 414 value restrictions. */ 432 415 #define RTQ RSQ + 1 433 - { 5, 21, insert_rtq, NULL, PPC_OPERAND_GPR }, 416 + { 5, 21, insert_rtq, NULL, PPC_OPERAND_GPR_0 }, 417 + 418 + /* The RS field of the tlbwe instruction, which is optional. */ 419 + #define RSO RTQ + 1 420 + #define RTO RSO 421 + { 5, 21, NULL, NULL, PPC_OPERAND_GPR | PPC_OPERAND_OPTIONAL }, 434 422 435 423 /* The SH field in an X or M form instruction. */ 436 - #define SH RTQ + 1 424 + #define SH RSO + 1 437 425 #define SH_MASK (0x1f << 11) 438 426 { 5, 11, NULL, NULL, 0 }, 439 427 ··· 447 425 #define SH6_MASK ((0x1f << 11) | (1 << 1)) 448 426 { 6, 1, insert_sh6, extract_sh6, 0 }, 449 427 428 + /* The SH field of the tlbwe instruction, which is optional. */ 429 + #define SHO SH6 + 1 430 + { 5, 11,NULL, NULL, PPC_OPERAND_OPTIONAL }, 431 + 450 432 /* The SI field in a D form instruction. */ 451 - #define SI SH6 + 1 433 + #define SI SHO + 1 452 434 { 16, 0, NULL, NULL, PPC_OPERAND_SIGNED }, 453 435 454 436 /* The SI field in a D form instruction when we accept a wide range ··· 474 448 475 449 /* The SPRG register number in an XFX form m[ft]sprg instruction. */ 476 450 #define SPRG SPRBAT + 1 477 - #define SPRG_MASK (0x3 << 16) 478 - { 2, 16, NULL, NULL, 0 }, 451 + { 5, 16, insert_sprg, extract_sprg, 0 }, 479 452 480 453 /* The SR field in an X form instruction. */ 481 454 #define SR SPRG + 1 ··· 561 536 #define WS_MASK (0x7 << 11) 562 537 { 3, 11, NULL, NULL, 0 }, 563 538 564 - /* The L field in an mtmsrd instruction */ 539 + /* The L field in an mtmsrd or A form instruction. */ 565 540 #define MTMSRD_L WS + 1 541 + #define A_L MTMSRD_L 566 542 { 1, 16, NULL, NULL, PPC_OPERAND_OPTIONAL }, 567 543 544 + /* The DCM field in a Z form instruction. */ 545 + #define DCM MTMSRD_L + 1 546 + { 6, 16, NULL, NULL, 0 }, 547 + 548 + /* Likewise, the DGM field in a Z form instruction. */ 549 + #define DGM DCM + 1 550 + { 6, 16, NULL, NULL, 0 }, 551 + 552 + #define TE DGM + 1 553 + { 5, 11, NULL, NULL, 0 }, 554 + 555 + #define RMC TE + 1 556 + { 2, 21, NULL, NULL, 0 }, 557 + 558 + #define R RMC + 1 559 + { 1, 15, NULL, NULL, 0 }, 560 + 561 + #define SP R + 1 562 + { 2, 11, NULL, NULL, 0 }, 563 + 564 + #define S SP + 1 565 + { 1, 11, NULL, NULL, 0 }, 566 + 567 + /* SH field starting at bit position 16. */ 568 + #define SH16 S + 1 569 + { 6, 10, NULL, NULL, 0 }, 570 + 571 + /* The L field in an X form with the RT field fixed instruction. */ 572 + #define XRT_L SH16 + 1 573 + { 2, 21, NULL, NULL, PPC_OPERAND_OPTIONAL }, 574 + 575 + /* The EH field in larx instruction. */ 576 + #define EH XRT_L + 1 577 + { 1, 0, NULL, NULL, PPC_OPERAND_OPTIONAL }, 568 578 }; 569 579 570 580 /* The functions used to insert and extract complicated operands. */ ··· 610 550 and the extraction function just checks that the fields are the 611 551 same. */ 612 552 613 - /*ARGSUSED*/ 614 553 static unsigned long 615 554 insert_bat (unsigned long insn, 616 555 long value ATTRIBUTE_UNUSED, ··· 635 576 and the extraction function just checks that the fields are the 636 577 same. */ 637 578 638 - /*ARGSUSED*/ 639 579 static unsigned long 640 580 insert_bba (unsigned long insn, 641 581 long value ATTRIBUTE_UNUSED, ··· 657 599 /* The BD field in a B form instruction. The lower two bits are 658 600 forced to zero. */ 659 601 660 - /*ARGSUSED*/ 661 602 static unsigned long 662 603 insert_bd (unsigned long insn, 663 604 long value, ··· 666 609 return insn | (value & 0xfffc); 667 610 } 668 611 669 - /*ARGSUSED*/ 670 612 static long 671 613 extract_bd (unsigned long insn, 672 614 int dialect ATTRIBUTE_UNUSED, ··· 687 631 in BO field, the "a" bit is 00010 for branch on CR(BI) and 01000 688 632 for branch on CTR. We only handle the taken/not-taken hint here. */ 689 633 690 - /*ARGSUSED*/ 691 634 static unsigned long 692 635 insert_bdm (unsigned long insn, 693 636 long value, ··· 732 677 This is like BDM, above, except that the branch is expected to be 733 678 taken. */ 734 679 735 - /*ARGSUSED*/ 736 680 static unsigned long 737 681 insert_bdp (unsigned long insn, 738 682 long value, ··· 885 831 /* The DQ field in a DQ form instruction. This is like D, but the 886 832 lower four bits are forced to zero. */ 887 833 888 - /*ARGSUSED*/ 889 834 static unsigned long 890 835 insert_dq (unsigned long insn, 891 836 long value, ··· 896 843 return insn | (value & 0xfff0); 897 844 } 898 845 899 - /*ARGSUSED*/ 900 846 static long 901 847 extract_dq (unsigned long insn, 902 848 int dialect ATTRIBUTE_UNUSED, ··· 970 918 /* The DS field in a DS form instruction. This is like D, but the 971 919 lower two bits are forced to zero. */ 972 920 973 - /*ARGSUSED*/ 974 921 static unsigned long 975 922 insert_ds (unsigned long insn, 976 923 long value, ··· 981 930 return insn | (value & 0xfffc); 982 931 } 983 932 984 - /*ARGSUSED*/ 985 933 static long 986 934 extract_ds (unsigned long insn, 987 935 int dialect ATTRIBUTE_UNUSED, ··· 991 941 992 942 /* The DE field in a DE form instruction. */ 993 943 994 - /*ARGSUSED*/ 995 944 static unsigned long 996 945 insert_de (unsigned long insn, 997 946 long value, ··· 1002 953 return insn | ((value << 4) & 0xfff0); 1003 954 } 1004 955 1005 - /*ARGSUSED*/ 1006 956 static long 1007 957 extract_de (unsigned long insn, 1008 958 int dialect ATTRIBUTE_UNUSED, ··· 1012 964 1013 965 /* The DES field in a DES form instruction. */ 1014 966 1015 - /*ARGSUSED*/ 1016 967 static unsigned long 1017 968 insert_des (unsigned long insn, 1018 969 long value, ··· 1025 978 return insn | ((value << 2) & 0xfff0); 1026 979 } 1027 980 1028 - /*ARGSUSED*/ 1029 981 static long 1030 982 extract_des (unsigned long insn, 1031 983 int dialect ATTRIBUTE_UNUSED, ··· 1041 995 int dialect, 1042 996 const char **errmsg) 1043 997 { 998 + /* If we're handling the mfocrf and mtocrf insns ensure that exactly 999 + one bit of the mask field is set. */ 1000 + if ((insn & (1 << 20)) != 0) 1001 + { 1002 + if (value == 0 || (value & -value) != value) 1003 + { 1004 + *errmsg = _("invalid mask field"); 1005 + value = 0; 1006 + } 1007 + } 1008 + 1044 1009 /* If the optional field on mfcr is missing that means we want to use 1045 1010 the old form of the instruction that moves the whole cr. In that 1046 1011 case we'll have VALUE zero. There doesn't seem to be a way to 1047 1012 distinguish this from the case where someone writes mfcr %r3,0. */ 1048 - if (value == 0) 1013 + else if (value == 0) 1049 1014 ; 1050 1015 1051 1016 /* If only one bit of the FXM field is set, we can use the new form 1052 1017 of the instruction, which is faster. Unlike the Power4 branch hint 1053 - encoding, this is not backward compatible. */ 1054 - else if ((dialect & PPC_OPCODE_POWER4) != 0 && (value & -value) == value) 1018 + encoding, this is not backward compatible. Do not generate the 1019 + new form unless -mpower4 has been given, or -many and the two 1020 + operand form of mfcr was used. */ 1021 + else if ((value & -value) == value 1022 + && ((dialect & PPC_OPCODE_POWER4) != 0 1023 + || ((dialect & PPC_OPCODE_ANY) != 0 1024 + && (insn & (0x3ff << 1)) == 19 << 1))) 1055 1025 insn |= 1 << 20; 1056 1026 1057 1027 /* Any other value on mfcr is an error. */ ··· 1082 1020 1083 1021 static long 1084 1022 extract_fxm (unsigned long insn, 1085 - int dialect, 1023 + int dialect ATTRIBUTE_UNUSED, 1086 1024 int *invalid) 1087 1025 { 1088 1026 long mask = (insn >> 12) & 0xff; ··· 1090 1028 /* Is this a Power4 insn? */ 1091 1029 if ((insn & (1 << 20)) != 0) 1092 1030 { 1093 - if ((dialect & PPC_OPCODE_POWER4) == 0) 1031 + /* Exactly one bit of MASK should be set. */ 1032 + if (mask == 0 || (mask & -mask) != mask) 1094 1033 *invalid = 1; 1095 - else 1096 - { 1097 - /* Exactly one bit of MASK should be set. */ 1098 - if (mask == 0 || (mask & -mask) != mask) 1099 - *invalid = 1; 1100 - } 1101 1034 } 1102 1035 1103 1036 /* Check that non-power4 form of mfcr has a zero MASK. */ ··· 1108 1051 /* The LI field in an I form instruction. The lower two bits are 1109 1052 forced to zero. */ 1110 1053 1111 - /*ARGSUSED*/ 1112 1054 static unsigned long 1113 1055 insert_li (unsigned long insn, 1114 1056 long value, ··· 1119 1063 return insn | (value & 0x3fffffc); 1120 1064 } 1121 1065 1122 - /*ARGSUSED*/ 1123 1066 static long 1124 1067 extract_li (unsigned long insn, 1125 1068 int dialect ATTRIBUTE_UNUSED, ··· 1218 1163 /* The MB or ME field in an MD or MDS form instruction. The high bit 1219 1164 is wrapped to the low end. */ 1220 1165 1221 - /*ARGSUSED*/ 1222 1166 static unsigned long 1223 1167 insert_mb6 (unsigned long insn, 1224 1168 long value, ··· 1227 1173 return insn | ((value & 0x1f) << 6) | (value & 0x20); 1228 1174 } 1229 1175 1230 - /*ARGSUSED*/ 1231 1176 static long 1232 1177 extract_mb6 (unsigned long insn, 1233 1178 int dialect ATTRIBUTE_UNUSED, ··· 1251 1198 return insn | ((value & 0x1f) << 11); 1252 1199 } 1253 1200 1254 - /*ARGSUSED*/ 1255 1201 static long 1256 1202 extract_nb (unsigned long insn, 1257 1203 int dialect ATTRIBUTE_UNUSED, ··· 1269 1217 invalid, since we never want to recognize an instruction which uses 1270 1218 a field of this type. */ 1271 1219 1272 - /*ARGSUSED*/ 1273 1220 static unsigned long 1274 1221 insert_nsi (unsigned long insn, 1275 1222 long value, ··· 1320 1269 /* The RA field in the DQ form lq instruction, which has special 1321 1270 value restrictions. */ 1322 1271 1323 - /*ARGSUSED*/ 1324 1272 static unsigned long 1325 1273 insert_raq (unsigned long insn, 1326 1274 long value, ··· 1354 1304 function just copies the BT field into the BA field, and the 1355 1305 extraction function just checks that the fields are the same. */ 1356 1306 1357 - /*ARGSUSED*/ 1358 1307 static unsigned long 1359 1308 insert_rbs (unsigned long insn, 1360 1309 long value ATTRIBUTE_UNUSED, ··· 1376 1327 /* The RT field of the DQ form lq instruction, which has special 1377 1328 value restrictions. */ 1378 1329 1379 - /*ARGSUSED*/ 1380 1330 static unsigned long 1381 1331 insert_rtq (unsigned long insn, 1382 1332 long value, ··· 1390 1342 /* The RS field of the DS form stq instruction, which has special 1391 1343 value restrictions. */ 1392 1344 1393 - /*ARGSUSED*/ 1394 1345 static unsigned long 1395 1346 insert_rsq (unsigned long insn, 1396 1347 long value ATTRIBUTE_UNUSED, ··· 1403 1356 1404 1357 /* The SH field in an MD form instruction. This is split. */ 1405 1358 1406 - /*ARGSUSED*/ 1407 1359 static unsigned long 1408 1360 insert_sh6 (unsigned long insn, 1409 1361 long value, ··· 1412 1366 return insn | ((value & 0x1f) << 11) | ((value & 0x20) >> 4); 1413 1367 } 1414 1368 1415 - /*ARGSUSED*/ 1416 1369 static long 1417 1370 extract_sh6 (unsigned long insn, 1418 1371 int dialect ATTRIBUTE_UNUSED, ··· 1438 1393 int *invalid ATTRIBUTE_UNUSED) 1439 1394 { 1440 1395 return ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0); 1396 + } 1397 + 1398 + /* Some dialects have 8 SPRG registers instead of the standard 4. */ 1399 + 1400 + static unsigned long 1401 + insert_sprg (unsigned long insn, 1402 + long value, 1403 + int dialect, 1404 + const char **errmsg) 1405 + { 1406 + /* This check uses PPC_OPCODE_403 because PPC405 is later defined 1407 + as a synonym. If ever a 405 specific dialect is added this 1408 + check should use that instead. */ 1409 + if (value > 7 1410 + || (value > 3 1411 + && (dialect & (PPC_OPCODE_BOOKE | PPC_OPCODE_403)) == 0)) 1412 + *errmsg = _("invalid sprg number"); 1413 + 1414 + /* If this is mfsprg4..7 then use spr 260..263 which can be read in 1415 + user mode. Anything else must use spr 272..279. */ 1416 + if (value <= 3 || (insn & 0x100) != 0) 1417 + value |= 0x10; 1418 + 1419 + return insn | ((value & 0x17) << 16); 1420 + } 1421 + 1422 + static long 1423 + extract_sprg (unsigned long insn, 1424 + int dialect, 1425 + int *invalid) 1426 + { 1427 + unsigned long val = (insn >> 16) & 0x1f; 1428 + 1429 + /* mfsprg can use 260..263 and 272..279. mtsprg only uses spr 272..279 1430 + If not BOOKE or 405, then both use only 272..275. */ 1431 + if (val <= 3 1432 + || (val < 0x10 && (insn & 0x100) != 0) 1433 + || (val - 0x10 > 3 1434 + && (dialect & (PPC_OPCODE_BOOKE | PPC_OPCODE_403)) == 0)) 1435 + *invalid = 1; 1436 + return val & 7; 1441 1437 } 1442 1438 1443 1439 /* The TBR field in an XFX instruction. This is just like SPR, but it ··· 1546 1460 /* An A_MASK with the FRA and FRC fields fixed. */ 1547 1461 #define AFRAFRC_MASK (A_MASK | FRA_MASK | FRC_MASK) 1548 1462 1463 + /* An AFRAFRC_MASK, but with L bit clear. */ 1464 + #define AFRALFRC_MASK (AFRAFRC_MASK & ~((unsigned long) 1 << 16)) 1465 + 1549 1466 /* A B form instruction. */ 1550 1467 #define B(op, aa, lk) (OP (op) | ((((unsigned long)(aa)) & 1) << 1) | ((lk) & 1)) 1551 1468 #define B_MASK B (0x3f, 1, 1) ··· 1583 1494 1584 1495 /* An Context form instruction. */ 1585 1496 #define CTX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x7)) 1586 - #define CTX_MASK CTX(0x3f, 0x7) 1497 + #define CTX_MASK CTX(0x3f, 0x7) 1587 1498 1588 1499 /* An User Context form instruction. */ 1589 1500 #define UCTX(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x1f)) 1590 - #define UCTX_MASK UCTX(0x3f, 0x1f) 1501 + #define UCTX_MASK UCTX(0x3f, 0x1f) 1591 1502 1592 1503 /* The main opcode mask with the RA field clear. */ 1593 1504 #define DRA_MASK (OP_MASK | RA_MASK) ··· 1659 1570 /* An X form instruction. */ 1660 1571 #define X(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x3ff) << 1)) 1661 1572 1573 + /* A Z form instruction. */ 1574 + #define Z(op, xop) (OP (op) | ((((unsigned long)(xop)) & 0x1ff) << 1)) 1575 + 1662 1576 /* An X form instruction with the RC bit specified. */ 1663 1577 #define XRC(op, xop, rc) (X ((op), (xop)) | ((rc) & 1)) 1664 1578 1579 + /* A Z form instruction with the RC bit specified. */ 1580 + #define ZRC(op, xop, rc) (Z ((op), (xop)) | ((rc) & 1)) 1581 + 1665 1582 /* The mask for an X form instruction. */ 1666 1583 #define X_MASK XRC (0x3f, 0x3ff, 1) 1584 + 1585 + /* The mask for a Z form instruction. */ 1586 + #define Z_MASK ZRC (0x3f, 0x1ff, 1) 1667 1587 1668 1588 /* An X_MASK with the RA field fixed. */ 1669 1589 #define XRA_MASK (X_MASK | RA_MASK) ··· 1682 1584 1683 1585 /* An X_MASK with the RT field fixed. */ 1684 1586 #define XRT_MASK (X_MASK | RT_MASK) 1587 + 1588 + /* An XRT_MASK mask with the L bits clear. */ 1589 + #define XLRT_MASK (XRT_MASK & ~((unsigned long) 0x3 << 21)) 1685 1590 1686 1591 /* An X_MASK with the RA and RB fields fixed. */ 1687 1592 #define XRARB_MASK (X_MASK | RA_MASK | RB_MASK) ··· 1698 1597 /* An XRTRA_MASK, but with L bit clear. */ 1699 1598 #define XRTLRA_MASK (XRTRA_MASK & ~((unsigned long) 1 << 21)) 1700 1599 1701 - /* An X form comparison instruction. */ 1702 - #define XCMPL(op, xop, l) (X ((op), (xop)) | ((((unsigned long)(l)) & 1) << 21)) 1600 + /* An X form instruction with the L bit specified. */ 1601 + #define XOPL(op, xop, l) (X ((op), (xop)) | ((((unsigned long)(l)) & 1) << 21)) 1703 1602 1704 1603 /* The mask for an X form comparison instruction. */ 1705 1604 #define XCMP_MASK (X_MASK | (((unsigned long)1) << 22)) ··· 1721 1620 1722 1621 /* An X form sync instruction with everything filled in except the LS field. */ 1723 1622 #define XSYNC_MASK (0xff9fffff) 1623 + 1624 + /* An X_MASK, but with the EH bit clear. */ 1625 + #define XEH_MASK (X_MASK & ~((unsigned long )1)) 1724 1626 1725 1627 /* An X form AltiVec dss instruction. */ 1726 1628 #define XDSS(op, xop, a) (X ((op), (xop)) | ((((unsigned long)(a)) & 1) << 25)) ··· 1767 1663 #define XLYBB_MASK (XLYLK_MASK | BB_MASK) 1768 1664 #define XLBOCBBB_MASK (XLOCB_MASK | BB_MASK) 1769 1665 1666 + /* A mask for branch instructions using the BH field. */ 1667 + #define XLBH_MASK (XL_MASK | (0x1c << 11)) 1668 + 1770 1669 /* An XL_MASK with the BO and BB fields fixed. */ 1771 1670 #define XLBOBB_MASK (XL_MASK | BO_MASK | BB_MASK) 1772 1671 ··· 1789 1682 #define XS_MASK XS (0x3f, 0x1ff, 1) 1790 1683 1791 1684 /* A mask for the FXM version of an XFX form instruction. */ 1792 - #define XFXFXM_MASK (X_MASK | (1 << 11)) 1685 + #define XFXFXM_MASK (X_MASK | (1 << 11) | (1 << 20)) 1793 1686 1794 1687 /* An XFX form instruction with the FXM field filled in. */ 1795 - #define XFXM(op, xop, fxm) \ 1796 - (X ((op), (xop)) | ((((unsigned long)(fxm)) & 0xff) << 12)) 1688 + #define XFXM(op, xop, fxm, p4) \ 1689 + (X ((op), (xop)) | ((((unsigned long)(fxm)) & 0xff) << 12) \ 1690 + | ((unsigned long)(p4) << 20)) 1797 1691 1798 1692 /* An XFX form instruction with the SPR field filled in. */ 1799 1693 #define XSPR(op, xop, spr) \ ··· 1807 1699 1808 1700 /* An XFX form instruction with the SPR field filled in except for the 1809 1701 SPRG field. */ 1810 - #define XSPRG_MASK (XSPR_MASK &~ SPRG_MASK) 1702 + #define XSPRG_MASK (XSPR_MASK & ~(0x17 << 16)) 1811 1703 1812 1704 /* An X form instruction with everything filled in except the E field. */ 1813 1705 #define XE_MASK (0xffff7fff) ··· 1877 1769 #define PPCCOM PPC_OPCODE_PPC | PPC_OPCODE_COMMON 1878 1770 #define NOPOWER4 PPC_OPCODE_NOPOWER4 | PPCCOM 1879 1771 #define POWER4 PPC_OPCODE_POWER4 1772 + #define POWER5 PPC_OPCODE_POWER5 1773 + #define POWER6 PPC_OPCODE_POWER6 1774 + #define CELL PPC_OPCODE_CELL 1880 1775 #define PPC32 PPC_OPCODE_32 | PPC_OPCODE_PPC 1881 1776 #define PPC64 PPC_OPCODE_64 | PPC_OPCODE_PPC 1882 1777 #define PPC403 PPC_OPCODE_403 ··· 1887 1776 #define PPC440 PPC_OPCODE_440 1888 1777 #define PPC750 PPC 1889 1778 #define PPC860 PPC 1890 - #define PPCVEC PPC_OPCODE_ALTIVEC | PPC_OPCODE_PPC 1779 + #define PPCVEC PPC_OPCODE_ALTIVEC 1891 1780 #define POWER PPC_OPCODE_POWER 1892 1781 #define POWER2 PPC_OPCODE_POWER | PPC_OPCODE_POWER2 1893 1782 #define PPCPWR2 PPC_OPCODE_PPC | PPC_OPCODE_POWER | PPC_OPCODE_POWER2 ··· 1901 1790 #define BOOKE PPC_OPCODE_BOOKE 1902 1791 #define BOOKE64 PPC_OPCODE_BOOKE64 1903 1792 #define CLASSIC PPC_OPCODE_CLASSIC 1793 + #define PPCE300 PPC_OPCODE_E300 1904 1794 #define PPCSPE PPC_OPCODE_SPE 1905 1795 #define PPCISEL PPC_OPCODE_ISEL 1906 1796 #define PPCEFS PPC_OPCODE_EFS ··· 2064 1952 { "nmaclhwso.", XO(4,494,1,1), XO_MASK, PPC405|PPC440, { RT, RA, RB } }, 2065 1953 { "mfvscr", VX(4, 1540), VX_MASK, PPCVEC, { VD } }, 2066 1954 { "mtvscr", VX(4, 1604), VX_MASK, PPCVEC, { VB } }, 1955 + 1956 + /* Double-precision opcodes. */ 1957 + /* Some of these conflict with AltiVec, so move them before, since 1958 + PPCVEC includes the PPC_OPCODE_PPC set. */ 1959 + { "efscfd", VX(4, 719), VX_MASK, PPCEFS, { RS, RB } }, 1960 + { "efdabs", VX(4, 740), VX_MASK, PPCEFS, { RS, RA } }, 1961 + { "efdnabs", VX(4, 741), VX_MASK, PPCEFS, { RS, RA } }, 1962 + { "efdneg", VX(4, 742), VX_MASK, PPCEFS, { RS, RA } }, 1963 + { "efdadd", VX(4, 736), VX_MASK, PPCEFS, { RS, RA, RB } }, 1964 + { "efdsub", VX(4, 737), VX_MASK, PPCEFS, { RS, RA, RB } }, 1965 + { "efdmul", VX(4, 744), VX_MASK, PPCEFS, { RS, RA, RB } }, 1966 + { "efddiv", VX(4, 745), VX_MASK, PPCEFS, { RS, RA, RB } }, 1967 + { "efdcmpgt", VX(4, 748), VX_MASK, PPCEFS, { CRFD, RA, RB } }, 1968 + { "efdcmplt", VX(4, 749), VX_MASK, PPCEFS, { CRFD, RA, RB } }, 1969 + { "efdcmpeq", VX(4, 750), VX_MASK, PPCEFS, { CRFD, RA, RB } }, 1970 + { "efdtstgt", VX(4, 764), VX_MASK, PPCEFS, { CRFD, RA, RB } }, 1971 + { "efdtstlt", VX(4, 765), VX_MASK, PPCEFS, { CRFD, RA, RB } }, 1972 + { "efdtsteq", VX(4, 766), VX_MASK, PPCEFS, { CRFD, RA, RB } }, 1973 + { "efdcfsi", VX(4, 753), VX_MASK, PPCEFS, { RS, RB } }, 1974 + { "efdcfsid", VX(4, 739), VX_MASK, PPCEFS, { RS, RB } }, 1975 + { "efdcfui", VX(4, 752), VX_MASK, PPCEFS, { RS, RB } }, 1976 + { "efdcfuid", VX(4, 738), VX_MASK, PPCEFS, { RS, RB } }, 1977 + { "efdcfsf", VX(4, 755), VX_MASK, PPCEFS, { RS, RB } }, 1978 + { "efdcfuf", VX(4, 754), VX_MASK, PPCEFS, { RS, RB } }, 1979 + { "efdctsi", VX(4, 757), VX_MASK, PPCEFS, { RS, RB } }, 1980 + { "efdctsidz",VX(4, 747), VX_MASK, PPCEFS, { RS, RB } }, 1981 + { "efdctsiz", VX(4, 762), VX_MASK, PPCEFS, { RS, RB } }, 1982 + { "efdctui", VX(4, 756), VX_MASK, PPCEFS, { RS, RB } }, 1983 + { "efdctuidz",VX(4, 746), VX_MASK, PPCEFS, { RS, RB } }, 1984 + { "efdctuiz", VX(4, 760), VX_MASK, PPCEFS, { RS, RB } }, 1985 + { "efdctsf", VX(4, 759), VX_MASK, PPCEFS, { RS, RB } }, 1986 + { "efdctuf", VX(4, 758), VX_MASK, PPCEFS, { RS, RB } }, 1987 + { "efdcfs", VX(4, 751), VX_MASK, PPCEFS, { RS, RB } }, 1988 + /* End of double-precision opcodes. */ 1989 + 2067 1990 { "vaddcuw", VX(4, 384), VX_MASK, PPCVEC, { VD, VA, VB } }, 2068 1991 { "vaddfp", VX(4, 10), VX_MASK, PPCVEC, { VD, VA, VB } }, 2069 1992 { "vaddsbs", VX(4, 768), VX_MASK, PPCVEC, { VD, VA, VB } }, ··· 2536 2389 2537 2390 { "li", OP(14), DRA_MASK, PPCCOM, { RT, SI } }, 2538 2391 { "lil", OP(14), DRA_MASK, PWRCOM, { RT, SI } }, 2539 - { "addi", OP(14), OP_MASK, PPCCOM, { RT, RA, SI } }, 2540 - { "cal", OP(14), OP_MASK, PWRCOM, { RT, D, RA } }, 2541 - { "subi", OP(14), OP_MASK, PPCCOM, { RT, RA, NSI } }, 2542 - { "la", OP(14), OP_MASK, PPCCOM, { RT, D, RA } }, 2392 + { "addi", OP(14), OP_MASK, PPCCOM, { RT, RA0, SI } }, 2393 + { "cal", OP(14), OP_MASK, PWRCOM, { RT, D, RA0 } }, 2394 + { "subi", OP(14), OP_MASK, PPCCOM, { RT, RA0, NSI } }, 2395 + { "la", OP(14), OP_MASK, PPCCOM, { RT, D, RA0 } }, 2543 2396 2544 2397 { "lis", OP(15), DRA_MASK, PPCCOM, { RT, SISIGNOPT } }, 2545 2398 { "liu", OP(15), DRA_MASK, PWRCOM, { RT, SISIGNOPT } }, 2546 - { "addis", OP(15), OP_MASK, PPCCOM, { RT,RA,SISIGNOPT } }, 2547 - { "cau", OP(15), OP_MASK, PWRCOM, { RT,RA,SISIGNOPT } }, 2548 - { "subis", OP(15), OP_MASK, PPCCOM, { RT, RA, NSI } }, 2399 + { "addis", OP(15), OP_MASK, PPCCOM, { RT,RA0,SISIGNOPT } }, 2400 + { "cau", OP(15), OP_MASK, PWRCOM, { RT,RA0,SISIGNOPT } }, 2401 + { "subis", OP(15), OP_MASK, PPCCOM, { RT, RA0, NSI } }, 2549 2402 2550 2403 { "bdnz-", BBO(16,BODNZ,0,0), BBOATBI_MASK, PPCCOM, { BDM } }, 2551 2404 { "bdnz+", BBO(16,BODNZ,0,0), BBOATBI_MASK, PPCCOM, { BDP } }, ··· 2812 2665 { "bcla+", B(16,1,1), B_MASK, PPCCOM, { BOE, BI, BDPA } }, 2813 2666 { "bcla", B(16,1,1), B_MASK, COM, { BO, BI, BDA } }, 2814 2667 2815 - { "sc", SC(17,1,0), 0xffffffff, PPC, { 0 } }, 2816 - { "svc", SC(17,0,0), SC_MASK, POWER, { LEV, FL1, FL2 } }, 2817 - { "svcl", SC(17,0,1), SC_MASK, POWER, { LEV, FL1, FL2 } }, 2668 + { "sc", SC(17,1,0), SC_MASK, PPC, { LEV } }, 2669 + { "svc", SC(17,0,0), SC_MASK, POWER, { SVC_LEV, FL1, FL2 } }, 2670 + { "svcl", SC(17,0,1), SC_MASK, POWER, { SVC_LEV, FL1, FL2 } }, 2818 2671 { "svca", SC(17,1,0), SC_MASK, PWRCOM, { SV } }, 2819 2672 { "svcla", SC(17,1,1), SC_MASK, POWER, { SV } }, 2820 2673 ··· 3037 2890 { "bdzflrl", XLO(19,BODZF,16,1), XLBOBB_MASK, PPCCOM, { BI } }, 3038 2891 { "bdzflrl-",XLO(19,BODZF,16,1), XLBOBB_MASK, NOPOWER4, { BI } }, 3039 2892 { "bdzflrl+",XLO(19,BODZFP,16,1), XLBOBB_MASK, NOPOWER4, { BI } }, 3040 - { "bclr", XLLK(19,16,0), XLYBB_MASK, PPCCOM, { BO, BI } }, 3041 - { "bclrl", XLLK(19,16,1), XLYBB_MASK, PPCCOM, { BO, BI } }, 3042 2893 { "bclr+", XLYLK(19,16,1,0), XLYBB_MASK, PPCCOM, { BOE, BI } }, 3043 2894 { "bclrl+", XLYLK(19,16,1,1), XLYBB_MASK, PPCCOM, { BOE, BI } }, 3044 2895 { "bclr-", XLYLK(19,16,0,0), XLYBB_MASK, PPCCOM, { BOE, BI } }, 3045 2896 { "bclrl-", XLYLK(19,16,0,1), XLYBB_MASK, PPCCOM, { BOE, BI } }, 2897 + { "bclr", XLLK(19,16,0), XLBH_MASK, PPCCOM, { BO, BI, BH } }, 2898 + { "bclrl", XLLK(19,16,1), XLBH_MASK, PPCCOM, { BO, BI, BH } }, 3046 2899 { "bcr", XLLK(19,16,0), XLBB_MASK, PWRCOM, { BO, BI } }, 3047 2900 { "bcrl", XLLK(19,16,1), XLBB_MASK, PWRCOM, { BO, BI } }, 3048 2901 { "bclre", XLLK(19,17,0), XLBB_MASK, BOOKE64, { BO, BI } }, ··· 3071 2924 3072 2925 { "crand", XL(19,257), XL_MASK, COM, { BT, BA, BB } }, 3073 2926 2927 + { "hrfid", XL(19,274), 0xffffffff, POWER5 | CELL, { 0 } }, 2928 + 3074 2929 { "crset", XL(19,289), XL_MASK, PPCCOM, { BT, BAT, BBA } }, 3075 2930 { "creqv", XL(19,289), XL_MASK, COM, { BT, BA, BB } }, 3076 2931 2932 + { "doze", XL(19,402), 0xffffffff, POWER6, { 0 } }, 2933 + 3077 2934 { "crorc", XL(19,417), XL_MASK, COM, { BT, BA, BB } }, 2935 + 2936 + { "nap", XL(19,434), 0xffffffff, POWER6, { 0 } }, 3078 2937 3079 2938 { "crmove", XL(19,449), XL_MASK, PPCCOM, { BT, BA, BBA } }, 3080 2939 { "cror", XL(19,449), XL_MASK, COM, { BT, BA, BB } }, 2940 + 2941 + { "sleep", XL(19,466), 0xffffffff, POWER6, { 0 } }, 2942 + { "rvwinkle", XL(19,498), 0xffffffff, POWER6, { 0 } }, 3081 2943 3082 2944 { "bctr", XLO(19,BOU,528,0), XLBOBIBB_MASK, COM, { 0 } }, 3083 2945 { "bctrl", XLO(19,BOU,528,1), XLBOBIBB_MASK, COM, { 0 } }, ··· 3230 3074 { "bfctrl-", XLO(19,BOFM4,528,1), XLBOBB_MASK, POWER4, { BI } }, 3231 3075 { "bfctrl+", XLO(19,BOFP,528,1), XLBOBB_MASK, NOPOWER4, { BI } }, 3232 3076 { "bfctrl+", XLO(19,BOFP4,528,1), XLBOBB_MASK, POWER4, { BI } }, 3233 - { "bcctr", XLLK(19,528,0), XLYBB_MASK, PPCCOM, { BO, BI } }, 3234 3077 { "bcctr-", XLYLK(19,528,0,0), XLYBB_MASK, PPCCOM, { BOE, BI } }, 3235 3078 { "bcctr+", XLYLK(19,528,1,0), XLYBB_MASK, PPCCOM, { BOE, BI } }, 3236 - { "bcctrl", XLLK(19,528,1), XLYBB_MASK, PPCCOM, { BO, BI } }, 3237 3079 { "bcctrl-", XLYLK(19,528,0,1), XLYBB_MASK, PPCCOM, { BOE, BI } }, 3238 3080 { "bcctrl+", XLYLK(19,528,1,1), XLYBB_MASK, PPCCOM, { BOE, BI } }, 3081 + { "bcctr", XLLK(19,528,0), XLBH_MASK, PPCCOM, { BO, BI, BH } }, 3082 + { "bcctrl", XLLK(19,528,1), XLBH_MASK, PPCCOM, { BO, BI, BH } }, 3239 3083 { "bcc", XLLK(19,528,0), XLBB_MASK, PWRCOM, { BO, BI } }, 3240 3084 { "bccl", XLLK(19,528,1), XLBB_MASK, PWRCOM, { BO, BI } }, 3241 3085 { "bcctre", XLLK(19,529,0), XLYBB_MASK, BOOKE64, { BO, BI } }, ··· 3314 3158 { "rldcr", MDS(30,9,0), MDS_MASK, PPC64, { RA, RS, RB, ME6 } }, 3315 3159 { "rldcr.", MDS(30,9,1), MDS_MASK, PPC64, { RA, RS, RB, ME6 } }, 3316 3160 3317 - { "cmpw", XCMPL(31,0,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } }, 3318 - { "cmpd", XCMPL(31,0,1), XCMPL_MASK, PPC64, { OBF, RA, RB } }, 3161 + { "cmpw", XOPL(31,0,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } }, 3162 + { "cmpd", XOPL(31,0,1), XCMPL_MASK, PPC64, { OBF, RA, RB } }, 3319 3163 { "cmp", X(31,0), XCMP_MASK, PPC, { BF, L, RA, RB } }, 3320 3164 { "cmp", X(31,0), XCMPL_MASK, PWRCOM, { BF, RA, RB } }, 3321 3165 ··· 3384 3228 { "iseleq", X(31,79), X_MASK, PPCISEL, { RT, RA, RB } }, 3385 3229 { "isel", XISEL(31,15), XISEL_MASK, PPCISEL, { RT, RA, RB, CRB } }, 3386 3230 3387 - { "mfcr", X(31,19), XRARB_MASK, NOPOWER4, { RT } }, 3231 + { "mfocrf", XFXM(31,19,0,1), XFXFXM_MASK, COM, { RT, FXM } }, 3232 + { "mfcr", X(31,19), XRARB_MASK, NOPOWER4 | COM, { RT } }, 3388 3233 { "mfcr", X(31,19), XFXFXM_MASK, POWER4, { RT, FXM4 } }, 3389 3234 3390 - { "lwarx", X(31,20), X_MASK, PPC, { RT, RA, RB } }, 3235 + { "lwarx", X(31,20), XEH_MASK, PPC, { RT, RA0, RB, EH } }, 3391 3236 3392 - { "ldx", X(31,21), X_MASK, PPC64, { RT, RA, RB } }, 3237 + { "ldx", X(31,21), X_MASK, PPC64, { RT, RA0, RB } }, 3393 3238 3394 - { "icbt", X(31,22), X_MASK, BOOKE, { CT, RA, RB } }, 3239 + { "icbt", X(31,22), X_MASK, BOOKE|PPCE300, { CT, RA, RB } }, 3395 3240 { "icbt", X(31,262), XRT_MASK, PPC403, { RA, RB } }, 3396 3241 3397 - { "lwzx", X(31,23), X_MASK, PPCCOM, { RT, RA, RB } }, 3242 + { "lwzx", X(31,23), X_MASK, PPCCOM, { RT, RA0, RB } }, 3398 3243 { "lx", X(31,23), X_MASK, PWRCOM, { RT, RA, RB } }, 3399 3244 3400 3245 { "slw", XRC(31,24,0), X_MASK, PPCCOM, { RA, RS, RB } }, ··· 3419 3262 3420 3263 { "icbte", X(31,30), X_MASK, BOOKE64, { CT, RA, RB } }, 3421 3264 3422 - { "lwzxe", X(31,31), X_MASK, BOOKE64, { RT, RA, RB } }, 3265 + { "lwzxe", X(31,31), X_MASK, BOOKE64, { RT, RA0, RB } }, 3423 3266 3424 - { "cmplw", XCMPL(31,32,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } }, 3425 - { "cmpld", XCMPL(31,32,1), XCMPL_MASK, PPC64, { OBF, RA, RB } }, 3267 + { "cmplw", XOPL(31,32,0), XCMPL_MASK, PPCCOM, { OBF, RA, RB } }, 3268 + { "cmpld", XOPL(31,32,1), XCMPL_MASK, PPC64, { OBF, RA, RB } }, 3426 3269 { "cmpl", X(31,32), XCMP_MASK, PPC, { BF, L, RA, RB } }, 3427 3270 { "cmpl", X(31,32), XCMPL_MASK, PWRCOM, { BF, RA, RB } }, 3428 3271 ··· 3481 3324 3482 3325 { "mfmsr", X(31,83), XRARB_MASK, COM, { RT } }, 3483 3326 3484 - { "ldarx", X(31,84), X_MASK, PPC64, { RT, RA, RB } }, 3327 + { "ldarx", X(31,84), XEH_MASK, PPC64, { RT, RA0, RB, EH } }, 3485 3328 3486 - { "dcbf", X(31,86), XRT_MASK, PPC, { RA, RB } }, 3329 + { "dcbfl", XOPL(31,86,1), XRT_MASK, POWER5, { RA, RB } }, 3330 + { "dcbf", X(31,86), XLRT_MASK, PPC, { RA, RB, XRT_L } }, 3487 3331 3488 - { "lbzx", X(31,87), X_MASK, COM, { RT, RA, RB } }, 3332 + { "lbzx", X(31,87), X_MASK, COM, { RT, RA0, RB } }, 3489 3333 3490 3334 { "dcbfe", X(31,94), XRT_MASK, BOOKE64, { RA, RB } }, 3491 3335 3492 - { "lbzxe", X(31,95), X_MASK, BOOKE64, { RT, RA, RB } }, 3336 + { "lbzxe", X(31,95), X_MASK, BOOKE64, { RT, RA0, RB } }, 3493 3337 3494 3338 { "neg", XO(31,104,0,0), XORB_MASK, COM, { RT, RA } }, 3495 3339 { "neg.", XO(31,104,0,1), XORB_MASK, COM, { RT, RA } }, ··· 3508 3350 3509 3351 { "lbzux", X(31,119), X_MASK, COM, { RT, RAL, RB } }, 3510 3352 3353 + { "popcntb", X(31,122), XRB_MASK, POWER5, { RA, RS } }, 3354 + 3511 3355 { "not", XRC(31,124,0), X_MASK, COM, { RA, RS, RBS } }, 3512 3356 { "nor", XRC(31,124,0), X_MASK, COM, { RA, RS, RB } }, 3513 3357 { "not.", XRC(31,124,1), X_MASK, COM, { RA, RS, RBS } }, 3514 3358 { "nor.", XRC(31,124,1), X_MASK, COM, { RA, RS, RB } }, 3515 3359 3516 - { "lwarxe", X(31,126), X_MASK, BOOKE64, { RT, RA, RB } }, 3360 + { "lwarxe", X(31,126), X_MASK, BOOKE64, { RT, RA0, RB } }, 3517 3361 3518 3362 { "lbzuxe", X(31,127), X_MASK, BOOKE64, { RT, RAL, RB } }, 3519 3363 ··· 3543 3383 3544 3384 { "dcbtstlse",X(31,142),X_MASK, PPCCHLK64, { CT, RA, RB }}, 3545 3385 3546 - { "mtcr", XFXM(31,144,0xff), XRARB_MASK, COM, { RS }}, 3386 + { "mtocrf", XFXM(31,144,0,1), XFXFXM_MASK, COM, { FXM, RS } }, 3387 + { "mtcr", XFXM(31,144,0xff,0), XRARB_MASK, COM, { RS }}, 3547 3388 { "mtcrf", X(31,144), XFXFXM_MASK, COM, { FXM, RS } }, 3548 3389 3549 3390 { "mtmsr", X(31,146), XRARB_MASK, COM, { RS } }, 3550 3391 3551 - { "stdx", X(31,149), X_MASK, PPC64, { RS, RA, RB } }, 3392 + { "stdx", X(31,149), X_MASK, PPC64, { RS, RA0, RB } }, 3552 3393 3553 - { "stwcx.", XRC(31,150,1), X_MASK, PPC, { RS, RA, RB } }, 3394 + { "stwcx.", XRC(31,150,1), X_MASK, PPC, { RS, RA0, RB } }, 3554 3395 3555 - { "stwx", X(31,151), X_MASK, PPCCOM, { RS, RA, RB } }, 3396 + { "stwx", X(31,151), X_MASK, PPCCOM, { RS, RA0, RB } }, 3556 3397 { "stx", X(31,151), X_MASK, PWRCOM, { RS, RA, RB } }, 3557 3398 3558 - { "stwcxe.", XRC(31,158,1), X_MASK, BOOKE64, { RS, RA, RB } }, 3399 + { "stwcxe.", XRC(31,158,1), X_MASK, BOOKE64, { RS, RA0, RB } }, 3559 3400 3560 - { "stwxe", X(31,159), X_MASK, BOOKE64, { RS, RA, RB } }, 3401 + { "stwxe", X(31,159), X_MASK, BOOKE64, { RS, RA0, RB } }, 3561 3402 3562 3403 { "slq", XRC(31,152,0), X_MASK, M601, { RA, RS, RB } }, 3563 3404 { "slq.", XRC(31,152,1), X_MASK, M601, { RA, RS, RB } }, 3564 3405 3565 3406 { "sle", XRC(31,153,0), X_MASK, M601, { RA, RS, RB } }, 3566 3407 { "sle.", XRC(31,153,1), X_MASK, M601, { RA, RS, RB } }, 3408 + 3409 + { "prtyw", X(31,154), XRB_MASK, POWER6, { RA, RS } }, 3567 3410 3568 3411 { "wrteei", X(31,163), XE_MASK, PPC403 | BOOKE, { E } }, 3569 3412 ··· 3578 3415 { "stdux", X(31,181), X_MASK, PPC64, { RS, RAS, RB } }, 3579 3416 3580 3417 { "stwux", X(31,183), X_MASK, PPCCOM, { RS, RAS, RB } }, 3581 - { "stux", X(31,183), X_MASK, PWRCOM, { RS, RA, RB } }, 3418 + { "stux", X(31,183), X_MASK, PWRCOM, { RS, RA0, RB } }, 3582 3419 3583 3420 { "sliq", XRC(31,184,0), X_MASK, M601, { RA, RS, SH } }, 3584 3421 { "sliq.", XRC(31,184,1), X_MASK, M601, { RA, RS, SH } }, 3422 + 3423 + { "prtyd", X(31,186), XRB_MASK, POWER6, { RA, RS } }, 3585 3424 3586 3425 { "stwuxe", X(31,191), X_MASK, BOOKE64, { RS, RAS, RB } }, 3587 3426 ··· 3607 3442 3608 3443 { "mtsr", X(31,210), XRB_MASK|(1<<20), COM32, { SR, RS } }, 3609 3444 3610 - { "stdcx.", XRC(31,214,1), X_MASK, PPC64, { RS, RA, RB } }, 3445 + { "stdcx.", XRC(31,214,1), X_MASK, PPC64, { RS, RA0, RB } }, 3611 3446 3612 - { "stbx", X(31,215), X_MASK, COM, { RS, RA, RB } }, 3447 + { "stbx", X(31,215), X_MASK, COM, { RS, RA0, RB } }, 3613 3448 3614 3449 { "sllq", XRC(31,216,0), X_MASK, M601, { RA, RS, RB } }, 3615 3450 { "sllq.", XRC(31,216,1), X_MASK, M601, { RA, RS, RB } }, ··· 3617 3452 { "sleq", XRC(31,217,0), X_MASK, M601, { RA, RS, RB } }, 3618 3453 { "sleq.", XRC(31,217,1), X_MASK, M601, { RA, RS, RB } }, 3619 3454 3620 - { "stbxe", X(31,223), X_MASK, BOOKE64, { RS, RA, RB } }, 3455 + { "stbxe", X(31,223), X_MASK, BOOKE64, { RS, RA0, RB } }, 3621 3456 3622 3457 { "icblc", X(31,230), X_MASK, PPCCHLK, { CT, RA, RB }}, 3623 3458 ··· 3657 3492 { "mtsrin", X(31,242), XRA_MASK, PPC32, { RS, RB } }, 3658 3493 { "mtsri", X(31,242), XRA_MASK, POWER32, { RS, RB } }, 3659 3494 3660 - { "dcbtst", X(31,246), XRT_MASK, PPC, { CT, RA, RB } }, 3495 + { "dcbtst", X(31,246), X_MASK, PPC, { CT, RA, RB } }, 3661 3496 3662 3497 { "stbux", X(31,247), X_MASK, COM, { RS, RAS, RB } }, 3663 3498 ··· 3684 3519 { "addo.", XO(31,266,1,1), XO_MASK, PPCCOM, { RT, RA, RB } }, 3685 3520 { "caxo.", XO(31,266,1,1), XO_MASK, PWRCOM, { RT, RA, RB } }, 3686 3521 3687 - { "tlbiel", X(31,274), XRTRA_MASK, POWER4, { RB } }, 3522 + { "tlbiel", X(31,274), XRTLRA_MASK, POWER4, { RB, L } }, 3688 3523 3689 3524 { "mfapidi", X(31,275), X_MASK, BOOKE, { RT, RA } }, 3690 3525 3691 3526 { "lscbx", XRC(31,277,0), X_MASK, M601, { RT, RA, RB } }, 3692 3527 { "lscbx.", XRC(31,277,1), X_MASK, M601, { RT, RA, RB } }, 3693 3528 3694 - { "dcbt", X(31,278), XRT_MASK, PPC, { CT, RA, RB } }, 3529 + { "dcbt", X(31,278), X_MASK, PPC, { CT, RA, RB } }, 3695 3530 3696 - { "lhzx", X(31,279), X_MASK, COM, { RT, RA, RB } }, 3531 + { "lhzx", X(31,279), X_MASK, COM, { RT, RA0, RB } }, 3697 3532 3698 3533 { "eqv", XRC(31,284,0), X_MASK, COM, { RA, RS, RB } }, 3699 3534 { "eqv.", XRC(31,284,1), X_MASK, COM, { RA, RS, RB } }, 3700 3535 3701 3536 { "dcbte", X(31,286), X_MASK, BOOKE64, { CT, RA, RB } }, 3702 3537 3703 - { "lhzxe", X(31,287), X_MASK, BOOKE64, { RT, RA, RB } }, 3538 + { "lhzxe", X(31,287), X_MASK, BOOKE64, { RT, RA0, RB } }, 3704 3539 3705 3540 { "tlbie", X(31,306), XRTLRA_MASK, PPC, { RB, L } }, 3706 - { "tlbi", X(31,306), XRT_MASK, POWER, { RA, RB } }, 3541 + { "tlbi", X(31,306), XRT_MASK, POWER, { RA0, RB } }, 3707 3542 3708 3543 { "eciwx", X(31,310), X_MASK, PPC, { RT, RA, RB } }, 3709 3544 ··· 3772 3607 { "mfsdr1", XSPR(31,339,25), XSPR_MASK, COM, { RT } }, 3773 3608 { "mfsrr0", XSPR(31,339,26), XSPR_MASK, COM, { RT } }, 3774 3609 { "mfsrr1", XSPR(31,339,27), XSPR_MASK, COM, { RT } }, 3610 + { "mfcfar", XSPR(31,339,28), XSPR_MASK, POWER6, { RT } }, 3775 3611 { "mfpid", XSPR(31,339,48), XSPR_MASK, BOOKE, { RT } }, 3776 3612 { "mfpid", XSPR(31,339,945), XSPR_MASK, PPC403, { RT } }, 3777 3613 { "mfcsrr0", XSPR(31,339,58), XSPR_MASK, BOOKE, { RT } }, ··· 3800 3634 { "mfbar", XSPR(31,339,159), XSPR_MASK, PPC860, { RT } }, 3801 3635 { "mfvrsave", XSPR(31,339,256), XSPR_MASK, PPCVEC, { RT } }, 3802 3636 { "mfusprg0", XSPR(31,339,256), XSPR_MASK, BOOKE, { RT } }, 3803 - { "mfsprg4", XSPR(31,339,260), XSPR_MASK, PPC405, { RT } }, 3804 - { "mfsprg5", XSPR(31,339,261), XSPR_MASK, PPC405, { RT } }, 3805 - { "mfsprg6", XSPR(31,339,262), XSPR_MASK, PPC405, { RT } }, 3806 - { "mfsprg7", XSPR(31,339,263), XSPR_MASK, PPC405, { RT } }, 3807 3637 { "mftb", X(31,371), X_MASK, CLASSIC, { RT, TBR } }, 3808 3638 { "mftb", XSPR(31,339,268), XSPR_MASK, BOOKE, { RT } }, 3809 3639 { "mftbl", XSPR(31,371,268), XSPR_MASK, CLASSIC, { RT } }, 3810 3640 { "mftbl", XSPR(31,339,268), XSPR_MASK, BOOKE, { RT } }, 3811 3641 { "mftbu", XSPR(31,371,269), XSPR_MASK, CLASSIC, { RT } }, 3812 3642 { "mftbu", XSPR(31,339,269), XSPR_MASK, BOOKE, { RT } }, 3813 - { "mfsprg", XSPR(31,339,272), XSPRG_MASK, PPC, { RT, SPRG } }, 3643 + { "mfsprg", XSPR(31,339,256), XSPRG_MASK, PPC, { RT, SPRG } }, 3814 3644 { "mfsprg0", XSPR(31,339,272), XSPR_MASK, PPC, { RT } }, 3815 3645 { "mfsprg1", XSPR(31,339,273), XSPR_MASK, PPC, { RT } }, 3816 3646 { "mfsprg2", XSPR(31,339,274), XSPR_MASK, PPC, { RT } }, 3817 3647 { "mfsprg3", XSPR(31,339,275), XSPR_MASK, PPC, { RT } }, 3648 + { "mfsprg4", XSPR(31,339,260), XSPR_MASK, PPC405 | BOOKE, { RT } }, 3649 + { "mfsprg5", XSPR(31,339,261), XSPR_MASK, PPC405 | BOOKE, { RT } }, 3650 + { "mfsprg6", XSPR(31,339,262), XSPR_MASK, PPC405 | BOOKE, { RT } }, 3651 + { "mfsprg7", XSPR(31,339,263), XSPR_MASK, PPC405 | BOOKE, { RT } }, 3818 3652 { "mfasr", XSPR(31,339,280), XSPR_MASK, PPC64, { RT } }, 3819 3653 { "mfear", XSPR(31,339,282), XSPR_MASK, PPC, { RT } }, 3820 3654 { "mfpir", XSPR(31,339,286), XSPR_MASK, BOOKE, { RT } }, ··· 3865 3699 { "mfspefscr", XSPR(31,339,512), XSPR_MASK, PPCSPE, { RT } }, 3866 3700 { "mfbbear", XSPR(31,339,513), XSPR_MASK, PPCBRLK, { RT } }, 3867 3701 { "mfbbtar", XSPR(31,339,514), XSPR_MASK, PPCBRLK, { RT } }, 3702 + { "mfivor32", XSPR(31,339,528), XSPR_MASK, PPCSPE, { RT } }, 3703 + { "mfivor33", XSPR(31,339,529), XSPR_MASK, PPCSPE, { RT } }, 3704 + { "mfivor34", XSPR(31,339,530), XSPR_MASK, PPCSPE, { RT } }, 3705 + { "mfivor35", XSPR(31,339,531), XSPR_MASK, PPCPMR, { RT } }, 3868 3706 { "mfibatu", XSPR(31,339,528), XSPRBAT_MASK, PPC, { RT, SPRBAT } }, 3869 3707 { "mfibatl", XSPR(31,339,529), XSPRBAT_MASK, PPC, { RT, SPRBAT } }, 3870 3708 { "mfdbatu", XSPR(31,339,536), XSPRBAT_MASK, PPC, { RT, SPRBAT } }, ··· 3878 3708 { "mfic_dat", XSPR(31,339,562), XSPR_MASK, PPC860, { RT } }, 3879 3709 { "mfdc_cst", XSPR(31,339,568), XSPR_MASK, PPC860, { RT } }, 3880 3710 { "mfdc_adr", XSPR(31,339,569), XSPR_MASK, PPC860, { RT } }, 3881 - { "mfdc_dat", XSPR(31,339,570), XSPR_MASK, PPC860, { RT } }, 3882 3711 { "mfmcsrr0", XSPR(31,339,570), XSPR_MASK, PPCRFMCI, { RT } }, 3712 + { "mfdc_dat", XSPR(31,339,570), XSPR_MASK, PPC860, { RT } }, 3883 3713 { "mfmcsrr1", XSPR(31,339,571), XSPR_MASK, PPCRFMCI, { RT } }, 3884 3714 { "mfmcsr", XSPR(31,339,572), XSPR_MASK, PPCRFMCI, { RT } }, 3715 + { "mfmcar", XSPR(31,339,573), XSPR_MASK, PPCRFMCI, { RT } }, 3885 3716 { "mfdpdr", XSPR(31,339,630), XSPR_MASK, PPC860, { RT } }, 3886 3717 { "mfdpir", XSPR(31,339,631), XSPR_MASK, PPC860, { RT } }, 3887 3718 { "mfimmr", XSPR(31,339,638), XSPR_MASK, PPC860, { RT } }, ··· 3946 3775 { "mfpbu2", XSPR(31,339,1023), XSPR_MASK, PPC403, { RT } }, 3947 3776 { "mfspr", X(31,339), X_MASK, COM, { RT, SPR } }, 3948 3777 3949 - { "lwax", X(31,341), X_MASK, PPC64, { RT, RA, RB } }, 3778 + { "lwax", X(31,341), X_MASK, PPC64, { RT, RA0, RB } }, 3950 3779 3951 3780 { "dst", XDSS(31,342,0), XDSS_MASK, PPCVEC, { RA, RB, STRM } }, 3952 3781 { "dstt", XDSS(31,342,1), XDSS_MASK, PPCVEC, { RA, RB, STRM } }, 3953 3782 3954 - { "lhax", X(31,343), X_MASK, COM, { RT, RA, RB } }, 3783 + { "lhax", X(31,343), X_MASK, COM, { RT, RA0, RB } }, 3955 3784 3956 - { "lhaxe", X(31,351), X_MASK, BOOKE64, { RT, RA, RB } }, 3785 + { "lhaxe", X(31,351), X_MASK, BOOKE64, { RT, RA0, RB } }, 3957 3786 3958 3787 { "dstst", XDSS(31,374,0), XDSS_MASK, PPCVEC, { RA, RB, STRM } }, 3959 3788 { "dststt", XDSS(31,374,1), XDSS_MASK, PPCVEC, { RA, RB, STRM } }, ··· 3992 3821 3993 3822 { "slbmte", X(31,402), XRA_MASK, PPC64, { RS, RB } }, 3994 3823 3995 - { "sthx", X(31,407), X_MASK, COM, { RS, RA, RB } }, 3824 + { "sthx", X(31,407), X_MASK, COM, { RS, RA0, RB } }, 3825 + 3826 + { "cmpb", X(31,508), X_MASK, POWER6, { RA, RS, RB } }, 3996 3827 3997 3828 { "lfqx", X(31,791), X_MASK, POWER2, { FRT, RA, RB } }, 3829 + 3830 + { "lfdpx", X(31,791), X_MASK, POWER6, { FRT, RA, RB } }, 3998 3831 3999 3832 { "lfqux", X(31,823), X_MASK, POWER2, { FRT, RA, RB } }, 4000 3833 4001 3834 { "stfqx", X(31,919), X_MASK, POWER2, { FRS, RA, RB } }, 3835 + 3836 + { "stfdpx", X(31,919), X_MASK, POWER6, { FRS, RA, RB } }, 4002 3837 4003 3838 { "stfqux", X(31,951), X_MASK, POWER2, { FRS, RA, RB } }, 4004 3839 ··· 4014 3837 { "sradi", XS(31,413,0), XS_MASK, PPC64, { RA, RS, SH6 } }, 4015 3838 { "sradi.", XS(31,413,1), XS_MASK, PPC64, { RA, RS, SH6 } }, 4016 3839 4017 - { "sthxe", X(31,415), X_MASK, BOOKE64, { RS, RA, RB } }, 3840 + { "sthxe", X(31,415), X_MASK, BOOKE64, { RS, RA0, RB } }, 4018 3841 4019 3842 { "slbie", X(31,434), XRTRA_MASK, PPC64, { RB } }, 4020 3843 ··· 4095 3918 { "mtsdr1", XSPR(31,467,25), XSPR_MASK, COM, { RS } }, 4096 3919 { "mtsrr0", XSPR(31,467,26), XSPR_MASK, COM, { RS } }, 4097 3920 { "mtsrr1", XSPR(31,467,27), XSPR_MASK, COM, { RS } }, 3921 + { "mtcfar", XSPR(31,467,28), XSPR_MASK, POWER6, { RS } }, 4098 3922 { "mtpid", XSPR(31,467,48), XSPR_MASK, BOOKE, { RS } }, 4099 3923 { "mtpid", XSPR(31,467,945), XSPR_MASK, PPC403, { RS } }, 4100 3924 { "mtdecar", XSPR(31,467,54), XSPR_MASK, BOOKE, { RS } }, ··· 4124 3946 { "mtbar", XSPR(31,467,159), XSPR_MASK, PPC860, { RS } }, 4125 3947 { "mtvrsave", XSPR(31,467,256), XSPR_MASK, PPCVEC, { RS } }, 4126 3948 { "mtusprg0", XSPR(31,467,256), XSPR_MASK, BOOKE, { RS } }, 4127 - { "mtsprg", XSPR(31,467,272), XSPRG_MASK,PPC, { SPRG, RS } }, 3949 + { "mtsprg", XSPR(31,467,256), XSPRG_MASK,PPC, { SPRG, RS } }, 4128 3950 { "mtsprg0", XSPR(31,467,272), XSPR_MASK, PPC, { RS } }, 4129 3951 { "mtsprg1", XSPR(31,467,273), XSPR_MASK, PPC, { RS } }, 4130 3952 { "mtsprg2", XSPR(31,467,274), XSPR_MASK, PPC, { RS } }, ··· 4183 4005 { "mtspefscr", XSPR(31,467,512), XSPR_MASK, PPCSPE, { RS } }, 4184 4006 { "mtbbear", XSPR(31,467,513), XSPR_MASK, PPCBRLK, { RS } }, 4185 4007 { "mtbbtar", XSPR(31,467,514), XSPR_MASK, PPCBRLK, { RS } }, 4008 + { "mtivor32", XSPR(31,467,528), XSPR_MASK, PPCSPE, { RS } }, 4009 + { "mtivor33", XSPR(31,467,529), XSPR_MASK, PPCSPE, { RS } }, 4010 + { "mtivor34", XSPR(31,467,530), XSPR_MASK, PPCSPE, { RS } }, 4011 + { "mtivor35", XSPR(31,467,531), XSPR_MASK, PPCPMR, { RS } }, 4186 4012 { "mtibatu", XSPR(31,467,528), XSPRBAT_MASK, PPC, { SPRBAT, RS } }, 4187 4013 { "mtibatl", XSPR(31,467,529), XSPRBAT_MASK, PPC, { SPRBAT, RS } }, 4188 4014 { "mtdbatu", XSPR(31,467,536), XSPRBAT_MASK, PPC, { SPRBAT, RS } }, ··· 4283 4101 4284 4102 { "clcs", X(31,531), XRB_MASK, M601, { RT, RA } }, 4285 4103 4286 - { "lswx", X(31,533), X_MASK, PPCCOM, { RT, RA, RB } }, 4104 + { "ldbrx", X(31,532), X_MASK, CELL, { RT, RA0, RB } }, 4105 + 4106 + { "lswx", X(31,533), X_MASK, PPCCOM, { RT, RA0, RB } }, 4287 4107 { "lsx", X(31,533), X_MASK, PWRCOM, { RT, RA, RB } }, 4288 4108 4289 - { "lwbrx", X(31,534), X_MASK, PPCCOM, { RT, RA, RB } }, 4109 + { "lwbrx", X(31,534), X_MASK, PPCCOM, { RT, RA0, RB } }, 4290 4110 { "lbrx", X(31,534), X_MASK, PWRCOM, { RT, RA, RB } }, 4291 4111 4292 - { "lfsx", X(31,535), X_MASK, COM, { FRT, RA, RB } }, 4112 + { "lfsx", X(31,535), X_MASK, COM, { FRT, RA0, RB } }, 4293 4113 4294 4114 { "srw", XRC(31,536,0), X_MASK, PPCCOM, { RA, RS, RB } }, 4295 4115 { "sr", XRC(31,536,0), X_MASK, PWRCOM, { RA, RS, RB } }, ··· 4307 4123 { "maskir", XRC(31,541,0), X_MASK, M601, { RA, RS, RB } }, 4308 4124 { "maskir.", XRC(31,541,1), X_MASK, M601, { RA, RS, RB } }, 4309 4125 4310 - { "lwbrxe", X(31,542), X_MASK, BOOKE64, { RT, RA, RB } }, 4126 + { "lwbrxe", X(31,542), X_MASK, BOOKE64, { RT, RA0, RB } }, 4311 4127 4312 - { "lfsxe", X(31,543), X_MASK, BOOKE64, { FRT, RA, RB } }, 4128 + { "lfsxe", X(31,543), X_MASK, BOOKE64, { FRT, RA0, RB } }, 4313 4129 4314 4130 { "bbelr", X(31,550), X_MASK, PPCBRLK, { 0 }}, 4131 + 4315 4132 { "tlbsync", X(31,566), 0xffffffff, PPC, { 0 } }, 4316 4133 4317 4134 { "lfsux", X(31,567), X_MASK, COM, { FRT, RAS, RB } }, ··· 4321 4136 4322 4137 { "mfsr", X(31,595), XRB_MASK|(1<<20), COM32, { RT, SR } }, 4323 4138 4324 - { "lswi", X(31,597), X_MASK, PPCCOM, { RT, RA, NB } }, 4325 - { "lsi", X(31,597), X_MASK, PWRCOM, { RT, RA, NB } }, 4139 + { "lswi", X(31,597), X_MASK, PPCCOM, { RT, RA0, NB } }, 4140 + { "lsi", X(31,597), X_MASK, PWRCOM, { RT, RA0, NB } }, 4326 4141 4327 4142 { "lwsync", XSYNC(31,598,1), 0xffffffff, PPC, { 0 } }, 4328 4143 { "ptesync", XSYNC(31,598,2), 0xffffffff, PPC64, { 0 } }, ··· 4330 4145 { "sync", X(31,598), XSYNC_MASK, PPCCOM, { LS } }, 4331 4146 { "dcs", X(31,598), 0xffffffff, PWRCOM, { 0 } }, 4332 4147 4333 - { "lfdx", X(31,599), X_MASK, COM, { FRT, RA, RB } }, 4148 + { "lfdx", X(31,599), X_MASK, COM, { FRT, RA0, RB } }, 4334 4149 4335 - { "lfdxe", X(31,607), X_MASK, BOOKE64, { FRT, RA, RB } }, 4150 + { "lfdxe", X(31,607), X_MASK, BOOKE64, { FRT, RA0, RB } }, 4151 + 4152 + { "mffgpr", XRC(31,607,0), XRA_MASK, POWER6, { FRT, RB } }, 4336 4153 4337 4154 { "mfsri", X(31,627), X_MASK, PWRCOM, { RT, RA, RB } }, 4338 4155 ··· 4346 4159 4347 4160 { "mfsrin", X(31,659), XRA_MASK, PPC32, { RT, RB } }, 4348 4161 4349 - { "stswx", X(31,661), X_MASK, PPCCOM, { RS, RA, RB } }, 4350 - { "stsx", X(31,661), X_MASK, PWRCOM, { RS, RA, RB } }, 4162 + { "stdbrx", X(31,660), X_MASK, CELL, { RS, RA0, RB } }, 4351 4163 4352 - { "stwbrx", X(31,662), X_MASK, PPCCOM, { RS, RA, RB } }, 4353 - { "stbrx", X(31,662), X_MASK, PWRCOM, { RS, RA, RB } }, 4164 + { "stswx", X(31,661), X_MASK, PPCCOM, { RS, RA0, RB } }, 4165 + { "stsx", X(31,661), X_MASK, PWRCOM, { RS, RA0, RB } }, 4354 4166 4355 - { "stfsx", X(31,663), X_MASK, COM, { FRS, RA, RB } }, 4167 + { "stwbrx", X(31,662), X_MASK, PPCCOM, { RS, RA0, RB } }, 4168 + { "stbrx", X(31,662), X_MASK, PWRCOM, { RS, RA0, RB } }, 4169 + 4170 + { "stfsx", X(31,663), X_MASK, COM, { FRS, RA0, RB } }, 4356 4171 4357 4172 { "srq", XRC(31,664,0), X_MASK, M601, { RA, RS, RB } }, 4358 4173 { "srq.", XRC(31,664,1), X_MASK, M601, { RA, RS, RB } }, ··· 4362 4173 { "sre", XRC(31,665,0), X_MASK, M601, { RA, RS, RB } }, 4363 4174 { "sre.", XRC(31,665,1), X_MASK, M601, { RA, RS, RB } }, 4364 4175 4365 - { "stwbrxe", X(31,670), X_MASK, BOOKE64, { RS, RA, RB } }, 4176 + { "stwbrxe", X(31,670), X_MASK, BOOKE64, { RS, RA0, RB } }, 4366 4177 4367 - { "stfsxe", X(31,671), X_MASK, BOOKE64, { FRS, RA, RB } }, 4178 + { "stfsxe", X(31,671), X_MASK, BOOKE64, { FRS, RA0, RB } }, 4368 4179 4369 4180 { "stfsux", X(31,695), X_MASK, COM, { FRS, RAS, RB } }, 4370 4181 ··· 4373 4184 4374 4185 { "stfsuxe", X(31,703), X_MASK, BOOKE64, { FRS, RAS, RB } }, 4375 4186 4376 - { "stswi", X(31,725), X_MASK, PPCCOM, { RS, RA, NB } }, 4377 - { "stsi", X(31,725), X_MASK, PWRCOM, { RS, RA, NB } }, 4187 + { "stswi", X(31,725), X_MASK, PPCCOM, { RS, RA0, NB } }, 4188 + { "stsi", X(31,725), X_MASK, PWRCOM, { RS, RA0, NB } }, 4378 4189 4379 - { "stfdx", X(31,727), X_MASK, COM, { FRS, RA, RB } }, 4190 + { "stfdx", X(31,727), X_MASK, COM, { FRS, RA0, RB } }, 4380 4191 4381 4192 { "srlq", XRC(31,728,0), X_MASK, M601, { RA, RS, RB } }, 4382 4193 { "srlq.", XRC(31,728,1), X_MASK, M601, { RA, RS, RB } }, ··· 4384 4195 { "sreq", XRC(31,729,0), X_MASK, M601, { RA, RS, RB } }, 4385 4196 { "sreq.", XRC(31,729,1), X_MASK, M601, { RA, RS, RB } }, 4386 4197 4387 - { "stfdxe", X(31,735), X_MASK, BOOKE64, { FRS, RA, RB } }, 4198 + { "stfdxe", X(31,735), X_MASK, BOOKE64, { FRS, RA0, RB } }, 4199 + 4200 + { "mftgpr", XRC(31,735,0), XRA_MASK, POWER6, { RT, FRB } }, 4388 4201 4389 4202 { "dcba", X(31,758), XRT_MASK, PPC405 | BOOKE, { RA, RB } }, 4390 4203 ··· 4402 4211 { "tlbivax", X(31,786), XRT_MASK, BOOKE, { RA, RB } }, 4403 4212 { "tlbivaxe",X(31,787), XRT_MASK, BOOKE64, { RA, RB } }, 4404 4213 4405 - { "lhbrx", X(31,790), X_MASK, COM, { RT, RA, RB } }, 4214 + { "lwzcix", X(31,789), X_MASK, POWER6, { RT, RA0, RB } }, 4215 + 4216 + { "lhbrx", X(31,790), X_MASK, COM, { RT, RA0, RB } }, 4406 4217 4407 4218 { "sraw", XRC(31,792,0), X_MASK, PPCCOM, { RA, RS, RB } }, 4408 4219 { "sra", XRC(31,792,0), X_MASK, PWRCOM, { RA, RS, RB } }, ··· 4414 4221 { "srad", XRC(31,794,0), X_MASK, PPC64, { RA, RS, RB } }, 4415 4222 { "srad.", XRC(31,794,1), X_MASK, PPC64, { RA, RS, RB } }, 4416 4223 4417 - { "lhbrxe", X(31,798), X_MASK, BOOKE64, { RT, RA, RB } }, 4224 + { "lhbrxe", X(31,798), X_MASK, BOOKE64, { RT, RA0, RB } }, 4418 4225 4419 - { "ldxe", X(31,799), X_MASK, BOOKE64, { RT, RA, RB } }, 4420 - { "lduxe", X(31,831), X_MASK, BOOKE64, { RT, RA, RB } }, 4226 + { "ldxe", X(31,799), X_MASK, BOOKE64, { RT, RA0, RB } }, 4227 + { "lduxe", X(31,831), X_MASK, BOOKE64, { RT, RA0, RB } }, 4421 4228 4422 4229 { "rac", X(31,818), X_MASK, PWRCOM, { RT, RA, RB } }, 4230 + 4231 + { "lhzcix", X(31,821), X_MASK, POWER6, { RT, RA0, RB } }, 4423 4232 4424 4233 { "dss", XDSS(31,822,0), XDSS_MASK, PPCVEC, { STRM } }, 4425 4234 { "dssall", XDSS(31,822,1), XDSS_MASK, PPCVEC, { 0 } }, ··· 4433 4238 4434 4239 { "slbmfev", X(31,851), XRA_MASK, PPC64, { RT, RB } }, 4435 4240 4241 + { "lbzcix", X(31,853), X_MASK, POWER6, { RT, RA0, RB } }, 4242 + 4436 4243 { "mbar", X(31,854), X_MASK, BOOKE, { MO } }, 4437 4244 { "eieio", X(31,854), 0xffffffff, PPC, { 0 } }, 4438 4245 4439 - { "tlbsx", XRC(31,914,0), X_MASK, BOOKE, { RA, RB } }, 4440 - { "tlbsx", XRC(31,914,0), X_MASK, PPC403, { RT, RA, RB } }, 4441 - { "tlbsx.", XRC(31,914,1), X_MASK, BOOKE, { RA, RB } }, 4442 - { "tlbsx.", XRC(31,914,1), X_MASK, PPC403, { RT, RA, RB } }, 4246 + { "lfiwax", X(31,855), X_MASK, POWER6, { FRT, RA0, RB } }, 4247 + 4248 + { "ldcix", X(31,885), X_MASK, POWER6, { RT, RA0, RB } }, 4249 + 4250 + { "tlbsx", XRC(31,914,0), X_MASK, PPC403|BOOKE, { RTO, RA, RB } }, 4251 + { "tlbsx.", XRC(31,914,1), X_MASK, PPC403|BOOKE, { RTO, RA, RB } }, 4443 4252 { "tlbsxe", XRC(31,915,0), X_MASK, BOOKE64, { RA, RB } }, 4444 4253 { "tlbsxe.", XRC(31,915,1), X_MASK, BOOKE64, { RA, RB } }, 4445 4254 4446 4255 { "slbmfee", X(31,915), XRA_MASK, PPC64, { RT, RB } }, 4447 4256 4448 - { "sthbrx", X(31,918), X_MASK, COM, { RS, RA, RB } }, 4257 + { "stwcix", X(31,917), X_MASK, POWER6, { RS, RA0, RB } }, 4258 + 4259 + { "sthbrx", X(31,918), X_MASK, COM, { RS, RA0, RB } }, 4449 4260 4450 4261 { "sraq", XRC(31,920,0), X_MASK, M601, { RA, RS, RB } }, 4451 4262 { "sraq.", XRC(31,920,1), X_MASK, M601, { RA, RS, RB } }, ··· 4464 4263 { "extsh.", XRC(31,922,1), XRB_MASK, PPCCOM, { RA, RS } }, 4465 4264 { "exts.", XRC(31,922,1), XRB_MASK, PWRCOM, { RA, RS } }, 4466 4265 4467 - { "sthbrxe", X(31,926), X_MASK, BOOKE64, { RS, RA, RB } }, 4266 + { "sthbrxe", X(31,926), X_MASK, BOOKE64, { RS, RA0, RB } }, 4468 4267 4469 - { "stdxe", X(31,927), X_MASK, BOOKE64, { RS, RA, RB } }, 4268 + { "stdxe", X(31,927), X_MASK, BOOKE64, { RS, RA0, RB } }, 4470 4269 4471 4270 { "tlbrehi", XTLB(31,946,0), XTLB_MASK, PPC403, { RT, RA } }, 4472 4271 { "tlbrelo", XTLB(31,946,1), XTLB_MASK, PPC403, { RT, RA } }, 4473 - { "tlbre", X(31,946), X_MASK, BOOKE, { 0 } }, 4474 - { "tlbre", X(31,946), X_MASK, PPC403, { RS, RA, SH } }, 4272 + { "tlbre", X(31,946), X_MASK, PPC403|BOOKE, { RSO, RAOPT, SHO } }, 4273 + 4274 + { "sthcix", X(31,949), X_MASK, POWER6, { RS, RA0, RB } }, 4475 4275 4476 4276 { "sraiq", XRC(31,952,0), X_MASK, M601, { RA, RS, SH } }, 4477 4277 { "sraiq.", XRC(31,952,1), X_MASK, M601, { RA, RS, SH } }, ··· 4486 4284 4487 4285 { "tlbwehi", XTLB(31,978,0), XTLB_MASK, PPC403, { RT, RA } }, 4488 4286 { "tlbwelo", XTLB(31,978,1), XTLB_MASK, PPC403, { RT, RA } }, 4489 - { "tlbwe", X(31,978), X_MASK, BOOKE, { 0 } }, 4490 - { "tlbwe", X(31,978), X_MASK, PPC403, { RS, RA, SH } }, 4287 + { "tlbwe", X(31,978), X_MASK, PPC403|BOOKE, { RSO, RAOPT, SHO } }, 4491 4288 { "tlbld", X(31,978), XRTRA_MASK, PPC, { RB } }, 4289 + 4290 + { "stbcix", X(31,981), X_MASK, POWER6, { RS, RA0, RB } }, 4492 4291 4493 4292 { "icbi", X(31,982), XRT_MASK, PPC, { RA, RB } }, 4494 4293 4495 - { "stfiwx", X(31,983), X_MASK, PPC, { FRS, RA, RB } }, 4294 + { "stfiwx", X(31,983), X_MASK, PPC, { FRS, RA0, RB } }, 4496 4295 4497 4296 { "extsw", XRC(31,986,0), XRB_MASK, PPC64 | BOOKE64,{ RA, RS } }, 4498 4297 { "extsw.", XRC(31,986,1), XRB_MASK, PPC64, { RA, RS } }, ··· 4501 4298 { "icread", X(31,998), XRT_MASK, PPC403|PPC440, { RA, RB } }, 4502 4299 4503 4300 { "icbie", X(31,990), XRT_MASK, BOOKE64, { RA, RB } }, 4504 - { "stfiwxe", X(31,991), X_MASK, BOOKE64, { FRS, RA, RB } }, 4301 + { "stfiwxe", X(31,991), X_MASK, BOOKE64, { FRS, RA0, RB } }, 4505 4302 4506 4303 { "tlbli", X(31,1010), XRTRA_MASK, PPC, { RB } }, 4507 4304 4305 + { "stdcix", X(31,1013), X_MASK, POWER6, { RS, RA0, RB } }, 4306 + 4307 + { "dcbzl", XOPL(31,1014,1), XRT_MASK,POWER4, { RA, RB } }, 4508 4308 { "dcbz", X(31,1014), XRT_MASK, PPC, { RA, RB } }, 4509 4309 { "dclz", X(31,1014), XRT_MASK, PPC, { RA, RB } }, 4510 4310 ··· 4526 4320 { "stvx", X(31, 231), X_MASK, PPCVEC, { VS, RA, RB } }, 4527 4321 { "stvxl", X(31, 487), X_MASK, PPCVEC, { VS, RA, RB } }, 4528 4322 4529 - { "lwz", OP(32), OP_MASK, PPCCOM, { RT, D, RA } }, 4530 - { "l", OP(32), OP_MASK, PWRCOM, { RT, D, RA } }, 4323 + /* New load/store left/right index vector instructions that are in the Cell only. */ 4324 + { "lvlx", X(31, 519), X_MASK, CELL, { VD, RA0, RB } }, 4325 + { "lvlxl", X(31, 775), X_MASK, CELL, { VD, RA0, RB } }, 4326 + { "lvrx", X(31, 551), X_MASK, CELL, { VD, RA0, RB } }, 4327 + { "lvrxl", X(31, 807), X_MASK, CELL, { VD, RA0, RB } }, 4328 + { "stvlx", X(31, 647), X_MASK, CELL, { VS, RA0, RB } }, 4329 + { "stvlxl", X(31, 903), X_MASK, CELL, { VS, RA0, RB } }, 4330 + { "stvrx", X(31, 679), X_MASK, CELL, { VS, RA0, RB } }, 4331 + { "stvrxl", X(31, 935), X_MASK, CELL, { VS, RA0, RB } }, 4332 + 4333 + { "lwz", OP(32), OP_MASK, PPCCOM, { RT, D, RA0 } }, 4334 + { "l", OP(32), OP_MASK, PWRCOM, { RT, D, RA0 } }, 4531 4335 4532 4336 { "lwzu", OP(33), OP_MASK, PPCCOM, { RT, D, RAL } }, 4533 - { "lu", OP(33), OP_MASK, PWRCOM, { RT, D, RA } }, 4337 + { "lu", OP(33), OP_MASK, PWRCOM, { RT, D, RA0 } }, 4534 4338 4535 - { "lbz", OP(34), OP_MASK, COM, { RT, D, RA } }, 4339 + { "lbz", OP(34), OP_MASK, COM, { RT, D, RA0 } }, 4536 4340 4537 4341 { "lbzu", OP(35), OP_MASK, COM, { RT, D, RAL } }, 4538 4342 4539 - { "stw", OP(36), OP_MASK, PPCCOM, { RS, D, RA } }, 4540 - { "st", OP(36), OP_MASK, PWRCOM, { RS, D, RA } }, 4343 + { "stw", OP(36), OP_MASK, PPCCOM, { RS, D, RA0 } }, 4344 + { "st", OP(36), OP_MASK, PWRCOM, { RS, D, RA0 } }, 4541 4345 4542 4346 { "stwu", OP(37), OP_MASK, PPCCOM, { RS, D, RAS } }, 4543 - { "stu", OP(37), OP_MASK, PWRCOM, { RS, D, RA } }, 4347 + { "stu", OP(37), OP_MASK, PWRCOM, { RS, D, RA0 } }, 4544 4348 4545 - { "stb", OP(38), OP_MASK, COM, { RS, D, RA } }, 4349 + { "stb", OP(38), OP_MASK, COM, { RS, D, RA0 } }, 4546 4350 4547 4351 { "stbu", OP(39), OP_MASK, COM, { RS, D, RAS } }, 4548 4352 4549 - { "lhz", OP(40), OP_MASK, COM, { RT, D, RA } }, 4353 + { "lhz", OP(40), OP_MASK, COM, { RT, D, RA0 } }, 4550 4354 4551 4355 { "lhzu", OP(41), OP_MASK, COM, { RT, D, RAL } }, 4552 4356 4553 - { "lha", OP(42), OP_MASK, COM, { RT, D, RA } }, 4357 + { "lha", OP(42), OP_MASK, COM, { RT, D, RA0 } }, 4554 4358 4555 4359 { "lhau", OP(43), OP_MASK, COM, { RT, D, RAL } }, 4556 4360 4557 - { "sth", OP(44), OP_MASK, COM, { RS, D, RA } }, 4361 + { "sth", OP(44), OP_MASK, COM, { RS, D, RA0 } }, 4558 4362 4559 4363 { "sthu", OP(45), OP_MASK, COM, { RS, D, RAS } }, 4560 4364 4561 4365 { "lmw", OP(46), OP_MASK, PPCCOM, { RT, D, RAM } }, 4562 - { "lm", OP(46), OP_MASK, PWRCOM, { RT, D, RA } }, 4366 + { "lm", OP(46), OP_MASK, PWRCOM, { RT, D, RA0 } }, 4563 4367 4564 - { "stmw", OP(47), OP_MASK, PPCCOM, { RS, D, RA } }, 4565 - { "stm", OP(47), OP_MASK, PWRCOM, { RS, D, RA } }, 4368 + { "stmw", OP(47), OP_MASK, PPCCOM, { RS, D, RA0 } }, 4369 + { "stm", OP(47), OP_MASK, PWRCOM, { RS, D, RA0 } }, 4566 4370 4567 - { "lfs", OP(48), OP_MASK, COM, { FRT, D, RA } }, 4371 + { "lfs", OP(48), OP_MASK, COM, { FRT, D, RA0 } }, 4568 4372 4569 4373 { "lfsu", OP(49), OP_MASK, COM, { FRT, D, RAS } }, 4570 4374 4571 - { "lfd", OP(50), OP_MASK, COM, { FRT, D, RA } }, 4375 + { "lfd", OP(50), OP_MASK, COM, { FRT, D, RA0 } }, 4572 4376 4573 4377 { "lfdu", OP(51), OP_MASK, COM, { FRT, D, RAS } }, 4574 4378 4575 - { "stfs", OP(52), OP_MASK, COM, { FRS, D, RA } }, 4379 + { "stfs", OP(52), OP_MASK, COM, { FRS, D, RA0 } }, 4576 4380 4577 4381 { "stfsu", OP(53), OP_MASK, COM, { FRS, D, RAS } }, 4578 4382 4579 - { "stfd", OP(54), OP_MASK, COM, { FRS, D, RA } }, 4383 + { "stfd", OP(54), OP_MASK, COM, { FRS, D, RA0 } }, 4580 4384 4581 4385 { "stfdu", OP(55), OP_MASK, COM, { FRS, D, RAS } }, 4582 4386 4583 4387 { "lq", OP(56), OP_MASK, POWER4, { RTQ, DQ, RAQ } }, 4584 4388 4585 - { "lfq", OP(56), OP_MASK, POWER2, { FRT, D, RA } }, 4389 + { "lfq", OP(56), OP_MASK, POWER2, { FRT, D, RA0 } }, 4586 4390 4587 - { "lfqu", OP(57), OP_MASK, POWER2, { FRT, D, RA } }, 4391 + { "lfqu", OP(57), OP_MASK, POWER2, { FRT, D, RA0 } }, 4588 4392 4589 - { "lbze", DEO(58,0), DE_MASK, BOOKE64, { RT, DE, RA } }, 4393 + { "lfdp", OP(57), OP_MASK, POWER6, { FRT, D, RA0 } }, 4394 + 4395 + { "lbze", DEO(58,0), DE_MASK, BOOKE64, { RT, DE, RA0 } }, 4590 4396 { "lbzue", DEO(58,1), DE_MASK, BOOKE64, { RT, DE, RAL } }, 4591 - { "lhze", DEO(58,2), DE_MASK, BOOKE64, { RT, DE, RA } }, 4397 + { "lhze", DEO(58,2), DE_MASK, BOOKE64, { RT, DE, RA0 } }, 4592 4398 { "lhzue", DEO(58,3), DE_MASK, BOOKE64, { RT, DE, RAL } }, 4593 - { "lhae", DEO(58,4), DE_MASK, BOOKE64, { RT, DE, RA } }, 4399 + { "lhae", DEO(58,4), DE_MASK, BOOKE64, { RT, DE, RA0 } }, 4594 4400 { "lhaue", DEO(58,5), DE_MASK, BOOKE64, { RT, DE, RAL } }, 4595 - { "lwze", DEO(58,6), DE_MASK, BOOKE64, { RT, DE, RA } }, 4401 + { "lwze", DEO(58,6), DE_MASK, BOOKE64, { RT, DE, RA0 } }, 4596 4402 { "lwzue", DEO(58,7), DE_MASK, BOOKE64, { RT, DE, RAL } }, 4597 - { "stbe", DEO(58,8), DE_MASK, BOOKE64, { RS, DE, RA } }, 4403 + { "stbe", DEO(58,8), DE_MASK, BOOKE64, { RS, DE, RA0 } }, 4598 4404 { "stbue", DEO(58,9), DE_MASK, BOOKE64, { RS, DE, RAS } }, 4599 - { "sthe", DEO(58,10), DE_MASK, BOOKE64, { RS, DE, RA } }, 4405 + { "sthe", DEO(58,10), DE_MASK, BOOKE64, { RS, DE, RA0 } }, 4600 4406 { "sthue", DEO(58,11), DE_MASK, BOOKE64, { RS, DE, RAS } }, 4601 - { "stwe", DEO(58,14), DE_MASK, BOOKE64, { RS, DE, RA } }, 4407 + { "stwe", DEO(58,14), DE_MASK, BOOKE64, { RS, DE, RA0 } }, 4602 4408 { "stwue", DEO(58,15), DE_MASK, BOOKE64, { RS, DE, RAS } }, 4603 4409 4604 - { "ld", DSO(58,0), DS_MASK, PPC64, { RT, DS, RA } }, 4410 + { "ld", DSO(58,0), DS_MASK, PPC64, { RT, DS, RA0 } }, 4605 4411 4606 4412 { "ldu", DSO(58,1), DS_MASK, PPC64, { RT, DS, RAL } }, 4607 4413 4608 - { "lwa", DSO(58,2), DS_MASK, PPC64, { RT, DS, RA } }, 4414 + { "lwa", DSO(58,2), DS_MASK, PPC64, { RT, DS, RA0 } }, 4415 + 4416 + { "dadd", XRC(59,2,0), X_MASK, POWER6, { FRT, FRA, FRB } }, 4417 + { "dadd.", XRC(59,2,1), X_MASK, POWER6, { FRT, FRA, FRB } }, 4418 + 4419 + { "dqua", ZRC(59,3,0), Z_MASK, POWER6, { FRT, FRA, FRB, RMC } }, 4420 + { "dqua.", ZRC(59,3,1), Z_MASK, POWER6, { FRT, FRA, FRB, RMC } }, 4609 4421 4610 4422 { "fdivs", A(59,18,0), AFRC_MASK, PPC, { FRT, FRA, FRB } }, 4611 4423 { "fdivs.", A(59,18,1), AFRC_MASK, PPC, { FRT, FRA, FRB } }, ··· 4637 4413 { "fsqrts", A(59,22,0), AFRAFRC_MASK, PPC, { FRT, FRB } }, 4638 4414 { "fsqrts.", A(59,22,1), AFRAFRC_MASK, PPC, { FRT, FRB } }, 4639 4415 4640 - { "fres", A(59,24,0), AFRAFRC_MASK, PPC, { FRT, FRB } }, 4641 - { "fres.", A(59,24,1), AFRAFRC_MASK, PPC, { FRT, FRB } }, 4416 + { "fres", A(59,24,0), AFRALFRC_MASK, PPC, { FRT, FRB, A_L } }, 4417 + { "fres.", A(59,24,1), AFRALFRC_MASK, PPC, { FRT, FRB, A_L } }, 4642 4418 4643 4419 { "fmuls", A(59,25,0), AFRB_MASK, PPC, { FRT, FRA, FRC } }, 4644 4420 { "fmuls.", A(59,25,1), AFRB_MASK, PPC, { FRT, FRA, FRC } }, 4421 + 4422 + { "frsqrtes", A(59,26,0), AFRALFRC_MASK,POWER5, { FRT, FRB, A_L } }, 4423 + { "frsqrtes.",A(59,26,1), AFRALFRC_MASK,POWER5, { FRT, FRB, A_L } }, 4645 4424 4646 4425 { "fmsubs", A(59,28,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, 4647 4426 { "fmsubs.", A(59,28,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, ··· 4658 4431 { "fnmadds", A(59,31,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, 4659 4432 { "fnmadds.",A(59,31,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, 4660 4433 4434 + { "dmul", XRC(59,34,0), X_MASK, POWER6, { FRT, FRA, FRB } }, 4435 + { "dmul.", XRC(59,34,1), X_MASK, POWER6, { FRT, FRA, FRB } }, 4436 + 4437 + { "drrnd", ZRC(59,35,0), Z_MASK, POWER6, { FRT, FRA, FRB, RMC } }, 4438 + { "drrnd.", ZRC(59,35,1), Z_MASK, POWER6, { FRT, FRA, FRB, RMC } }, 4439 + 4440 + { "dscli", ZRC(59,66,0), Z_MASK, POWER6, { FRT, FRA, SH16 } }, 4441 + { "dscli.", ZRC(59,66,1), Z_MASK, POWER6, { FRT, FRA, SH16 } }, 4442 + 4443 + { "dquai", ZRC(59,67,0), Z_MASK, POWER6, { TE, FRT, FRB, RMC } }, 4444 + { "dquai.", ZRC(59,67,1), Z_MASK, POWER6, { TE, FRT, FRB, RMC } }, 4445 + 4446 + { "dscri", ZRC(59,98,0), Z_MASK, POWER6, { FRT, FRA, SH16 } }, 4447 + { "dscri.", ZRC(59,98,1), Z_MASK, POWER6, { FRT, FRA, SH16 } }, 4448 + 4449 + { "drintx", ZRC(59,99,0), Z_MASK, POWER6, { R, FRT, FRB, RMC } }, 4450 + { "drintx.", ZRC(59,99,1), Z_MASK, POWER6, { R, FRT, FRB, RMC } }, 4451 + 4452 + { "dcmpo", X(59,130), X_MASK, POWER6, { BF, FRA, FRB } }, 4453 + 4454 + { "dtstex", X(59,162), X_MASK, POWER6, { BF, FRA, FRB } }, 4455 + { "dtstdc", Z(59,194), Z_MASK, POWER6, { BF, FRA, DCM } }, 4456 + { "dtstdg", Z(59,226), Z_MASK, POWER6, { BF, FRA, DGM } }, 4457 + 4458 + { "drintn", ZRC(59,227,0), Z_MASK, POWER6, { R, FRT, FRB, RMC } }, 4459 + { "drintn.", ZRC(59,227,1), Z_MASK, POWER6, { R, FRT, FRB, RMC } }, 4460 + 4461 + { "dctdp", XRC(59,258,0), X_MASK, POWER6, { FRT, FRB } }, 4462 + { "dctdp.", XRC(59,258,1), X_MASK, POWER6, { FRT, FRB } }, 4463 + 4464 + { "dctfix", XRC(59,290,0), X_MASK, POWER6, { FRT, FRB } }, 4465 + { "dctfix.", XRC(59,290,1), X_MASK, POWER6, { FRT, FRB } }, 4466 + 4467 + { "ddedpd", XRC(59,322,0), X_MASK, POWER6, { SP, FRT, FRB } }, 4468 + { "ddedpd.", XRC(59,322,1), X_MASK, POWER6, { SP, FRT, FRB } }, 4469 + 4470 + { "dxex", XRC(59,354,0), X_MASK, POWER6, { FRT, FRB } }, 4471 + { "dxex.", XRC(59,354,1), X_MASK, POWER6, { FRT, FRB } }, 4472 + 4473 + { "dsub", XRC(59,514,0), X_MASK, POWER6, { FRT, FRA, FRB } }, 4474 + { "dsub.", XRC(59,514,1), X_MASK, POWER6, { FRT, FRA, FRB } }, 4475 + 4476 + { "ddiv", XRC(59,546,0), X_MASK, POWER6, { FRT, FRA, FRB } }, 4477 + { "ddiv.", XRC(59,546,1), X_MASK, POWER6, { FRT, FRA, FRB } }, 4478 + 4479 + { "dcmpu", X(59,642), X_MASK, POWER6, { BF, FRA, FRB } }, 4480 + 4481 + { "dtstsf", X(59,674), X_MASK, POWER6, { BF, FRA, FRB } }, 4482 + 4483 + { "drsp", XRC(59,770,0), X_MASK, POWER6, { FRT, FRB } }, 4484 + { "drsp.", XRC(59,770,1), X_MASK, POWER6, { FRT, FRB } }, 4485 + 4486 + { "dcffix", XRC(59,802,0), X_MASK, POWER6, { FRT, FRB } }, 4487 + { "dcffix.", XRC(59,802,1), X_MASK, POWER6, { FRT, FRB } }, 4488 + 4489 + { "denbcd", XRC(59,834,0), X_MASK, POWER6, { S, FRT, FRB } }, 4490 + { "denbcd.", XRC(59,834,1), X_MASK, POWER6, { S, FRT, FRB } }, 4491 + 4492 + { "diex", XRC(59,866,0), X_MASK, POWER6, { FRT, FRA, FRB } }, 4493 + { "diex.", XRC(59,866,1), X_MASK, POWER6, { FRT, FRA, FRB } }, 4494 + 4661 4495 { "stfq", OP(60), OP_MASK, POWER2, { FRS, D, RA } }, 4662 4496 4663 4497 { "stfqu", OP(61), OP_MASK, POWER2, { FRS, D, RA } }, 4664 4498 4665 - { "lde", DEO(62,0), DE_MASK, BOOKE64, { RT, DES, RA } }, 4666 - { "ldue", DEO(62,1), DE_MASK, BOOKE64, { RT, DES, RA } }, 4667 - { "lfse", DEO(62,4), DE_MASK, BOOKE64, { FRT, DES, RA } }, 4499 + { "stfdp", OP(61), OP_MASK, POWER6, { FRT, D, RA0 } }, 4500 + 4501 + { "lde", DEO(62,0), DE_MASK, BOOKE64, { RT, DES, RA0 } }, 4502 + { "ldue", DEO(62,1), DE_MASK, BOOKE64, { RT, DES, RA0 } }, 4503 + { "lfse", DEO(62,4), DE_MASK, BOOKE64, { FRT, DES, RA0 } }, 4668 4504 { "lfsue", DEO(62,5), DE_MASK, BOOKE64, { FRT, DES, RAS } }, 4669 - { "lfde", DEO(62,6), DE_MASK, BOOKE64, { FRT, DES, RA } }, 4505 + { "lfde", DEO(62,6), DE_MASK, BOOKE64, { FRT, DES, RA0 } }, 4670 4506 { "lfdue", DEO(62,7), DE_MASK, BOOKE64, { FRT, DES, RAS } }, 4671 - { "stde", DEO(62,8), DE_MASK, BOOKE64, { RS, DES, RA } }, 4507 + { "stde", DEO(62,8), DE_MASK, BOOKE64, { RS, DES, RA0 } }, 4672 4508 { "stdue", DEO(62,9), DE_MASK, BOOKE64, { RS, DES, RAS } }, 4673 - { "stfse", DEO(62,12), DE_MASK, BOOKE64, { FRS, DES, RA } }, 4509 + { "stfse", DEO(62,12), DE_MASK, BOOKE64, { FRS, DES, RA0 } }, 4674 4510 { "stfsue", DEO(62,13), DE_MASK, BOOKE64, { FRS, DES, RAS } }, 4675 - { "stfde", DEO(62,14), DE_MASK, BOOKE64, { FRS, DES, RA } }, 4511 + { "stfde", DEO(62,14), DE_MASK, BOOKE64, { FRS, DES, RA0 } }, 4676 4512 { "stfdue", DEO(62,15), DE_MASK, BOOKE64, { FRS, DES, RAS } }, 4677 4513 4678 - { "std", DSO(62,0), DS_MASK, PPC64, { RS, DS, RA } }, 4514 + { "std", DSO(62,0), DS_MASK, PPC64, { RS, DS, RA0 } }, 4679 4515 4680 4516 { "stdu", DSO(62,1), DS_MASK, PPC64, { RS, DS, RAS } }, 4681 4517 4682 - { "stq", DSO(62,2), DS_MASK, POWER4, { RSQ, DS, RA } }, 4518 + { "stq", DSO(62,2), DS_MASK, POWER4, { RSQ, DS, RA0 } }, 4683 4519 4684 4520 { "fcmpu", X(63,0), X_MASK|(3<<21), COM, { BF, FRA, FRB } }, 4521 + 4522 + { "daddq", XRC(63,2,0), X_MASK, POWER6, { FRT, FRA, FRB } }, 4523 + { "daddq.", XRC(63,2,1), X_MASK, POWER6, { FRT, FRA, FRB } }, 4524 + 4525 + { "dquaq", ZRC(63,3,0), Z_MASK, POWER6, { FRT, FRA, FRB, RMC } }, 4526 + { "dquaq.", ZRC(63,3,1), Z_MASK, POWER6, { FRT, FRA, FRB, RMC } }, 4527 + 4528 + { "fcpsgn", XRC(63,8,0), X_MASK, POWER6, { FRT, FRA, FRB } }, 4529 + { "fcpsgn.", XRC(63,8,1), X_MASK, POWER6, { FRT, FRA, FRB } }, 4685 4530 4686 4531 { "frsp", XRC(63,12,0), XRA_MASK, COM, { FRT, FRB } }, 4687 4532 { "frsp.", XRC(63,12,1), XRA_MASK, COM, { FRT, FRB } }, ··· 4789 4490 { "fsel", A(63,23,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, 4790 4491 { "fsel.", A(63,23,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } }, 4791 4492 4493 + { "fre", A(63,24,0), AFRALFRC_MASK, POWER5, { FRT, FRB, A_L } }, 4494 + { "fre.", A(63,24,1), AFRALFRC_MASK, POWER5, { FRT, FRB, A_L } }, 4495 + 4792 4496 { "fmul", A(63,25,0), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } }, 4793 4497 { "fm", A(63,25,0), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } }, 4794 4498 { "fmul.", A(63,25,1), AFRB_MASK, PPCCOM, { FRT, FRA, FRC } }, 4795 4499 { "fm.", A(63,25,1), AFRB_MASK, PWRCOM, { FRT, FRA, FRC } }, 4796 4500 4797 - { "frsqrte", A(63,26,0), AFRAFRC_MASK, PPC, { FRT, FRB } }, 4798 - { "frsqrte.",A(63,26,1), AFRAFRC_MASK, PPC, { FRT, FRB } }, 4501 + { "frsqrte", A(63,26,0), AFRALFRC_MASK, PPC, { FRT, FRB, A_L } }, 4502 + { "frsqrte.",A(63,26,1), AFRALFRC_MASK, PPC, { FRT, FRB, A_L } }, 4799 4503 4800 4504 { "fmsub", A(63,28,0), A_MASK, PPCCOM, { FRT,FRA,FRC,FRB } }, 4801 4505 { "fms", A(63,28,0), A_MASK, PWRCOM, { FRT,FRA,FRC,FRB } }, ··· 4822 4520 4823 4521 { "fcmpo", X(63,32), X_MASK|(3<<21), COM, { BF, FRA, FRB } }, 4824 4522 4523 + { "dmulq", XRC(63,34,0), X_MASK, POWER6, { FRT, FRA, FRB } }, 4524 + { "dmulq.", XRC(63,34,1), X_MASK, POWER6, { FRT, FRA, FRB } }, 4525 + 4526 + { "drrndq", ZRC(63,35,0), Z_MASK, POWER6, { FRT, FRA, FRB, RMC } }, 4527 + { "drrndq.", ZRC(63,35,1), Z_MASK, POWER6, { FRT, FRA, FRB, RMC } }, 4528 + 4825 4529 { "mtfsb1", XRC(63,38,0), XRARB_MASK, COM, { BT } }, 4826 4530 { "mtfsb1.", XRC(63,38,1), XRARB_MASK, COM, { BT } }, 4827 4531 ··· 4836 4528 4837 4529 { "mcrfs", X(63,64), XRB_MASK|(3<<21)|(3<<16), COM, { BF, BFA } }, 4838 4530 4531 + { "dscliq", ZRC(63,66,0), Z_MASK, POWER6, { FRT, FRA, SH16 } }, 4532 + { "dscliq.", ZRC(63,66,1), Z_MASK, POWER6, { FRT, FRA, SH16 } }, 4533 + 4534 + { "dquaiq", ZRC(63,67,0), Z_MASK, POWER6, { TE, FRT, FRB, RMC } }, 4535 + { "dquaiq.", ZRC(63,67,1), Z_MASK, POWER6, { FRT, FRA, FRB, RMC } }, 4536 + 4839 4537 { "mtfsb0", XRC(63,70,0), XRARB_MASK, COM, { BT } }, 4840 4538 { "mtfsb0.", XRC(63,70,1), XRARB_MASK, COM, { BT } }, 4841 4539 4842 4540 { "fmr", XRC(63,72,0), XRA_MASK, COM, { FRT, FRB } }, 4843 4541 { "fmr.", XRC(63,72,1), XRA_MASK, COM, { FRT, FRB } }, 4542 + 4543 + { "dscriq", ZRC(63,98,0), Z_MASK, POWER6, { FRT, FRA, SH16 } }, 4544 + { "dscriq.", ZRC(63,98,1), Z_MASK, POWER6, { FRT, FRA, SH16 } }, 4545 + 4546 + { "drintxq", ZRC(63,99,0), Z_MASK, POWER6, { R, FRT, FRB, RMC } }, 4547 + { "drintxq.",ZRC(63,99,1), Z_MASK, POWER6, { R, FRT, FRB, RMC } }, 4548 + 4549 + { "dcmpoq", X(63,130), X_MASK, POWER6, { BF, FRA, FRB } }, 4844 4550 4845 4551 { "mtfsfi", XRC(63,134,0), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } }, 4846 4552 { "mtfsfi.", XRC(63,134,1), XRA_MASK|(3<<21)|(1<<11), COM, { BF, U } }, ··· 4862 4540 { "fnabs", XRC(63,136,0), XRA_MASK, COM, { FRT, FRB } }, 4863 4541 { "fnabs.", XRC(63,136,1), XRA_MASK, COM, { FRT, FRB } }, 4864 4542 4543 + { "dtstexq", X(63,162), X_MASK, POWER6, { BF, FRA, FRB } }, 4544 + { "dtstdcq", Z(63,194), Z_MASK, POWER6, { BF, FRA, DCM } }, 4545 + { "dtstdgq", Z(63,226), Z_MASK, POWER6, { BF, FRA, DGM } }, 4546 + 4547 + { "drintnq", ZRC(63,227,0), Z_MASK, POWER6, { R, FRT, FRB, RMC } }, 4548 + { "drintnq.",ZRC(63,227,1), Z_MASK, POWER6, { R, FRT, FRB, RMC } }, 4549 + 4550 + { "dctqpq", XRC(63,258,0), X_MASK, POWER6, { FRT, FRB } }, 4551 + { "dctqpq.", XRC(63,258,1), X_MASK, POWER6, { FRT, FRB } }, 4552 + 4865 4553 { "fabs", XRC(63,264,0), XRA_MASK, COM, { FRT, FRB } }, 4866 4554 { "fabs.", XRC(63,264,1), XRA_MASK, COM, { FRT, FRB } }, 4555 + 4556 + { "dctfixq", XRC(63,290,0), X_MASK, POWER6, { FRT, FRB } }, 4557 + { "dctfixq.",XRC(63,290,1), X_MASK, POWER6, { FRT, FRB } }, 4558 + 4559 + { "ddedpdq", XRC(63,322,0), X_MASK, POWER6, { SP, FRT, FRB } }, 4560 + { "ddedpdq.",XRC(63,322,1), X_MASK, POWER6, { SP, FRT, FRB } }, 4561 + 4562 + { "dxexq", XRC(63,354,0), X_MASK, POWER6, { FRT, FRB } }, 4563 + { "dxexq.", XRC(63,354,1), X_MASK, POWER6, { FRT, FRB } }, 4564 + 4565 + { "frin", XRC(63,392,0), XRA_MASK, POWER5, { FRT, FRB } }, 4566 + { "frin.", XRC(63,392,1), XRA_MASK, POWER5, { FRT, FRB } }, 4567 + { "friz", XRC(63,424,0), XRA_MASK, POWER5, { FRT, FRB } }, 4568 + { "friz.", XRC(63,424,1), XRA_MASK, POWER5, { FRT, FRB } }, 4569 + { "frip", XRC(63,456,0), XRA_MASK, POWER5, { FRT, FRB } }, 4570 + { "frip.", XRC(63,456,1), XRA_MASK, POWER5, { FRT, FRB } }, 4571 + { "frim", XRC(63,488,0), XRA_MASK, POWER5, { FRT, FRB } }, 4572 + { "frim.", XRC(63,488,1), XRA_MASK, POWER5, { FRT, FRB } }, 4573 + 4574 + { "dsubq", XRC(63,514,0), X_MASK, POWER6, { FRT, FRA, FRB } }, 4575 + { "dsubq.", XRC(63,514,1), X_MASK, POWER6, { FRT, FRA, FRB } }, 4576 + 4577 + { "ddivq", XRC(63,546,0), X_MASK, POWER6, { FRT, FRA, FRB } }, 4578 + { "ddivq.", XRC(63,546,1), X_MASK, POWER6, { FRT, FRA, FRB } }, 4867 4579 4868 4580 { "mffs", XRC(63,583,0), XRARB_MASK, COM, { FRT } }, 4869 4581 { "mffs.", XRC(63,583,1), XRARB_MASK, COM, { FRT } }, 4870 4582 4583 + { "dcmpuq", X(63,642), X_MASK, POWER6, { BF, FRA, FRB } }, 4584 + 4585 + { "dtstsfq", X(63,674), X_MASK, POWER6, { BF, FRA, FRB } }, 4586 + 4871 4587 { "mtfsf", XFL(63,711,0), XFL_MASK, COM, { FLM, FRB } }, 4872 4588 { "mtfsf.", XFL(63,711,1), XFL_MASK, COM, { FLM, FRB } }, 4589 + 4590 + { "drdpq", XRC(63,770,0), X_MASK, POWER6, { FRT, FRB } }, 4591 + { "drdpq.", XRC(63,770,1), X_MASK, POWER6, { FRT, FRB } }, 4592 + 4593 + { "dcffixq", XRC(63,802,0), X_MASK, POWER6, { FRT, FRB } }, 4594 + { "dcffixq.",XRC(63,802,1), X_MASK, POWER6, { FRT, FRB } }, 4873 4595 4874 4596 { "fctid", XRC(63,814,0), XRA_MASK, PPC64, { FRT, FRB } }, 4875 4597 { "fctid.", XRC(63,814,1), XRA_MASK, PPC64, { FRT, FRB } }, ··· 4921 4555 { "fctidz", XRC(63,815,0), XRA_MASK, PPC64, { FRT, FRB } }, 4922 4556 { "fctidz.", XRC(63,815,1), XRA_MASK, PPC64, { FRT, FRB } }, 4923 4557 4558 + { "denbcdq", XRC(63,834,0), X_MASK, POWER6, { S, FRT, FRB } }, 4559 + { "denbcdq.",XRC(63,834,1), X_MASK, POWER6, { S, FRT, FRB } }, 4560 + 4924 4561 { "fcfid", XRC(63,846,0), XRA_MASK, PPC64, { FRT, FRB } }, 4925 4562 { "fcfid.", XRC(63,846,1), XRA_MASK, PPC64, { FRT, FRB } }, 4563 + 4564 + { "diexq", XRC(63,866,0), X_MASK, POWER6, { FRT, FRA, FRB } }, 4565 + { "diexq.", XRC(63,866,1), X_MASK, POWER6, { FRT, FRA, FRB } }, 4926 4566 4927 4567 }; 4928 4568
+27 -12
arch/powerpc/xmon/ppc.h
··· 1 1 /* ppc.h -- Header file for PowerPC opcode table 2 - Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003 2 + Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 3 3 Free Software Foundation, Inc. 4 4 Written by Ian Lance Taylor, Cygnus Support 5 5 ··· 17 17 18 18 You should have received a copy of the GNU General Public License 19 19 along with this file; see the file COPYING. If not, write to the Free 20 - Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 20 + Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ 21 21 22 22 #ifndef PPC_H 23 23 #define PPC_H ··· 134 134 /* Opcode is supported by machine check APU. */ 135 135 #define PPC_OPCODE_RFMCI 0x800000 136 136 137 + /* Opcode is only supported by Power5 architecture. */ 138 + #define PPC_OPCODE_POWER5 0x1000000 139 + 140 + /* Opcode is supported by PowerPC e300 family. */ 141 + #define PPC_OPCODE_E300 0x2000000 142 + 143 + /* Opcode is only supported by Power6 architecture. */ 144 + #define PPC_OPCODE_POWER6 0x4000000 145 + 146 + /* Opcode is only supported by PowerPC Cell family. */ 147 + #define PPC_OPCODE_CELL 0x8000000 148 + 137 149 /* A macro to extract the major opcode from an instruction. */ 138 150 #define PPC_OP(i) (((i) >> 26) & 0x3f) 139 151 ··· 245 233 register names with a leading 'r'. */ 246 234 #define PPC_OPERAND_GPR (040) 247 235 236 + /* Like PPC_OPERAND_GPR, but don't print a leading 'r' for r0. */ 237 + #define PPC_OPERAND_GPR_0 (0100) 238 + 248 239 /* This operand names a floating point register. The disassembler 249 240 prints these with a leading 'f'. */ 250 - #define PPC_OPERAND_FPR (0100) 241 + #define PPC_OPERAND_FPR (0200) 251 242 252 243 /* This operand is a relative branch displacement. The disassembler 253 244 prints these symbolically if possible. */ 254 - #define PPC_OPERAND_RELATIVE (0200) 245 + #define PPC_OPERAND_RELATIVE (0400) 255 246 256 247 /* This operand is an absolute branch address. The disassembler 257 248 prints these symbolically if possible. */ 258 - #define PPC_OPERAND_ABSOLUTE (0400) 249 + #define PPC_OPERAND_ABSOLUTE (01000) 259 250 260 251 /* This operand is optional, and is zero if omitted. This is used for 261 - the optional BF and L fields in the comparison instructions. The 252 + example, in the optional BF field in the comparison instructions. The 262 253 assembler must count the number of operands remaining on the line, 263 254 and the number of operands remaining for the opcode, and decide 264 255 whether this operand is present or not. The disassembler should 265 256 print this operand out only if it is not zero. */ 266 - #define PPC_OPERAND_OPTIONAL (01000) 257 + #define PPC_OPERAND_OPTIONAL (02000) 267 258 268 259 /* This flag is only used with PPC_OPERAND_OPTIONAL. If this operand 269 260 is omitted, then for the next operand use this operand value plus ··· 274 259 hack is needed because the Power rotate instructions can take 275 260 either 4 or 5 operands. The disassembler should print this operand 276 261 out regardless of the PPC_OPERAND_OPTIONAL field. */ 277 - #define PPC_OPERAND_NEXT (02000) 262 + #define PPC_OPERAND_NEXT (04000) 278 263 279 264 /* This operand should be regarded as a negative number for the 280 265 purposes of overflow checking (i.e., the normal most negative 281 266 number is disallowed and one more than the normal most positive 282 267 number is allowed). This flag will only be set for a signed 283 268 operand. */ 284 - #define PPC_OPERAND_NEGATIVE (04000) 269 + #define PPC_OPERAND_NEGATIVE (010000) 285 270 286 271 /* This operand names a vector unit register. The disassembler 287 272 prints these with a leading 'v'. */ 288 - #define PPC_OPERAND_VR (010000) 273 + #define PPC_OPERAND_VR (020000) 289 274 290 275 /* This operand is for the DS field in a DS form instruction. */ 291 - #define PPC_OPERAND_DS (020000) 276 + #define PPC_OPERAND_DS (040000) 292 277 293 278 /* This operand is for the DQ field in a DQ form instruction. */ 294 - #define PPC_OPERAND_DQ (040000) 279 + #define PPC_OPERAND_DQ (0100000) 295 280 296 281 /* The POWER and PowerPC assemblers use a few macros. We keep them 297 282 with the operands table for simplicity. The macro table is an