Skip to content
Snippets Groups Projects
Commit 20b7938b authored by an7s's avatar an7s
Browse files

Add Zmm to Capstone operand class

Former-commit-id: c306dd10714825c1a8a1c9d95f1756005f580dd4
parent b6d210d6
No related branches found
No related tags found
No related merge requests found
......@@ -26,6 +26,7 @@ class DecodedOperandCapstone_t
bool isFpuRegister() const;
bool isSseRegister() const;
bool isAvxRegister() const;
bool isZmmRegister() const;
bool isSpecialRegister() const;
bool isSegmentRegister() const;
uint32_t getRegNumber() const;
......
......@@ -312,6 +312,22 @@ bool DecodedOperandCapstone_t::isAvxRegister() const
return isRegister() && regs.find(op.reg)!=end(regs);
}
bool DecodedOperandCapstone_t::isZmmRegister() const
{
const auto regs=set<x86_reg>({
X86_REG_ZMM0, X86_REG_ZMM1, X86_REG_ZMM2,
X86_REG_ZMM3, X86_REG_ZMM4, X86_REG_ZMM5, X86_REG_ZMM6, X86_REG_ZMM7,
X86_REG_ZMM8, X86_REG_ZMM9, X86_REG_ZMM10, X86_REG_ZMM11, X86_REG_ZMM12,
X86_REG_ZMM13, X86_REG_ZMM14, X86_REG_ZMM15, X86_REG_ZMM16, X86_REG_ZMM17,
X86_REG_ZMM18, X86_REG_ZMM19, X86_REG_ZMM20, X86_REG_ZMM21, X86_REG_ZMM22,
X86_REG_ZMM23, X86_REG_ZMM24, X86_REG_ZMM25, X86_REG_ZMM26, X86_REG_ZMM27,
X86_REG_ZMM28, X86_REG_ZMM29, X86_REG_ZMM30, X86_REG_ZMM31,
});
const auto the_insn=static_cast<cs_insn*>(my_insn.get());
const auto &op = (the_insn->detail->x86.operands[op_num]);
return isRegister() && regs.find(op.reg)!=end(regs);
}
bool DecodedOperandCapstone_t::isSpecialRegister() const
{
const auto regs=set<x86_reg>({
......@@ -357,6 +373,8 @@ uint32_t DecodedOperandCapstone_t::getRegNumber() const
return op.reg-X86_REG_XMM0;
else if(isAvxRegister())
return op.reg-X86_REG_YMM0;
else if(isZmmRegister())
return op.reg-X86_REG_ZMM0;
else if(isSegmentRegister())
return to_seg_reg_number(op.reg);
else
......
......@@ -44,7 +44,7 @@ bool libIRDB::IsParameterWrite(const FileIR_t *firp, Instruction_t* insn, string
{
// if it's a register
// if((d.Argument1.ArgType&REGISTER_TYPE)==REGISTER_TYPE)
if(d.getOperand(0).isRegister())
if(d.getOperand(0).isGeneralPurposeRegister())
{
// int regno=(d.Argument1.ArgType)&0xFFFF;
int regno=d.getOperand(0).getRegNumber();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment