4 #ifdef CAPSTONE_HAS_ARM64
9 #include "../../utils.h"
13 #define GET_INSTRINFO_ENUM
14 #include "AArch64GenInstrInfo.inc"
17 static const name_map reg_name_maps[] = {
285 #ifndef CAPSTONE_DIET
289 return reg_name_maps[reg].
name;
299 #ifndef CAPSTONE_DIET
300 { 0 }, { 0 }, { 0 }, 0, 0
304 #include "AArch64MappingInsn.inc"
312 insn->id = insns[
i].
mapid;
315 #ifndef CAPSTONE_DIET
319 memcpy(insn->detail->regs_read, insns[
i].regs_use,
sizeof(insns[
i].regs_use));
322 memcpy(insn->detail->regs_write, insns[
i].regs_mod,
sizeof(insns[
i].regs_mod));
325 memcpy(insn->detail->groups, insns[
i].groups,
sizeof(insns[
i].groups));
334 static const name_map insn_name_maps[] = {
756 static const name_map alias_insn_name_maps[] = {
808 #ifndef CAPSTONE_DIET
815 return insn_name_maps[
id].
name;
818 for (
i = 0;
i <
ARR_SIZE(alias_insn_name_maps);
i++) {
819 if (alias_insn_name_maps[
i].
id ==
id)
820 return alias_insn_name_maps[
i].
name;
830 #ifndef CAPSTONE_DIET
851 #ifndef CAPSTONE_DIET
877 static const unsigned int map[] = { 0,
892 ARM64_REG_V31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
893 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
969 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count - 1].vas = sp;
976 MI->
flat_insn->detail->arm64.operands[MI->
flat_insn->detail->arm64.op_count - 1].vess = sp;
998 #ifndef CAPSTONE_DIET
1001 typedef struct insn_op {
1002 unsigned int eflags_update;
1006 static insn_op insn_ops[] = {
1012 #include "AArch64MappingInsnOp.inc"
1020 return insn_ops[
i].access;
1027 cs_regs regs_read,
uint8_t *regs_read_count,
1028 cs_regs regs_write,
uint8_t *regs_write_count)
1031 uint8_t read_count, write_count;
1034 read_count = insn->detail->regs_read_count;
1035 write_count = insn->detail->regs_write_count;
1038 memcpy(regs_read, insn->detail->regs_read, read_count *
sizeof(insn->detail->regs_read[0]));
1039 memcpy(regs_write, insn->detail->regs_write, write_count *
sizeof(insn->detail->regs_write[0]));
1042 for (
i = 0;
i <
arm64->op_count;
i++) {
1044 switch((
int)
op->type) {
1058 regs_read[read_count] = (
uint16_t)
op->mem.base;
1062 regs_read[read_count] = (
uint16_t)
op->mem.index;
1066 regs_write[write_count] = (
uint16_t)
op->mem.base;
1074 *regs_read_count = read_count;
1075 *regs_write_count = write_count;