Rizin
unix-like reverse engineering framework and cli tools
arm_accessors64.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: 2013-2021 pancake <pancake@nopcode.org>
2 // SPDX-License-Identifier: LGPL-3.0-only
3 
10 #include <capstone/capstone.h>
11 
12 #define IMM64(x) (ut64)(insn->detail->arm64.operands[x].imm)
13 #define INSOP64(x) insn->detail->arm64.operands[x]
14 
15 #define REGID64(x) insn->detail->arm64.operands[x].reg
16 #define REGBASE64(x) insn->detail->arm64.operands[x].mem.base
17 // s/index/base|reg/
18 #define HASMEMINDEX64(x) (insn->detail->arm64.operands[x].mem.index != ARM64_REG_INVALID)
19 #define MEMDISP64(x) (ut64) insn->detail->arm64.operands[x].mem.disp
20 #define ISIMM64(x) (insn->detail->arm64.operands[x].type == ARM64_OP_IMM)
21 #define ISREG64(x) (insn->detail->arm64.operands[x].type == ARM64_OP_REG)
22 #define ISMEM64(x) (insn->detail->arm64.operands[x].type == ARM64_OP_MEM)
23 
24 #if CS_API_MAJOR > 3
25 #define LSHIFT2_64(x) insn->detail->arm64.operands[x].shift.value
26 #else
27 #define LSHIFT2_64(x) 0
28 #endif
29 #define OPCOUNT64() insn->detail->arm64.op_count
30 
31 #define ISWRITEBACK64() (insn->detail->arm64.writeback == true)
32 #define ISPREINDEX64() (((OPCOUNT64() == 2) && (ISMEM64(1)) && (ISWRITEBACK64())) || ((OPCOUNT64() == 3) && (ISMEM64(2)) && (ISWRITEBACK64())))
33 #define ISPOSTINDEX64() (((OPCOUNT64() == 3) && (ISIMM64(2)) && (ISWRITEBACK64())) || ((OPCOUNT64() == 4) && (ISIMM64(3)) && (ISWRITEBACK64())))