summaryrefslogtreecommitdiff
path: root/src/arch/x86/operand.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2010-08-18 23:20:47 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2010-08-18 23:20:47 (GMT)
commitc0831e2a8d16d65e8f31e52a63b703086609d8dd (patch)
treeb5587b780da2b5da3fa84869431d6409e7eec782 /src/arch/x86/operand.c
parent9ed927a6b6405633a82f378438c533fd0112f16d (diff)
Supported several extra x86 instructions.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@182 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/arch/x86/operand.c')
-rw-r--r--src/arch/x86/operand.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/arch/x86/operand.c b/src/arch/x86/operand.c
index 420ceec..bf7010c 100644
--- a/src/arch/x86/operand.c
+++ b/src/arch/x86/operand.c
@@ -1425,6 +1425,10 @@ bool _x86_read_operands(GArchInstruction *instr, const bin_t *data, off_t *pos,
op = g_imm_operand_new_from_data(MDS_8_BITS, data, &op_pos[i], len, SRE_LITTLE /* FIXME */);
break;
+ case X86_OTP_IMM16:
+ op = g_imm_operand_new_from_data(MDS_16_BITS, data, &op_pos[i], len, SRE_LITTLE /* FIXME */);
+ break;
+
case X86_OTP_IMM1632:
if (oprsize == MDS_UNDEFINED) oprsize = va_arg(ap, MemoryDataSize);
op = g_imm_operand_new_from_data(oprsize == MDS_32_BITS ? MDS_32_BITS : MDS_16_BITS, data, &op_pos[i], len, SRE_LITTLE /* FIXME */);
@@ -1474,6 +1478,10 @@ bool _x86_read_operands(GArchInstruction *instr, const bin_t *data, off_t *pos,
op = g_x86_mod_rm_operand_new(data, &op_pos[i], len, MDS_8_BITS);
break;
+ case X86_OTP_RM16:
+ op = g_x86_mod_rm_operand_new(data, &op_pos[i], len, MDS_16_BITS);
+ break;
+
case X86_OTP_RM1632:
if (oprsize == MDS_UNDEFINED) oprsize = va_arg(ap, MemoryDataSize);
op = g_x86_mod_rm_operand_new(data, &op_pos[i], len, oprsize);
@@ -1497,6 +1505,10 @@ bool _x86_read_operands(GArchInstruction *instr, const bin_t *data, off_t *pos,
op = g_x86_data_operand_new(oprsize == MDS_32_BITS ? MDS_32_BITS : MDS_16_BITS, false);
break;
+ case X86_OTP_ONE:
+ op = g_imm_operand_new_from_value(MDS_8_BITS, 1);
+ break;
+
case X86_OTP_CL:
op = g_x86_register_operand_new_from_index(0x01, MDS_8_BITS);
break;