7 #ifndef CAPSTONE2LLVMIR_X86_X86_IMPL_H
8 #define CAPSTONE2LLVMIR_X86_X86_IMPL_H
14 namespace capstone2llvmir {
23 cs_mode basic = CS_MODE_32,
24 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
73 llvm::IRBuilder<>& irb)
override;
92 const std::vector<x86_reg>& rs,
103 llvm::IRBuilder<>& irb,
104 llvm::Type* dstType =
nullptr,
105 eOpConv ct = eOpConv::THROW)
override;
106 virtual llvm::Value*
loadOp(
108 llvm::IRBuilder<>& irb,
109 llvm::Type* ty =
nullptr,
110 bool lea =
false)
override;
115 llvm::IRBuilder<>& irb,
116 eOpConv ct = eOpConv::ZEXT_TRUNC_OR_BITCAST)
override;
117 virtual llvm::Instruction*
storeOp(
120 llvm::IRBuilder<>& irb,
121 eOpConv ct = eOpConv::ZEXT_TRUNC_OR_BITCAST)
override;
124 llvm::IRBuilder<>& irb,
125 const std::vector<std::pair<uint32_t, llvm::Value*>>& regs);
127 llvm::IRBuilder<>& irb,
128 llvm::Value* sflagsVal,
129 const std::vector<std::pair<uint32_t, llvm::Value*>>& regs);
135 llvm::Value*
loadX87Top(llvm::IRBuilder<>& irb);
140 llvm::Value*
x87IncTop(llvm::IRBuilder<>& irb, llvm::Value*
top =
nullptr);
141 llvm::Value*
x87DecTop(llvm::IRBuilder<>& irb, llvm::Value*
top =
nullptr);
144 llvm::IRBuilder<>& irb,
148 llvm::IRBuilder<>& irb,
154 llvm::IRBuilder<>& irb);
159 llvm::IRBuilder<>& irb);
166 llvm::IRBuilder<>& irb);
219 llvm::Value*
top =
nullptr;
220 llvm::Value*
idx =
nullptr;
230 void translateAaa(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
231 void translateAad(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
232 void translateAam(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
233 void translateAdc(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
234 void translateAdd(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
235 void translateAnd(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
236 void translateBsf(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
237 void translateBswap(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
238 void translateBt(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
239 void translateBtc(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
240 void translateBtr(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
241 void translateBts(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
242 void translateCall(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
243 void translateCbw(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
244 void translateCdq(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
245 void translateCdqe(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
246 void translateClc(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
247 void translateCld(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
248 void translateCli(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
249 void translateCmc(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
255 void translateCpuid(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
256 void translateCqo(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
257 void translateCwd(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
258 void translateCwde(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
260 void translateDec(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
261 void translateDiv(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
262 void translateEnter(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
263 void translateFabs(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
264 void translateFadd(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
265 void translateFchs(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
266 void translateFcos(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
268 void translateFdiv(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
269 void translateFdivr(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
270 void translateFprem(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb);
272 void translateFist(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
273 void translateFld(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
274 void translateFbld(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
275 void translateFbstp(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
278 void translateFmul(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
281 void translateFsin(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
283 void translateFtan(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
284 void translateFatan(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
285 void translateFsqrt(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
287 void translateFst(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
288 void translateFsub(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
289 void translateFsubr(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
291 void translateFxam(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
293 void translateFxch(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
294 void translateF2xm1(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
295 void translateFyl2x(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
296 void translateFfree(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
304 void translateImul(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
305 void translateInc(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
306 void translateIns(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
307 void translateJCc(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
308 void translateJecxz(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
309 void translateJmp(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
310 void translateLahf(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
311 void translateLea(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
312 void translateLeave(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
313 void translateLcall(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
314 void translateLjmp(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
317 void translateLoop(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
318 void translateMov(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
320 void translateMul(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
321 void translateNeg(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
322 void translateNop(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
323 void translateNot(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
324 void translateOr(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
325 void translateOuts(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
326 void translatePop(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
327 void translatePopa(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
329 void translatePush(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
330 void translatePusha(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
332 void translateRcr(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
333 void translateRcl(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
334 void translateRdtsc(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
336 void translateRol(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
337 void translateRor(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
338 void translateRet(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
339 void translateSahf(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
340 void translateSalc(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
341 void translateSbb(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
343 void translateSetCc(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
346 void translateShld(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
347 void translateShrd(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
348 void translateStc(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
349 void translateStd(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
351 void translateSub(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
352 void translateXchg(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
353 void translateXlatb(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
354 void translateXor(cs_insn* i, cs_x86* xi, llvm::IRBuilder<>& irb);
x86 specialization of translator's abstract public interface.
Common private implementation for translators converting bytes to LLVM IR.
Definition: x86_impl.h:19
void storeRegisters(llvm::IRBuilder<> &irb, const std::vector< std::pair< uint32_t, llvm::Value * >> ®s)
Definition: x86.cpp:819
void translateFadd(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4400
unsigned getAddrSpace(x86_reg segment)
Definition: x86.cpp:840
void translateCld(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1967
void translatePopEflags(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2811
void translateShiftLeft(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3136
void translateLjmp(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2280
void translateDaaDas(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1581
virtual llvm::Instruction * storeOp(cs_x86_op &op, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::ZEXT_TRUNC_OR_BITCAST) override
Definition: x86.cpp:1039
llvm::Value * generateCcL(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1449
void translateMov(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2506
void translateAam(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1659
void translateFcos(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4658
void translateFxtract(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:5155
bool isX87DataRegister(uint32_t r)
Definition: x86.cpp:863
llvm::Value * generateCcNP(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1482
void translateFucomPop(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:5065
void generateRegisters64()
Definition: x86.cpp:614
llvm::CallInst * loadX87DataReg(llvm::IRBuilder<> &irb, llvm::Value *rNum)
Definition: x86.cpp:939
void initializeRegistersParentMap16()
Definition: x86_init.cpp:518
void translateFabs(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4544
void translateFchs(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4559
void translateSahf(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3076
std::tuple< llvm::Value *, llvm::Value *, llvm::Value *, llvm::Value * > loadOpFloatingBinaryTop(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1183
void translateRet(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3016
void translateLoadFarPtr(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2470
llvm::Value * loadX87Top(llvm::IRBuilder<> &irb)
Definition: x86.cpp:868
static std::map< std::size_t, void(Capstone2LlvmIrTranslatorX86_impl::*)(cs_insn *i, cs_x86 *, llvm::IRBuilder<> &)> _i2fm
Mapping of Capstone instruction IDs to their translation functions.
Definition: x86_impl.h:217
virtual void generateDataLayout() override
Definition: x86.cpp:171
void initializeRegistersParentMapToOther(const std::vector< x86_reg > &rs, x86_reg other)
Definition: x86_init.cpp:488
llvm::Value * loadX87TopDecStore(llvm::IRBuilder<> &irb)
Definition: x86.cpp:885
void translateOr(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2714
virtual bool isX87DataStoreFunction(llvm::Function *f) const override
Definition: x86.cpp:118
void translateSbb(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3116
void translateFsub(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4492
void translateCli(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1977
llvm::Value * generateParityFlag(llvm::Value *val, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1321
llvm::Value * generateCcB(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1388
void translateLea(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2405
void translateRcl(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3368
void translatePusha(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2896
void translateCwd(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1921
void translateAdc(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1687
void translateBsf(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1758
virtual bool isX87DataStoreFunctionCall(llvm::CallInst *c) const override
Definition: x86.cpp:123
llvm::Value * generateCcNS(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1492
void initializeRegistersParentMap32()
Definition: x86_init.cpp:540
llvm::Value * generateCcGE(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1408
llvm::Value * generateCcS(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1521
virtual bool isAnyPseudoFunctionCall(llvm::CallInst *c) const override
Definition: x86.cpp:104
void translateFrndint(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:5206
void translateRdtsc(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:5347
llvm::Value * loadX87TopInc(llvm::IRBuilder<> &irb)
Definition: x86.cpp:879
virtual bool isOperandRegister(cs_x86_op &op) override
Definition: x86.cpp:1526
void translatePush(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2877
llvm::Value * generateSignFlag(llvm::Value *val, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1306
virtual void initializeRegTypeMap() override
Definition: x86_init.cpp:92
void translateFbstp(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4253
virtual llvm::Value * getCurrentPc(cs_insn *i)
Definition: x86.cpp:316
void translateJCc(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4084
llvm::Value * generateZeroFlag(llvm::Value *val, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1298
llvm::Value * generateCcBE(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1375
void translateFnclex(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4837
virtual void initializeArchSpecific() override
Definition: x86_init.cpp:18
llvm::Value * loadX87TopIncStore(llvm::IRBuilder<> &irb)
Definition: x86.cpp:896
void translateFtan(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4738
void translateStc(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3484
void translateShrd(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3277
void translateCmpxchg(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2001
void translateInc(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2161
void translateCmc(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1987
void translateImul(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2111
std::vector< uint32_t > _reg2parentMap
Definition: x86_impl.h:209
void translateFsqrt(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4573
void translateFprem(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4478
void translateFxam(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:5137
void translateCwde(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1897
void translateBt(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1805
void translateAaa(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1545
void generateX87RegLoadStoreFunctions()
Definition: x86.cpp:248
llvm::Function * _x87DataStoreFunction
Definition: x86_impl.h:222
void translateIns(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:5295
void translateFxstor(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4995
void translateJecxz(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4008
void translateSetCc(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4120
void translateCall(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2320
void translatePop(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2732
void translateFxch(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4645
void translateMoveString(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3741
void translateSalc(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3101
virtual void initializeRegNameMap() override
Definition: x86_init.cpp:23
void translateAad(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1631
void translateFnstsw(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4826
virtual void generateRegisters() override
Definition: x86.cpp:198
void translateFbld(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4233
void translateFfree(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4818
void translateFninit(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2657
uint32_t getStackPointerRegister()
Definition: x86.cpp:286
virtual void generateEnvironmentArchSpecific() override
Definition: x86.cpp:166
void translateFyl2x(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4622
void translateBts(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1866
void translateFrstor(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4854
void translateXlatb(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3552
void translateScanString(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3838
virtual uint32_t getCarryRegister() override
Definition: x86.cpp:215
void translateLcall(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2341
llvm::Value * generateCcG(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1420
void translateCMovCc(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4160
void translateNop(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2641
virtual llvm::Function * getX87DataLoadFunction() const override
Definition: x86.cpp:143
void translateCmpxchg8b(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2030
virtual llvm::Value * loadRegister(uint32_t r, llvm::IRBuilder<> &irb, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::THROW) override
Definition: x86.cpp:655
llvm::Value * generateCcNE(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1461
void translateCbw(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1885
llvm::Value * generateCcP(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1512
void translateRdtscp(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:5366
llvm::Value * loadX87TopDec(llvm::IRBuilder<> &irb)
Definition: x86.cpp:873
void translateCdqe(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1909
virtual bool isX87DataLoadFunctionCall(llvm::CallInst *c) const override
Definition: x86.cpp:138
void translateLoop(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4029
void translateRol(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3414
void translateCompareString(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3917
void translatePushEflags(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2955
void translateFxsave(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4928
virtual void translateInstruction(cs_insn *i, llvm::IRBuilder<> &irb) override
Definition: x86.cpp:220
llvm::Value * generateCcO(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1502
llvm::Value * idx
Definition: x86_impl.h:220
void translateFsin(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4713
void translateRor(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3449
void translateLahf(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2379
llvm::Value * generateCcNO(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1471
void translateLoadString(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3598
void translateCqo(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1945
void translateBtc(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1821
virtual bool isX87DataLoadFunction(llvm::Function *f) const override
Definition: x86.cpp:133
void translateFCMovCc(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4194
void translateFdecstp(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4804
void translateEnter(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2419
Capstone2LlvmIrTranslatorX86_impl(llvm::Module *m, cs_mode basic=CS_MODE_32, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: x86.cpp:14
void translatePopa(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2752
llvm::Value * x87IncTop(llvm::IRBuilder<> &irb, llvm::Value *top=nullptr)
Definition: x86.cpp:905
llvm::Value * generateCcE(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1398
void generateRegisters16()
Definition: x86.cpp:570
void translateAdd(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1715
void translateStd(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3494
void translateStoreString(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3649
void translateFscale(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4588
void initializeRegistersParentMap()
Definition: x86_init.cpp:502
void translateSub(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3504
llvm::Value * x87DecTop(llvm::IRBuilder<> &irb, llvm::Value *top=nullptr)
Definition: x86.cpp:915
llvm::Value * generateCcA(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1362
virtual bool isAnyPseudoFunction(llvm::Function *f) const override
Definition: x86.cpp:97
void translateDiv(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2180
void generateRegistersCommon()
Definition: x86.cpp:321
virtual llvm::Value * loadOp(cs_x86_op &op, llvm::IRBuilder<> &irb, llvm::Type *ty=nullptr, bool lea=false) override
Definition: x86.cpp:952
void translateFdiv(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4426
void translateJmp(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2269
void translateFist(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:5186
void translateFnstenv(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4903
void translateFdivr(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4452
void translateFnsave(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4878
void translateShiftRight(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3186
virtual llvm::StoreInst * storeRegister(uint32_t r, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::ZEXT_TRUNC_OR_BITCAST) override
Definition: x86.cpp:707
void translateOuts(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:5242
std::tuple< llvm::Value *, llvm::Value * > loadOpFloatingNullaryOrUnaryTop(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1120
void generateSetSflags(llvm::Value *val, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1336
void translateCpuid(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:5220
void initializeRegistersParentMap64()
Definition: x86_init.cpp:563
void storeRegistersPlusSflags(llvm::IRBuilder<> &irb, llvm::Value *sflagsVal, const std::vector< std::pair< uint32_t, llvm::Value * >> ®s)
Definition: x86.cpp:829
void translateNeg(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2610
uint32_t getBasePointerRegister()
Definition: x86.cpp:301
llvm::Value * generateCcAE(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1351
void translateFatan(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4770
void translateFld(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4220
void translateNot(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2699
virtual bool isAllowedExtraMode(cs_mode m) override
Definition: x86.cpp:71
virtual uint32_t getArchByteSize() override
Definition: x86.cpp:76
void translateFsincos(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4683
void translateBtr(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1846
void translateAnd(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1737
virtual bool isAllowedBasicMode(cs_mode m) override
Definition: x86.cpp:47
void translateMul(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2532
void translateCdq(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1933
virtual uint32_t getParentRegister(uint32_t r) const override
Definition: x86.cpp:153
void translateCmpxchg16b(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2061
void translateF2xm1(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4605
void translateRcr(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3321
llvm::CallInst * storeX87DataReg(llvm::IRBuilder<> &irb, llvm::Value *rNum, llvm::Value *val)
Definition: x86.cpp:925
void translateXor(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3578
void translateLeave(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2451
void translateFincstp(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4790
llvm::Function * _x87DataLoadFunction
Definition: x86_impl.h:223
void translateXchg(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3525
void translateFst(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4338
void translateBswap(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1787
void translateFmul(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4374
void translateFsubr(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4518
uint32_t getAccumulatorRegister(std::size_t size)
Definition: x86.cpp:274
llvm::Value * top
Definition: x86_impl.h:219
void translateDec(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:2092
void generateRegisters32()
Definition: x86.cpp:588
virtual llvm::Function * getX87DataStoreFunction() const override
Definition: x86.cpp:128
llvm::Value * generateCcLE(llvm::IRBuilder<> &irb)
Definition: x86.cpp:1435
void translateClc(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:1957
virtual uint8_t getOperandAccess(cs_x86_op &op) override
Definition: x86.cpp:1531
virtual void initializePseudoCallInstructionIDs() override
Definition: x86_init.cpp:426
void translateFloadConstant(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:4275
void translateShld(cs_insn *i, cs_x86 *xi, llvm::IRBuilder<> &irb)
Definition: x86.cpp:3234
Definition: capstone2llvmir_impl.h:32
eOpConv
Definition: capstone2llvmir_impl.h:159
Definition: archive_wrapper.h:19