|
| Capstone2LlvmIrTranslatorPowerpc_impl (llvm::Module *m, cs_mode basic=CS_MODE_32, cs_mode extra=CS_MODE_LITTLE_ENDIAN) |
|
virtual bool | isAllowedBasicMode (cs_mode m) override |
|
virtual bool | isAllowedExtraMode (cs_mode m) override |
|
virtual uint32_t | getArchByteSize () override |
|
| Capstone2LlvmIrTranslator_impl (cs_arch a, cs_mode basic, cs_mode extra, llvm::Module *m) |
|
virtual | ~Capstone2LlvmIrTranslator_impl () |
|
virtual void | setIgnoreUnexpectedOperands (bool f) override |
|
virtual void | setIgnoreUnhandledInstructions (bool f) override |
|
virtual void | setGeneratePseudoAsmFunctions (bool f) override |
|
virtual bool | isIgnoreUnexpectedOperands () const override |
|
virtual bool | isIgnoreUnhandledInstructions () const override |
|
virtual bool | isGeneratePseudoAsmFunctions () const override |
|
virtual void | modifyBasicMode (cs_mode m) override |
|
virtual void | modifyExtraMode (cs_mode m) override |
|
virtual uint32_t | getArchBitSize () override |
|
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 |
|
virtual TranslationResultOne | translateOne (const uint8_t *&bytes, std::size_t &size, retdec::common::Address &a, llvm::IRBuilder<> &irb) override |
|
virtual const csh & | getCapstoneEngine () const override |
|
virtual cs_arch | getArchitecture () const override |
|
virtual cs_mode | getBasicMode () const override |
|
virtual cs_mode | getExtraMode () const override |
|
virtual bool | hasDelaySlot (uint32_t id) const override |
|
virtual bool | hasDelaySlotTypical (uint32_t id) const override |
|
virtual bool | hasDelaySlotLikely (uint32_t id) const override |
|
virtual std::size_t | getDelaySlot (uint32_t id) const override |
|
virtual llvm::GlobalVariable * | getRegister (uint32_t r) override |
|
virtual std::string | getRegisterName (uint32_t r) const override |
|
virtual uint32_t | getRegisterBitSize (uint32_t r) const override |
|
virtual uint32_t | getRegisterByteSize (uint32_t r) const override |
|
virtual llvm::Type * | getRegisterType (uint32_t r) const override |
|
virtual bool | isControlFlowInstruction (cs_insn &i) const override |
|
virtual bool | isCallInstruction (cs_insn &i) const override |
|
virtual bool | isReturnInstruction (cs_insn &i) const override |
|
virtual bool | isBranchInstruction (cs_insn &i) const override |
|
virtual bool | isCondBranchInstruction (cs_insn &i) const override |
|
virtual llvm::Module * | getModule () const override |
|
virtual bool | isSpecialAsm2LlvmMapGlobal (llvm::Value *v) const override |
|
virtual llvm::StoreInst * | isSpecialAsm2LlvmInstr (llvm::Value *v) const override |
|
virtual llvm::GlobalVariable * | getAsm2LlvmMapGlobalVariable () const override |
|
virtual bool | isCallFunction (llvm::Function *f) const override |
|
virtual bool | isCallFunctionCall (llvm::CallInst *c) const override |
|
virtual llvm::BranchInst * | isInConditionCallFunctionCall (llvm::CallInst *c) const override |
|
virtual llvm::Function * | getCallFunction () const override |
|
virtual bool | isReturnFunction (llvm::Function *f) const override |
|
virtual bool | isReturnFunctionCall (llvm::CallInst *c) const override |
|
virtual llvm::BranchInst * | isInConditionReturnFunctionCall (llvm::CallInst *c) const override |
|
virtual llvm::Function * | getReturnFunction () const override |
|
virtual bool | isBranchFunction (llvm::Function *f) const override |
|
virtual bool | isBranchFunctionCall (llvm::CallInst *c) const override |
|
virtual llvm::BranchInst * | isInConditionBranchFunctionCall (llvm::CallInst *c) const override |
|
virtual llvm::Function * | getBranchFunction () const override |
|
virtual bool | isCondBranchFunction (llvm::Function *f) const override |
|
virtual bool | isCondBranchFunctionCall (llvm::CallInst *c) const override |
|
virtual llvm::BranchInst * | isInConditionCondBranchFunctionCall (llvm::CallInst *c) const override |
|
virtual llvm::Function * | getCondBranchFunction () const override |
|
virtual bool | isAnyPseudoFunction (llvm::Function *f) const override |
|
virtual bool | isAnyPseudoFunctionCall (llvm::CallInst *c) const override |
|
virtual llvm::GlobalVariable * | isRegister (llvm::Value *v) const override |
|
virtual uint32_t | getCapstoneRegister (llvm::GlobalVariable *gv) const override |
|
virtual bool | isPseudoAsmFunction (llvm::Function *f) const override |
|
virtual bool | isPseudoAsmFunctionCall (llvm::CallInst *c) const override |
|
virtual const std::set< llvm::Function * > & | getPseudoAsmFunctions () const override |
|
virtual | ~Capstone2LlvmIrTranslator ()=default |
|
|
virtual void | initializeArchSpecific () override |
|
virtual void | initializeRegNameMap () override |
|
virtual void | initializeRegTypeMap () override |
|
virtual void | initializePseudoCallInstructionIDs () override |
|
virtual void | generateEnvironmentArchSpecific () override |
|
virtual void | generateDataLayout () override |
|
virtual void | generateRegisters () override |
|
virtual uint32_t | getCarryRegister () override |
|
virtual void | translateInstruction (cs_insn *i, llvm::IRBuilder<> &irb) override |
|
virtual llvm::Value * | loadRegister (uint32_t r, llvm::IRBuilder<> &irb, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::THROW) override |
|
virtual llvm::Value * | loadOp (cs_ppc_op &op, llvm::IRBuilder<> &irb, llvm::Type *ty=nullptr, bool lea=false) override |
|
virtual llvm::StoreInst * | storeRegister (uint32_t r, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::SEXT_TRUNC_OR_BITCAST) override |
|
virtual llvm::Instruction * | storeOp (cs_ppc_op &op, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::SEXT_TRUNC_OR_BITCAST) override |
|
void | storeCrX (llvm::IRBuilder<> &irb, uint32_t crReg, llvm::Value *op0, llvm::Value *op1=nullptr, bool signedCmp=true) |
|
void | storeCr0 (llvm::IRBuilder<> &irb, cs_ppc *pi, llvm::Value *val) |
|
std::tuple< llvm::Value *, llvm::Value *, llvm::Value *, llvm::Value * > | loadCrX (llvm::IRBuilder<> &irb, uint32_t crReg) |
|
llvm::Value * | loadCrX (llvm::IRBuilder<> &irb, uint32_t crReg, ppc_cr_types type) |
|
bool | isGeneralPurposeRegister (uint32_t r) |
|
uint32_t | getGeneralPurposeRegisterIndex (uint32_t r) |
|
uint32_t | crBitIndexToCrRegister (uint32_t idx) |
|
bool | isCrRegister (uint32_t r) |
|
bool | isCrRegister (cs_ppc_op &op) |
|
virtual bool | isOperandRegister (cs_ppc_op &op) override |
|
void | translateAdd (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateAddc (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateAdde (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateAddis (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateAddme (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateAddze (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateAnd (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateAndc (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateAndis (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateB (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateClrlwi (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateCmp (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateCntlzw (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateCrModifTernary (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateCrNotMove (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateCrSetClr (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateDivw (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateEqv (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateExtendSign (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateLhbrx (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateLi (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateLis (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateLoad (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateLoadIndexed (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateMcrf (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateMfctr (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateMflr (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateMr (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateMtcrf (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateMtcr (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateMtctr (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateMtlr (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateMulhw (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateMullw (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateNand (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateNeg (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateNop (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateNor (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateNot (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateOr (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateOrc (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateOris (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateRotateComplex5op (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateRotlw (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateShiftLeft (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateShiftRight (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateSlwi (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateSrwi (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateSraw (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateStore (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateStoreIndexed (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateSubf (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateSubfc (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateSubfe (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateSubfme (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateSubfze (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateXor (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
void | translateXoris (cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb) |
|
llvm::Value * | generateTypeConversion (llvm::IRBuilder<> &irb, llvm::Value *from, llvm::Type *to, eOpConv ct) |
|
llvm::Type * | _checkTypeConversion (llvm::IRBuilder<> &irb, llvm::Type *to, eOpConv ct) |
|
virtual void | initialize () |
|
virtual void | openHandle () |
|
virtual void | configureHandle () |
|
virtual void | closeHandle () |
|
virtual void | generateEnvironment () |
|
virtual void | generateSpecialAsm2LlvmMapGlobal () |
|
virtual llvm::StoreInst * | generateSpecialAsm2LlvmInstr (llvm::IRBuilder<> &irb, cs_insn *i) |
|
virtual void | generateCallFunction () |
|
virtual llvm::CallInst * | generateCallFunctionCall (llvm::IRBuilder<> &irb, llvm::Value *t) |
|
virtual llvm::CallInst * | generateCondCallFunctionCall (llvm::IRBuilder<> &irb, llvm::Value *cond, llvm::Value *t) |
|
virtual void | generateReturnFunction () |
|
virtual llvm::CallInst * | generateReturnFunctionCall (llvm::IRBuilder<> &irb, llvm::Value *t) |
|
virtual llvm::CallInst * | generateCondReturnFunctionCall (llvm::IRBuilder<> &irb, llvm::Value *cond, llvm::Value *t) |
|
virtual void | generateBranchFunction () |
|
virtual llvm::CallInst * | generateBranchFunctionCall (llvm::IRBuilder<> &irb, llvm::Value *t) |
|
virtual void | generateCondBranchFunction () |
|
virtual llvm::CallInst * | generateCondBranchFunctionCall (llvm::IRBuilder<> &irb, llvm::Value *cond, llvm::Value *t) |
|
virtual llvm::GlobalVariable * | createRegister (uint32_t r, llvm::GlobalValue::LinkageTypes lt=llvm::GlobalValue::LinkageTypes::InternalLinkage, llvm::Constant *initializer=nullptr) |
|
virtual llvm::Value * | loadRegister (uint32_t r, llvm::IRBuilder<> &irb, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::THROW)=0 |
|
llvm::Value * | loadOp (cs_ppc *ci, llvm::IRBuilder<> &irb, std::size_t idx, llvm::Type *loadType=nullptr, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::NOTHING) |
|
virtual llvm::Instruction * | storeRegister (uint32_t r, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::SEXT_TRUNC_OR_BITCAST)=0 |
|
virtual llvm::Instruction * | storeOp (cs_ppc_op &op, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::SEXT_TRUNC_OR_BITCAST)=0 |
|
std::vector< llvm::Value * > | _loadOps (cs_ppc *ci, llvm::IRBuilder<> &irb, std::size_t opCnt, bool strictCheck=true, llvm::Type *loadType=nullptr, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::NOTHING) |
|
std::vector< llvm::Value * > | _loadOpsUniversal (cs_ppc *ci, llvm::IRBuilder<> &irb, std::size_t opCnt, bool strictCheck=true, eOpConv ict=eOpConv::SEXT_TRUNC_OR_BITCAST, eOpConv fct=eOpConv::FPCAST_OR_BITCAST) |
|
llvm::Value * | loadOpUnary (cs_ppc *ci, llvm::IRBuilder<> &irb, llvm::Type *dstType=nullptr, llvm::Type *loadType=nullptr, eOpConv ct=eOpConv::THROW) |
|
std::pair< llvm::Value *, llvm::Value * > | loadOpBinary (cs_ppc *ci, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::NOTHING) |
|
std::pair< llvm::Value *, llvm::Value * > | loadOpBinary (cs_ppc *ci, llvm::IRBuilder<> &irb, eOpConv ict, eOpConv fct) |
|
std::pair< llvm::Value *, llvm::Value * > | loadOpBinary (cs_ppc *ci, llvm::IRBuilder<> &irb, llvm::Type *loadType, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::NOTHING) |
|
llvm::Value * | loadOpBinaryOp0 (cs_ppc *ci, llvm::IRBuilder<> &irb, llvm::Type *ty=nullptr) |
|
llvm::Value * | loadOpBinaryOp1 (cs_ppc *ci, llvm::IRBuilder<> &irb, llvm::Type *ty=nullptr) |
|
std::tuple< llvm::Value *, llvm::Value *, llvm::Value * > | loadOpTernary (cs_ppc *ci, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::NOTHING) |
|
std::tuple< llvm::Value *, llvm::Value *, llvm::Value * > | loadOpTernary (cs_ppc *ci, llvm::IRBuilder<> &irb, eOpConv ict, eOpConv fct) |
|
std::tuple< llvm::Value *, llvm::Value *, llvm::Value * > | loadOpTernary (cs_ppc *ci, llvm::IRBuilder<> &irb, llvm::Type *loadType, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::NOTHING) |
|
std::pair< llvm::Value *, llvm::Value * > | loadOpBinaryOrTernaryOp1Op2 (cs_ppc *ai, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::NOTHING) |
|
std::pair< llvm::Value *, llvm::Value * > | loadOpBinaryOrTernaryOp1Op2 (cs_ppc *ai, llvm::IRBuilder<> &irb, eOpConv ict, eOpConv fct) |
|
std::tuple< llvm::Value *, llvm::Value *, llvm::Value * > | loadOpQuaternaryOp1Op2Op3 (cs_ppc *ai, llvm::IRBuilder<> &irb) |
|
llvm::Value * | generateCarryAdd (llvm::Value *add, llvm::Value *op0, llvm::IRBuilder<> &irb) |
|
llvm::Value * | generateCarryAddC (llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr) |
|
llvm::Value * | generateCarryAddInt4 (llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb) |
|
llvm::Value * | generateCarryAddCInt4 (llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr) |
|
llvm::Value * | generateOverflowAdd (llvm::Value *add, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb) |
|
llvm::Value * | generateOverflowAddC (llvm::Value *add, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr) |
|
llvm::Value * | generateOverflowSub (llvm::Value *sub, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb) |
|
llvm::Value * | generateOverflowSubC (llvm::Value *sub, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr) |
|
llvm::Value * | generateBorrowSub (llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb) |
|
llvm::Value * | generateBorrowSubC (llvm::Value *sub, llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr) |
|
llvm::Value * | generateBorrowSubInt4 (llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb) |
|
llvm::Value * | generateBorrowSubCInt4 (llvm::Value *op0, llvm::Value *op1, llvm::IRBuilder<> &irb, llvm::Value *cf=nullptr) |
|
llvm::IntegerType * | getDefaultType () |
|
llvm::Value * | getThisInsnAddress (cs_insn *i) |
|
llvm::Value * | getNextInsnAddress (cs_insn *i) |
|
llvm::BranchInst * | getCondBranchForInsnInIfThen (llvm::Instruction *i) const |
|
std::string | getPseudoAsmFunctionName (cs_insn *insn) |
|
llvm::Function * | getPseudoAsmFunction (cs_insn *insn, llvm::FunctionType *type, const std::string &name="") |
|
llvm::Function * | getPseudoAsmFunction (cs_insn *insn, llvm::Type *retType, llvm::ArrayRef< llvm::Type * > params, const std::string &name="") |
|
void | translatePseudoAsmOp0Fnc (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
void | translatePseudoAsmFncOp0 (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
void | translatePseudoAsmOp0FncOp0 (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
void | translatePseudoAsmFncOp0Op1 (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
void | translatePseudoAsmOp0FncOp1 (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
void | translatePseudoAsmOp0FncOp0Op1 (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
void | translatePseudoAsmFncOp0Op1Op2 (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
void | translatePseudoAsmOp0FncOp1Op2 (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
void | translatePseudoAsmOp0FncOp0Op1Op2 (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
void | translatePseudoAsmFncOp0Op1Op2Op3 (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
void | translatePseudoAsmOp0FncOp1Op2Op3 (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
void | translatePseudoAsmOp0FncOp0Op1Op2Op3 (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
void | translatePseudoAsmOp0Op1FncOp0Op1Op2Op3 (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
virtual uint8_t | getOperandAccess (cs_ppc_op &op) |
|
virtual void | translatePseudoAsmGeneric (cs_insn *i, cs_ppc *ci, llvm::IRBuilder<> &irb) |
|
void | throwUnexpectedOperands (cs_insn *i, const std::string comment="") |
|
void | throwUnhandledInstructions (cs_insn *i, const std::string comment="") |
|
void retdec::capstone2llvmir::Capstone2LlvmIrTranslatorPowerpc_impl::translateB |
( |
cs_insn * |
i, |
|
|
cs_ppc * |
pi, |
|
|
llvm::IRBuilder<> & |
irb |
|
) |
| |
|
protected |
link = Store next insn address to LR. toLR = Branch to LR. toCTR = branch to CTR. primal = Complex variants all other simplified mnemonics are derived from. Right now, we probably will not be able handle it – to many ops. E.g. bc BO, BI, target_addr No idea if Capstone actually generates this with three ops.
Basic unconditional branches (not really, it can be conditional): PPC_INS_B - uncond/cond (blt, beq, bne, ...) PPC_INS_BA - absolute, cond/uncond PPC_INS_BL - link, cond/uncond PPC_INS_BLA - link, absolute, cond/uncond
Basic conditional branches (not really sure it they are ever used): PPC_INS_BC - cond, primal PPC_INS_BCA - cond, absolute, primal PPC_INS_BCLR - cond, toLR, primal PPC_INS_BCCTR - cond, toCTR, primal PPC_INS_BCL - cond, link, primal PPC_INS_BCLA - cond, absolute, link, primal PPC_INS_BCLRL - cond, toLR, link, primal PPC_INS_BCCTRL - cond, toCTR, link, primal
Branch unconditionally (not really, it can be conditional): PPC_INS_BLR - uncond/cond (beqlr, ...), toLR PPC_INS_BCTR - uncond/cond, toCTR PPC_INS_BLRL - uncond/cond, toLR, link PPC_INS_BCTRL - uncond/cond, toCTR, link
Branch if condition true: Not sure if these are ever used, looks like they are equal to: (equal to b, ba, blr, bctr, bl, bla, blrl, bctrl). PPC_INS_BT - cond => (b) PPC_INS_BTA - cond, absolute => (ba) PPC_INS_BTLR - cond, toLR => (blr) PPC_INS_BTCTR - cond, toCTR => (bctr) PPC_INS_BTL - cond, link => (bl) PPC_INS_BTLA - cond, link, absolute => (bla) PPC_INS_BTLRL - cond, link, toLR => (blrl) PPC_INS_BTCTRL - cond, link, toCTR => (bctrl)
Branch if condition false: Not sure if these are ever used, looks like they are translated to: (b, ba, blr, bctr, bl, bla, blrl, bctrl) reversed conditions. PPC_INS_BF - cond => (b) PPC_INS_BFA - cond, absolute => (ba) PPC_INS_BFLR - cond, toLR => (blr) PPC_INS_BFCTR - cond, toCTR => (bctr) PPC_INS_BFL - cond, link => (bl) PPC_INS_BFLA - cond, link, absolute => (bla) PPC_INS_BFLRL - cond, link, toLR => (blrl) PPC_INS_BFCTRL - cond, link, toCTR => (bctrl)
Decrement CTR, branch if CTR != 0: PPC_INS_BDNZ - cond PPC_INS_BDNZA - cond, absolute PPC_INS_BDNZLR - cond, toLR PPC_INS_BDNZL - cond, link PPC_INS_BDNZLA - cond, absolute, link PPC_INS_BDNZLRL - cond, link, toLR
Decrement CTR, branch if CTR != 0 & cond true: PPC_INS_BDNZT - cond PPC_INS_BDNZTA - cond, absolute PPC_INS_BDNZTLR - cond, toLR PPC_INS_BDNZTL - cond, link PPC_INS_BDNZTLA - cond, absolute, link PPC_INS_BDNZTLRL - cond, link, toLR
Decrement CTR, branch if CTR != 0 & cond false: PPC_INS_BDNZF - cond PPC_INS_BDNZFA - cond, absolute PPC_INS_BDNZFLR - cond, toLR, (missing) PPC_INS_BDNZFL - cond, link PPC_INS_BDNZFLA - cond, ansolute, link PPC_INS_BDNZFLRL - cond, link, toLR
Decrement CTR, branch if CTR == 0: PPC_INS_BDZ - cond PPC_INS_BDZA - cond, absolute PPC_INS_BDZLR - cond, toLR PPC_INS_BDZL - cond, link PPC_INS_BDZLA - cond, absolute, link PPC_INS_BDZLRL - cond, link, toLR
Decrement CTR, branch if CTR == 0 & cond true: PPC_INS_BDZT - cond PPC_INS_BDZTA - cond, absolute PPC_INS_BDZTLR - cond, toLR PPC_INS_BDZTL - cond, link PPC_INS_BDZTLA - cond, absolute, link PPC_INS_BDZTLRL - cond, link, toLR
Decrement CTR, branch if CTR == 0 & cond false: PPC_INS_BDZF - cond PPC_INS_BDZFA - cond, absolute PPC_INS_BDZFLR - cond, toLR PPC_INS_BDZFL - cond, link PPC_INS_BDZFLA - cond, absolute, link PPC_INS_BDZFLRL - cond, link, toLR