Added the "fchs", "fclex" and "fnclex" instructions
This commit is contained in:
parent
3a46ad6684
commit
58cec31b9a
@ -34,6 +34,7 @@ static int _write_immediate(ArchPlugin * plugin,
|
|||||||
ArchOperandDefinition definition, ArchOperand * operand);
|
ArchOperandDefinition definition, ArchOperand * operand);
|
||||||
static int _write_immediate8(ArchPlugin * plugin, uint8_t value);
|
static int _write_immediate8(ArchPlugin * plugin, uint8_t value);
|
||||||
static int _write_immediate16(ArchPlugin * plugin, uint16_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_immediate32(ArchPlugin * plugin, uint32_t value);
|
||||||
static int _write_opcode(ArchPlugin * plugin, ArchInstruction * instruction);
|
static int _write_opcode(ArchPlugin * plugin, ArchInstruction * instruction);
|
||||||
static int _write_operand(ArchPlugin * plugin, uint32_t * i,
|
static int _write_operand(ArchPlugin * plugin, uint32_t * i,
|
||||||
@ -136,6 +137,8 @@ static int _write_immediate(ArchPlugin * plugin,
|
|||||||
return _write_immediate8(plugin, value);
|
return _write_immediate8(plugin, value);
|
||||||
case sizeof(uint16_t):
|
case sizeof(uint16_t):
|
||||||
return _write_immediate16(plugin, value);
|
return _write_immediate16(plugin, value);
|
||||||
|
case 3:
|
||||||
|
return _write_immediate24(plugin, value);
|
||||||
case sizeof(uint32_t):
|
case sizeof(uint32_t):
|
||||||
return _write_immediate32(plugin, value);
|
return _write_immediate32(plugin, value);
|
||||||
default:
|
default:
|
||||||
@ -160,6 +163,15 @@ static int _write_immediate16(ArchPlugin * plugin, uint16_t value)
|
|||||||
return 0;
|
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)
|
static int _write_immediate32(ArchPlugin * plugin, uint32_t value)
|
||||||
{
|
{
|
||||||
value = _htol32(value);
|
value = _htol32(value);
|
||||||
@ -188,6 +200,7 @@ static int _write_opcode(ArchPlugin * plugin, ArchInstruction * instruction)
|
|||||||
operand.value.immediate.value = _htob16(
|
operand.value.immediate.value = _htob16(
|
||||||
instruction->opcode);
|
instruction->opcode);
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
case sizeof(uint32_t):
|
case sizeof(uint32_t):
|
||||||
operand.value.immediate.value = _htob32(
|
operand.value.immediate.value = _htob32(
|
||||||
instruction->opcode);
|
instruction->opcode);
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
/* opcodes */
|
/* opcodes */
|
||||||
#define OP1F (8 << AOD_SIZE)
|
#define OP1F (8 << AOD_SIZE)
|
||||||
#define OP2F (16 << AOD_SIZE)
|
#define OP2F (16 << AOD_SIZE)
|
||||||
|
#define OP3F (24 << AOD_SIZE)
|
||||||
|
|
||||||
/* operands */
|
/* operands */
|
||||||
/* registers */
|
/* registers */
|
||||||
@ -399,9 +400,19 @@
|
|||||||
{ "faddp", 0xdec5, OP2F, OP_st5, OP_st0, AOT_NONE },
|
{ "faddp", 0xdec5, OP2F, OP_st5, OP_st0, AOT_NONE },
|
||||||
{ "faddp", 0xdec6, OP2F, OP_st6, OP_st0, AOT_NONE },
|
{ "faddp", 0xdec6, OP2F, OP_st6, OP_st0, AOT_NONE },
|
||||||
{ "faddp", 0xdec7, OP2F, OP_st7, 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 */
|
/* FIADD 0xda /0 1 m32int */
|
||||||
/* FIXME implement */
|
/* FIXME implement */
|
||||||
/* FIADD 0xde /0 1 m64int */
|
/* FIADD 0xde /0 1 m64int */
|
||||||
|
/* FNCLEX 0xdbe2 2 */
|
||||||
|
{ "fnclex", 0xdbe2, OP2F, AOT_NONE, AOT_NONE, AOT_NONE },
|
||||||
/* FIXME implement */
|
/* FIXME implement */
|
||||||
/* NOP 0x90 1 */
|
/* NOP 0x90 1 */
|
||||||
{ "nop", 0x90, OP1F, AOT_NONE, AOT_NONE, AOT_NONE },
|
{ "nop", 0x90, OP1F, AOT_NONE, AOT_NONE, AOT_NONE },
|
||||||
|
@ -141,4 +141,7 @@
|
|||||||
faddp %st5, %st0
|
faddp %st5, %st0
|
||||||
faddp %st6, %st0
|
faddp %st6, %st0
|
||||||
faddp %st7, %st0
|
faddp %st7, %st0
|
||||||
|
fchs
|
||||||
|
fclex
|
||||||
|
fnclex
|
||||||
nop /* 0x90 */
|
nop /* 0x90 */
|
||||||
|
Loading…
Reference in New Issue
Block a user