Skip to content
Snippets Groups Projects
STARS_IRDB_Instruction.cpp 76.8 KiB
Newer Older

#include "SMPDataFlowAnalysis.h"
#include "interfaces/abstract/STARSInterface.h"
#include "interfaces/irdb/STARSInstruction.h"
#include "interfaces/irdb/STARSOp.h"
#include "interfaces/STARSTypes.h"

// #include <bea_deprecated.hpp>
using namespace libIRDB;
#ifndef ALLOF
#define ALLOF(a) begin(a),end(a)
#endif

STARSOpndTypePtr STARS_IRDB_Instruction_t::VoidOpndsPtr=dynamic_pointer_cast<STARS_op_t>(std::make_shared<STARS_IRDB_op_t>());


static uint32_t UseMacros[STARS_UA_MAXOP] = {STARS_CF_USE1, STARS_CF_USE2, STARS_CF_USE3, STARS_CF_USE4, STARS_CF_USE5, STARS_CF_USE6};

static uint32_t DefMacros[STARS_UA_MAXOP] = {STARS_CF_CHG1, STARS_CF_CHG2, STARS_CF_CHG3, STARS_CF_CHG4, STARS_CF_CHG5, STARS_CF_CHG6};

STARS_InstructionID_t STARS_IRDB_Instruction_t::GetNextInstructionID(void) const
{
	Instruction_t *FallthroughID = irdb_insn->GetFallthrough();
	if (nullptr == FallthroughID) {
		// For robustness, permit a no-op to have no fall through inst.
		cerr << "ERROR: No fallthrough inst in GetNextInstructionID()" << endl;
		return STARS_InstructionID_t(STARS_BADADDR);
	}
	else {
		return STARS_InstructionID_t(FallthroughID->GetBaseID());
	}
}
uint16_t STARS_IRDB_Instruction_t::GetIDAOpcode(void) 
	if (this->IDAOpcodeCached) {
		return this->IDAOpcode;  // optimization
	}

