Add Type 8 decode: Compute with Dreg move
This commit is contained in:
@@ -113,6 +113,24 @@ decode (RArchSession *as, RAnalOp *op, RAnalOpMask mask)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Type 8: Compute | Dreg1 <- Dreg2 (00101Z) */
|
||||||
|
/* Bits 23-18 = 001010 (Z=0) or 001011 (Z=1) */
|
||||||
|
if ((ins >> 18) == 0x0A || (ins >> 18) == 0x0B)
|
||||||
|
{
|
||||||
|
ut32 z = (ins >> 18) & 1;
|
||||||
|
ut32 amf = (ins >> 12) & 0x1F;
|
||||||
|
const char *f = (amf < 16) ? amf_mac[amf] : amf_alu[amf-16];
|
||||||
|
/* DDREG = bits 8-6 (dest), SDREG = bits 5-0 (src, masked) */
|
||||||
|
ut32 ddreg = (ins >> 6) & 0x7;
|
||||||
|
ut32 sdreg = ins & 0x3F;
|
||||||
|
/* For NONE=ALU case: SDREG = 0x2A (101010) */
|
||||||
|
if (sdreg == 0x2A)
|
||||||
|
op->mnemonic = r_str_newf ("NONE = %s", f);
|
||||||
|
else
|
||||||
|
op->mnemonic = r_str_newf ("%s, %s = %s", f, xop_alu[ddreg], reg0[sdreg & 0xF]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/* Type 6/7/IO/System (010xxx / 011xxx) */
|
/* Type 6/7/IO/System (010xxx / 011xxx) */
|
||||||
if (b23_22 == 1)
|
if (b23_22 == 1)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user