Go to the documentation of this file.
9 #ifndef LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_ARMUTILS_H
10 #define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_ARMUTILS_H
14 #include "llvm/Support/MathExtras.h"
21 return alignment * (val / alignment);
34 return (imm5 == 0 ? 32 : imm5);
37 return (imm5 == 0 ? 32 : imm5);
90 uint32_t &carry_out,
bool *success) {
96 carry_out = amount <= 32 ?
Bit32(value, 32 - amount) : 0;
97 return value << amount;
114 uint32_t &carry_out,
bool *success) {
120 carry_out = amount <= 32 ?
Bit32(value, amount - 1) : 0;
121 return value >> amount;
138 uint32_t &carry_out,
bool *success) {
139 if (amount == 0 || amount > 32) {
144 bool negative =
BitIsSet(value, 31);
146 carry_out =
Bit32(value, amount - 1);
147 int64_t extended = llvm::SignExtend64<32>(value);
150 carry_out = (negative ? 1 : 0);
151 return (negative ? 0xffffffff : 0);
169 uint32_t &carry_out,
bool *success) {
177 carry_out =
Bit32(value, 31);
195 uint32_t &carry_out,
bool *success) {
197 carry_out =
Bit32(value, 0);
198 return Bit32(carry_in, 0) << 31 |
Bits32(value, 31, 1);
205 uint32_t result =
RRX_C(value, carry_in, dont_care, success);
214 uint32_t &carry_out,
bool *success) {
222 carry_out = carry_in;
228 result =
LSL_C(value, amount, carry_out, success);
231 result =
LSR_C(value, amount, carry_out, success);
234 result =
ASR_C(value, amount, carry_out, success);
237 result =
ROR_C(value, amount, carry_out, success);
240 result =
RRX_C(value, carry_in, carry_out, success);
257 uint32_t result =
Shift_C(value, type, amount, carry_in, dont_care, success);
266 return Bits32(val, msbit, lsbit);
270 return bits(val, msbit, msbit);
275 return (val >> m) | (val << (N - m));
286 carry_out = carry_in;
288 imm32 =
ror(imm, 32, amt);
289 carry_out =
Bit32(imm32, 31);
309 const uint32_t imm12 = i << 11 | imm3 << 8 | abcdefgh;
311 if (
bits(imm12, 11, 10) == 0) {
312 switch (
bits(imm12, 9, 8)) {
319 imm32 = abcdefgh << 16 | abcdefgh;
323 imm32 = abcdefgh << 24 | abcdefgh << 8;
327 imm32 = abcdefgh << 24 | abcdefgh << 16 | abcdefgh << 8 | abcdefgh;
330 carry_out = carry_in;
332 const uint32_t unrotated_value = 0x80 |
bits(imm12, 6, 0);
333 imm32 =
ror(unrotated_value, 32,
bits(imm12, 11, 7));
334 carry_out =
Bit32(imm32, 31);
352 const uint32_t imm12 = i << 11 | imm3 << 8 | imm8;
374 #endif // LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_ARMUTILS_H
static uint32_t LSR(const uint32_t value, const uint32_t amount, bool *success)
static uint64_t UnsignedBits(const uint64_t value, const uint64_t msbit, const uint64_t lsbit)
static uint32_t ThumbExpandImm_C(uint32_t opcode, uint32_t carry_in, uint32_t &carry_out)
static uint32_t ThumbImm7Scaled(uint32_t opcode)
static bool BadReg(uint32_t n)
static uint32_t RRX_C(const uint32_t value, const uint32_t carry_in, uint32_t &carry_out, bool *success)
static uint32_t LSR_C(const uint32_t value, const uint32_t amount, uint32_t &carry_out, bool *success)
static uint32_t DecodeImmShiftThumb(const uint32_t opcode, ARM_ShifterType &shift_t)
static uint32_t ASR_C(const uint32_t value, const uint32_t amount, uint32_t &carry_out, bool *success)
static uint32_t Bit32(const uint32_t bits, const uint32_t bit)
static uint32_t ARMExpandImm(uint32_t opcode)
static uint32_t ASR(const uint32_t value, const uint32_t amount, bool *success)
static uint32_t ThumbImm12(uint32_t opcode)
static uint32_t ROR_C(const uint32_t value, const uint32_t amount, uint32_t &carry_out, bool *success)
static bool BitIsSet(const uint64_t value, const uint64_t bit)
static uint32_t DecodeImmShiftARM(const uint32_t opcode, ARM_ShifterType &shift_t)
static uint32_t Shift(const uint32_t value, ARM_ShifterType type, const uint32_t amount, const uint32_t carry_in, bool *success)
static uint32_t LSL_C(const uint32_t value, const uint32_t amount, uint32_t &carry_out, bool *success)
static uint32_t RRX(const uint32_t value, const uint32_t carry_in, bool *success)
static uint32_t bit(const uint32_t val, const uint32_t msbit)
static uint32_t ROR(const uint32_t value, const uint32_t amount, bool *success)
static uint32_t ThumbExpandImm(uint32_t opcode)
static uint32_t ror(uint32_t val, uint32_t N, uint32_t shift)
static uint32_t LSL(const uint32_t value, const uint32_t amount, bool *success)
static uint32_t Align(uint32_t val, uint32_t alignment)
static uint32_t ARMExpandImm_C(uint32_t opcode, uint32_t carry_in, uint32_t &carry_out)
A class that represents a running process on the host machine.
static ARM_ShifterType DecodeRegShift(const uint32_t type)
static uint32_t DecodeImmShift(const uint32_t type, const uint32_t imm5, ARM_ShifterType &shift_t)
static uint32_t bits(const uint32_t val, const uint32_t msbit, const uint32_t lsbit)
static uint32_t ThumbImm8Scaled(uint32_t opcode)
static uint32_t Shift_C(const uint32_t value, ARM_ShifterType type, const uint32_t amount, const uint32_t carry_in, uint32_t &carry_out, bool *success)
static uint32_t Rotr32(uint32_t bits, uint32_t amt)
static uint32_t Bits32(const uint32_t bits, const uint32_t msbit, const uint32_t lsbit)