#define CHECK_FOR_INSN(token) \
	if (disasm.getMnemonic() == string(#token) ) { /*string(disasm.Instruction.Mnemonic) == string(#token) + " ")  */ \
		this->IDAOpcode = STARS_NN_##token; \
		this->IDAOpcodeCached = true;   \
		return this->IDAOpcode; }	\
jdh8d's avatar
jdh8d committed
#define CHECK_FOR_INSN_RENAME(token,str) \
	if (disasm.getMnemonic() == string(str) ) { /*if (string(disasm.Instruction.Mnemonic) == string(str) + " ")  */ \
		this->IDAOpcode = STARS_NN_##token; \
		this->IDAOpcodeCached = true;   \
		return this->IDAOpcode; }	\
	if(disasm.isUnconditionalBranch() /*string(disasm.Instruction.Mnemonic)==string("jmp")+" "*/ )
		if (irdb_insn->GetTarget()) {
			this->IDAOpcode = STARS_NN_jmp;
		}
		else {
			this->IDAOpcode = STARS_NN_jmpni;
		}
		this->IDAOpcodeCached = true;
		return this->IDAOpcode;
	else if(disasm.isCall() /*string(disasm.Instruction.Mnemonic)==string("call")+" "*/ )
		if (irdb_insn->GetTarget()) {
			this->IDAOpcode = STARS_NN_call;
		}
		else {
			this->IDAOpcode = STARS_NN_callni;
		}
		this->IDAOpcodeCached = true;
		return this->IDAOpcode;
	CHECK_FOR_INSN(aaa);                 
	CHECK_FOR_INSN(aad);                 
	CHECK_FOR_INSN(aam);                 
	CHECK_FOR_INSN(aas);                 
	CHECK_FOR_INSN(adc);                 
	CHECK_FOR_INSN(add);                 
	CHECK_FOR_INSN(and);                 
	CHECK_FOR_INSN(arpl);                
	CHECK_FOR_INSN(bound);               
	CHECK_FOR_INSN(bsf);                 
	CHECK_FOR_INSN(bsr);                 
	CHECK_FOR_INSN(bt);                  
	CHECK_FOR_INSN(btc);                 
	CHECK_FOR_INSN(btr);                 
	CHECK_FOR_INSN(bts);                 
	CHECK_FOR_INSN(call);                
	CHECK_FOR_INSN(callfi);              
	CHECK_FOR_INSN(callni);              
	CHECK_FOR_INSN(cbw);                 
	CHECK_FOR_INSN(cwde);                
	CHECK_FOR_INSN(cdqe);                
	CHECK_FOR_INSN(clc);                 
	CHECK_FOR_INSN(cld);                 
	CHECK_FOR_INSN(cli);                 
	CHECK_FOR_INSN(clts);                
	CHECK_FOR_INSN(cmc);                 
	CHECK_FOR_INSN(cmp);                 
jdh8d's avatar
jdh8d committed
	CHECK_FOR_INSN_RENAME(cmps, "cmpsb");                
jdh8d's avatar
 
jdh8d committed
	CHECK_FOR_INSN_RENAME(cmps, "cmpsd");                
	CHECK_FOR_INSN_RENAME(cmps, "cmpsw");                
	CHECK_FOR_INSN_RENAME(cmps, "cmpsq");                
	CHECK_FOR_INSN_RENAME(cmps, "cmps");                
	CHECK_FOR_INSN(cwd);                 
	CHECK_FOR_INSN(cdq);                 
	CHECK_FOR_INSN(cqo);                 
	CHECK_FOR_INSN(daa);                 
	CHECK_FOR_INSN(das);                 
	CHECK_FOR_INSN(dec);                 
	CHECK_FOR_INSN(div);                 
	CHECK_FOR_INSN(enterw);              
	CHECK_FOR_INSN(enter);               
	CHECK_FOR_INSN(enterd);              
	CHECK_FOR_INSN(enterq);              
	CHECK_FOR_INSN(hlt);                 
	CHECK_FOR_INSN(idiv);                
	CHECK_FOR_INSN(imul);                
	CHECK_FOR_INSN(in);                  
	CHECK_FOR_INSN(inc);                 
jdh8d's avatar
 
jdh8d committed
	CHECK_FOR_INSN_RENAME(ins, "insb");
	CHECK_FOR_INSN_RENAME(ins, "insw");
	CHECK_FOR_INSN_RENAME(ins, "insd");
	CHECK_FOR_INSN_RENAME(ins, "insq");
	CHECK_FOR_INSN(ins);                 
	CHECK_FOR_INSN(int);                 
	CHECK_FOR_INSN(into);                
	CHECK_FOR_INSN(int3);                
	CHECK_FOR_INSN(iretw);               
	CHECK_FOR_INSN(iret);                
	CHECK_FOR_INSN(iretd);               
	CHECK_FOR_INSN(iretq);               
	CHECK_FOR_INSN(ja);                  
	CHECK_FOR_INSN(jae);                 
	CHECK_FOR_INSN(jb);                  
	CHECK_FOR_INSN(jbe);                 
	CHECK_FOR_INSN(jc);                  
	CHECK_FOR_INSN(jcxz);                
	CHECK_FOR_INSN(jecxz);               
	CHECK_FOR_INSN(jrcxz);               
	CHECK_FOR_INSN(je);                  
	CHECK_FOR_INSN(jg);                  
	CHECK_FOR_INSN(jge);                 
	CHECK_FOR_INSN(jl);                  
	CHECK_FOR_INSN(jle);                 
	CHECK_FOR_INSN(jna);                 
	CHECK_FOR_INSN(jnae);                
	CHECK_FOR_INSN(jnb);                 
	CHECK_FOR_INSN(jnbe);                
	CHECK_FOR_INSN(jnc);                 
	CHECK_FOR_INSN(jne);                 
	CHECK_FOR_INSN(jng);                 
	CHECK_FOR_INSN(jnge);                
	CHECK_FOR_INSN(jnl);                 
	CHECK_FOR_INSN(jnle);                
	CHECK_FOR_INSN(jno);                 
	CHECK_FOR_INSN(jnp);                 
	CHECK_FOR_INSN(jns);                 
	CHECK_FOR_INSN(jnz);                 
	CHECK_FOR_INSN(jo);                  
	CHECK_FOR_INSN(jp);                  
	CHECK_FOR_INSN(jpe);                 
	CHECK_FOR_INSN(jpo);                 
	CHECK_FOR_INSN(js);                  
	CHECK_FOR_INSN(jz);                  
	CHECK_FOR_INSN(jmp);                 
jdh8d's avatar
 
jdh8d committed
	CHECK_FOR_INSN_RENAME(jmpfi, "jmp far");               
	CHECK_FOR_INSN(jmpfi);               
	CHECK_FOR_INSN(jmpni);               
	CHECK_FOR_INSN(jmpshort);            
	CHECK_FOR_INSN(lahf);                
	CHECK_FOR_INSN(lar);                 
	CHECK_FOR_INSN(lea);                 
	CHECK_FOR_INSN(leavew);              
	CHECK_FOR_INSN(leave);               
	CHECK_FOR_INSN(leaved);              
	CHECK_FOR_INSN(leaveq);              
	CHECK_FOR_INSN(lgdt);                
	CHECK_FOR_INSN(lidt);                
	CHECK_FOR_INSN(lgs);                 
	CHECK_FOR_INSN(lss);                 
	CHECK_FOR_INSN(lds);                 
	CHECK_FOR_INSN(les);                 
	CHECK_FOR_INSN(lfs);                 
	CHECK_FOR_INSN(lldt);                
	CHECK_FOR_INSN(lmsw);                
	CHECK_FOR_INSN(lock);                
jdh8d's avatar
 
jdh8d committed
	CHECK_FOR_INSN_RENAME(lods, "lodsb");                
	CHECK_FOR_INSN_RENAME(lods, "lodsw");                
	CHECK_FOR_INSN_RENAME(lods, "lodsd");                
	CHECK_FOR_INSN_RENAME(lods, "lodsq");                
	CHECK_FOR_INSN(lods);                
	CHECK_FOR_INSN(loopw);               
	CHECK_FOR_INSN(loop);                
	CHECK_FOR_INSN(loopd);               
	CHECK_FOR_INSN(loopq);               
	CHECK_FOR_INSN(loopwe);              
	CHECK_FOR_INSN(loope);               
	CHECK_FOR_INSN(loopde);              
	CHECK_FOR_INSN(loopqe);              
	CHECK_FOR_INSN(loopwne);             
	CHECK_FOR_INSN(loopne);              
	CHECK_FOR_INSN(loopdne);             
	CHECK_FOR_INSN(loopqne);             
	CHECK_FOR_INSN(lsl);                 
	CHECK_FOR_INSN(ltr);                 
	CHECK_FOR_INSN(mov);                 
	CHECK_FOR_INSN(movsp);               
	CHECK_FOR_INSN_RENAME(movs, "movsb");                
	CHECK_FOR_INSN_RENAME(movs, "movsw");                
	CHECK_FOR_INSN_RENAME(movs, "movsd");                
	CHECK_FOR_INSN_RENAME(movs, "movsq");                
	CHECK_FOR_INSN(movs);                
	CHECK_FOR_INSN(movsx);               
	CHECK_FOR_INSN(movzx);               
	CHECK_FOR_INSN(mul);                 
	CHECK_FOR_INSN(neg);                 
	CHECK_FOR_INSN(nop);                 
	CHECK_FOR_INSN(not);                 
	CHECK_FOR_INSN(or);                  
	CHECK_FOR_INSN(out);                 
jdh8d's avatar
 
jdh8d committed
	CHECK_FOR_INSN_RENAME(outs, "outsb");                
	CHECK_FOR_INSN_RENAME(outs, "outsw");                
	CHECK_FOR_INSN_RENAME(outs, "outsd");                
	CHECK_FOR_INSN_RENAME(outs, "outsq");                
	CHECK_FOR_INSN(outs);                
	CHECK_FOR_INSN(pop);                 
	CHECK_FOR_INSN(popaw);               
	CHECK_FOR_INSN(popa);                
	CHECK_FOR_INSN(popad);               
	CHECK_FOR_INSN(popaq);               
	CHECK_FOR_INSN(popfw);               
	CHECK_FOR_INSN(popf);                
	CHECK_FOR_INSN(popfd);               
	CHECK_FOR_INSN(popfq);               
	CHECK_FOR_INSN(push);                
	CHECK_FOR_INSN(pushaw);              
	CHECK_FOR_INSN(pusha);               
	CHECK_FOR_INSN(pushad);              
	CHECK_FOR_INSN(pushaq);              
	CHECK_FOR_INSN(pushfw);              
	CHECK_FOR_INSN(pushf);               
	CHECK_FOR_INSN(pushfd);              
	CHECK_FOR_INSN(pushfq);              
	CHECK_FOR_INSN(rcl);                 
	CHECK_FOR_INSN(rcr);                 
	CHECK_FOR_INSN(rol);                 
	CHECK_FOR_INSN(ror);                 
	CHECK_FOR_INSN(rep);                 
	CHECK_FOR_INSN(repe);                
	CHECK_FOR_INSN(repne);               
jdh8d's avatar
jdh8d committed
	CHECK_FOR_INSN_RENAME(retn,"ret");                
jdh8d's avatar
 
jdh8d committed
	CHECK_FOR_INSN_RENAME(retn,"retn");                
	CHECK_FOR_INSN(retf);                
	CHECK_FOR_INSN(sahf);                
	CHECK_FOR_INSN(sal);                 
	CHECK_FOR_INSN(sar);                 
	CHECK_FOR_INSN(shl);                 
	CHECK_FOR_INSN(shr);                 
	CHECK_FOR_INSN(sbb);                 
jdh8d's avatar
 
jdh8d committed
	CHECK_FOR_INSN_RENAME(scas, "scasb");                
	CHECK_FOR_INSN_RENAME(scas, "scasw");                
	CHECK_FOR_INSN_RENAME(scas, "scasd");                
	CHECK_FOR_INSN_RENAME(scas, "scasq");                
	CHECK_FOR_INSN(scas);                
	CHECK_FOR_INSN(seta);                
	CHECK_FOR_INSN(setae);               
	CHECK_FOR_INSN(setb);                
	CHECK_FOR_INSN(setbe);               
	CHECK_FOR_INSN(setc);                
	CHECK_FOR_INSN(sete);                
	CHECK_FOR_INSN(setg);                
	CHECK_FOR_INSN(setge);               
	CHECK_FOR_INSN(setl);                
	CHECK_FOR_INSN(setle);               
	CHECK_FOR_INSN(setna);               
	CHECK_FOR_INSN(setnae);              
	CHECK_FOR_INSN(setnb);               
	CHECK_FOR_INSN(setnbe);              
	CHECK_FOR_INSN(setnc);               
	CHECK_FOR_INSN(setne);               
	CHECK_FOR_INSN(setng);               
	CHECK_FOR_INSN(setnge);              
	CHECK_FOR_INSN(setnl);               
	CHECK_FOR_INSN(setnle);              
	CHECK_FOR_INSN(setno);               
	CHECK_FOR_INSN(setnp);               
	CHECK_FOR_INSN(setns);               
	CHECK_FOR_INSN(setnz);               
	CHECK_FOR_INSN(seto);                
	CHECK_FOR_INSN(setp);                
	CHECK_FOR_INSN(setpe);               
	CHECK_FOR_INSN(setpo);               
	CHECK_FOR_INSN(sets);                
	CHECK_FOR_INSN(setz);                
	CHECK_FOR_INSN(sgdt);                
	CHECK_FOR_INSN(sidt);                
	CHECK_FOR_INSN(shld);                
	CHECK_FOR_INSN(shrd);                
	CHECK_FOR_INSN(sldt);                
	CHECK_FOR_INSN(smsw);                
	CHECK_FOR_INSN(stc);                 
	CHECK_FOR_INSN(std);                 
	CHECK_FOR_INSN(sti);                 
jdh8d's avatar
jdh8d committed
	CHECK_FOR_INSN_RENAME(stos, "stosq");                
	CHECK_FOR_INSN_RENAME(stos, "stosd");                
	CHECK_FOR_INSN_RENAME(stos, "stosw");                
	CHECK_FOR_INSN_RENAME(stos, "stosb");                
	CHECK_FOR_INSN(stos);
	CHECK_FOR_INSN(str);                 
	CHECK_FOR_INSN(sub);                 
	CHECK_FOR_INSN(test);                
	CHECK_FOR_INSN(verr);                
	CHECK_FOR_INSN(verw);                
	CHECK_FOR_INSN(wait);                
	CHECK_FOR_INSN(xchg);                
jdh8d's avatar
 
jdh8d committed
	CHECK_FOR_INSN_RENAME(xlat,"xlatb");
	CHECK_FOR_INSN_RENAME(xlat,"xlatw");
	CHECK_FOR_INSN_RENAME(xlat,"xlatd");
	CHECK_FOR_INSN_RENAME(xlat,"xlatq");
	CHECK_FOR_INSN(xlat);                
	CHECK_FOR_INSN(xor);                 

	
	
	

	CHECK_FOR_INSN(cmpxchg);             
	CHECK_FOR_INSN(bswap);               
	CHECK_FOR_INSN(xadd);                
	CHECK_FOR_INSN(invd);                
	CHECK_FOR_INSN(wbinvd);              
	CHECK_FOR_INSN(invlpg);              

	
	
	

	CHECK_FOR_INSN(rdmsr);               
	CHECK_FOR_INSN(wrmsr);               
	CHECK_FOR_INSN(cpuid);               
	CHECK_FOR_INSN(cmpxchg8b);           
	CHECK_FOR_INSN(rdtsc);               
	CHECK_FOR_INSN(rsm);                 

	
	
	
	CHECK_FOR_INSN(cmova);
	CHECK_FOR_INSN(cmova);
	CHECK_FOR_INSN(cmovb);
	CHECK_FOR_INSN(cmovbe);
	CHECK_FOR_INSN(cmovg);
	CHECK_FOR_INSN(cmovge);
	CHECK_FOR_INSN(cmovl);
	CHECK_FOR_INSN(cmovle);
	CHECK_FOR_INSN(cmovnb);
	CHECK_FOR_INSN(cmovnb);
	CHECK_FOR_INSN(cmovno);
	CHECK_FOR_INSN(cmovnp);
	CHECK_FOR_INSN(cmovns);
	CHECK_FOR_INSN(cmovnz);
	CHECK_FOR_INSN(cmovo);
	CHECK_FOR_INSN(cmovp);
	CHECK_FOR_INSN(cmovs);
	CHECK_FOR_INSN(cmovz);
jdh8d's avatar
jdh8d committed
	CHECK_FOR_INSN_RENAME(cmova, "cmovnbe");               
	CHECK_FOR_INSN_RENAME(cmovb, "cmovb");               
	CHECK_FOR_INSN_RENAME(cmovbe, "cmovbe");              
jdh8d's avatar
jdh8d committed
	CHECK_FOR_INSN_RENAME(cmovg, "cmovnle");               
	CHECK_FOR_INSN_RENAME(cmovge, "cmovnl");              
	CHECK_FOR_INSN_RENAME(cmovl, "cmovl");               
	CHECK_FOR_INSN_RENAME(cmovle, "cmovle");              
	CHECK_FOR_INSN_RENAME(cmovnb, "cmovnb");              
	CHECK_FOR_INSN_RENAME(cmovnb, "cmovae");              
	CHECK_FOR_INSN_RENAME(cmovno, "cmovno");              
	CHECK_FOR_INSN_RENAME(cmovnp, "cmovnp");              
	CHECK_FOR_INSN_RENAME(cmovns, "cmovns");              
jdh8d's avatar
jdh8d committed
	CHECK_FOR_INSN_RENAME(cmovnz, "cmovne");              
	CHECK_FOR_INSN_RENAME(cmovo, "cmovo");               
	CHECK_FOR_INSN_RENAME(cmovp, "cmovp");               
	CHECK_FOR_INSN_RENAME(cmovs, "cmovs");               
jdh8d's avatar
jdh8d committed
	CHECK_FOR_INSN_RENAME(cmovz, "cmove");               
	CHECK_FOR_INSN(fcmovb);
	CHECK_FOR_INSN(fcmove);
	CHECK_FOR_INSN(fcmovbe);
	CHECK_FOR_INSN(fcmovu);
	CHECK_FOR_INSN(fcmovnb);
	CHECK_FOR_INSN(fcmovne);
	CHECK_FOR_INSN(fcmovnbe);
	CHECK_FOR_INSN(fcmovnu);
	CHECK_FOR_INSN(fcomi);               
	CHECK_FOR_INSN(fucomi);              
	CHECK_FOR_INSN(fcomip);              
	CHECK_FOR_INSN(fucomip);             
	CHECK_FOR_INSN(rdpmc);               

	
	
	

	CHECK_FOR_INSN(fld);                 
	CHECK_FOR_INSN(fst);                 
	CHECK_FOR_INSN(fstp);                
	CHECK_FOR_INSN(fxch);                
	CHECK_FOR_INSN(fild);                
	CHECK_FOR_INSN(fist);                
	CHECK_FOR_INSN(fistp);               
	CHECK_FOR_INSN(fbld);                
	CHECK_FOR_INSN(fbstp);               
	CHECK_FOR_INSN(fadd);                
	CHECK_FOR_INSN(faddp);               
	CHECK_FOR_INSN(fiadd);               
	CHECK_FOR_INSN(fsub);                
	CHECK_FOR_INSN(fsubp);               
	CHECK_FOR_INSN(fisub);               
	CHECK_FOR_INSN(fsubr);               
	CHECK_FOR_INSN(fsubrp);              
	CHECK_FOR_INSN(fisubr);              
	CHECK_FOR_INSN(fmul);                
	CHECK_FOR_INSN(fmulp);               
	CHECK_FOR_INSN(fimul);               
	CHECK_FOR_INSN(fdiv);                
	CHECK_FOR_INSN(fdivp);               
	CHECK_FOR_INSN(fidiv);               
	CHECK_FOR_INSN(fdivr);               
	CHECK_FOR_INSN(fdivrp);              
	CHECK_FOR_INSN(fidivr);              
	CHECK_FOR_INSN(fsqrt);               
	CHECK_FOR_INSN(fscale);              
	CHECK_FOR_INSN(fprem);               
	CHECK_FOR_INSN(frndint);             
	CHECK_FOR_INSN(fxtract);             
	CHECK_FOR_INSN(fabs);                
	CHECK_FOR_INSN(fchs);                
	CHECK_FOR_INSN(fcom);                
	CHECK_FOR_INSN(fcomp);               
	CHECK_FOR_INSN(fcompp);              
	CHECK_FOR_INSN(ficom);               
	CHECK_FOR_INSN(ficomp);              
	CHECK_FOR_INSN(ftst);                
	CHECK_FOR_INSN(fxam);                
	CHECK_FOR_INSN(fptan);               
	CHECK_FOR_INSN(fpatan);              
	CHECK_FOR_INSN(f2xm1);               
	CHECK_FOR_INSN(fyl2x);               
	CHECK_FOR_INSN(fyl2xp1);             
	CHECK_FOR_INSN(fldz);                
	CHECK_FOR_INSN(fld1);                
	CHECK_FOR_INSN(fldpi);               
	CHECK_FOR_INSN(fldl2t);              
	CHECK_FOR_INSN(fldl2e);              
	CHECK_FOR_INSN(fldlg2);              
	CHECK_FOR_INSN(fldln2);              
	CHECK_FOR_INSN(finit);               
	CHECK_FOR_INSN(fninit);              
	CHECK_FOR_INSN(fsetpm);              
	CHECK_FOR_INSN(fldcw);               
	CHECK_FOR_INSN(fstcw);               
	CHECK_FOR_INSN(fnstcw);              
	CHECK_FOR_INSN(fstsw);               
	CHECK_FOR_INSN(fnstsw);              
	CHECK_FOR_INSN(fclex);               
	CHECK_FOR_INSN(fnclex);              
	CHECK_FOR_INSN(fstenv);              
	CHECK_FOR_INSN(fnstenv);             
	CHECK_FOR_INSN(fldenv);              
	CHECK_FOR_INSN(fsave);               
	CHECK_FOR_INSN(fnsave);              
	CHECK_FOR_INSN(frstor);              
	CHECK_FOR_INSN(fincstp);             
	CHECK_FOR_INSN(fdecstp);             
	CHECK_FOR_INSN(ffree);               
	CHECK_FOR_INSN(fnop);                
	CHECK_FOR_INSN(feni);                
	CHECK_FOR_INSN(fneni);               
	CHECK_FOR_INSN(fdisi);               
	CHECK_FOR_INSN(fndisi);              

	
	
	

	CHECK_FOR_INSN(fprem1);              
	CHECK_FOR_INSN(fsincos);             
	CHECK_FOR_INSN(fsin);                
	CHECK_FOR_INSN(fcos);                
	CHECK_FOR_INSN(fucom);               
	CHECK_FOR_INSN(fucomp);              
	CHECK_FOR_INSN(fucompp);             

	
	
	

	CHECK_FOR_INSN(setalc);              
	CHECK_FOR_INSN(svdc);                
	CHECK_FOR_INSN(rsdc);                
	CHECK_FOR_INSN(svldt);               
	CHECK_FOR_INSN(rsldt);               
	CHECK_FOR_INSN(svts);                
	CHECK_FOR_INSN(rsts);                
jdh8d's avatar
 
jdh8d committed
	CHECK_FOR_INSN_RENAME(icebp, "int1");               
	CHECK_FOR_INSN(icebp);               
	CHECK_FOR_INSN(loadall);             

	
	
	

	CHECK_FOR_INSN(emms);                
	CHECK_FOR_INSN(movd);                
	CHECK_FOR_INSN(movq);                
	CHECK_FOR_INSN(packsswb);            
	CHECK_FOR_INSN(packssdw);            
	CHECK_FOR_INSN(packuswb);            
	CHECK_FOR_INSN(paddb);               
	CHECK_FOR_INSN(paddw);               
	CHECK_FOR_INSN(paddd);               
	CHECK_FOR_INSN(paddsb);              
	CHECK_FOR_INSN(paddsw);              
	CHECK_FOR_INSN(paddusb);             
	CHECK_FOR_INSN(paddusw);             
	CHECK_FOR_INSN(pand);                
	CHECK_FOR_INSN(pandn);               
	CHECK_FOR_INSN(pcmpeqb);             
	CHECK_FOR_INSN(pcmpeqw);             
	CHECK_FOR_INSN(pcmpeqd);             
	CHECK_FOR_INSN(pcmpgtb);             
	CHECK_FOR_INSN(pcmpgtw);             
	CHECK_FOR_INSN(pcmpgtd);             
	CHECK_FOR_INSN(pmaddwd);             
	CHECK_FOR_INSN(pmulhw);              
	CHECK_FOR_INSN(pmullw);              
	CHECK_FOR_INSN(por);                 
	CHECK_FOR_INSN(psllw);               
	CHECK_FOR_INSN(pslld);               
	CHECK_FOR_INSN(psllq);               
	CHECK_FOR_INSN(psraw);               
	CHECK_FOR_INSN(psrad);               
	CHECK_FOR_INSN(psrlw);               
	CHECK_FOR_INSN(psrld);               
	CHECK_FOR_INSN(psrlq);               
	CHECK_FOR_INSN(psubb);               
	CHECK_FOR_INSN(psubw);               
	CHECK_FOR_INSN(psubd);               
	CHECK_FOR_INSN(psubsb);              
	CHECK_FOR_INSN(psubsw);              
	CHECK_FOR_INSN(psubusb);             
	CHECK_FOR_INSN(psubusw);             
	CHECK_FOR_INSN(punpckhbw);           
	CHECK_FOR_INSN(punpckhwd);           
	CHECK_FOR_INSN(punpckhdq);           
	CHECK_FOR_INSN(punpcklbw);           
	CHECK_FOR_INSN(punpcklwd);           
	CHECK_FOR_INSN(punpckldq);           
	CHECK_FOR_INSN(pxor);                

	
	
	

	CHECK_FOR_INSN(fxsave);              
	CHECK_FOR_INSN(fxrstor);             

	

	CHECK_FOR_INSN(sysenter);            
	CHECK_FOR_INSN(sysexit);             

	

	CHECK_FOR_INSN(pavgusb);             
	CHECK_FOR_INSN(pfadd);               
	CHECK_FOR_INSN(pfsub);               
	CHECK_FOR_INSN(pfsubr);              
	CHECK_FOR_INSN(pfacc);               
	CHECK_FOR_INSN(pfcmpge);             
	CHECK_FOR_INSN(pfcmpgt);             
	CHECK_FOR_INSN(pfcmpeq);             
	CHECK_FOR_INSN(pfmin);               
	CHECK_FOR_INSN(pfmax);               
	CHECK_FOR_INSN(pi2fd);               
	CHECK_FOR_INSN(pf2id);               
	CHECK_FOR_INSN(pfrcp);               
	CHECK_FOR_INSN(pfrsqrt);             
	CHECK_FOR_INSN(pfmul);               
	CHECK_FOR_INSN(pfrcpit1);            
	CHECK_FOR_INSN(pfrsqit1);            
	CHECK_FOR_INSN(pfrcpit2);            
	CHECK_FOR_INSN(pmulhrw);             
	CHECK_FOR_INSN(femms);               
	CHECK_FOR_INSN(prefetch);            
	CHECK_FOR_INSN(prefetchw);           


	

	CHECK_FOR_INSN(addps);               
	CHECK_FOR_INSN(addss);               
	CHECK_FOR_INSN(andnps);              
	CHECK_FOR_INSN(andps);               
	CHECK_FOR_INSN(cmpps);               
	CHECK_FOR_INSN(cmpss);               
	CHECK_FOR_INSN(comiss);              
	CHECK_FOR_INSN(cvtpi2ps);            
	CHECK_FOR_INSN(cvtps2pi);            
	CHECK_FOR_INSN(cvtsi2ss);            
	CHECK_FOR_INSN(cvtss2si);            
	CHECK_FOR_INSN(cvttps2pi);           
	CHECK_FOR_INSN(cvttss2si);           
	CHECK_FOR_INSN(divps);               
	CHECK_FOR_INSN(divss);               
	CHECK_FOR_INSN(ldmxcsr);             
	CHECK_FOR_INSN(maxps);               
	CHECK_FOR_INSN(maxss);               
	CHECK_FOR_INSN(minps);               
	CHECK_FOR_INSN(minss);               
	CHECK_FOR_INSN(movaps);              
	CHECK_FOR_INSN(movhlps);             
	CHECK_FOR_INSN(movhps);              
	CHECK_FOR_INSN(movlhps);             
	CHECK_FOR_INSN(movlps);              
	CHECK_FOR_INSN(movmskps);            
	CHECK_FOR_INSN(movss);               
	CHECK_FOR_INSN(movups);              
	CHECK_FOR_INSN(mulps);               
	CHECK_FOR_INSN(mulss);               
	CHECK_FOR_INSN(orps);                
	CHECK_FOR_INSN(rcpps);               
	CHECK_FOR_INSN(rcpss);               
	CHECK_FOR_INSN(rsqrtps);             
	CHECK_FOR_INSN(rsqrtss);             
	CHECK_FOR_INSN(shufps);              
	CHECK_FOR_INSN(sqrtps);              
	CHECK_FOR_INSN(sqrtss);              
	CHECK_FOR_INSN(stmxcsr);             
	CHECK_FOR_INSN(subps);               
	CHECK_FOR_INSN(subss);               
	CHECK_FOR_INSN(ucomiss);             
	CHECK_FOR_INSN(unpckhps);            
	CHECK_FOR_INSN(unpcklps);            
	CHECK_FOR_INSN(xorps);               
	CHECK_FOR_INSN(pavgb);               
	CHECK_FOR_INSN(pavgw);               
	CHECK_FOR_INSN(pextrw);              
	CHECK_FOR_INSN(pinsrw);              
	CHECK_FOR_INSN(pmaxsw);              
	CHECK_FOR_INSN(pmaxub);              
	CHECK_FOR_INSN(pminsw);              
	CHECK_FOR_INSN(pminub);              
	CHECK_FOR_INSN(pmovmskb);            
	CHECK_FOR_INSN(pmulhuw);             
	CHECK_FOR_INSN(psadbw);              
	CHECK_FOR_INSN(pshufw);              
	CHECK_FOR_INSN(maskmovq);            
	CHECK_FOR_INSN(movntps);             
	CHECK_FOR_INSN(movntq);              
	CHECK_FOR_INSN(prefetcht0);          
	CHECK_FOR_INSN_RENAME(prefetcht0, "prefetchT0");
	CHECK_FOR_INSN(prefetcht1);
	CHECK_FOR_INSN_RENAME(prefetcht1, "prefetchT1");
	CHECK_FOR_INSN(prefetcht2);
	CHECK_FOR_INSN_RENAME(prefetcht2, "prefetchT2");
	CHECK_FOR_INSN_RENAME(prefetchnta, "prefetchNTA"); // beaengine rename
	CHECK_FOR_INSN(prefetchnta);  // capstone needs no rename
	CHECK_FOR_INSN(sfence);              

	

	CHECK_FOR_INSN(cmpeqps);             
	CHECK_FOR_INSN(cmpltps);             
	CHECK_FOR_INSN(cmpleps);             
	CHECK_FOR_INSN(cmpunordps);          
	CHECK_FOR_INSN(cmpneqps);            
	CHECK_FOR_INSN(cmpnltps);            
	CHECK_FOR_INSN(cmpnleps);            
	CHECK_FOR_INSN(cmpordps);            
	CHECK_FOR_INSN(cmpeqss);             
	CHECK_FOR_INSN(cmpltss);             
	CHECK_FOR_INSN(cmpless);             
	CHECK_FOR_INSN(cmpunordss);          
	CHECK_FOR_INSN(cmpneqss);            
	CHECK_FOR_INSN(cmpnltss);            
	CHECK_FOR_INSN(cmpnless);            
	CHECK_FOR_INSN(cmpordss);            

	

	CHECK_FOR_INSN(pf2iw);               
	CHECK_FOR_INSN(pfnacc);              
	CHECK_FOR_INSN(pfpnacc);             
	CHECK_FOR_INSN(pi2fw);               
	CHECK_FOR_INSN(pswapd);              

	

	CHECK_FOR_INSN(fstp1);               
	CHECK_FOR_INSN(fcom2);               
	CHECK_FOR_INSN(fcomp3);              
	CHECK_FOR_INSN(fxch4);               
	CHECK_FOR_INSN(fcomp5);              
	CHECK_FOR_INSN(ffreep);              
	CHECK_FOR_INSN(fxch7);               
	CHECK_FOR_INSN(fstp8);               
	CHECK_FOR_INSN(fstp9);               

	

	CHECK_FOR_INSN(addpd);               
	CHECK_FOR_INSN(addsd);               
	CHECK_FOR_INSN(andnpd);              
	CHECK_FOR_INSN(andpd);               
	CHECK_FOR_INSN(clflush);             
	CHECK_FOR_INSN(cmppd);               
	CHECK_FOR_INSN(cmpsd);               
	CHECK_FOR_INSN(comisd);              
	CHECK_FOR_INSN(cvtdq2pd);            
	CHECK_FOR_INSN(cvtdq2ps);            
	CHECK_FOR_INSN(cvtpd2dq);            
	CHECK_FOR_INSN(cvtpd2pi);            
	CHECK_FOR_INSN(cvtpd2ps);            
	CHECK_FOR_INSN(cvtpi2pd);            
	CHECK_FOR_INSN(cvtps2dq);            
	CHECK_FOR_INSN(cvtps2pd);            
	CHECK_FOR_INSN(cvtsd2si);            
	CHECK_FOR_INSN(cvtsd2ss);            
	CHECK_FOR_INSN(cvtsi2sd);            
	CHECK_FOR_INSN(cvtss2sd);            
	CHECK_FOR_INSN(cvttpd2dq);           
	CHECK_FOR_INSN(cvttpd2pi);           
	CHECK_FOR_INSN(cvttps2dq);           
	CHECK_FOR_INSN(cvttsd2si);           
	CHECK_FOR_INSN(divpd);               
	CHECK_FOR_INSN(divsd);               
	CHECK_FOR_INSN(lfence);              
	CHECK_FOR_INSN(maskmovdqu);          
	CHECK_FOR_INSN(maxpd);               
	CHECK_FOR_INSN(maxsd);               
	CHECK_FOR_INSN(mfence);              
	CHECK_FOR_INSN(minpd);               
	CHECK_FOR_INSN(minsd);               
	CHECK_FOR_INSN(movapd);              
	CHECK_FOR_INSN(movdq2q);             
	CHECK_FOR_INSN(movdqa);              
	CHECK_FOR_INSN(movdqu);              
	CHECK_FOR_INSN(movhpd);              
	CHECK_FOR_INSN(movlpd);              
	CHECK_FOR_INSN(movmskpd);            
	CHECK_FOR_INSN(movntdq);             
	CHECK_FOR_INSN(movnti);              
	CHECK_FOR_INSN(movntpd);             
	CHECK_FOR_INSN(movq2dq);             
	CHECK_FOR_INSN(movsd);               
	CHECK_FOR_INSN(movupd);              
	CHECK_FOR_INSN(mulpd);               
	CHECK_FOR_INSN(mulsd);               
	CHECK_FOR_INSN(orpd);                
	CHECK_FOR_INSN(paddq);               
	CHECK_FOR_INSN(pause);               
	CHECK_FOR_INSN(pmuludq);             
	CHECK_FOR_INSN(pshufd);              
	CHECK_FOR_INSN(pshufhw);             
	CHECK_FOR_INSN(pshuflw);             
	CHECK_FOR_INSN(pslldq);              
	CHECK_FOR_INSN(psrldq);              
	CHECK_FOR_INSN(psubq);               
	CHECK_FOR_INSN(punpckhqdq);          
	CHECK_FOR_INSN(punpcklqdq);          
	CHECK_FOR_INSN(shufpd);              
	CHECK_FOR_INSN(sqrtpd);              
	CHECK_FOR_INSN(sqrtsd);              
	CHECK_FOR_INSN(subpd);               
	CHECK_FOR_INSN(subsd);               
	CHECK_FOR_INSN(ucomisd);             
	CHECK_FOR_INSN(unpckhpd);            
	CHECK_FOR_INSN(unpcklpd);            
	CHECK_FOR_INSN(xorpd);               

	

	CHECK_FOR_INSN(syscall);             
	CHECK_FOR_INSN(sysret);              

	

	CHECK_FOR_INSN(swapgs);              

	

	CHECK_FOR_INSN(movddup);             
	CHECK_FOR_INSN(movshdup);            
	CHECK_FOR_INSN(movsldup);            

	

	CHECK_FOR_INSN(movsxd);              
	CHECK_FOR_INSN(cmpxchg16b);          

	

	CHECK_FOR_INSN(addsubpd);            
	CHECK_FOR_INSN(addsubps);            
	CHECK_FOR_INSN(haddpd);              
	CHECK_FOR_INSN(haddps);              
	CHECK_FOR_INSN(hsubpd);              
	CHECK_FOR_INSN(hsubps);              
	CHECK_FOR_INSN(monitor);             
	CHECK_FOR_INSN(mwait);               
	CHECK_FOR_INSN(fisttp);              
	CHECK_FOR_INSN(lddqu);               

	

	CHECK_FOR_INSN(psignb);              
	CHECK_FOR_INSN(psignw);              
	CHECK_FOR_INSN(psignd);              
	CHECK_FOR_INSN(pshufb);              
	CHECK_FOR_INSN(pmulhrsw);            
	CHECK_FOR_INSN(pmaddubsw);           
	CHECK_FOR_INSN(phsubsw);             
	CHECK_FOR_INSN(phaddsw);             
	CHECK_FOR_INSN(phaddw);              
	CHECK_FOR_INSN(phaddd);              
	CHECK_FOR_INSN(phsubw);              
	CHECK_FOR_INSN(phsubd);              
	CHECK_FOR_INSN(palignr);             
	CHECK_FOR_INSN(pabsb);               
	CHECK_FOR_INSN(pabsw);               
	CHECK_FOR_INSN(pabsd);               

	

	CHECK_FOR_INSN(vmcall);              
	CHECK_FOR_INSN(vmclear);             
	CHECK_FOR_INSN(vmlaunch);            
	CHECK_FOR_INSN(vmresume);            
	CHECK_FOR_INSN(vmptrld);             
	CHECK_FOR_INSN(vmptrst);             
	CHECK_FOR_INSN(vmread);              
	CHECK_FOR_INSN(vmwrite);             
	CHECK_FOR_INSN(vmxoff);              
	CHECK_FOR_INSN(vmxon);               

	

	CHECK_FOR_INSN(ud2);                 

	

	CHECK_FOR_INSN(rdtscp);              

	

	CHECK_FOR_INSN(pfrcpv);              
	CHECK_FOR_INSN(pfrsqrtv);            

	

	CHECK_FOR_INSN(cmpeqpd);             
	CHECK_FOR_INSN(cmpltpd);             
	CHECK_FOR_INSN(cmplepd);             
	CHECK_FOR_INSN(cmpunordpd);          
	CHECK_FOR_INSN(cmpneqpd);            
	CHECK_FOR_INSN(cmpnltpd);            
	CHECK_FOR_INSN(cmpnlepd);            
	CHECK_FOR_INSN(cmpordpd);            
	CHECK_FOR_INSN(cmpeqsd);             
	CHECK_FOR_INSN(cmpltsd);             
	CHECK_FOR_INSN(cmplesd);             
	CHECK_FOR_INSN(cmpunordsd);          
	CHECK_FOR_INSN(cmpneqsd);            
	CHECK_FOR_INSN(cmpnltsd);            
	CHECK_FOR_INSN(cmpnlesd);            
	CHECK_FOR_INSN(cmpordsd);            

	

	CHECK_FOR_INSN(blendpd);              
	CHECK_FOR_INSN(blendps);              
	CHECK_FOR_INSN(blendvpd);             
	CHECK_FOR_INSN(blendvps);             
	CHECK_FOR_INSN(dppd);                 
	CHECK_FOR_INSN(dpps);                 
	CHECK_FOR_INSN(extractps);            
	CHECK_FOR_INSN(insertps);             
	CHECK_FOR_INSN(movntdqa);             
	CHECK_FOR_INSN(mpsadbw);              
	CHECK_FOR_INSN(packusdw);             
	CHECK_FOR_INSN(pblendvb);             
	CHECK_FOR_INSN(pblendw);              
	CHECK_FOR_INSN(pcmpeqq);              
	CHECK_FOR_INSN(pextrb);               
	CHECK_FOR_INSN(pextrd);               
	CHECK_FOR_INSN(pextrq);               
	CHECK_FOR_INSN(phminposuw);           
	CHECK_FOR_INSN(pinsrb);               
	CHECK_FOR_INSN(pinsrd);               
	CHECK_FOR_INSN(pinsrq);               
	CHECK_FOR_INSN(pmaxsb);               
	CHECK_FOR_INSN(pmaxsd);               
	CHECK_FOR_INSN(pmaxud);               
	CHECK_FOR_INSN(pmaxuw);               
	CHECK_FOR_INSN(pminsb);               
	CHECK_FOR_INSN(pminsd);               
	CHECK_FOR_INSN(pminud);               
	CHECK_FOR_INSN(pminuw);               
	CHECK_FOR_INSN(pmovsxbw);             
	CHECK_FOR_INSN(pmovsxbd);             
	CHECK_FOR_INSN(pmovsxbq);             
	CHECK_FOR_INSN(pmovsxwd);             
	CHECK_FOR_INSN(pmovsxwq);             
	CHECK_FOR_INSN(pmovsxdq);             
	CHECK_FOR_INSN(pmovzxbw);             
	CHECK_FOR_INSN(pmovzxbd);             
	CHECK_FOR_INSN(pmovzxbq);             
	CHECK_FOR_INSN(pmovzxwd);             
	CHECK_FOR_INSN(pmovzxwq);             
	CHECK_FOR_INSN(pmovzxdq);             
	CHECK_FOR_INSN(pmuldq);               
	CHECK_FOR_INSN(pmulld);               
	CHECK_FOR_INSN(ptest);                
	CHECK_FOR_INSN(roundpd);              
	CHECK_FOR_INSN(roundps);              
	CHECK_FOR_INSN(roundsd);              
	CHECK_FOR_INSN(roundss);              

	

	CHECK_FOR_INSN(crc32);                
	CHECK_FOR_INSN(pcmpestri);            
	CHECK_FOR_INSN(pcmpestrm);            
	CHECK_FOR_INSN(pcmpistri);            
	CHECK_FOR_INSN(pcmpistrm);            
	CHECK_FOR_INSN(pcmpgtq);              
	CHECK_FOR_INSN(popcnt);               

	

	CHECK_FOR_INSN(extrq);                
	CHECK_FOR_INSN(insertq);              
	CHECK_FOR_INSN(movntsd);              
	CHECK_FOR_INSN(movntss);              
	CHECK_FOR_INSN(lzcnt);                

	

	CHECK_FOR_INSN(xgetbv);               
	CHECK_FOR_INSN(xrstor);               
	CHECK_FOR_INSN(xsave);                
	CHECK_FOR_INSN(xsetbv);               

	

	CHECK_FOR_INSN(getsec);               

	

	CHECK_FOR_INSN(clgi);                 
	CHECK_FOR_INSN(invlpga);              
	CHECK_FOR_INSN(skinit);               
	CHECK_FOR_INSN(stgi);                 
	CHECK_FOR_INSN(vmexit);               
	CHECK_FOR_INSN(vmload);               
	CHECK_FOR_INSN(vmmcall);              
	CHECK_FOR_INSN(vmrun);                
	CHECK_FOR_INSN(vmsave);               

	

	CHECK_FOR_INSN(invept);               
	CHECK_FOR_INSN(invvpid);              

	

	CHECK_FOR_INSN(movbe);                

	

	CHECK_FOR_INSN(aesenc);                
	CHECK_FOR_INSN(aesenclast);            
	CHECK_FOR_INSN(aesdec);                
	CHECK_FOR_INSN(aesdeclast);            
	CHECK_FOR_INSN(aesimc);                
	CHECK_FOR_INSN(aeskeygenassist);       

	

	CHECK_FOR_INSN(pclmulqdq);            
jdh8d's avatar
 
jdh8d committed
	CHECK_FOR_INSN_RENAME(pclmulqdq, "pclmulqdq");