4 #ifdef CAPSTONE_HAS_ARM
9 #include "../../cs_priv.h"
13 #define GET_INSTRINFO_ENUM
14 #include "ARMGenInstrInfo.inc"
17 static const name_map reg_name_maps[] = {
130 static const name_map reg_name_maps2[] = {
247 #ifndef CAPSTONE_DIET
251 return reg_name_maps[reg].
name;
259 #ifndef CAPSTONE_DIET
260 if (reg >=
ARR_SIZE(reg_name_maps2))
263 return reg_name_maps2[reg].
name;
273 #ifndef CAPSTONE_DIET
274 { 0 }, { 0 }, { 0 }, 0, 0
278 #include "ARMMappingInsn.inc"
286 insn->id = insns[
i].
mapid;
289 #ifndef CAPSTONE_DIET
293 memcpy(insn->detail->regs_read, insns[
i].regs_use,
sizeof(insns[
i].regs_use));
296 memcpy(insn->detail->regs_write, insns[
i].regs_mod,
sizeof(insns[
i].regs_mod));
299 memcpy(insn->detail->groups, insns[
i].groups,
sizeof(insns[
i].groups));
304 if (insns[
i].
branch || insns[
i].indirect_branch) {
306 insn->detail->groups[insn->detail->groups_count] =
ARM_GRP_JUMP;
307 insn->detail->groups_count++;
314 #ifndef CAPSTONE_DIET
315 static const name_map insn_name_maps[] = {
757 #ifndef CAPSTONE_DIET
761 return insn_name_maps[
id].
name;
767 #ifndef CAPSTONE_DIET
815 #ifndef CAPSTONE_DIET
824 static const unsigned int insn_rel[] = {
841 static const unsigned int insn_blx_rel_to_arm[] = {
851 for (
i = 0; insn_rel[
i];
i++) {
852 if (
id == insn_rel[
i]) {
864 for (
i = 0; insn_blx_rel_to_arm[
i];
i++)
865 if (
id == insn_blx_rel_to_arm[
i])
873 #ifndef CAPSTONE_DIET
875 typedef struct insn_op {
879 static insn_op insn_ops[] = {
885 #include "ARMMappingInsnOp.inc"
893 return insn_ops[
i].access;
900 cs_regs regs_read,
uint8_t *regs_read_count,
901 cs_regs regs_write,
uint8_t *regs_write_count)
904 uint8_t read_count, write_count;
907 read_count = insn->detail->regs_read_count;
908 write_count = insn->detail->regs_write_count;
911 memcpy(regs_read, insn->detail->regs_read, read_count *
sizeof(insn->detail->regs_read[0]));
912 memcpy(regs_write, insn->detail->regs_write, write_count *
sizeof(insn->detail->regs_write[0]));
915 for (
i = 0;
i <
arm->op_count;
i++) {
917 switch((
int)
op->type) {
931 regs_read[read_count] = (
uint16_t)
op->mem.base;
935 regs_read[read_count] = (
uint16_t)
op->mem.index;
939 regs_write[write_count] = (
uint16_t)
op->mem.base;
947 *regs_read_count = read_count;
948 *regs_write_count = write_count;