Added the "fchs", "fclex" and "fnclex" instructions

This commit is contained in:
Pierre Pronchery 2011-04-17 15:34:08 +00:00
parent 3a46ad6684
commit 58cec31b9a
3 changed files with 27 additions and 0 deletions

View File

@ -34,6 +34,7 @@ static int _write_immediate(ArchPlugin * plugin,
ArchOperandDefinition definition, ArchOperand * operand);
static int _write_immediate8(ArchPlugin * plugin, uint8_t value);
static int _write_immediate16(ArchPlugin * plugin, uint16_t value);
static int _write_immediate24(ArchPlugin * plugin, uint32_t value);
static int _write_immediate32(ArchPlugin * plugin, uint32_t value);
static int _write_opcode(ArchPlugin * plugin, ArchInstruction * instruction);
static int _write_operand(ArchPlugin * plugin, uint32_t * i,
@ -136,6 +137,8 @@ static int _write_immediate(ArchPlugin * plugin,
return _write_immediate8(plugin, value);
case sizeof(uint16_t):
return _write_immediate16(plugin, value);
case 3:
return _write_immediate24(plugin, value);
case sizeof(uint32_t):
return _write_immediate32(plugin, value);
default:
@ -160,6 +163,15 @@ static int _write_immediate16(ArchPlugin * plugin, uint16_t value)
return 0;
}
static int _write_immediate24(ArchPlugin * plugin, uint32_t value)
{
value = _htol32(value) >> 8;
if(fwrite(&value, 3, 1, plugin->helper->fp) != 1)
return -error_set_code(1, "%s: %s", plugin->helper->filename,
strerror(errno));
return 0;
}
static int _write_immediate32(ArchPlugin * plugin, uint32_t value)
{
value = _htol32(value);
@ -188,6 +200,7 @@ static int _write_opcode(ArchPlugin * plugin, ArchInstruction * instruction)
operand.value.immediate.value = _htob16(
instruction->opcode);
break;
case 3:
case sizeof(uint32_t):
operand.value.immediate.value = _htob32(
instruction->opcode);

View File

@ -43,6 +43,7 @@
/* opcodes */
#define OP1F (8 << AOD_SIZE)
#define OP2F (16 << AOD_SIZE)
#define OP3F (24 << AOD_SIZE)
/* operands */
/* registers */
@ -399,9 +400,19 @@
{ "faddp", 0xdec5, OP2F, OP_st5, OP_st0, AOT_NONE },
{ "faddp", 0xdec6, OP2F, OP_st6, OP_st0, AOT_NONE },
{ "faddp", 0xdec7, OP2F, OP_st7, OP_st0, AOT_NONE },
/* FBLD 0xdf /4 1 m80dec */
/* FIXME implement */
/* FBSTP 0xdf /6 1 m80bcd */
/* FCHS 0xd9e0 2 */
{ "fchs", 0xd9e0, OP2F, AOT_NONE, AOT_NONE, AOT_NONE },
/* FCLEX 0x9bdbe2 3 */
{ "fclex", 0x9bdbe2, OP3F, AOT_NONE, AOT_NONE, AOT_NONE },
/* FIXME implement */
/* FIADD 0xda /0 1 m32int */
/* FIXME implement */
/* FIADD 0xde /0 1 m64int */
/* FNCLEX 0xdbe2 2 */
{ "fnclex", 0xdbe2, OP2F, AOT_NONE, AOT_NONE, AOT_NONE },
/* FIXME implement */
/* NOP 0x90 1 */
{ "nop", 0x90, OP1F, AOT_NONE, AOT_NONE, AOT_NONE },

View File

@ -141,4 +141,7 @@
faddp %st5, %st0
faddp %st6, %st0
faddp %st7, %st0
fchs
fclex
fnclex
nop /* 0x90 */