summaryrefslogtreecommitdiff
path: root/src/arch/x86/operand.c
diff options
context:
space:
mode:
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;