Skip to content

Commit

Permalink
Partial SSE decode support
Browse files Browse the repository at this point in the history
  • Loading branch information
Kasuromi committed Jan 13, 2023
1 parent b684bf0 commit 1321565
Showing 1 changed file with 20 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,26 @@ static void x86_insn_decode_opcode(x86_insn_reader_t *rd, x86_insn_decode_t *ins

// check sse group
if (X86_INSN_FLAG_GET_GROUP(insn_spec.flags) > X86_INSN_SSE_GROUP_START) {
UNIMPLEMENTED();
int group_ndx = X86_INSN_FLAG_GET_SSE_GROUP(insn_spec.flags);

x86_insn_modrm_t modrm;
modrm.byte = peek_byte(rd);
int insn_ndx = modrm.reg;

x86_insn_spec_t *group_insn = NULL;
group_insn = &x86_insn_sse_groups_repz[group_ndx].insns[insn_ndx];

insn_spec.name = group_insn->name;
insn_spec.flags = group_insn->flags;

for (int i = 0; i < sizeof(insn_spec.operands) / sizeof(x86_insn_operand_spec_t); i++) {
x86_insn_operand_spec_t group_op = group_insn->operands[i];
if (group_op.data[0] != '_' && group_op.data[1] != '_') {
insn_spec.operands[i] = group_insn->operands[i];
}
}
DLOG(0, "[x86 sse decode] modrm_group_spec; group: %d, ins: %d, byte: %x; name: %s; flags: %d", group_ndx, insn_ndx,
modrm.byte, insn_spec.name, insn_spec.flags);
}

if (X86_INSN_FLAG_GET_GROUP(insn_spec.flags) > X86_INSN_GROUP_START &&
Expand Down

0 comments on commit 1321565

Please sign in to comment.