* ppc-opc.c: Changes based on patch from David Edelsohn

<edelsohn@npac.syr.edu>.
	(powerpc_operands): Add operands SPRBAT and SPRG. Split TBR out of
	SPR.
	(FXM_MASK): Define.
	(insert_tbr): New static function.
	(extract_tbr): New static function.
	(XFXFXM_MASK, XFXM): Define.
	(XSPRBAT_MASK, XSPRG_MASK): Define.
	(powerpc_opcodes): Add instructions to access special registers by
	name.  Add mtcr and mftbu.
This commit is contained in:
Ian Lance Taylor 1995-01-26 23:35:32 +00:00
parent 4b412ed189
commit 669124ef4f
2 changed files with 229 additions and 41 deletions

View File

@ -1,3 +1,22 @@
Thu Jan 26 18:32:08 1995 Ian Lance Taylor <ian@cygnus.com>
* ppc-opc.c: Changes based on patch from David Edelsohn
<edelsohn@npac.syr.edu>.
(powerpc_operands): Add operands SPRBAT and SPRG. Split TBR out of
SPR.
(FXM_MASK): Define.
(insert_tbr): New static function.
(extract_tbr): New static function.
(XFXFXM_MASK, XFXM): Define.
(XSPRBAT_MASK, XSPRG_MASK): Define.
(powerpc_opcodes): Add instructions to access special registers by
name. Add mtcr and mftbu.
Tue Jan 17 10:56:43 1995 Ian Lance Taylor <ian@sanguine.cygnus.com>
* mips-opc.c (P3): Define.
(mips_opcodes): Add mad and madu.
Sun Jan 15 16:32:59 1995 Steve Chamberlain <sac@splat>
* configure.in: Add W65 support.

View File

