Deassembling some instructions for the Yasep processor as well
This commit is contained in:
parent
389f82aef4
commit
560b0e9f07
@ -43,6 +43,7 @@ static ArchInstruction _yasep_instructions[] =
|
|||||||
/* plug-in */
|
/* plug-in */
|
||||||
static int _yasep_encode(ArchPlugin * plugin, ArchInstruction * instruction,
|
static int _yasep_encode(ArchPlugin * plugin, ArchInstruction * instruction,
|
||||||
ArchInstructionCall * call);
|
ArchInstructionCall * call);
|
||||||
|
static int _yasep_decode(ArchPlugin * plugin, ArchInstructionCall * call);
|
||||||
|
|
||||||
|
|
||||||
/* protected */
|
/* protected */
|
||||||
@ -57,7 +58,7 @@ ArchPlugin arch_plugin =
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
_yasep_encode,
|
_yasep_encode,
|
||||||
NULL
|
_yasep_decode
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -103,3 +104,23 @@ static int _encode_32(ArchPlugin * plugin, ArchInstruction * instruction,
|
|||||||
return -1;
|
return -1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* yasep_decode */
|
||||||
|
static int _yasep_decode(ArchPlugin * plugin, ArchInstructionCall * call)
|
||||||
|
{
|
||||||
|
ArchPluginHelper * helper = plugin->helper;
|
||||||
|
uint16_t u16;
|
||||||
|
uint16_t opcode;
|
||||||
|
ArchInstruction * ai;
|
||||||
|
|
||||||
|
if(helper->read(helper->arch, &u16, sizeof(u16)) != sizeof(u16))
|
||||||
|
return -1;
|
||||||
|
u16 = _htob16(u16);
|
||||||
|
opcode = u16 & 0x00ff;
|
||||||
|
if((ai = helper->get_instruction_by_opcode(helper->arch, 16, opcode))
|
||||||
|
== NULL)
|
||||||
|
return -1;
|
||||||
|
call->name = ai->name;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -34,7 +34,60 @@
|
|||||||
#define OP_SND AO_REGISTER(0, 32, 0)
|
#define OP_SND AO_REGISTER(0, 32, 0)
|
||||||
|
|
||||||
/* instructions */
|
/* instructions */
|
||||||
{ "add", OPIR(0x0c), OPIRF, AO_2(OP_IMM4, OP_SND) },
|
{ "add", OPIR(0x03), OPIRF, AO_2(OP_IMM4, OP_SND) },
|
||||||
{ "add", OPRR(0x0c), OPRRF, AO_2(OP_SI4, OP_SND) },
|
{ "add", OPRR(0x03), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
{ "add", OPIRL(0x0c),OPIRLF, AO_2(OP_SI4, OP_IMM16) },
|
{ "add", OPIRL(0x03),OPIRLF, AO_2(OP_SI4, OP_IMM16) },
|
||||||
{ "add", OPRRL(0x0c),OPRRLF, AO_3(OP_SND, OP_SI4, OP_DST3) },
|
{ "add", OPRRL(0x03),OPRRLF, AO_3(OP_SND, OP_SI4, OP_DST3) },
|
||||||
|
{ "and", OPIR(0x02), OPIRF, AO_2(OP_IMM4, OP_SND) },
|
||||||
|
{ "and", OPRR(0x02), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "and", OPIRL(0x02),OPIRLF, AO_2(OP_SI4, OP_IMM16) },
|
||||||
|
{ "and", OPRRL(0x02),OPRRLF, AO_3(OP_SND, OP_SI4, OP_DST3) },
|
||||||
|
{ "andn", OPRR(0x0a), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "cmps", OPRR(0x1b), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "cmpu", OPRR(0x13), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
#if 0 /* XXX aliases */
|
||||||
|
{ "esb", OPRR(0x00), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "esh", OPRR(0x00), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "ezb", OPRR(0x00), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "ezh", OPRR(0x00), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
#endif
|
||||||
|
{ "get", OPRR(0x05), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
#if 0 /* XXX aliases */
|
||||||
|
{ "ib", OPRR(0x00), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "ih", OPRR(0x00), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "ihh", OPRR(0x00), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
#endif
|
||||||
|
{ "lsb", OPRR(0x18), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "lsh", OPRR(0x38), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "lzb", OPRR(0x10), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "lzh", OPRR(0x30), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "mov", OPRR(0x00), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "mul8h", OPRR(0x0c), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "mul8l", OPRR(0x04), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "muli", OPRR(0x14), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "nand", OPRR(0x12), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
#if 0 /* XXX alias */
|
||||||
|
{ "neg", OPRR(0x00), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
#endif
|
||||||
|
{ "nor", OPRR(0x2a), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
#if 0 /* XXX alias */
|
||||||
|
{ "not", OPRR(0x00), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
#endif
|
||||||
|
{ "or", OPRR(0x1a), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "orn", OPRR(0x22), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "put", OPRR(0x0d), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "rol", OPRR(0x21), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "ror", OPRR(0x19), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "sar", OPRR(0x09), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "sb", OPRR(0x08), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "sh", OPRR(0x20), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "shh", OPRR(0x28), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "shl", OPRR(0x11), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "shr", OPRR(0x01), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "smax", OPRR(0x3b), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "smin", OPRR(0x33), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "sub", OPRR(0x0b), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "umax", OPRR(0x2b), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "umin", OPRR(0x23), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "xor", OPRR(0x32), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
{ "xorn", OPRR(0x3a), OPRRF, AO_2(OP_SI4, OP_SND) },
|
||||||
|
33
test/yasep.S
33
test/yasep.S
@ -1,3 +1,36 @@
|
|||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
.text
|
.text
|
||||||
add %r0, %r1
|
add %r0, %r1
|
||||||
|
and %r0, %r1
|
||||||
|
andn %r0, %r1
|
||||||
|
cmps %r0, %r1
|
||||||
|
cmpu %r0, %r1
|
||||||
|
get %r0, %r1
|
||||||
|
lsb %r0, %r1
|
||||||
|
lsh %r0, %r1
|
||||||
|
lzb %r0, %r1
|
||||||
|
lzh %r0, %r1
|
||||||
|
mov %r0, %r1
|
||||||
|
mul8h %r0, %r1
|
||||||
|
mul8l %r0, %r1
|
||||||
|
muli %r0, %r1
|
||||||
|
nand %r0, %r1
|
||||||
|
nor %r0, %r1
|
||||||
|
or %r0, %r1
|
||||||
|
orn %r0, %r1
|
||||||
|
put %r0, %r1
|
||||||
|
rol %r0, %r1
|
||||||
|
ror %r0, %r1
|
||||||
|
sar %r0, %r1
|
||||||
|
sb %r0, %r1
|
||||||
|
sh %r0, %r1
|
||||||
|
shh %r0, %r1
|
||||||
|
shl %r0, %r1
|
||||||
|
shr %r0, %r1
|
||||||
|
smax %r0, %r1
|
||||||
|
smin %r0, %r1
|
||||||
|
sub %r0, %r1
|
||||||
|
umax %r0, %r1
|
||||||
|
umin %r0, %r1
|
||||||
|
xor %r0, %r1
|
||||||
|
xorn %r0, %r1
|
||||||
|
Loading…
Reference in New Issue
Block a user