diff options
Diffstat (limited to 'src/arch/arm/v7/helpers.h')
-rw-r--r-- | src/arch/arm/v7/helpers.h | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/arch/arm/v7/helpers.h b/src/arch/arm/v7/helpers.h index 4ef7087..fee5aea 100644 --- a/src/arch/arm/v7/helpers.h +++ b/src/arch/arm/v7/helpers.h @@ -88,6 +88,17 @@ +#define DecodeImmShiftValue(imm5) \ + ({ \ + GArchOperand *__result; \ + uint32_t __shift_n; \ + if (!armv7_decode_imm_shift(0, imm5, (SRType []) { 0 }, &__shift_n)) \ + __result = NULL; \ + else \ + __result = g_imm_operand_new_from_value(MDS_32_BITS_UNSIGNED, __shift_n); \ + __result; \ + }) + #define DecodeImmShift(type, imm5) \ ({ \ GArchOperand *__result; \ @@ -156,16 +167,27 @@ return shift_t; g_armv7_offset_operand_new(add, off) +#define MakeShiftedMemoryAccess(base, off, shift, wr) \ + g_armv7_maccess_operand_new(base, off, shift, wr) + + +#define _MakeMemoryAccess(base, off, wr) \ + MakeShiftedMemoryAccess(base, off, NULL, wr) + + #define MakeMemoryAccess(base, off, add, wr) \ ({ \ GArchOperand *__off; \ __off = MakeAccessOffset(add, off); \ - g_armv7_maccess_operand_new(base, __off, wr); \ + _MakeMemoryAccess(base, __off, wr); \ }) #define MakeMemoryNotIndexed(base, wr) \ - g_armv7_maccess_operand_new(base, NULL, wr) + _MakeMemoryAccess(base, NULL, wr) + + + |