7 #ifndef CAPSTONE2LLVMIR_POWERPC_POWERPC_IMPL_H
8 #define CAPSTONE2LLVMIR_POWERPC_POWERPC_IMPL_H
14 namespace capstone2llvmir {
23 cs_mode basic = CS_MODE_32,
24 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
51 llvm::IRBuilder<>& irb)
override;
60 llvm::IRBuilder<>& irb,
61 llvm::Type* dstType =
nullptr,
62 eOpConv ct = eOpConv::THROW)
override;
63 virtual llvm::Value*
loadOp(
65 llvm::IRBuilder<>& irb,
66 llvm::Type* ty =
nullptr,
67 bool lea =
false)
override;
72 llvm::IRBuilder<>& irb,
73 eOpConv ct = eOpConv::SEXT_TRUNC_OR_BITCAST)
override;
74 virtual llvm::Instruction*
storeOp(
77 llvm::IRBuilder<>& irb,
78 eOpConv ct = eOpConv::SEXT_TRUNC_OR_BITCAST)
override;
81 llvm::IRBuilder<>& irb,
84 llvm::Value*
op1 =
nullptr,
85 bool signedCmp =
true);
86 void storeCr0(llvm::IRBuilder<>& irb, cs_ppc* pi, llvm::Value* val);
88 std::tuple<llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*>
loadCrX(
89 llvm::IRBuilder<>& irb,
92 llvm::IRBuilder<>& irb,
121 void translateAdd(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
122 void translateAddc(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
123 void translateAdde(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
124 void translateAddis(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
125 void translateAddme(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
126 void translateAddze(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
127 void translateAnd(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
128 void translateAndc(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
129 void translateAndis(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
130 void translateB(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
132 void translateCmp(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
137 void translateDivw(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
138 void translateEqv(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
140 void translateLhbrx(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
141 void translateLi(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
142 void translateLis(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
143 void translateLoad(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
145 void translateMcrf(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
146 void translateMfctr(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
147 void translateMflr(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
148 void translateMr(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
149 void translateMtcrf(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
150 void translateMtcr(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
151 void translateMtctr(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
152 void translateMtlr(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
153 void translateMulhw(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
154 void translateMullw(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
155 void translateNand(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
156 void translateNeg(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
157 void translateNop(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
158 void translateNor(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
159 void translateNot(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
160 void translateOr(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
161 void translateOrc(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
162 void translateOris(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
164 void translateRotlw(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
167 void translateSlwi(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
168 void translateSrwi(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
169 void translateSraw(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
170 void translateStore(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
172 void translateSubf(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
173 void translateSubfc(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
174 void translateSubfe(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
177 void translateXor(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
178 void translateXoris(cs_insn* i, cs_ppc* pi, llvm::IRBuilder<>& irb);
PowerPC specialization of translator's abstract public interface.
Common private implementation for translators converting bytes to LLVM IR.
Definition: powerpc_impl.h:19
virtual void initializeRegNameMap() override
Definition: powerpc_init.cpp:66
virtual void generateRegisters() override
Definition: powerpc.cpp:89
void translateCrNotMove(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1307
virtual bool isAllowedExtraMode(cs_mode m) override
Definition: powerpc.cpp:37
void translateCrModifTernary(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1270
void translateMfctr(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1448
std::tuple< llvm::Value *, llvm::Value *, llvm::Value *, llvm::Value * > loadCrX(llvm::IRBuilder<> &irb, uint32_t crReg)
Definition: powerpc.cpp:376
virtual void initializeArchSpecific() override
Definition: powerpc_init.cpp:18
void translateSubfme(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1855
void translateLhbrx(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1099
virtual bool isOperandRegister(cs_ppc_op &op) override
Definition: powerpc.cpp:587
void translateClrlwi(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:748
virtual uint32_t getCarryRegister() override
Definition: powerpc.cpp:97
static std::map< std::size_t, void(Capstone2LlvmIrTranslatorPowerpc_impl::*)(cs_insn *i, cs_ppc *, llvm::IRBuilder<> &)> _i2fm
Definition: powerpc_impl.h:114
virtual llvm::Value * loadOp(cs_ppc_op &op, llvm::IRBuilder<> &irb, llvm::Type *ty=nullptr, bool lea=false) override
Definition: powerpc.cpp:150
void translateNop(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1535
void translateAddis(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:649
void translateAndc(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:720
void translateMullw(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1495
virtual void generateDataLayout() override
Definition: powerpc.cpp:70
virtual llvm::StoreInst * storeRegister(uint32_t r, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::SEXT_TRUNC_OR_BITCAST) override
Definition: powerpc.cpp:215
void translateNor(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1543
virtual void translateInstruction(cs_insn *i, llvm::IRBuilder<> &irb) override
Definition: powerpc.cpp:102
void translateCmp(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:771
virtual void initializePseudoCallInstructionIDs() override
Definition: powerpc_init.cpp:381
virtual void initializeRegTypeMap() override
Definition: powerpc_init.cpp:71
void storeCr0(llvm::IRBuilder<> &irb, cs_ppc *pi, llvm::Value *val)
Definition: powerpc.cpp:526
void translateSubfze(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1877
void translateStore(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1000
void translateMtcr(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1196
uint32_t getGeneralPurposeRegisterIndex(uint32_t r)
Definition: powerpc.cpp:556
void translateAddme(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:663
void translateOris(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1599
virtual llvm::Value * loadRegister(uint32_t r, llvm::IRBuilder<> &irb, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::THROW) override
Definition: powerpc.cpp:128
virtual bool isAllowedBasicMode(cs_mode m) override
Definition: powerpc.cpp:32
void translateCntlzw(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:818
void translateRotateComplex5op(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1613
void translateAdd(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:603
void translateXoris(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1909
void translateB(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:2027
void translateEqv(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:850
void translateSubfc(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1800
void translateMulhw(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1470
Capstone2LlvmIrTranslatorPowerpc_impl(llvm::Module *m, cs_mode basic=CS_MODE_32, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: powerpc.cpp:14
void translateSrwi(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1709
virtual uint32_t getArchByteSize() override
Definition: powerpc.cpp:42
void translateAndis(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:734
void translateMr(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1151
virtual llvm::Instruction * storeOp(cs_ppc_op &op, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::SEXT_TRUNC_OR_BITCAST) override
Definition: powerpc.cpp:236
void translateSlwi(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1696
void translateMcrf(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1379
void translateAdde(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:630
void translateShiftLeft(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1662
void translateSraw(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1723
void translateShiftRight(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1679
virtual void generateEnvironmentArchSpecific() override
Definition: powerpc.cpp:65
bool isCrRegister(uint32_t r)
Definition: powerpc.cpp:577
uint32_t crBitIndexToCrRegister(uint32_t idx)
Definition: powerpc.cpp:572
void translateNeg(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1522
void translateMflr(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1459
void translateNand(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1508
void translateSubf(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1780
void translateOr(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1572
void translateLoadIndexed(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:946
void translateXor(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1896
void translateOrc(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1585
void translateCrSetClr(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1348
void translateNot(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1557
void translateDivw(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:835
void translateMtlr(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1258
void translateLis(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1138
void translateMtcrf(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1163
void translateAddze(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:686
void translateExtendSign(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:864
void translateAnd(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:707
void translateLi(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1126
void translateMtctr(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1247
void translateAddc(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:616
void translateLoad(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:894
void storeCrX(llvm::IRBuilder<> &irb, uint32_t crReg, llvm::Value *op0, llvm::Value *op1=nullptr, bool signedCmp=true)
Definition: powerpc.cpp:286
void translateSubfe(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1833
void translateStoreIndexed(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1052
void translateRotlw(cs_insn *i, cs_ppc *pi, llvm::IRBuilder<> &irb)
Definition: powerpc.cpp:1640
bool isGeneralPurposeRegister(uint32_t r)
Definition: powerpc.cpp:551
Definition: capstone2llvmir_impl.h:32
llvm::Value * op1
Definition: capstone2llvmir_impl.h:659
eOpConv
Definition: capstone2llvmir_impl.h:159
llvm::Value * op0
Definition: capstone2llvmir_impl.h:658
Definition: archive_wrapper.h:19
ppc_cr_types
Definition: powerpc_defs.h:58