8 #ifndef CAPSTONE2LLVMIR_CAPSTONE2LLVMIR_IMPL_H
9 #define CAPSTONE2LLVMIR_CAPSTONE2LLVMIR_IMPL_H
15 namespace capstone2llvmir {
30 template <
typename CInsn,
typename CInsnOp>
72 llvm::IRBuilder<>& irb,
73 std::size_t count = 0,
74 bool stopOnBranch =
false)
override;
76 const uint8_t*& bytes,
79 llvm::IRBuilder<>& irb)
override;
94 virtual std::size_t
getDelaySlot(uint32_t
id)
const override;
96 virtual llvm::GlobalVariable*
getRegister(uint32_t r)
override;
113 virtual llvm::Module*
getModule()
const override;
142 virtual llvm::GlobalVariable*
isRegister(llvm::Value* v)
const override;
183 llvm::IRBuilder<>& irb,
200 llvm::IRBuilder<>& irb,
270 llvm::IRBuilder<>& irb) = 0;
285 llvm::IRBuilder<>& irb,
289 llvm::IRBuilder<>& irb,
292 llvm::IRBuilder<>& irb,
297 llvm::IRBuilder<>& irb,
300 llvm::IRBuilder<>& irb,
305 llvm::IRBuilder<>& irb,
309 llvm::IRBuilder<>& irb,
315 llvm::GlobalValue::LinkageTypes lt =
316 llvm::GlobalValue::LinkageTypes::InternalLinkage,
317 llvm::Constant* initializer =
nullptr);
331 llvm::IRBuilder<>& irb,
332 llvm::Type* dstType =
nullptr,
336 llvm::IRBuilder<>& irb,
337 llvm::Type* ty =
nullptr,
338 bool lea =
false) = 0;
343 llvm::IRBuilder<>& irb,
348 llvm::IRBuilder<>& irb,
366 llvm::IRBuilder<>& irb,
368 llvm::Type* loadType =
nullptr,
369 llvm::Type* dstType =
nullptr,
394 llvm::IRBuilder<>& irb,
396 bool strictCheck =
true,
397 llvm::Type* loadType =
nullptr,
398 llvm::Type* dstType =
nullptr,
416 llvm::IRBuilder<>& irb,
418 bool strictCheck =
true,
424 llvm::IRBuilder<>& irb,
425 llvm::Type* dstType =
nullptr,
426 llvm::Type* loadType =
nullptr,
431 llvm::IRBuilder<>& irb,
436 llvm::IRBuilder<>& irb,
442 llvm::IRBuilder<>& irb,
443 llvm::Type* loadType,
444 llvm::Type* dstType =
nullptr,
449 llvm::IRBuilder<>& irb,
450 llvm::Type* ty =
nullptr);
453 llvm::IRBuilder<>& irb,
454 llvm::Type* ty =
nullptr);
456 std::tuple<llvm::Value*, llvm::Value*, llvm::Value*>
loadOpTernary(
458 llvm::IRBuilder<>& irb,
460 std::tuple<llvm::Value*, llvm::Value*, llvm::Value*>
loadOpTernary(
462 llvm::IRBuilder<>& irb,
465 std::tuple<llvm::Value*, llvm::Value*, llvm::Value*>
loadOpTernary(
467 llvm::IRBuilder<>& irb,
468 llvm::Type* loadType,
469 llvm::Type* dstType =
nullptr,
474 llvm::IRBuilder<>& irb,
479 llvm::IRBuilder<>& irb,
485 llvm::IRBuilder<>& irb);
495 llvm::IRBuilder<>& irb);
499 llvm::IRBuilder<>& irb,
500 llvm::Value* cf =
nullptr);
504 llvm::IRBuilder<>& irb);
508 llvm::IRBuilder<>& irb,
509 llvm::Value* cf =
nullptr);
514 llvm::IRBuilder<>& irb);
519 llvm::IRBuilder<>& irb,
520 llvm::Value* cf =
nullptr);
525 llvm::IRBuilder<>& irb);
530 llvm::IRBuilder<>& irb,
531 llvm::Value* cf =
nullptr);
535 llvm::IRBuilder<>& irb);
540 llvm::IRBuilder<>& irb,
541 llvm::Value* cf =
nullptr);
545 llvm::IRBuilder<>& irb);
549 llvm::IRBuilder<>& irb,
550 llvm::Value* cf =
nullptr);
563 llvm::Instruction* i)
const;
569 llvm::FunctionType* type,
570 const std::string& name =
"");
574 llvm::ArrayRef<llvm::Type*> params,
575 const std::string& name =
"");
621 llvm::GlobalValue::LinkageTypes::InternalLinkage;
624 std::map<std::pair<std::string, llvm::FunctionType*>, llvm::Function*>
658 llvm::Value*
op0 =
nullptr;
659 llvm::Value*
op1 =
nullptr;
660 llvm::Value*
op2 =
nullptr;
661 llvm::Value*
op3 =
nullptr;
698 #define EXPECT_IS_NULLARY(i, ci, irb) \
700 if (ci->op_count != 0) \
702 throwUnexpectedOperands(i); \
703 translatePseudoAsmGeneric(i, ci, irb); \
708 #define EXPECT_IS_UNARY(i, ci, irb) \
710 if (ci->op_count != 1) \
712 throwUnexpectedOperands(i); \
713 translatePseudoAsmGeneric(i, ci, irb); \
718 #define EXPECT_IS_NULLARY_OR_UNARY(i, ci, irb) \
720 if (ci->op_count != 0 &&ci->op_count != 1) \
722 throwUnexpectedOperands(i); \
723 translatePseudoAsmGeneric(i, ci, irb); \
728 #define EXPECT_IS_BINARY(i, ci, irb) \
730 if (ci->op_count != 2) \
732 throwUnexpectedOperands(i); \
733 translatePseudoAsmGeneric(i, ci, irb); \
738 #define EXPECT_IS_UNARY_OR_BINARY(i, ci, irb) \
740 if (ci->op_count != 1 &&ci->op_count != 2) \
742 throwUnexpectedOperands(i); \
743 translatePseudoAsmGeneric(i, ci, irb); \
748 #define EXPECT_IS_TERNARY(i, ci, irb) \
750 if (ci->op_count != 3) \
752 throwUnexpectedOperands(i); \
753 translatePseudoAsmGeneric(i, ci, irb); \
758 #define EXPECT_IS_BINARY_OR_TERNARY(i, ci, irb)\
760 if (ci->op_count != 2 &&ci->op_count != 3) \
762 throwUnexpectedOperands(i); \
763 translatePseudoAsmGeneric(i, ci, irb); \
768 #define EXPECT_IS_QUATERNARY(i, ci, irb) \
770 if (ci->op_count != 4) \
772 throwUnexpectedOperands(i); \
773 translatePseudoAsmGeneric(i, ci, irb); \
778 #define EXPECT_IS_NARY(i, ci, irb, n) \
780 if (ci->op_count != n) \
782 throwUnexpectedOperands(i); \
783 translatePseudoAsmGeneric(i, ci, irb); \
788 #define EXPECT_IS_SET(i, ci, irb, ns) \
790 if (ns.find(ci->op_count) == ns.end()) \
792 throwUnexpectedOperands(i); \
793 translatePseudoAsmGeneric(i, ci, irb); \
798 #define EXPECT_IS_EXPR(i, ci, irb, expr) \
802 throwUnexpectedOperands(i); \
803 translatePseudoAsmGeneric(i, ci, irb); \
Common public interface for translators converting bytes to LLVM IR.
Definition: capstone2llvmir_impl.h:32
virtual cs_arch getArchitecture() const override
Definition: capstone2llvmir_impl.cpp:291
virtual bool isPseudoAsmFunctionCall(llvm::CallInst *c) const override
Definition: capstone2llvmir_impl.cpp:669
virtual llvm::CallInst * generateCondBranchFunctionCall(llvm::IRBuilder<> &irb, llvm::Value *cond, llvm::Value *t)
Definition: capstone2llvmir_impl.cpp:922
std::map< uint32_t, std::string > _reg2name
Definition: capstone2llvmir_impl.h:635
virtual void generateEnvironment()
Definition: capstone2llvmir_impl.cpp:748
virtual const csh & getCapstoneEngine() const override
Definition: capstone2llvmir_impl.cpp:285
virtual bool isAnyPseudoFunctionCall(llvm::CallInst *c) const override
Definition: capstone2llvmir_impl.cpp:636
virtual void setIgnoreUnhandledInstructions(bool f) override
Definition: capstone2llvmir_impl.cpp:50
std::set< unsigned int > _condBranchInsnIds
Definition: capstone2llvmir_impl.h:677
virtual void generateDataLayout()=0
virtual llvm::BranchInst * isInConditionCallFunctionCall(llvm::CallInst *c) const override
Definition: capstone2llvmir_impl.cpp:537
std::map< std::pair< std::string, llvm::FunctionType * >, llvm::Function * > _insn2asmFunctions
(fnc_name, fnc_type) -> fnc
Definition: capstone2llvmir_impl.h:625
std::pair< llvm::Value *, llvm::Value * > loadOpBinary(CInsn *ci, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::NOTHING)
Definition: capstone2llvmir_impl.cpp:1118
virtual bool isCallFunctionCall(llvm::CallInst *c) const override
Definition: capstone2llvmir_impl.cpp:531
void translatePseudoAsmOp0FncOp1Op2(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1955
virtual void closeHandle()
Definition: capstone2llvmir_impl.cpp:736
std::set< unsigned int > _returnInsnIds
Definition: capstone2llvmir_impl.h:671
virtual llvm::BranchInst * isInConditionReturnFunctionCall(llvm::CallInst *c) const override
Definition: capstone2llvmir_impl.cpp:562
virtual llvm::CallInst * generateCallFunctionCall(llvm::IRBuilder<> &irb, llvm::Value *t)
Definition: capstone2llvmir_impl.cpp:814
llvm::Value * loadOpUnary(CInsn *ci, llvm::IRBuilder<> &irb, llvm::Type *dstType=nullptr, llvm::Type *loadType=nullptr, eOpConv ct=eOpConv::THROW)
Definition: capstone2llvmir_impl.cpp:1103
virtual llvm::CallInst * generateReturnFunctionCall(llvm::IRBuilder<> &irb, llvm::Value *t)
Definition: capstone2llvmir_impl.cpp:854
virtual const std::set< llvm::Function * > & getPseudoAsmFunctions() const override
Definition: capstone2llvmir_impl.cpp:676
virtual void openHandle()
Definition: capstone2llvmir_impl.cpp:717
virtual void generateCallFunction()
Definition: capstone2llvmir_impl.cpp:800
llvm::Function * _callFunction
Definition: capstone2llvmir_impl.h:616
std::set< unsigned int > _callInsnIds
Definition: capstone2llvmir_impl.h:668
virtual TranslationResult translate(const uint8_t *bytes, std::size_t size, retdec::common::Address a, llvm::IRBuilder<> &irb, std::size_t count=0, bool stopOnBranch=false) override
Definition: capstone2llvmir_impl.cpp:165
llvm::Function * getPseudoAsmFunction(cs_insn *insn, llvm::FunctionType *type, const std::string &name="")
Definition: capstone2llvmir_impl.cpp:1562
bool _generatePseudoAsmFunctions
Definition: capstone2llvmir_impl.h:687
llvm::Value * generateCarryAddCInt4(llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr)
Definition: capstone2llvmir_impl.cpp:1335
virtual bool hasDelaySlotLikely(uint32_t id) const override
Definition: capstone2llvmir_impl.cpp:321
void throwUnhandledInstructions(cs_insn *i, const std::string comment="")
Definition: capstone2llvmir_impl.cpp:2280
virtual llvm::BranchInst * isInConditionBranchFunctionCall(llvm::CallInst *c) const override
Definition: capstone2llvmir_impl.cpp:587
cs_arch _arch
Definition: capstone2llvmir_impl.h:609
Capstone2LlvmIrTranslator_impl(cs_arch a, cs_mode basic, cs_mode extra, llvm::Module *m)
Definition: capstone2llvmir_impl.cpp:16
llvm::Value * loadOpBinaryOp0(CInsn *ci, llvm::IRBuilder<> &irb, llvm::Type *ty=nullptr)
Definition: capstone2llvmir_impl.cpp:1159
virtual bool isControlFlowInstruction(cs_insn &i) const override
Definition: capstone2llvmir_impl.cpp:417
virtual void modifyExtraMode(cs_mode m) override
Definition: capstone2llvmir_impl.cpp:105
void translatePseudoAsmOp0FncOp0(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1837
void translatePseudoAsmOp0Fnc(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1795
virtual bool isBranchFunction(llvm::Function *f) const override
Definition: capstone2llvmir_impl.cpp:574
virtual llvm::Function * getReturnFunction() const override
Definition: capstone2llvmir_impl.cpp:568
virtual bool isIgnoreUnexpectedOperands() const override
Definition: capstone2llvmir_impl.cpp:62
virtual bool hasDelaySlot(uint32_t id) const override
Definition: capstone2llvmir_impl.cpp:309
llvm::Value * generateOverflowSub(llvm::Value *sub, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1403
virtual void translatePseudoAsmGeneric(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:2138
virtual bool isReturnFunction(llvm::Function *f) const override
Definition: capstone2llvmir_impl.cpp:549
virtual bool isCondBranchInstruction(cs_insn &i) const override
Definition: capstone2llvmir_impl.cpp:449
llvm::Value * loadOpBinaryOp1(CInsn *ci, llvm::IRBuilder<> &irb, llvm::Type *ty=nullptr)
Definition: capstone2llvmir_impl.cpp:1172
virtual void initializePseudoCallInstructionIDs()=0
llvm::Value * op3
Definition: capstone2llvmir_impl.h:661
virtual void setGeneratePseudoAsmFunctions(bool f) override
Definition: capstone2llvmir_impl.cpp:56
virtual bool hasDelaySlotTypical(uint32_t id) const override
Definition: capstone2llvmir_impl.cpp:315
virtual llvm::Type * getRegisterType(uint32_t r) const override
Definition: capstone2llvmir_impl.cpp:404
virtual llvm::CallInst * generateCondReturnFunctionCall(llvm::IRBuilder<> &irb, llvm::Value *cond, llvm::Value *t)
Definition: capstone2llvmir_impl.cpp:865
std::vector< llvm::Value * > _loadOpsUniversal(CInsn *ci, llvm::IRBuilder<> &irb, std::size_t opCnt, bool strictCheck=true, eOpConv ict=eOpConv::SEXT_TRUNC_OR_BITCAST, eOpConv fct=eOpConv::FPCAST_OR_BITCAST)
Definition: capstone2llvmir_impl.cpp:1068
virtual void generateCondBranchFunction()
Definition: capstone2llvmir_impl.cpp:905
virtual void modifyBasicMode(cs_mode m) override
Definition: capstone2llvmir_impl.cpp:86
virtual bool isCallInstruction(cs_insn &i) const override
Definition: capstone2llvmir_impl.cpp:428
virtual bool isReturnInstruction(cs_insn &i) const override
Definition: capstone2llvmir_impl.cpp:435
virtual void generateEnvironmentArchSpecific()=0
virtual llvm::GlobalVariable * getAsm2LlvmMapGlobalVariable() const override
Definition: capstone2llvmir_impl.cpp:519
bool _ignoreUnhandledInstructions
Definition: capstone2llvmir_impl.h:686
virtual llvm::Instruction * storeRegister(uint32_t r, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::SEXT_TRUNC_OR_BITCAST)=0
cs_mode _extraMode
Definition: capstone2llvmir_impl.h:611
virtual llvm::Value * loadRegister(uint32_t r, llvm::IRBuilder<> &irb, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::THROW)=0
virtual bool isIgnoreUnhandledInstructions() const override
Definition: capstone2llvmir_impl.cpp:68
llvm::Value * op1
Definition: capstone2llvmir_impl.h:659
bool _ignoreUnexpectedOperands
Definition: capstone2llvmir_impl.h:685
virtual llvm::BranchInst * isInConditionCondBranchFunctionCall(llvm::CallInst *c) const override
Definition: capstone2llvmir_impl.cpp:613
virtual bool isPseudoAsmFunction(llvm::Function *f) const override
Definition: capstone2llvmir_impl.cpp:662
virtual uint32_t getArchBitSize() override
Definition: capstone2llvmir_impl.cpp:124
csh _handle
Definition: capstone2llvmir_impl.h:608
virtual llvm::Value * loadOp(CInsnOp &op, llvm::IRBuilder<> &irb, llvm::Type *ty=nullptr, bool lea=false)=0
virtual llvm::Function * getCallFunction() const override
Definition: capstone2llvmir_impl.cpp:543
virtual std::size_t getDelaySlot(uint32_t id) const override
Definition: capstone2llvmir_impl.cpp:327
llvm::Value * generateCarryAdd(llvm::Value *add, llvm::Value *op0, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1278
virtual void setIgnoreUnexpectedOperands(bool f) override
Definition: capstone2llvmir_impl.cpp:44
virtual void initializeRegTypeMap()=0
virtual llvm::CallInst * generateCondCallFunctionCall(llvm::IRBuilder<> &irb, llvm::Value *cond, llvm::Value *t)
Definition: capstone2llvmir_impl.cpp:825
virtual bool isOperandRegister(CInsnOp &op)=0
virtual bool isBranchInstruction(cs_insn &i) const override
Definition: capstone2llvmir_impl.cpp:442
virtual llvm::StoreInst * generateSpecialAsm2LlvmInstr(llvm::IRBuilder<> &irb, cs_insn *i)
Definition: capstone2llvmir_impl.cpp:788
void translatePseudoAsmOp0FncOp0Op1Op2(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1981
llvm::GlobalVariable * _asm2llvmGv
Definition: capstone2llvmir_impl.h:615
void translatePseudoAsmOp0FncOp0Op1Op2Op3(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:2065
virtual bool isBranchFunctionCall(llvm::CallInst *c) const override
Definition: capstone2llvmir_impl.cpp:580
virtual void configureHandle()
Definition: capstone2llvmir_impl.cpp:727
llvm::Value * generateTypeConversion(llvm::IRBuilder<> &irb, llvm::Value *from, llvm::Type *to, eOpConv ct)
Definition: capstone2llvmir_impl.cpp:1605
std::tuple< llvm::Value *, llvm::Value *, llvm::Value * > loadOpTernary(CInsn *ci, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::NOTHING)
Definition: capstone2llvmir_impl.cpp:1186
llvm::Value * generateOverflowAdd(llvm::Value *add, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1362
llvm::Function * _condBranchFunction
Definition: capstone2llvmir_impl.h:619
cs_insn * _insn
Capstone instruction being currently translated.
Definition: capstone2llvmir_impl.h:664
llvm::Value * generateBorrowSubInt4(llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1484
virtual ~Capstone2LlvmIrTranslator_impl()
Definition: capstone2llvmir_impl.cpp:32
virtual void initializeArchSpecific()=0
virtual bool isReturnFunctionCall(llvm::CallInst *c) const override
Definition: capstone2llvmir_impl.cpp:555
void translatePseudoAsmFncOp0Op1Op2(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1929
cs_mode _basicMode
Definition: capstone2llvmir_impl.h:610
llvm::Value * generateOverflowAddC(llvm::Value *add, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr)
Definition: capstone2llvmir_impl.cpp:1380
virtual void generateRegisters()=0
virtual uint32_t getCarryRegister()=0
virtual void generateReturnFunction()
Definition: capstone2llvmir_impl.cpp:840
virtual llvm::CallInst * generateBranchFunctionCall(llvm::IRBuilder<> &irb, llvm::Value *t)
Definition: capstone2llvmir_impl.cpp:894
llvm::Value * generateCarryAddInt4(llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1319
virtual void generateSpecialAsm2LlvmMapGlobal()
Definition: capstone2llvmir_impl.cpp:768
std::set< unsigned int > _branchInsnIds
Definition: capstone2llvmir_impl.h:674
virtual bool isAnyPseudoFunction(llvm::Function *f) const override
Definition: capstone2llvmir_impl.cpp:626
void throwUnexpectedOperands(cs_insn *i, const std::string comment="")
Definition: capstone2llvmir_impl.cpp:2269
void translatePseudoAsmFncOp0Op1(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1860
llvm::Function * _returnFunction
Definition: capstone2llvmir_impl.h:617
virtual llvm::Function * getCondBranchFunction() const override
Definition: capstone2llvmir_impl.cpp:620
virtual bool isCallFunction(llvm::Function *f) const override
Definition: capstone2llvmir_impl.cpp:525
llvm::Value * generateBorrowSubC(llvm::Value *sub, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr)
Definition: capstone2llvmir_impl.cpp:1458
llvm::CallInst * _branchGenerated
Definition: capstone2llvmir_impl.h:648
llvm::Value * getNextInsnAddress(cs_insn *i)
Definition: capstone2llvmir_impl.cpp:1539
llvm::Module * _module
Definition: capstone2llvmir_impl.h:614
llvm::Value * generateCarryAddC(llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr)
Definition: capstone2llvmir_impl.cpp:1296
std::map< llvm::GlobalVariable *, uint32_t > _llvm2CapstoneRegs
Definition: capstone2llvmir_impl.h:643
virtual TranslationResultOne translateOne(const uint8_t *&bytes, std::size_t &size, retdec::common::Address &a, llvm::IRBuilder<> &irb) override
Definition: capstone2llvmir_impl.cpp:233
eOpConv
Definition: capstone2llvmir_impl.h:159
@ NOTHING
Operand types does not have to be equal.
virtual bool isCondBranchFunctionCall(llvm::CallInst *c) const override
Definition: capstone2llvmir_impl.cpp:606
virtual llvm::GlobalVariable * createRegister(uint32_t r, llvm::GlobalValue::LinkageTypes lt=llvm::GlobalValue::LinkageTypes::InternalLinkage, llvm::Constant *initializer=nullptr)
Definition: capstone2llvmir_impl.cpp:936
virtual uint32_t getRegisterByteSize(uint32_t r) const override
Definition: capstone2llvmir_impl.cpp:397
llvm::Type * _checkTypeConversion(llvm::IRBuilder<> &irb, llvm::Type *to, eOpConv ct)
Definition: capstone2llvmir_impl.cpp:1747
virtual bool isCondBranchFunction(llvm::Function *f) const override
Definition: capstone2llvmir_impl.cpp:599
virtual void initializeRegNameMap()=0
std::pair< llvm::Value *, llvm::Value * > loadOpBinaryOrTernaryOp1Op2(CInsn *ai, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::NOTHING)
Definition: capstone2llvmir_impl.cpp:1231
bool _inCondition
Definition: capstone2llvmir_impl.h:652
virtual uint32_t getRegisterBitSize(uint32_t r) const override
Definition: capstone2llvmir_impl.cpp:362
llvm::Value * generateBorrowSubCInt4(llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr)
Definition: capstone2llvmir_impl.cpp:1500
virtual void initialize()
Definition: capstone2llvmir_impl.cpp:688
virtual cs_mode getExtraMode() const override
Definition: capstone2llvmir_impl.cpp:303
virtual llvm::StoreInst * isSpecialAsm2LlvmInstr(llvm::Value *v) const override
Definition: capstone2llvmir_impl.cpp:505
virtual std::string getRegisterName(uint32_t r) const override
Definition: capstone2llvmir_impl.cpp:340
llvm::BranchInst * getCondBranchForInsnInIfThen(llvm::Instruction *i) const
Definition: capstone2llvmir_impl.cpp:463
virtual void generateBranchFunction()
Definition: capstone2llvmir_impl.cpp:880
std::map< uint32_t, llvm::Type * > _reg2type
Definition: capstone2llvmir_impl.h:639
llvm::Value * getThisInsnAddress(cs_insn *i)
Definition: capstone2llvmir_impl.cpp:1532
std::set< unsigned int > _controlFlowInsnIds
Definition: capstone2llvmir_impl.h:683
std::set< llvm::Function * > _asmFunctions
Definition: capstone2llvmir_impl.h:627
llvm::Value * generateOverflowSubC(llvm::Value *sub, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr)
Definition: capstone2llvmir_impl.cpp:1421
llvm::IntegerType * getDefaultType()
Definition: capstone2llvmir_impl.cpp:1526
std::map< uint32_t, llvm::GlobalVariable * > _capstone2LlvmRegs
Definition: capstone2llvmir_impl.h:644
virtual void translateInstruction(cs_insn *i, llvm::IRBuilder<> &irb)=0
llvm::GlobalValue::LinkageTypes _regLt
Definition: capstone2llvmir_impl.h:620
virtual llvm::Instruction * storeOp(CInsnOp &op, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::SEXT_TRUNC_OR_BITCAST)=0
void translatePseudoAsmOp0FncOp1(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1882
std::vector< llvm::Value * > _loadOps(CInsn *ci, llvm::IRBuilder<> &irb, std::size_t opCnt, bool strictCheck=true, llvm::Type *loadType=nullptr, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::NOTHING)
Definition: capstone2llvmir_impl.cpp:1015
void translatePseudoAsmFncOp0Op1Op2Op3(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:2009
llvm::Function * _branchFunction
Definition: capstone2llvmir_impl.h:618
std::tuple< llvm::Value *, llvm::Value *, llvm::Value * > loadOpQuaternaryOp1Op2Op3(CInsn *ai, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1260
std::string getPseudoAsmFunctionName(cs_insn *insn)
Definition: capstone2llvmir_impl.cpp:1549
virtual uint8_t getOperandAccess(CInsnOp &op)
Definition: capstone2llvmir_impl.cpp:2129
llvm::Value * op0
Definition: capstone2llvmir_impl.h:658
cs_mode _origBasicMode
Definition: capstone2llvmir_impl.h:612
void translatePseudoAsmOp0FncOp0Op1(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1905
virtual cs_mode getBasicMode() const override
Definition: capstone2llvmir_impl.cpp:297
virtual bool isSpecialAsm2LlvmMapGlobal(llvm::Value *v) const override
Definition: capstone2llvmir_impl.cpp:498
llvm::Value * generateBorrowSub(llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1446
virtual llvm::GlobalVariable * getRegister(uint32_t r) override
Definition: capstone2llvmir_impl.cpp:333
virtual llvm::Function * getBranchFunction() const override
Definition: capstone2llvmir_impl.cpp:593
void translatePseudoAsmOp0Op1FncOp0Op1Op2Op3(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:2095
void translatePseudoAsmOp0FncOp1Op2Op3(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:2037
virtual llvm::GlobalVariable * isRegister(llvm::Value *v) const override
Definition: capstone2llvmir_impl.cpp:646
virtual bool isGeneratePseudoAsmFunctions() const override
Definition: capstone2llvmir_impl.cpp:74
llvm::Value * op2
Definition: capstone2llvmir_impl.h:660
virtual llvm::Module * getModule() const override
Definition: capstone2llvmir_impl.cpp:492
void translatePseudoAsmFncOp0(cs_insn *i, CInsn *ci, llvm::IRBuilder<> &irb)
Definition: capstone2llvmir_impl.cpp:1816
virtual uint32_t getCapstoneRegister(llvm::GlobalVariable *gv) const override
Definition: capstone2llvmir_impl.cpp:654
Definition: capstone2llvmir.h:42
Definition: archive_wrapper.h:19
Definition: capstone2llvmir.h:395
Definition: capstone2llvmir.h:346