summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/powerpc/ppcfe.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/powerpc/ppcfe.c')
-rw-r--r--src/emu/cpu/powerpc/ppcfe.c628
1 files changed, 314 insertions, 314 deletions
diff --git a/src/emu/cpu/powerpc/ppcfe.c b/src/emu/cpu/powerpc/ppcfe.c
index 0cbb792b5d5..5a66a15b474 100644
--- a/src/emu/cpu/powerpc/ppcfe.c
+++ b/src/emu/cpu/powerpc/ppcfe.c
@@ -46,34 +46,34 @@
// MACROS
//**************************************************************************
-#define GPR_USED(desc, x) do { (desc).regin[0] |= REGFLAG_R(x); } while (0)
-#define GPR_USED_OR_ZERO(desc, x) do { (desc).regin[0] |= ((x) == 0 ? 0 : REGFLAG_R(x)); } while (0)
-#define GPR_MODIFIED(desc, x) do { (desc).regout[0] |= REGFLAG_R(x); } while (0)
+#define GPR_USED(desc, x) do { (desc).regin[0] |= REGFLAG_R(x); } while (0)
+#define GPR_USED_OR_ZERO(desc, x) do { (desc).regin[0] |= ((x) == 0 ? 0 : REGFLAG_R(x)); } while (0)
+#define GPR_MODIFIED(desc, x) do { (desc).regout[0] |= REGFLAG_R(x); } while (0)
-#define FPR_USED(desc, x) do { (desc).regin[1] |= REGFLAG_FR(x); } while (0)
-#define FPR_MODIFIED(desc, x) do { (desc).regout[1] |= REGFLAG_FR(x); } while (0)
+#define FPR_USED(desc, x) do { (desc).regin[1] |= REGFLAG_FR(x); } while (0)
+#define FPR_MODIFIED(desc, x) do { (desc).regout[1] |= REGFLAG_FR(x); } while (0)
-#define CR_USED(desc, x) do { (desc).regin[2] |= REGFLAG_CR(x); } while (0)
-#define CR_BIT_USED(desc, x) do { (desc).regin[2] |= REGFLAG_CR_BIT(x); } while (0)
-#define CR_MODIFIED(desc, x) do { (desc).regout[2] |= REGFLAG_CR(x); } while (0)
-#define CR_BIT_MODIFIED(desc, x) do { (desc).regout[2] |= REGFLAG_CR_BIT(x); } while (0)
+#define CR_USED(desc, x) do { (desc).regin[2] |= REGFLAG_CR(x); } while (0)
+#define CR_BIT_USED(desc, x) do { (desc).regin[2] |= REGFLAG_CR_BIT(x); } while (0)
+#define CR_MODIFIED(desc, x) do { (desc).regout[2] |= REGFLAG_CR(x); } while (0)
+#define CR_BIT_MODIFIED(desc, x) do { (desc).regout[2] |= REGFLAG_CR_BIT(x); } while (0)
-#define XER_CA_USED(desc) do { (desc).regin[3] |= REGFLAG_XER_CA; } while (0)
-#define XER_OV_USED(desc) do { (desc).regin[3] |= REGFLAG_XER_OV; } while (0)
-#define XER_SO_USED(desc) do { (desc).regin[3] |= REGFLAG_XER_SO; } while (0)
-#define XER_COUNT_USED(desc) do { (desc).regin[3] |= REGFLAG_XER_COUNT; } while (0)
-#define XER_CA_MODIFIED(desc) do { (desc).regout[3] |= REGFLAG_XER_CA; } while (0)
-#define XER_OV_MODIFIED(desc) do { (desc).regout[3] |= REGFLAG_XER_OV; } while (0)
-#define XER_SO_MODIFIED(desc) do { (desc).regout[3] |= REGFLAG_XER_SO; } while (0)
-#define XER_COUNT_MODIFIED(desc) do { (desc).regout[3] |= REGFLAG_XER_COUNT; } while (0)
+#define XER_CA_USED(desc) do { (desc).regin[3] |= REGFLAG_XER_CA; } while (0)
+#define XER_OV_USED(desc) do { (desc).regin[3] |= REGFLAG_XER_OV; } while (0)
+#define XER_SO_USED(desc) do { (desc).regin[3] |= REGFLAG_XER_SO; } while (0)
+#define XER_COUNT_USED(desc) do { (desc).regin[3] |= REGFLAG_XER_COUNT; } while (0)
+#define XER_CA_MODIFIED(desc) do { (desc).regout[3] |= REGFLAG_XER_CA; } while (0)
+#define XER_OV_MODIFIED(desc) do { (desc).regout[3] |= REGFLAG_XER_OV; } while (0)
+#define XER_SO_MODIFIED(desc) do { (desc).regout[3] |= REGFLAG_XER_SO; } while (0)
+#define XER_COUNT_MODIFIED(desc) do { (desc).regout[3] |= REGFLAG_XER_COUNT; } while (0)
-#define CTR_USED(desc) do { (desc).regin[3] |= REGFLAG_CTR; } while (0)
-#define CTR_MODIFIED(desc) do { (desc).regout[3] |= REGFLAG_CTR; } while (0)
-#define LR_USED(desc) do { (desc).regin[3] |= REGFLAG_LR; } while (0)
-#define LR_MODIFIED(desc) do { (desc).regout[3] |= REGFLAG_LR; } while (0)
+#define CTR_USED(desc) do { (desc).regin[3] |= REGFLAG_CTR; } while (0)
+#define CTR_MODIFIED(desc) do { (desc).regout[3] |= REGFLAG_CTR; } while (0)
+#define LR_USED(desc) do { (desc).regin[3] |= REGFLAG_LR; } while (0)
+#define LR_MODIFIED(desc) do { (desc).regout[3] |= REGFLAG_LR; } while (0)
-#define FPSCR_USED(desc, x) do { (desc).regin[3] |= REGFLAG_FPSCR(x); } while (0)
-#define FPSCR_MODIFIED(desc, x) do { (desc).regout[3] |= REGFLAG_FPSCR(x); } while (0)
+#define FPSCR_USED(desc, x) do { (desc).regin[3] |= REGFLAG_FPSCR(x); } while (0)
+#define FPSCR_MODIFIED(desc, x) do { (desc).regout[3] |= REGFLAG_FPSCR(x); } while (0)
@@ -87,7 +87,7 @@
ppc_frontend::ppc_frontend(powerpc_state &state, UINT32 window_start, UINT32 window_end, UINT32 max_sequence)
: drc_frontend(*state.device, window_start, window_end, max_sequence),
- m_context(state)
+ m_context(state)
{
}
@@ -122,53 +122,53 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
opswitch = op >> 26;
switch (opswitch)
{
- case 0x02: // TDI - 64-bit only
- case 0x1e: // 0x1e group - 64-bit only
- case 0x3a: // 0x3a group - 64-bit only
- case 0x3e: // 0x3e group - 64-bit only
+ case 0x02: // TDI - 64-bit only
+ case 0x1e: // 0x1e group - 64-bit only
+ case 0x3a: // 0x3a group - 64-bit only
+ case 0x3e: // 0x3e group - 64-bit only
return false;
- case 0x03: // TWI
+ case 0x03: // TWI
GPR_USED(desc, G_RA(op));
desc.flags |= OPFLAG_CAN_CAUSE_EXCEPTION;
if (is_603_class())
- desc.cycles = 2; // 603
+ desc.cycles = 2; // 603
return true;
- case 0x07: // MULLI
+ case 0x07: // MULLI
GPR_USED(desc, G_RA(op));
GPR_MODIFIED(desc, G_RD(op));
if (is_403_class())
- desc.cycles = 4; // 4XX
+ desc.cycles = 4; // 4XX
else if (is_601_class())
- desc.cycles = 5; // 601
+ desc.cycles = 5; // 601
else if (is_603_class())
- desc.cycles = 2; // 603: 2-3
+ desc.cycles = 2; // 603: 2-3
else
- desc.cycles = 2; // ???
+ desc.cycles = 2; // ???
return true;
- case 0x0e: // ADDI
- case 0x0f: // ADDIS
+ case 0x0e: // ADDI
+ case 0x0f: // ADDIS
GPR_USED_OR_ZERO(desc, G_RA(op));
GPR_MODIFIED(desc, G_RD(op));
return true;
- case 0x0a: // CMPLI
- case 0x0b: // CMPI
+ case 0x0a: // CMPLI
+ case 0x0b: // CMPI
GPR_USED(desc, G_RA(op));
XER_SO_USED(desc);
CR_MODIFIED(desc, G_CRFD(op));
return true;
- case 0x08: // SUBFIC
- case 0x0c: // ADDIC
+ case 0x08: // SUBFIC
+ case 0x0c: // ADDIC
GPR_USED(desc, G_RA(op));
GPR_MODIFIED(desc, G_RD(op));
XER_CA_MODIFIED(desc);
return true;
- case 0x0d: // ADDIC.
+ case 0x0d: // ADDIC.
GPR_USED(desc, G_RA(op));
XER_SO_USED(desc);
GPR_MODIFIED(desc, G_RT(op));
@@ -176,7 +176,7 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
CR_MODIFIED(desc, 0);
return true;
- case 0x10: // BCx
+ case 0x10: // BCx
if (!(G_BO(op) & 0x10))
{
CR_BIT_USED(desc, G_BI(op));
@@ -200,19 +200,19 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.cycles = 1;
return true;
- case 0x11: // SC
+ case 0x11: // SC
if (!(m_context.cap & (PPCCAP_OEA | PPCCAP_4XX)))
return false;
desc.flags |= OPFLAG_WILL_CAUSE_EXCEPTION;
if (is_601_class())
- desc.cycles = 16; // 601
+ desc.cycles = 16; // 601
else if (is_603_class())
- desc.cycles = 3; // 603
+ desc.cycles = 3; // 603
else
- desc.cycles = 3; // ???
+ desc.cycles = 3; // ???
return true;
- case 0x12: // Bx
+ case 0x12: // Bx
if (op & M_LK)
LR_MODIFIED(desc);
desc.flags |= OPFLAG_IS_UNCONDITIONAL_BRANCH | OPFLAG_END_SEQUENCE;
@@ -222,10 +222,10 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.cycles = 0;
return true;
- case 0x13: // 0x13 group
+ case 0x13: // 0x13 group
return describe_13(op, desc, prev);
- case 0x14: // RLWIMIx
+ case 0x14: // RLWIMIx
GPR_USED(desc, G_RS(op));
GPR_USED(desc, G_RA(op));
GPR_MODIFIED(desc, G_RA(op));
@@ -236,7 +236,7 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
}
return true;
- case 0x15: // RLWINMx
+ case 0x15: // RLWINMx
GPR_USED(desc, G_RS(op));
GPR_MODIFIED(desc, G_RA(op));
if (op & M_RC)
@@ -246,7 +246,7 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
}
return true;
- case 0x17: // RLWNMx
+ case 0x17: // RLWNMx
GPR_USED(desc, G_RS(op));
GPR_USED(desc, G_RB(op));
GPR_MODIFIED(desc, G_RA(op));
@@ -257,38 +257,38 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
}
return true;
- case 0x18: // ORI
- case 0x19: // ORIS
- case 0x1a: // XORI
- case 0x1b: // XORIS
+ case 0x18: // ORI
+ case 0x19: // ORIS
+ case 0x1a: // XORI
+ case 0x1b: // XORIS
GPR_USED(desc, G_RS(op));
GPR_MODIFIED(desc, G_RA(op));
return true;
- case 0x1c: // ANDI.
- case 0x1d: // ANDIS.
+ case 0x1c: // ANDI.
+ case 0x1d: // ANDIS.
GPR_USED(desc, G_RS(op));
XER_SO_USED(desc);
GPR_MODIFIED(desc, G_RA(op));
CR_MODIFIED(desc, 0);
return true;
- case 0x1f: // 0x1f group
+ case 0x1f: // 0x1f group
return describe_1f(op, desc, prev);
- case 0x20: // LWZ
- case 0x22: // LBZ
- case 0x28: // LHZ
- case 0x2a: // LHA
+ case 0x20: // LWZ
+ case 0x22: // LBZ
+ case 0x28: // LHZ
+ case 0x2a: // LHA
GPR_USED_OR_ZERO(desc, G_RA(op));
GPR_MODIFIED(desc, G_RD(op));
desc.flags |= OPFLAG_READS_MEMORY;
return true;
- case 0x21: // LWZU
- case 0x23: // LBZU
- case 0x29: // LHZU
- case 0x2b: // LHAU
+ case 0x21: // LWZU
+ case 0x23: // LBZU
+ case 0x29: // LHZU
+ case 0x2b: // LHAU
if (G_RA(op) == 0 || G_RA(op) == G_RD(op))
return false;
GPR_USED(desc, G_RA(op));
@@ -297,17 +297,17 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.flags |= OPFLAG_READS_MEMORY;
return true;
- case 0x24: // STW
- case 0x26: // STB
- case 0x2c: // STH
+ case 0x24: // STW
+ case 0x26: // STB
+ case 0x2c: // STH
GPR_USED_OR_ZERO(desc, G_RA(op));
GPR_USED(desc, G_RS(op));
desc.flags |= OPFLAG_WRITES_MEMORY;
return true;
- case 0x25: // STWU
- case 0x27: // STBU
- case 0x2d: // STHU
+ case 0x25: // STWU
+ case 0x27: // STBU
+ case 0x2d: // STHU
if (G_RA(op) == 0)
return false;
GPR_USED(desc, G_RA(op));
@@ -316,7 +316,7 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.flags |= OPFLAG_WRITES_MEMORY;
return true;
- case 0x2e: // LMW
+ case 0x2e: // LMW
GPR_USED_OR_ZERO(desc, G_RA(op));
for (regnum = G_RD(op); regnum < 32; regnum++)
GPR_MODIFIED(desc, regnum);
@@ -324,7 +324,7 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.cycles = 32 - G_RD(op);
return true;
- case 0x2f: // STMW
+ case 0x2f: // STMW
GPR_USED_OR_ZERO(desc, G_RA(op));
for (regnum = G_RS(op); regnum < 32; regnum++)
GPR_USED(desc, regnum);
@@ -332,8 +332,8 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.cycles = 32 - G_RS(op);
return true;
- case 0x30: // LFS
- case 0x32: // LFD
+ case 0x30: // LFS
+ case 0x32: // LFD
if (!(m_context.cap & PPCCAP_FPU))
return false;
GPR_USED_OR_ZERO(desc, G_RA(op));
@@ -341,8 +341,8 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.flags |= OPFLAG_READS_MEMORY;
return true;
- case 0x31: // LFSU
- case 0x33: // LFDU
+ case 0x31: // LFSU
+ case 0x33: // LFDU
if (!(m_context.cap & PPCCAP_FPU))
return false;
if (G_RA(op) == 0)
@@ -353,8 +353,8 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.flags |= OPFLAG_READS_MEMORY;
return true;
- case 0x34: // STFS
- case 0x36: // STFD
+ case 0x34: // STFS
+ case 0x36: // STFD
if (!(m_context.cap & PPCCAP_FPU))
return false;
GPR_USED_OR_ZERO(desc, G_RA(op));
@@ -362,8 +362,8 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.flags |= OPFLAG_WRITES_MEMORY;
return true;
- case 0x35: // STFSU
- case 0x37: // STFDU
+ case 0x35: // STFSU
+ case 0x37: // STFDU
if (!(m_context.cap & PPCCAP_FPU))
return false;
if (G_RA(op) == 0)
@@ -374,10 +374,10 @@ bool ppc_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.flags |= OPFLAG_WRITES_MEMORY;
return true;
- case 0x3b: // 0x3b group
+ case 0x3b: // 0x3b group
return describe_3b(op, desc, prev);
- case 0x3f: // 0x3f group
+ case 0x3f: // 0x3f group
return describe_3f(op, desc, prev);
}
@@ -397,7 +397,7 @@ bool ppc_frontend::describe_13(UINT32 op, opcode_desc &desc, const opcode_desc *
switch (opswitch)
{
- case 0x000: // MTCRF
+ case 0x000: // MTCRF
CR_USED(desc, G_CRFS(op));
CR_MODIFIED(desc, G_CRFD(op));
// CR logical folding
@@ -405,7 +405,7 @@ bool ppc_frontend::describe_13(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.cycles = 0;
return true;
- case 0x010: // BCLRx
+ case 0x010: // BCLRx
LR_USED(desc);
if (!(G_BO(op) & 0x10))
CR_BIT_USED(desc, G_BI(op));
@@ -423,14 +423,14 @@ bool ppc_frontend::describe_13(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.targetpc = BRANCH_TARGET_DYNAMIC;
return true;
- case 0x021: // CRNOR
- case 0x081: // CRANDC
- case 0x0c1: // CRXOR
- case 0x0e1: // CRNAND
- case 0x101: // CRAND
- case 0x121: // CREQV
- case 0x1a1: // CRORC
- case 0x1c1: // CROR
+ case 0x021: // CRNOR
+ case 0x081: // CRANDC
+ case 0x0c1: // CRXOR
+ case 0x0e1: // CRNAND
+ case 0x101: // CRAND
+ case 0x121: // CREQV
+ case 0x1a1: // CRORC
+ case 0x1c1: // CROR
CR_BIT_USED(desc, G_CRBA(op));
CR_BIT_USED(desc, G_CRBB(op));
CR_BIT_MODIFIED(desc, G_CRBD(op));
@@ -439,34 +439,34 @@ bool ppc_frontend::describe_13(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.cycles = 0;
return true;
- case 0x032: // RFI
+ case 0x032: // RFI
if (!(m_context.cap & (PPCCAP_OEA | PPCCAP_4XX)))
return false;
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CHANGE_MODES | OPFLAG_IS_UNCONDITIONAL_BRANCH | OPFLAG_END_SEQUENCE | OPFLAG_CAN_CAUSE_EXCEPTION;
desc.targetpc = BRANCH_TARGET_DYNAMIC;
if (is_601_class())
- desc.cycles = 13; // 601
+ desc.cycles = 13; // 601
else if (is_603_class())
- desc.cycles = 3; // 603
+ desc.cycles = 3; // 603
else
- desc.cycles = 3; // ???
+ desc.cycles = 3; // ???
return true;
- case 0x033: // RFCI
+ case 0x033: // RFCI
if (!(m_context.cap & PPCCAP_4XX))
return false;
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CHANGE_MODES | OPFLAG_IS_UNCONDITIONAL_BRANCH | OPFLAG_END_SEQUENCE | OPFLAG_CAN_CAUSE_EXCEPTION;
desc.targetpc = BRANCH_TARGET_DYNAMIC;
return true;
- case 0x096: // ISYNC
+ case 0x096: // ISYNC
if (!(m_context.cap & (PPCCAP_VEA | PPCCAP_4XX)))
return false;
if (is_601_class())
- desc.cycles = 6; // 601
+ desc.cycles = 6; // 601
return true;
- case 0x210: // BCCTRx
+ case 0x210: // BCCTRx
CTR_USED(desc);
if (!(G_BO(op) & 0x10))
CR_BIT_USED(desc, G_BI(op));
@@ -499,52 +499,52 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
switch (opswitch)
{
- case 0x009: // MULHDUx - 64-bit only
- case 0x015: // LDX - 64-bit only
- case 0x01b: // SLDx - 64-bit only
- case 0x035: // LDUX - 64-bit only
- case 0x03a: // CNTLZDx - 64-bit only
- case 0x044: // TD - 64-bit only
- case 0x049: // MULHDx - 64-bit only
- case 0x054: // LDARX - 64-bit only
- case 0x095: // STDX - 64-bit only
- case 0x0b5: // STDUX - 64-bit only
- case 0x0d6: // STDCX. - 64-bit only
- case 0x0e9: // MULLD - 64-bit only
- case 0x2e9: // MULLDO - 64-bit only
- case 0x155: // LWAX - 64-bit only
- case 0x175: // LWAUX - 64-bit only
+ case 0x009: // MULHDUx - 64-bit only
+ case 0x015: // LDX - 64-bit only
+ case 0x01b: // SLDx - 64-bit only
+ case 0x035: // LDUX - 64-bit only
+ case 0x03a: // CNTLZDx - 64-bit only
+ case 0x044: // TD - 64-bit only
+ case 0x049: // MULHDx - 64-bit only
+ case 0x054: // LDARX - 64-bit only
+ case 0x095: // STDX - 64-bit only
+ case 0x0b5: // STDUX - 64-bit only
+ case 0x0d6: // STDCX. - 64-bit only
+ case 0x0e9: // MULLD - 64-bit only
+ case 0x2e9: // MULLDO - 64-bit only
+ case 0x155: // LWAX - 64-bit only
+ case 0x175: // LWAUX - 64-bit only
case 0x33a: // SRADIx - 64-bit only
case 0x33b: // SRADIx - 64-bit only
- case 0x1b2: // SLBIE - 64-bit only
- case 0x1c9: // DIVDUx - 64-bit only
- case 0x3c9: // DIVDUOx - 64-bit only
- case 0x1e9: // DIVDx - 64-bit only
- case 0x3e9: // DIVDOx - 64-bit only
- case 0x1f2: // SLBIA - 64-bit only
- case 0x21b: // SRDx - 64-bit only
- case 0x31a: // SRADx - 64-bit only
- case 0x3da: // EXTSW - 64-bit only
+ case 0x1b2: // SLBIE - 64-bit only
+ case 0x1c9: // DIVDUx - 64-bit only
+ case 0x3c9: // DIVDUOx - 64-bit only
+ case 0x1e9: // DIVDx - 64-bit only
+ case 0x3e9: // DIVDOx - 64-bit only
+ case 0x1f2: // SLBIA - 64-bit only
+ case 0x21b: // SRDx - 64-bit only
+ case 0x31a: // SRADx - 64-bit only
+ case 0x3da: // EXTSW - 64-bit only
return false;
- case 0x000: // CMP
- case 0x020: // CMPL
+ case 0x000: // CMP
+ case 0x020: // CMPL
GPR_USED(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
XER_SO_USED(desc);
CR_MODIFIED(desc, G_CRFD(op));
return true;
- case 0x004: // TW
+ case 0x004: // TW
GPR_USED(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
desc.flags |= OPFLAG_CAN_CAUSE_EXCEPTION;
if (is_603_class())
- desc.cycles = 2; // 603
+ desc.cycles = 2; // 603
return true;
- case 0x008: // SUBFCx
- case 0x00a: // ADDCx
+ case 0x008: // SUBFCx
+ case 0x00a: // ADDCx
GPR_USED(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
GPR_MODIFIED(desc, G_RD(op));
@@ -556,8 +556,8 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
}
return true;
- case 0x088: // SUBFEx
- case 0x08a: // ADDEx
+ case 0x088: // SUBFEx
+ case 0x08a: // ADDEx
GPR_USED(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
XER_CA_USED(desc);
@@ -570,10 +570,10 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
}
return true;
- case 0x0c8: // SUBFZEx
- case 0x0ca: // ADDZEx
- case 0x0e8: // SUBFMEx
- case 0x0ea: // ADDMEx
+ case 0x0c8: // SUBFZEx
+ case 0x0ca: // ADDZEx
+ case 0x0e8: // SUBFMEx
+ case 0x0ea: // ADDMEx
GPR_USED(desc, G_RA(op));
XER_CA_USED(desc);
GPR_MODIFIED(desc, G_RD(op));
@@ -585,9 +585,9 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
}
return true;
- case 0x00b: // MULHWUx
- case 0x04b: // MULHWx
- case 0x0eb: // MULLWx
+ case 0x00b: // MULHWUx
+ case 0x04b: // MULHWx
+ case 0x0eb: // MULLWx
GPR_USED(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
GPR_MODIFIED(desc, G_RD(op));
@@ -597,17 +597,17 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
CR_MODIFIED(desc, 0);
}
if (is_403_class())
- desc.cycles = 4; // 4XX
+ desc.cycles = 4; // 4XX
else if (is_601_class())
- desc.cycles = 5; // 601: 5/9/10
+ desc.cycles = 5; // 601: 5/9/10
else if (is_603_class())
- desc.cycles = 2; // 603: 2,3,4,5,6
+ desc.cycles = 2; // 603: 2,3,4,5,6
else
- desc.cycles = 2; // ???
+ desc.cycles = 2; // ???
return true;
- case 0x1cb: // DIVWUx
- case 0x1eb: // DIVWx
+ case 0x1cb: // DIVWUx
+ case 0x1eb: // DIVWx
GPR_USED(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
GPR_MODIFIED(desc, G_RD(op));
@@ -617,17 +617,17 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
CR_MODIFIED(desc, 0);
}
if (is_403_class())
- desc.cycles = 33; // 4XX
+ desc.cycles = 33; // 4XX
else if (is_601_class())
- desc.cycles = 36; // 601
+ desc.cycles = 36; // 601
else if (is_603_class())
- desc.cycles = 37; // 603
+ desc.cycles = 37; // 603
else
- desc.cycles = 33; // ???
+ desc.cycles = 33; // ???
return true;
- case 0x028: // SUBFx
- case 0x10a: // ADDx
+ case 0x028: // SUBFx
+ case 0x10a: // ADDx
GPR_USED(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
GPR_MODIFIED(desc, G_RD(op));
@@ -638,8 +638,8 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
}
return true;
- case 0x208: // SUBFCOx
- case 0x20a: // ADDCOx
+ case 0x208: // SUBFCOx
+ case 0x20a: // ADDCOx
GPR_USED(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
GPR_MODIFIED(desc, G_RD(op));
@@ -650,8 +650,8 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
CR_MODIFIED(desc, 0);
return true;
- case 0x288: // SUBFEOx
- case 0x28a: // ADDEOx
+ case 0x288: // SUBFEOx
+ case 0x28a: // ADDEOx
GPR_USED(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
XER_CA_USED(desc);
@@ -663,10 +663,10 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
CR_MODIFIED(desc, 0);
return true;
- case 0x2c8: // SUBFZEOx
- case 0x2ca: // ADDZEOx
- case 0x2e8: // SUBFMEOx
- case 0x2ea: // ADDMEOx
+ case 0x2c8: // SUBFZEOx
+ case 0x2ca: // ADDZEOx
+ case 0x2e8: // SUBFMEOx
+ case 0x2ea: // ADDMEOx
GPR_USED(desc, G_RA(op));
XER_CA_USED(desc);
GPR_MODIFIED(desc, G_RD(op));
@@ -677,7 +677,7 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
CR_MODIFIED(desc, 0);
return true;
- case 0x2eb: // MULLWOx
+ case 0x2eb: // MULLWOx
GPR_USED(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
GPR_MODIFIED(desc, G_RD(op));
@@ -686,17 +686,17 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
if (op & M_RC)
CR_MODIFIED(desc, 0);
if (is_403_class())
- desc.cycles = 4; // 4XX
+ desc.cycles = 4; // 4XX
else if (is_601_class())
- desc.cycles = 5; // 601: 5/9/10
+ desc.cycles = 5; // 601: 5/9/10
else if (is_603_class())
- desc.cycles = 2; // 603: 2,3,4,5,6
+ desc.cycles = 2; // 603: 2,3,4,5,6
else
- desc.cycles = 2; // ???
+ desc.cycles = 2; // ???
return true;
- case 0x3cb: // DIVWUOx
- case 0x3eb: // DIVWOx
+ case 0x3cb: // DIVWUOx
+ case 0x3eb: // DIVWOx
GPR_USED(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
GPR_MODIFIED(desc, G_RD(op));
@@ -705,17 +705,17 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
if (op & M_RC)
CR_MODIFIED(desc, 0);
if (is_403_class())
- desc.cycles = 33; // 4XX
+ desc.cycles = 33; // 4XX
else if (is_601_class())
- desc.cycles = 36; // 601
+ desc.cycles = 36; // 601
else if (is_603_class())
- desc.cycles = 37; // 603
+ desc.cycles = 37; // 603
else
- desc.cycles = 33; // ???
+ desc.cycles = 33; // ???
return true;
- case 0x228: // SUBFOx
- case 0x30a: // ADDOx
+ case 0x228: // SUBFOx
+ case 0x30a: // ADDOx
GPR_USED(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
GPR_MODIFIED(desc, G_RD(op));
@@ -725,7 +725,7 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
CR_MODIFIED(desc, 0);
return true;
- case 0x013: // MFCR
+ case 0x013: // MFCR
CR_USED(desc, 0);
CR_USED(desc, 1);
CR_USED(desc, 2);
@@ -737,31 +737,31 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
GPR_MODIFIED(desc, G_RD(op));
return true;
- case 0x136: // ECIWX
+ case 0x136: // ECIWX
if (!(m_context.cap & PPCCAP_VEA))
return false;
- case 0x014: // LWARX
- case 0x017: // LWZX
- case 0x057: // LBZX
- case 0x117: // LHZX
- case 0x157: // LHAX
- case 0x216: // LWBRX
- case 0x316: // LHBRX
+ case 0x014: // LWARX
+ case 0x017: // LWZX
+ case 0x057: // LBZX
+ case 0x117: // LHZX
+ case 0x157: // LHAX
+ case 0x216: // LWBRX
+ case 0x316: // LHBRX
GPR_USED_OR_ZERO(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
GPR_MODIFIED(desc, G_RD(op));
desc.flags |= OPFLAG_READS_MEMORY;
return true;
- case 0x018: // SLWx
- case 0x01c: // ANDx
- case 0x03c: // ANDCx
- case 0x07c: // NORx
- case 0x11c: // EQVx
- case 0x13c: // XORx
- case 0x19c: // ORCx
- case 0x1bc: // ORx
- case 0x1dc: // NANDx
+ case 0x018: // SLWx
+ case 0x01c: // ANDx
+ case 0x03c: // ANDCx
+ case 0x07c: // NORx
+ case 0x11c: // EQVx
+ case 0x13c: // XORx
+ case 0x19c: // ORCx
+ case 0x1bc: // ORx
+ case 0x1dc: // NANDx
GPR_USED(desc, G_RS(op));
GPR_USED(desc, G_RB(op));
GPR_MODIFIED(desc, G_RA(op));
@@ -772,8 +772,8 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
}
return true;
- case 0x218: // SRWx
- case 0x318: // SRAWx
+ case 0x218: // SRWx
+ case 0x318: // SRAWx
GPR_USED(desc, G_RS(op));
GPR_USED(desc, G_RB(op));
GPR_MODIFIED(desc, G_RA(op));
@@ -785,9 +785,9 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
}
return true;
- case 0x01a: // CNTLZWx
- case 0x39a: // EXTSHx
- case 0x3ba: // EXTSBx
+ case 0x01a: // CNTLZWx
+ case 0x39a: // EXTSHx
+ case 0x3ba: // EXTSBx
GPR_USED(desc, G_RS(op));
GPR_MODIFIED(desc, G_RA(op));
if (op & M_RC)
@@ -797,19 +797,19 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
}
return true;
- case 0x036: // DCBST
- case 0x056: // DCBF
- case 0x0f6: // DCBTST
- case 0x116: // DCBT
- case 0x2f6: // DCBA
- case 0x3d6: // ICBI
+ case 0x036: // DCBST
+ case 0x056: // DCBF
+ case 0x0f6: // DCBTST
+ case 0x116: // DCBT
+ case 0x2f6: // DCBA
+ case 0x3d6: // ICBI
if (!(m_context.cap & (PPCCAP_VEA | PPCCAP_4XX)))
return false;
GPR_USED_OR_ZERO(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
return true;
- case 0x1d6: // DCBI
+ case 0x1d6: // DCBI
if (!(m_context.cap & (PPCCAP_OEA | PPCCAP_4XX)))
return false;
GPR_USED_OR_ZERO(desc, G_RA(op));
@@ -817,10 +817,10 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION;
return true;
- case 0x037: // LWZUX
- case 0x077: // LBZUX
- case 0x137: // LHZUX
- case 0x177: // LHAUX
+ case 0x037: // LWZUX
+ case 0x077: // LBZUX
+ case 0x137: // LHZUX
+ case 0x177: // LHAUX
if (G_RA(op) == 0 || G_RA(op) == G_RD(op))
return false;
GPR_USED(desc, G_RA(op));
@@ -830,7 +830,7 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_READS_MEMORY;
return true;
- case 0x153: // MFSPR
+ case 0x153: // MFSPR
GPR_MODIFIED(desc, G_RD(op));
spr = compute_spr(G_SPR(op));
if (spr == SPR_LR)
@@ -854,25 +854,25 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.cycles = POWERPC_COUNT_READ_DEC;
return true;
- case 0x053: // MFMSR
+ case 0x053: // MFMSR
GPR_MODIFIED(desc, G_RD(op));
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION | OPFLAG_CAN_EXPOSE_EXTERNAL_INT;
if (is_601_class())
- desc.cycles = 2; // 601
+ desc.cycles = 2; // 601
return true;
- case 0x253: // MFSR
+ case 0x253: // MFSR
GPR_MODIFIED(desc, G_RD(op));
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION;
return true;
- case 0x293: // MFSRIN
+ case 0x293: // MFSRIN
GPR_USED(desc, G_RB(op));
GPR_MODIFIED(desc, G_RD(op));
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION;
return true;
- case 0x173: // MFTB
+ case 0x173: // MFTB
if (!(m_context.cap & PPCCAP_VEA))
return false;
GPR_MODIFIED(desc, G_RD(op));
@@ -881,7 +881,7 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.cycles = POWERPC_COUNT_READ_TBL;
return true;
- case 0x068: // NEGx
+ case 0x068: // NEGx
GPR_USED(desc, G_RA(op));
GPR_MODIFIED(desc, G_RD(op));
if (op & M_RC)
@@ -891,7 +891,7 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
}
return true;
- case 0x268: // NEGOx
+ case 0x268: // NEGOx
GPR_USED(desc, G_RA(op));
GPR_MODIFIED(desc, G_RD(op));
XER_OV_MODIFIED(desc);
@@ -900,7 +900,7 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
CR_MODIFIED(desc, 0);
return true;
- case 0x090: // MTCRF
+ case 0x090: // MTCRF
GPR_USED(desc, G_RS(op));
if (G_CRM(op) & 0x80) CR_MODIFIED(desc, 0);
if (G_CRM(op) & 0x40) CR_MODIFIED(desc, 1);
@@ -912,23 +912,23 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
if (G_CRM(op) & 0x01) CR_MODIFIED(desc, 7);
return true;
- case 0x092: // MTMSR
+ case 0x092: // MTMSR
GPR_USED(desc, G_RS(op));
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION | OPFLAG_CAN_CHANGE_MODES | OPFLAG_END_SEQUENCE;
if (is_601_class())
- desc.cycles = 17; // 601
+ desc.cycles = 17; // 601
else if (is_603_class())
- desc.cycles = 2; // 603
+ desc.cycles = 2; // 603
return true;
- case 0x0d2: // MTSR
+ case 0x0d2: // MTSR
if (!(m_context.cap & PPCCAP_OEA))
return false;
GPR_USED(desc, G_RS(op));
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION;
return true;
- case 0x1d3: // MTSPR
+ case 0x1d3: // MTSPR
GPR_USED(desc, G_RS(op));
spr = compute_spr(G_SPR(op));
if (spr == SPR_LR)
@@ -946,24 +946,24 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION;
return true;
- case 0x1b6: // ECOWX
+ case 0x1b6: // ECOWX
if (!(m_context.cap & PPCCAP_VEA))
return false;
- case 0x096: // STWCX.
- case 0x097: // STWX
- case 0x0d7: // STBX
- case 0x197: // STHX
- case 0x296: // STWBRX
- case 0x396: // STHBRX
+ case 0x096: // STWCX.
+ case 0x097: // STWX
+ case 0x0d7: // STBX
+ case 0x197: // STHX
+ case 0x296: // STWBRX
+ case 0x396: // STHBRX
GPR_USED_OR_ZERO(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
GPR_USED(desc, G_RS(op));
desc.flags |= OPFLAG_WRITES_MEMORY;
return true;
- case 0x0b7: // STWUX
- case 0x0f7: // STBUX
- case 0x1b7: // STHUX
+ case 0x0b7: // STWUX
+ case 0x0f7: // STBUX
+ case 0x1b7: // STHUX
if (G_RA(op) == 0)
return false;
GPR_USED(desc, G_RA(op));
@@ -973,7 +973,7 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_WRITES_MEMORY;
return true;
- case 0x0f2: // MTSRIN
+ case 0x0f2: // MTSRIN
if (!(m_context.cap & PPCCAP_OEA))
return false;
GPR_USED(desc, G_RS(op));
@@ -981,27 +981,27 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION;
return true;
- case 0x132: // TLBIE
+ case 0x132: // TLBIE
if (!(m_context.cap & PPCCAP_OEA))
return false;
GPR_USED(desc, G_RB(op));
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION;
return true;
- case 0x172: // TLBIA
+ case 0x172: // TLBIA
if (!(m_context.cap & PPCCAP_OEA) || (m_context.cap & PPCCAP_603_MMU))
return false;
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION;
return true;
- case 0x3d2: // TLBLD
- case 0x3f2: // TLBLI
+ case 0x3d2: // TLBLD
+ case 0x3f2: // TLBLI
if (!(m_context.cap & PPCCAP_603_MMU) && !is_602_class())
return false;
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION;
return true;
- case 0x200: // MCRXR
+ case 0x200: // MCRXR
XER_CA_USED(desc);
XER_OV_USED(desc);
XER_SO_USED(desc);
@@ -1011,7 +1011,7 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
XER_SO_MODIFIED(desc);
return true;
- case 0x215: // LSWX
+ case 0x215: // LSWX
GPR_USED_OR_ZERO(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
XER_COUNT_USED(desc);
@@ -1020,8 +1020,8 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_READS_MEMORY;
return true;
- case 0x217: // LFSX
- case 0x257: // LFDX
+ case 0x217: // LFSX
+ case 0x257: // LFDX
if (!(m_context.cap & PPCCAP_FPU))
return false;
GPR_USED_OR_ZERO(desc, G_RA(op));
@@ -1030,22 +1030,22 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_READS_MEMORY;
return true;
- case 0x236: // TLBSYNC
+ case 0x236: // TLBSYNC
if (!(m_context.cap & PPCCAP_OEA))
return false;
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION;
return true;
- case 0x256: // SYNC
+ case 0x256: // SYNC
return true;
- case 0x356: // EIEIO
+ case 0x356: // EIEIO
if (!(m_context.cap & (PPCCAP_VEA | PPCCAP_4XX)))
return false;
return true;
- case 0x237: // LFSUX
- case 0x277: // LFDUX
+ case 0x237: // LFSUX
+ case 0x277: // LFDUX
if (!(m_context.cap & PPCCAP_FPU))
return false;
if (G_RA(op) == 0)
@@ -1057,7 +1057,7 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_READS_MEMORY;
return true;
- case 0x255: // LSWI
+ case 0x255: // LSWI
GPR_USED_OR_ZERO(desc, G_RA(op));
for (regnum = 0; regnum < ((G_NB(op) - 1) & 0x1f) + 1; regnum += 4)
GPR_MODIFIED(desc, (G_RD(op) + regnum / 4) % 32);
@@ -1065,7 +1065,7 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.cycles = (((G_NB(op) - 1) & 0x1f) + 1 + 3) / 4;
return true;
- case 0x295: // STSWX
+ case 0x295: // STSWX
GPR_USED_OR_ZERO(desc, G_RA(op));
GPR_USED(desc, G_RB(op));
XER_COUNT_USED(desc);
@@ -1074,7 +1074,7 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_WRITES_MEMORY;
return true;
- case 0x2d5: // STSWI
+ case 0x2d5: // STSWI
GPR_USED_OR_ZERO(desc, G_RA(op));
for (regnum = 0; regnum < ((G_NB(op) - 1) & 0x1f) + 1; regnum += 4)
GPR_USED(desc, (G_RD(op) + regnum / 4) % 32);
@@ -1082,9 +1082,9 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.cycles = (((G_NB(op) - 1) & 0x1f) + 1 + 3) / 4;
return true;
- case 0x297: // STFSX
- case 0x2d7: // STFDX
- case 0x3d7: // STFIWX
+ case 0x297: // STFSX
+ case 0x2d7: // STFDX
+ case 0x3d7: // STFIWX
if (!(m_context.cap & PPCCAP_FPU))
return false;
GPR_USED_OR_ZERO(desc, G_RA(op));
@@ -1093,8 +1093,8 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_WRITES_MEMORY;
return true;
- case 0x2b7: // STFSUX
- case 0x2f7: // STFDUX
+ case 0x2b7: // STFSUX
+ case 0x2f7: // STFDUX
if (!(m_context.cap & PPCCAP_FPU))
return false;
if (G_RA(op) == 0)
@@ -1106,7 +1106,7 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_WRITES_MEMORY;
return true;
- case 0x338: // SRAWIx
+ case 0x338: // SRAWIx
GPR_USED(desc, G_RS(op));
GPR_MODIFIED(desc, G_RA(op));
XER_CA_MODIFIED(desc);
@@ -1117,7 +1117,7 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
}
return true;
- case 0x3f6: // DCBZ
+ case 0x3f6: // DCBZ
if (!(m_context.cap & (PPCCAP_VEA | PPCCAP_4XX)))
return false;
GPR_USED_OR_ZERO(desc, G_RA(op));
@@ -1125,9 +1125,9 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_WRITES_MEMORY;
return true;
- case 0x106: // ICBT
- case 0x1c6: // DCCCI
- case 0x3c6: // ICCCI
+ case 0x106: // ICBT
+ case 0x1c6: // DCCCI
+ case 0x3c6: // ICCCI
if (!(m_context.cap & PPCCAP_4XX))
return false;
GPR_USED_OR_ZERO(desc, G_RA(op));
@@ -1135,8 +1135,8 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION;
return true;
- case 0x1e6: // DCREAD
- case 0x3e6: // ICREAD
+ case 0x1e6: // DCREAD
+ case 0x3e6: // ICREAD
if (!(m_context.cap & PPCCAP_4XX))
return false;
GPR_USED_OR_ZERO(desc, G_RA(op));
@@ -1145,28 +1145,28 @@ bool ppc_frontend::describe_1f(UINT32 op, opcode_desc &desc, const opcode_desc *
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION;
return true;
- case 0x143: // MFDCR
+ case 0x143: // MFDCR
if (!(m_context.cap & PPCCAP_4XX))
return false;
GPR_MODIFIED(desc, G_RD(op));
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION;
return true;
- case 0x1c3: // MTDCR
+ case 0x1c3: // MTDCR
if (!(m_context.cap & PPCCAP_4XX))
return false;
GPR_USED(desc, G_RS(op));
desc.flags |= OPFLAG_PRIVILEGED | OPFLAG_CAN_CAUSE_EXCEPTION | OPFLAG_CAN_EXPOSE_EXTERNAL_INT;
return true;
- case 0x083: // WRTEE
+ case 0x083: // WRTEE
if (!(m_context.cap & PPCCAP_4XX))
return false;
GPR_USED(desc, G_RS(op));
desc.flags |= OPFLAG_CAN_EXPOSE_EXTERNAL_INT;
return true;
- case 0x0a3: // WRTEEI
+ case 0x0a3: // WRTEEI
if (!(m_context.cap & PPCCAP_4XX))
return false;
if (op & MSR_EE)
@@ -1200,23 +1200,23 @@ bool ppc_frontend::describe_3b(UINT32 op, opcode_desc &desc, const opcode_desc *
switch (opswitch)
{
- case 0x12: // FDIVSx
+ case 0x12: // FDIVSx
FPR_USED(desc, G_RA(op));
FPR_USED(desc, G_RB(op));
FPR_MODIFIED(desc, G_RD(op));
if (op & M_RC)
CR_MODIFIED(desc, 1);
if (is_601_class())
- desc.cycles = 17; // 601
+ desc.cycles = 17; // 601
else if (is_603_class())
- desc.cycles = 18; // 603
+ desc.cycles = 18; // 603
else
- desc.cycles = 17; // ???
+ desc.cycles = 17; // ???
FPSCR_MODIFIED(desc, 4);
return true;
- case 0x14: // FSUBSx
- case 0x15: // FADDSx
+ case 0x14: // FSUBSx
+ case 0x15: // FADDSx
FPR_USED(desc, G_RA(op));
FPR_USED(desc, G_RB(op));
FPR_MODIFIED(desc, G_RD(op));
@@ -1225,7 +1225,7 @@ bool ppc_frontend::describe_3b(UINT32 op, opcode_desc &desc, const opcode_desc *
FPSCR_MODIFIED(desc, 4);
return true;
- case 0x19: // FMULSx - not the same form as FSUB/FADD!
+ case 0x19: // FMULSx - not the same form as FSUB/FADD!
FPR_USED(desc, G_RA(op));
FPR_USED(desc, G_REGC(op));
FPR_MODIFIED(desc, G_RD(op));
@@ -1234,8 +1234,8 @@ bool ppc_frontend::describe_3b(UINT32 op, opcode_desc &desc, const opcode_desc *
FPSCR_MODIFIED(desc, 4);
return true;
- case 0x16: // FSQRTSx
- case 0x18: // FRESx
+ case 0x16: // FSQRTSx
+ case 0x18: // FRESx
FPR_USED(desc, G_RB(op));
FPR_MODIFIED(desc, G_RD(op));
if (op & M_RC)
@@ -1243,10 +1243,10 @@ bool ppc_frontend::describe_3b(UINT32 op, opcode_desc &desc, const opcode_desc *
FPSCR_MODIFIED(desc, 4);
return true;
- case 0x1c: // FMSUBSx
- case 0x1d: // FMADDSx
- case 0x1e: // FNMSUBSx
- case 0x1f: // FNMADDSx
+ case 0x1c: // FMSUBSx
+ case 0x1d: // FMADDSx
+ case 0x1e: // FNMSUBSx
+ case 0x1f: // FNMADDSx
FPR_USED(desc, G_RA(op));
FPR_USED(desc, G_RB(op));
FPR_USED(desc, G_REGC(op));
@@ -1279,33 +1279,33 @@ bool ppc_frontend::describe_3f(UINT32 op, opcode_desc &desc, const opcode_desc *
opswitch &= 0x1f;
switch (opswitch)
{
- case 0x12: // FDIVx
+ case 0x12: // FDIVx
FPR_USED(desc, G_RA(op));
FPR_USED(desc, G_RB(op));
FPR_MODIFIED(desc, G_RD(op));
if (op & M_RC)
CR_MODIFIED(desc, 1);
if (is_601_class())
- desc.cycles = 31; // 601
+ desc.cycles = 31; // 601
else if (is_603_class())
- desc.cycles = 33; // 603
+ desc.cycles = 33; // 603
else
- desc.cycles = 31; // ???
+ desc.cycles = 31; // ???
FPSCR_MODIFIED(desc, 4);
return true;
- case 0x19: // FMULx
+ case 0x19: // FMULx
FPR_USED(desc, G_RA(op));
FPR_USED(desc, G_REGC(op));
FPR_MODIFIED(desc, G_RD(op));
if (op & M_RC)
CR_MODIFIED(desc, 1);
- desc.cycles = 2; // 601/603
+ desc.cycles = 2; // 601/603
FPSCR_MODIFIED(desc, 4);
return true;
- case 0x14: // FSUBx
- case 0x15: // FADDx
+ case 0x14: // FSUBx
+ case 0x15: // FADDx
FPR_USED(desc, G_RA(op));
FPR_USED(desc, G_RB(op));
FPR_MODIFIED(desc, G_RD(op));
@@ -1314,8 +1314,8 @@ bool ppc_frontend::describe_3f(UINT32 op, opcode_desc &desc, const opcode_desc *
FPSCR_MODIFIED(desc, 4);
return true;
- case 0x16: // FSQRTx
- case 0x1a: // FSQRTEx
+ case 0x16: // FSQRTx
+ case 0x1a: // FSQRTEx
FPR_USED(desc, G_RB(op));
FPR_MODIFIED(desc, G_RD(op));
if (op & M_RC)
@@ -1323,27 +1323,27 @@ bool ppc_frontend::describe_3f(UINT32 op, opcode_desc &desc, const opcode_desc *
FPSCR_MODIFIED(desc, 4);
return true;
- case 0x17: // FSELx
+ case 0x17: // FSELx
FPR_USED(desc, G_RA(op));
FPR_USED(desc, G_RB(op));
FPR_USED(desc, G_REGC(op));
FPR_MODIFIED(desc, G_RD(op));
if (op & M_RC)
CR_MODIFIED(desc, 1);
- desc.cycles = 2; // 601/603
+ desc.cycles = 2; // 601/603
return true;
- case 0x1c: // FMSUBx
- case 0x1d: // FMADDx
- case 0x1e: // FNMSUBx
- case 0x1f: // FNMADDx
+ case 0x1c: // FMSUBx
+ case 0x1d: // FMADDx
+ case 0x1e: // FNMSUBx
+ case 0x1f: // FNMADDx
FPR_USED(desc, G_RA(op));
FPR_USED(desc, G_RB(op));
FPR_USED(desc, G_REGC(op));
FPR_MODIFIED(desc, G_RD(op));
if (op & M_RC)
CR_MODIFIED(desc, 1);
- desc.cycles = 2; // 601/603
+ desc.cycles = 2; // 601/603
FPSCR_MODIFIED(desc, 4);
return true;
}
@@ -1352,47 +1352,47 @@ bool ppc_frontend::describe_3f(UINT32 op, opcode_desc &desc, const opcode_desc *
{
switch (opswitch)
{
- case 0x32e: // FCTIDx - 64-bit only
- case 0x32f: // FCTIDZx - 64-bit only
- case 0x34e: // FCFIDx - 64-bit only
+ case 0x32e: // FCTIDx - 64-bit only
+ case 0x32f: // FCTIDZx - 64-bit only
+ case 0x34e: // FCFIDx - 64-bit only
return false;
- case 0x000: // FCMPU
- case 0x020: // FCMPO
+ case 0x000: // FCMPU
+ case 0x020: // FCMPO
FPR_USED(desc, G_RA(op));
FPR_USED(desc, G_RB(op));
CR_MODIFIED(desc, G_CRFD(op));
return true;
- case 0x00c: // FRSPx
- case 0x00e: // FCTIWx
- case 0x00f: // FCTIWZx
+ case 0x00c: // FRSPx
+ case 0x00e: // FCTIWx
+ case 0x00f: // FCTIWZx
FPSCR_MODIFIED(desc, 4);
- case 0x028: // FNEGx
- case 0x048: // FMRx
- case 0x088: // FNABSx
- case 0x108: // FABSx
+ case 0x028: // FNEGx
+ case 0x048: // FMRx
+ case 0x088: // FNABSx
+ case 0x108: // FABSx
FPR_USED(desc, G_RB(op));
FPR_MODIFIED(desc, G_RD(op));
if (op & M_RC)
CR_MODIFIED(desc, 1);
return true;
- case 0x026: // MTFSB1x
- case 0x046: // MTFSB0x
+ case 0x026: // MTFSB1x
+ case 0x046: // MTFSB0x
FPSCR_MODIFIED(desc, G_CRBD(op) / 4);
return true;
- case 0x040: // MCRFS
+ case 0x040: // MCRFS
FPSCR_USED(desc, G_CRFS(op));
CR_MODIFIED(desc, G_CRFD(op));
return true;
- case 0x086: // MTFSFIx
+ case 0x086: // MTFSFIx
FPSCR_MODIFIED(desc, G_CRFD(op));
return true;
- case 0x247: // MFFSx
+ case 0x247: // MFFSx
FPSCR_USED(desc, 0);
FPSCR_USED(desc, 1);
FPSCR_USED(desc, 2);
@@ -1404,7 +1404,7 @@ bool ppc_frontend::describe_3f(UINT32 op, opcode_desc &desc, const opcode_desc *
FPR_MODIFIED(desc, G_RD(op));
return true;
- case 0x2c7: // MTFSFx
+ case 0x2c7: // MTFSFx
FPR_USED(desc, G_RB(op));
if (G_CRM(op) & 0x80) FPSCR_MODIFIED(desc, 0);
if (G_CRM(op) & 0x40) FPSCR_MODIFIED(desc, 1);