7 #ifndef CAPSTONE2LLVMIR_ARM_ARM_IMPL_H
8 #define CAPSTONE2LLVMIR_ARM_ARM_IMPL_H
14 namespace capstone2llvmir {
23 cs_mode basic = CS_MODE_ARM,
24 cs_mode extra = CS_MODE_LITTLE_ENDIAN);
51 llvm::IRBuilder<>& irb)
override;
62 llvm::IRBuilder<>& irb,
63 llvm::Type* dstType =
nullptr,
64 eOpConv ct = eOpConv::THROW)
override;
65 virtual llvm::Value*
loadOp(
67 llvm::IRBuilder<>& irb,
68 llvm::Type* ty =
nullptr,
69 bool lea =
false)
override;
74 llvm::IRBuilder<>& irb,
75 eOpConv ct = eOpConv::SEXT_TRUNC_OR_BITCAST)
override;
76 virtual llvm::Instruction*
storeOp(
79 llvm::IRBuilder<>& irb,
80 eOpConv ct = eOpConv::SEXT_TRUNC_OR_BITCAST)
override;
83 llvm::IRBuilder<>& irb,
87 llvm::IRBuilder<>& irb,
91 llvm::IRBuilder<>& irb,
95 llvm::IRBuilder<>& irb,
99 llvm::IRBuilder<>& irb,
103 llvm::IRBuilder<>& irb,
107 llvm::IRBuilder<>& irb,
138 void translateAdc(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
139 void translateAdd(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
140 void translateAnd(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
141 void translateB(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
142 void translateBl(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
143 void translateCbnz(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
144 void translateCbz(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
145 void translateClz(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
146 void translateEor(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
148 void translateLdr(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
149 void translateLdrd(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
150 void translateMla(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
151 void translateMls(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
152 void translateMov(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
153 void translateMovt(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
154 void translateMovw(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
155 void translateMul(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
156 void translateNop(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
157 void translateOrr(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
158 void translateRev(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
159 void translateSbc(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
161 void translateStr(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
162 void translateSub(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
163 void translateUmlal(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
164 void translateUmull(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
165 void translateUxtah(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
166 void translateUxtb(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
168 void translateUxth(cs_insn* i, cs_arm* ai, llvm::IRBuilder<>& irb);
ARM specialization of translator's abstract public interface.
Common private implementation for translators converting bytes to LLVM IR.
Definition: arm_impl.h:19
static std::map< std::size_t, void(Capstone2LlvmIrTranslatorArm_impl::*)(cs_insn *i, cs_arm *, llvm::IRBuilder<> &)> _i2fm
Definition: arm_impl.h:131
void translateBl(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:907
virtual void generateRegisters() override
Definition: arm.cpp:65
void translateAdd(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:807
void translateUxtah(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1896
llvm::Value * getCurrentPc(cs_insn *i)
Definition: arm.cpp:159
void translateB(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:881
void translateMls(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1025
void translateAdc(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:785
llvm::Value * generateShiftLsl(llvm::IRBuilder<> &irb, llvm::Value *val, llvm::Value *n)
Definition: arm.cpp:276
virtual llvm::Instruction * storeOp(cs_arm_op &op, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::SEXT_TRUNC_OR_BITCAST) override
Definition: arm.cpp:546
virtual bool isAllowedExtraMode(cs_mode m) override
Definition: arm.cpp:38
void translateUxth(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1934
void translateUmlal(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1819
virtual bool isOperandRegister(cs_arm_op &op) override
Definition: arm.cpp:764
virtual llvm::Instruction * storeRegister(uint32_t r, llvm::Value *val, llvm::IRBuilder<> &irb, eOpConv ct=eOpConv::SEXT_TRUNC_OR_BITCAST) override
Definition: arm.cpp:495
llvm::Value * generateShiftRrx(llvm::IRBuilder<> &irb, llvm::Value *val, llvm::Value *n)
Definition: arm.cpp:324
void translateEor(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:975
void translateMla(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1000
virtual void initializeArchSpecific() override
Definition: arm_init.cpp:18
llvm::Value * generateOperandShift(llvm::IRBuilder<> &irb, cs_arm_op &op, llvm::Value *val)
Definition: arm.cpp:193
void translateMovw(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1153
void translateAnd(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:852
llvm::Value * generateShiftAsr(llvm::IRBuilder<> &irb, llvm::Value *val, llvm::Value *n)
Definition: arm.cpp:262
void translateRev(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1369
virtual uint32_t getCarryRegister() override
Definition: arm.cpp:73
llvm::Value * generateShiftLsr(llvm::IRBuilder<> &irb, llvm::Value *val, llvm::Value *n)
Definition: arm.cpp:291
void translateShifts(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1074
void translateCbnz(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:927
void translateCbz(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:943
virtual uint8_t getOperandAccess(cs_arm_op &op) override
Definition: arm.cpp:769
void translateOrr(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1207
virtual llvm::Value * loadOp(cs_arm_op &op, llvm::IRBuilder<> &irb, llvm::Type *ty=nullptr, bool lea=false) override
Definition: arm.cpp:379
void translateClz(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:959
void translateSub(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1782
void translateMul(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1177
virtual void initializePseudoCallInstructionIDs() override
Definition: arm_init.cpp:338
Capstone2LlvmIrTranslatorArm_impl(llvm::Module *m, cs_mode basic=CS_MODE_ARM, cs_mode extra=CS_MODE_LITTLE_ENDIAN)
Definition: arm.cpp:14
virtual void generateEnvironmentArchSpecific() override
Definition: arm.cpp:55
void translateUxtb(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1910
void translateLdrd(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1548
virtual uint32_t getArchByteSize() override
Definition: arm.cpp:44
virtual llvm::Value * loadRegister(uint32_t r, llvm::IRBuilder<> &irb, llvm::Type *dstType=nullptr, eOpConv ct=eOpConv::THROW) override
Definition: arm.cpp:166
llvm::Value * generateShiftRor(llvm::IRBuilder<> &irb, llvm::Value *val, llvm::Value *n)
Definition: arm.cpp:305
virtual void initializeRegTypeMap() override
Definition: arm_init.cpp:113
void translateLdmStm(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1249
virtual void initializeRegNameMap() override
Definition: arm_init.cpp:23
void translateLdr(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1435
llvm::Value * generateInsnConditionCode(llvm::IRBuilder<> &irb, cs_arm *ai)
Definition: arm.cpp:649
void translateUxtb16(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1922
void translateStr(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1648
void translateSbc(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1386
void translateUmull(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1862
virtual void generateDataLayout() override
Definition: arm.cpp:60
virtual void translateInstruction(cs_insn *i, llvm::IRBuilder<> &irb) override
Definition: arm.cpp:78
void translateMovt(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1127
virtual bool isAllowedBasicMode(cs_mode m) override
Definition: arm.cpp:32
void translateMov(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1038
uint32_t sysregNumberTranslation(uint32_t r)
Definition: arm.cpp:361
void translateNop(cs_insn *i, cs_arm *ai, llvm::IRBuilder<> &irb)
Definition: arm.cpp:1199
Definition: capstone2llvmir_impl.h:32
eOpConv
Definition: capstone2llvmir_impl.h:159
Definition: archive_wrapper.h:19