@ -63,12 +63,17 @@ static unsigned long insert_nb PARAMS ((unsigned long, long, const char **));
static long extract_nb PARAMS ((unsigned long, int *));
static unsigned long insert_nsi PARAMS ((unsigned long, long, const char **));
static long extract_nsi PARAMS ((unsigned long, int *));
static unsigned long insert_ral PARAMS ((unsigned long, long, const char **));
static unsigned long insert_ram PARAMS ((unsigned long, long, const char **));
static unsigned long insert_ras PARAMS ((unsigned long, long, const char **));
static unsigned long insert_rbs PARAMS ((unsigned long, long, const char **));
static long extract_rbs PARAMS ((unsigned long, int *));
static unsigned long insert_sh6 PARAMS ((unsigned long, long, const char **));
static long extract_sh6 PARAMS ((unsigned long, int *));
static unsigned long insert_spr PARAMS ((unsigned long, long, const char **));
static long extract_spr PARAMS ((unsigned long, int *));
static unsigned long insert_tbr PARAMS ((unsigned long, long, const char **));
static long extract_tbr PARAMS ((unsigned long, int *));
/* The operands table.
@ -221,6 +226,7 @@ const struct powerpc_operand powerpc_operands[] =
/* The FXM field in an XFX instruction. */
#define FXM (FRS + 1)
#define FXM_MASK (0xff << 12)
{ 8, 12, 0, 0, 0 },
/* The L field in a D or X form instruction. */
@ -282,8 +288,25 @@ const struct powerpc_operand powerpc_operands[] =
#define RA_MASK (0x1f << 16)
{ 5, 16, 0, 0, PPC_OPERAND_GPR },
/* The RA field in a D or X form instruction which is an updating
load, which means that the RA field may not be zero and may not
equal the RT field. */
#define RAL (RA + 1)
{ 5, 16, insert_ral, 0, PPC_OPERAND_GPR },
/* The RA field in an lmw instruction, which has special value
restrictions. */
#define RAM (RAL + 1)
{ 5, 16, insert_ram, 0, PPC_OPERAND_GPR },
/* The RA field in a D or X form instruction which is an updating
store or an updating floating point load, which means that the RA
field may not be zero. */
#define RAS (RAM + 1)
{ 5, 16, insert_ras, 0, PPC_OPERAND_GPR },
/* The RB field in an X, XO, M, or MDS form instruction. */
#define RB (RA + 1)
#define RB (RAS + 1)
#define RB_MASK (0x1f << 11)
{ 5, 11, 0, 0, PPC_OPERAND_GPR },
@ -320,24 +343,37 @@ const struct powerpc_operand powerpc_operands[] =
#define SISIGNOPT (SI + 1)
{ 16, 0, 0, 0, PPC_OPERAND_SIGNED | PPC_OPERAND_SIGNOPT },
/* The SPR or TBR field in an XFX form instruction. This is
flipped--the lower 5 bits are stored in the upper 5 and vice-
versa. */
/* The SPR field in an XFX form instruction. This is flipped--the
lower 5 bits are stored in the upper 5 and vice- versa. */
#define SPR (SISIGNOPT + 1)
#define TBR (SPR)
#define SPR_MASK (0x3ff << 11)
{ 10, 11, insert_spr, extract_spr, 0 },
/* The BAT index number in an XFX form m[ft]ibat[lu] instruction. */
#define SPRBAT (SPR + 1)
#define SPRBAT_MASK (0x3 << 17)
{ 2, 17, 0, 0, 0 },
/* The SPRG register number in an XFX form m[ft]sprg instruction. */
#define SPRG (SPRBAT + 1)
#define SPRG_MASK (0x3 << 16)
{ 2, 16, 0, 0, 0 },
/* The SR field in an X form instruction. */
#define SR (SPR + 1)
#define SR (SPRG + 1)
{ 4, 16, 0, 0, 0 },
/* The SV field in a POWER SC form instruction. */
#define SV (SR + 1)
{ 14, 2, 0, 0, 0 },
/* The TBR field in an XFX form instruction. This is like the SPR
field, but it is optional. */
#define TBR (SV + 1)
{ 10, 11, insert_tbr, extract_tbr, PPC_OPERAND_OPTIONAL },
/* The TO field in a D or X form instruction. */
#define TO (SV + 1)
#define TO (TBR + 1)
#define TO_MASK (0x1f << 21)
{ 5, 21, 0, 0, 0 },
@ -808,6 +844,51 @@ extract_nsi (insn, invalid)
return - (insn & 0xffff);
}
/* The RA field in a D or X form instruction which is an updating
load, which means that the RA field may not be zero and may not
equal the RT field. */
static unsigned long
insert_ral (insn, value, errmsg)
unsigned long insn;
long value;
const char **errmsg;
{
if (value == 0
|| value == ((insn >> 21) & 0x1f))
*errmsg = "invalid register operand when updating";
return insn | ((value & 0x1f) << 16);
}
/* The RA field in an lmw instruction, which has special value
restrictions. */
static unsigned long
insert_ram (insn, value, errmsg)
unsigned long insn;
long value;
const char **errmsg;
{
if (value >= ((insn >> 21) & 0x1f))
*errmsg = "index register in load range";
return insn | ((value & 0x1f) << 16);
}
/* The RA field in a D or X form instruction which is an updating
store or an updating floating point load, which means that the RA
field may not be zero. */
static unsigned long
insert_ras (insn, value, errmsg)
unsigned long insn;
long value;
const char **errmsg;
{
if (value == 0)
*errmsg = "invalid register operand when updating";
return insn | ((value & 0x1f) << 16);
}
/* The RB field in an X form instruction when it must be the same as
the RS field in the instruction. This is used for extended
mnemonics like mr. This operand is marked FAKE. The insertion
@ -856,9 +937,8 @@ extract_sh6 (insn, invalid)
return ((insn >> 11) & 0x1f) | ((insn << 4) & 0x20);
}
/* The SPR or TBR field in an XFX form instruction. This is
flipped--the lower 5 bits are stored in the upper 5 and vice-
versa. */
/* The SPR field in an XFX form instruction. This is flipped--the
lower 5 bits are stored in the upper 5 and vice- versa. */
static unsigned long
insert_spr (insn, value, errmsg)
@ -876,6 +956,40 @@ extract_spr (insn, invalid)
{
return ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
}
/* The TBR field in an XFX instruction. This is just like SPR, but it
is optional. When TBR is omitted, it must be inserted as 268 (the
magic number of the TB register). These functions treat 0
(indicating an omitted optional operand) as 268. This means that
``mftb 4,0'' is not handled correctly. This does not matter very
much, since the architecture manual does not define mftb as
accepting any values other than 268 or 269. */
#define TB (268)
static unsigned long
insert_tbr (insn, value, errmsg)
unsigned long insn;
long value;
const char **errmsg;
{
if (value == 0)
value = TB;
return insn | ((value & 0x1f) << 16) | ((value & 0x3e0) << 6);
}
static long
extract_tbr (insn, invalid)
unsigned long insn;
int *invalid;
{
long ret;
ret = ((insn >> 16) & 0x1f) | ((insn >> 6) & 0x3e0);
if (ret == TB)
ret = 0;
return ret;
}
/* Macros used to form opcodes. */
@ -1065,11 +1179,26 @@ extract_spr (insn, invalid)
#define XS(op, xop, rc) (OP (op) | (((xop) & 0x1ff) << 2) | ((rc) & 1))
#define XS_MASK XS (0x3f, 0x1ff, 1)
/* A mask for the FXM version of an XFX form instruction. */
#define XFXFXM_MASK (X_MASK | (1 << 20) | (1 << 11))
/* An XFX form instruction with the FXM field filled in. */
#define XFXM(op, xop, fxm) \
(X ((op), (xop)) | (((fxm) & 0xff) << 12))
/* An XFX form instruction with the SPR field filled in. */
#define XSPR(op, xop, spr) \
(X ((op), (xop)) | (((spr) & 0x1f) << 16) | (((spr) & 0x3e0) << 6))
#define XSPR_MASK (X_MASK | SPR_MASK)
/* An XFX form instruction with the SPR field filled in except for the
SPRBAT field. */
#define XSPRBAT_MASK (XSPR_MASK &~ SPRBAT_MASK)
/* An XFX form instruction with the SPR field filled in except for the
SPRG field. */
#define XSPRG_MASK (XSPR_MASK &~ SPRG_MASK)
/* The BO encodings used in extended conditional branch mnemonics. */
#define BODNZF (0x0)
#define BODNZFP (0x1)
@ -1854,8 +1983,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "cmpw", XCMPL(31,0,0), XCMPL_MASK, PPC, { OBF, RA, RB } },
{ "cmpd", XCMPL(31,0,1), XCMPL_MASK, PPC|B64, { OBF, RA, RB } },
{ "cmp", X(31,0), XCMPL_MASK, POWER, { BF, RA, RB } },
{ "cmp", X(31,0), XCMP_MASK, PPC, { BF, L, RA, RB } },
{ "cmp", X(31,0), XCMPL_MASK, POWER, { BF, RA, RB } },
{ "twlgt", XTO(31,4,TOLGT), XTO_MASK, PPC, { RA, RB } },
{ "tlgt", XTO(31,4,TOLGT), XTO_MASK, POWER, { RA, RB } },
@ -1947,8 +2076,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "cmplw", XCMPL(31,32,0), XCMPL_MASK, PPC, { OBF, RA, RB } },
{ "cmpld", XCMPL(31,32,1), XCMPL_MASK, PPC|B64, { OBF, RA, RB } },
{ "cmpl", X(31,32), XCMPL_MASK, POWER, { BF, RA, RB } },
{ "cmpl", X(31,32), XCMP_MASK, PPC, { BF, L, RA, RB } },
{ "cmpl", X(31,32), XCMPL_MASK, POWER, { BF, RA, RB } },
{ "subf", XO(31,40,0,0), XO_MASK, PPC, { RT, RA, RB } },
{ "sub", XO(31,40,0,0), XO_MASK, PPC, { RT, RB, RA } },
@ -1959,11 +2088,11 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "subfo.", XO(31,40,1,1), XO_MASK, PPC, { RT, RA, RB } },
{ "subo.", XO(31,40,1,1), XO_MASK, PPC, { RT, RB, RA } },
{ "ldux", X(31,53), X_MASK, PPC|B64, { RT, RA, RB } },
{ "ldux", X(31,53), X_MASK, PPC|B64, { RT, RAL, RB } },
{ "dcbst", X(31,54), XRT_MASK, PPC, { RA, RB } },
{ "lwzux", X(31,55), X_MASK, PPC, { RT, RA, RB } },
{ "lwzux", X(31,55), X_MASK, PPC, { RT, RAL, RB } },
{ "lux", X(31,55), X_MASK, POWER, { RT, RA, RB } },
{ "cntlzd", XRC(31,58,0), XRB_MASK, PPC|B64, { RA, RS } },
@ -2014,7 +2143,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "clf", X(31,118), XRB_MASK, POWER, { RT, RA } },
{ "lbzux", X(31,119), X_MASK, PPC|POWER, { RT, RA, RB } },
{ "lbzux", X(31,119), X_MASK, PPC|POWER, { RT, RAL, RB } },
{ "not", XRC(31,124,0), X_MASK, PPC|POWER, { RA, RS, RBS } },
{ "nor", XRC(31,124,0), X_MASK, PPC|POWER, { RA, RS, RB } },
@ -2039,7 +2168,8 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "addeo.", XO(31,138,1,1), XO_MASK, PPC, { RT, RA, RB } },
{ "aeo.", XO(31,138,1,1), XO_MASK, POWER, { RT, RA, RB } },
{ "mtcrf", X(31,144), X_MASK|(1<<20)|(1<<11), PPC|POWER, { FXM, RS } },
{ "mtcr", XFXM(31,144,0xff), XFXFXM_MASK|FXM_MASK, PPC|POWER, { RS }},
{ "mtcrf", X(31,144), XFXFXM_MASK, PPC|POWER, { FXM, RS } },
{ "mtmsr", X(31,146), XRARB_MASK, PPC|POWER, { RS } },
@ -2056,9 +2186,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "sle", XRC(31,153,0), X_MASK, POWER|M601, { RA, RS, RB } },
{ "sle.", XRC(31,153,1), X_MASK, POWER|M601, { RA, RS, RB } },
{ "stdux", X(31,181), X_MASK, PPC|B64, { RS, RA, RB } },
{ "stdux", X(31,181), X_MASK, PPC|B64, { RS, RAS, RB } },
{ "stwux", X(31,183), X_MASK, PPC, { RS, RA, RB } },
{ "stwux", X(31,183), X_MASK, PPC, { RS, RAS, RB } },
{ "stux", X(31,183), X_MASK, POWER, { RS, RA, RB } },
{ "sliq", XRC(31,184,0), X_MASK, POWER|M601, { RA, RS, SH } },
@ -2131,7 +2261,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "dcbtst", X(31,246), XRT_MASK, PPC, { RA, RB } },
{ "stbux", X(31,247), X_MASK, PPC|POWER, { RS, RA, RB } },
{ "stbux", X(31,247), X_MASK, PPC|POWER, { RS, RAS, RB } },
{ "slliq", XRC(31,248,0), X_MASK, POWER|M601, { RA, RS, SH } },
{ "slliq.", XRC(31,248,1), X_MASK, POWER|M601, { RA, RS, SH } },
@ -2165,7 +2295,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "eciwx", X(31,310), X_MASK, PPC, { RT, RA, RB } },
{ "lhzux", X(31,311), X_MASK, PPC|POWER, { RT, RA, RB } },
{ "lhzux", X(31,311), X_MASK, PPC|POWER, { RT, RAL, RB } },
{ "xor", XRC(31,316,0), X_MASK, PPC|POWER, { RA, RS, RB } },
{ "xor.", XRC(31,316,1), X_MASK, PPC|POWER, { RA, RS, RB } },
@ -2177,8 +2307,27 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "mfmq", XSPR(31,339,0), XSPR_MASK, POWER|M601, { RT } },
{ "mfxer", XSPR(31,339,1), XSPR_MASK, PPC|POWER, { RT } },
{ "mfrtcu", XSPR(31,339,4), XSPR_MASK, PPC|POWER, { RT } },
{ "mfrtcl", XSPR(31,339,5), XSPR_MASK, PPC|POWER, { RT } },
{ "mfdec", XSPR(31,339,6), XSPR_MASK, POWER|M601, { RT } },
{ "mflr", XSPR(31,339,8), XSPR_MASK, PPC|POWER, { RT } },
{ "mfctr", XSPR(31,339,9), XSPR_MASK, PPC|POWER, { RT } },
{ "mftid", XSPR(31,339,17), XSPR_MASK, POWER, { RT } },
{ "mfdsisr", XSPR(31,339,18), XSPR_MASK, PPC|POWER, { RT } },
{ "mfdar", XSPR(31,339,19), XSPR_MASK, PPC|POWER, { RT } },
{ "mfdec", XSPR(31,339,22), XSPR_MASK, PPC, { RT } },
{ "mfsdr0", XSPR(31,339,24), XSPR_MASK, POWER, { RT } },
{ "mfsdr1", XSPR(31,339,25), XSPR_MASK, PPC|POWER, { RT } },
{ "mfsrr0", XSPR(31,339,26), XSPR_MASK, PPC|POWER, { RT } },
{ "mfsrr1", XSPR(31,339,27), XSPR_MASK, PPC|POWER, { RT } },
{ "mfsprg", XSPR(31,339,272), XSPRG_MASK, PPC, { RT, SPRG } },
{ "mfasr", XSPR(31,339,280), XSPR_MASK, PPC|B64, { RT } },
{ "mfear", XSPR(31,339,282), XSPR_MASK, PPC, { RT } },
{ "mfpvr", XSPR(31,339,287), XSPR_MASK, PPC, { RT } },
{ "mfibatu", XSPR(31,339,528), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
{ "mfibatl", XSPR(31,339,529), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
{ "mfdbatu", XSPR(31,339,536), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
{ "mfdbatl", XSPR(31,339,537), XSPRBAT_MASK, PPC, { RT, SPRBAT } },
{ "mfspr", X(31,339), X_MASK, PPC|POWER, { RT, SPR } },
{ "lwax", X(31,341), X_MASK, PPC|B64, { RT, RA, RB } },
@ -2197,11 +2346,12 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "tlbia", X(31,370), 0xffffffff, PPC, { 0 } },
{ "mftbu", XSPR(31,371,269), XSPR_MASK, PPC, { RT } },
{ "mftb", X(31,371), X_MASK, PPC, { RT, TBR } },
{ "lwaux", X(31,373), X_MASK, PPC|B64, { RT, RA, RB } },
{ "lwaux", X(31,373), X_MASK, PPC|B64, { RT, RAL, RB } },
{ "lhaux", X(31,375), X_MASK, PPC|POWER, { RT, RA, RB } },
{ "lhaux", X(31,375), X_MASK, PPC|POWER, { RT, RAL, RB } },
{ "sthx", X(31,407), X_MASK, PPC|POWER, { RS, RA, RB } },
@ -2223,7 +2373,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "ecowx", X(31,438), X_MASK, PPC, { RT, RA, RB } },
{ "sthux", X(31,439), X_MASK, PPC|POWER, { RS, RA, RB } },
{ "sthux", X(31,439), X_MASK, PPC|POWER, { RS, RAS, RB } },
{ "mr", XRC(31,444,0), X_MASK, PPC|POWER, { RA, RS, RBS } },
{ "or", XRC(31,444,0), X_MASK, PPC|POWER, { RA, RS, RB } },
@ -2244,6 +2394,25 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "mtxer", XSPR(31,467,1), XSPR_MASK, PPC|POWER, { RS } },
{ "mtlr", XSPR(31,467,8), XSPR_MASK, PPC|POWER, { RS } },
{ "mtctr", XSPR(31,467,9), XSPR_MASK, PPC|POWER, { RS } },
{ "mttid", XSPR(31,467,17), XSPR_MASK, POWER, { RS } },
{ "mtdsisr", XSPR(31,467,18), XSPR_MASK, PPC|POWER, { RS } },
{ "mtdar", XSPR(31,467,19), XSPR_MASK, PPC|POWER, { RS } },
{ "mtrtcu", XSPR(31,467,20), XSPR_MASK, PPC|POWER, { RS } },
{ "mtrtcl", XSPR(31,467,21), XSPR_MASK, PPC|POWER, { RS } },
{ "mtdec", XSPR(31,467,22), XSPR_MASK, PPC|POWER, { RS } },
{ "mtsdr0", XSPR(31,467,24), XSPR_MASK, POWER, { RS } },
{ "mtsdr1", XSPR(31,467,25), XSPR_MASK, PPC|POWER, { RS } },
{ "mtsrr0", XSPR(31,467,26), XSPR_MASK, PPC|POWER, { RS } },
{ "mtsrr1", XSPR(31,467,27), XSPR_MASK, PPC|POWER, { RS } },
{ "mtsprg", XSPR(31,467,272), XSPRG_MASK, PPC, { SPRG, RS } },
{ "mtasr", XSPR(31,467,280), XSPR_MASK, PPC|B64, { RS } },
{ "mtear", XSPR(31,467,282), XSPR_MASK, PPC, { RS } },
{ "mttbl", XSPR(31,467,284), XSPR_MASK, PPC, { RS } },
{ "mttbu", XSPR(31,467,285), XSPR_MASK, PPC, { RS } },
{ "mtibatu", XSPR(31,467,528), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
{ "mtibatl", XSPR(31,467,529), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
{ "mtdbatu", XSPR(31,467,536), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
{ "mtdbatl", XSPR(31,467,537), XSPRBAT_MASK, PPC, { SPRBAT, RS } },
{ "mtspr", X(31,467), X_MASK, PPC|POWER, { SPR, RS } },
{ "dcbi", X(31,470), XRT_MASK, PPC, { RA, RB } },
@ -2298,7 +2467,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "tlbsync", X(31,566), 0xffffffff, PPC, { 0 } },
{ "lfsux", X(31,567), X_MASK, PPC|POWER, { FRT, RA, RB } },
{ "lfsux", X(31,567), X_MASK, PPC|POWER, { FRT, RAS, RB } },
{ "mfsr", X(31,595), XRB_MASK|(1<<20), PPC|POWER|B32, { RT, SR } },
@ -2314,7 +2483,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "dclst", X(31,630), XRB_MASK, POWER, { RS, RA } },
{ "lfdux", X(31,631), X_MASK, PPC|POWER, { FRT, RA, RB } },
{ "lfdux", X(31,631), X_MASK, PPC|POWER, { FRT, RAS, RB } },
{ "mfsrin", X(31,659), XRA_MASK, PPC|B32, { RT, RB } },
@ -2332,7 +2501,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "sre", XRC(31,665,0), X_MASK, POWER|M601, { RA, RS, RB } },
{ "sre.", XRC(31,665,1), X_MASK, POWER|M601, { RA, RS, RB } },
{ "stfsux", X(31,695), X_MASK, PPC|POWER, { FRS, RA, RB } },
{ "stfsux", X(31,695), X_MASK, PPC|POWER, { FRS, RAS, RB } },
{ "sriq", XRC(31,696,0), X_MASK, POWER|M601, { RA, RS, SH } },
{ "sriq.", XRC(31,696,1), X_MASK, POWER|M601, { RA, RS, SH } },
@ -2348,7 +2517,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "sreq", XRC(31,729,0), X_MASK, POWER|M601, { RA, RS, RB } },
{ "sreq.", XRC(31,729,1), X_MASK, POWER|M601, { RA, RS, RB } },
{ "stfdux", X(31,759), X_MASK, PPC|POWER, { FRS, RA, RB } },
{ "stfdux", X(31,759), X_MASK, PPC|POWER, { FRS, RAS, RB } },
{ "srliq", XRC(31,760,0), X_MASK, POWER|M601, { RA, RS, SH } },
{ "srliq.", XRC(31,760,1), X_MASK, POWER|M601, { RA, RS, SH } },
@ -2404,36 +2573,36 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "lwz", OP(32), OP_MASK, PPC, { RT, D, RA } },
{ "l", OP(32), OP_MASK, POWER, { RT, D, RA } },
{ "lwzu", OP(33), OP_MASK, PPC, { RT, D, RA } },
{ "lwzu", OP(33), OP_MASK, PPC, { RT, D, RAL } },
{ "lu", OP(33), OP_MASK, POWER, { RT, D, RA } },
{ "lbz", OP(34), OP_MASK, PPC|POWER, { RT, D, RA } },
{ "lbzu", OP(35), OP_MASK, PPC|POWER, { RT, D, RA } },
{ "lbzu", OP(35), OP_MASK, PPC|POWER, { RT, D, RAL } },
{ "stw", OP(36), OP_MASK, PPC, { RS, D, RA } },
{ "st", OP(36), OP_MASK, POWER, { RS, D, RA } },
{ "stwu", OP(37), OP_MASK, PPC, { RS, D, RA } },
{ "stwu", OP(37), OP_MASK, PPC, { RS, D, RAS } },
{ "stu", OP(37), OP_MASK, POWER, { RS, D, RA } },
{ "stb", OP(38), OP_MASK, PPC|POWER, { RS, D, RA } },
{ "stbu", OP(39), OP_MASK, PPC|POWER, { RS, D, RA } },
{ "stbu", OP(39), OP_MASK, PPC|POWER, { RS, D, RAS } },
{ "lhz", OP(40), OP_MASK, PPC|POWER, { RT, D, RA } },
{ "lhzu", OP(41), OP_MASK, PPC|POWER, { RT, D, RA } },
{ "lhzu", OP(41), OP_MASK, PPC|POWER, { RT, D, RAL } },
{ "lha", OP(42), OP_MASK, PPC|POWER, { RT, D, RA } },
{ "lhau", OP(43), OP_MASK, PPC|POWER, { RT, D, RA } },
{ "lhau", OP(43), OP_MASK, PPC|POWER, { RT, D, RAL } },
{ "sth", OP(44), OP_MASK, PPC|POWER, { RS, D, RA } },
{ "sthu", OP(45), OP_MASK, PPC|POWER, { RS, D, RA } },
{ "sthu", OP(45), OP_MASK, PPC|POWER, { RS, D, RAS } },
{ "lmw", OP(46), OP_MASK, PPC, { RT, D, RA } },
{ "lmw", OP(46), OP_MASK, PPC, { RT, D, RAM } },
{ "lm", OP(46), OP_MASK, POWER, { RT, D, RA } },
{ "stmw", OP(47), OP_MASK, PPC, { RS, D, RA } },
@ -2441,19 +2610,19 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "lfs", OP(48), OP_MASK, PPC|POWER, { FRT, D, RA } },
{ "lfsu", OP(49), OP_MASK, PPC|POWER, { FRT, D, RA } },
{ "lfsu", OP(49), OP_MASK, PPC|POWER, { FRT, D, RAS } },
{ "lfd", OP(50), OP_MASK, PPC|POWER, { FRT, D, RA } },
{ "lfdu", OP(51), OP_MASK, PPC|POWER, { FRT, D, RA } },
{ "lfdu", OP(51), OP_MASK, PPC|POWER, { FRT, D, RAS } },
{ "stfs", OP(52), OP_MASK, PPC|POWER, { FRS, D, RA } },
{ "stfsu", OP(53), OP_MASK, PPC|POWER, { FRS, D, RA } },
{ "stfsu", OP(53), OP_MASK, PPC|POWER, { FRS, D, RAS } },
{ "stfd", OP(54), OP_MASK, PPC|POWER, { FRS, D, RA } },
{ "stfdu", OP(55), OP_MASK, PPC|POWER, { FRS, D, RA } },
{ "stfdu", OP(55), OP_MASK, PPC|POWER, { FRS, D, RAS } },
{ "lfq", OP(56), OP_MASK, POWER2, { FRT, D, RA } },
@ -2461,7 +2630,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "ld", DSO(58,0), DS_MASK, PPC|B64, { RT, DS, RA } },
{ "ldu", DSO(58,1), DS_MASK, PPC|B64, { RT, DS, RA } },
{ "ldu", DSO(58,1), DS_MASK, PPC|B64, { RT, DS, RAL } },
{ "lwa", DSO(58,2), DS_MASK, PPC|B64, { RT, DS, RA } },
@ -2501,7 +2670,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "std", DSO(62,0), DS_MASK, PPC|B64, { RS, DS, RA } },
{ "stdu", DSO(62,1), DS_MASK, PPC|B64, { RS, DS, RA } },
{ "stdu", DSO(62,1), DS_MASK, PPC|B64, { RS, DS, RAS } },
{ "fcmpu", X(63,0), X_MASK|(3<<21), PPC|POWER, { BF, FRA, FRB } },