Lines Matching refs:arch
49 static void ins__sort(struct arch *arch);
59 static int arch__grow_instructions(struct arch *arch) in arch__grow_instructions() argument
64 if (arch->nr_instructions_allocated == 0 && arch->instructions) in arch__grow_instructions()
67 new_nr_allocated = arch->nr_instructions_allocated + 128; in arch__grow_instructions()
68 new_instructions = realloc(arch->instructions, new_nr_allocated * sizeof(struct ins)); in arch__grow_instructions()
73 arch->instructions = new_instructions; in arch__grow_instructions()
74 arch->nr_instructions_allocated = new_nr_allocated; in arch__grow_instructions()
78 new_nr_allocated = arch->nr_instructions + 128; in arch__grow_instructions()
83 memcpy(new_instructions, arch->instructions, arch->nr_instructions); in arch__grow_instructions()
87 static int arch__associate_ins_ops(struct arch* arch, const char *name, struct ins_ops *ops) in arch__associate_ins_ops() argument
91 if (arch->nr_instructions == arch->nr_instructions_allocated && in arch__associate_ins_ops()
92 arch__grow_instructions(arch)) in arch__associate_ins_ops()
95 ins = &arch->instructions[arch->nr_instructions]; in arch__associate_ins_ops()
101 arch->nr_instructions++; in arch__associate_ins_ops()
103 ins__sort(arch); in arch__associate_ins_ops()
119 static struct arch architectures[] = {
195 const struct arch *arch = archp; in arch__key_cmp() local
197 return strcmp(name, arch->name); in arch__key_cmp()
202 const struct arch *aa = a; in arch__cmp()
203 const struct arch *ab = b; in arch__cmp()
212 qsort(architectures, nmemb, sizeof(struct arch), arch__cmp); in arch__sort()
215 struct arch *arch__find(const char *name) in arch__find()
225 return bsearch(name, architectures, nmemb, sizeof(struct arch), arch__key_cmp); in arch__find()
228 bool arch__is(struct arch *arch, const char *name) in arch__is() argument
230 return !strcmp(arch->name, name); in arch__is()
258 bool ins__is_fused(struct arch *arch, const char *ins1, const char *ins2) in ins__is_fused() argument
260 if (!arch || !arch->ins_is_fused) in ins__is_fused()
263 return arch->ins_is_fused(arch, ins1, ins2); in ins__is_fused()
266 static int call__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms, in call__parse() argument
283 if (arch->objdump.skip_functions_char && in call__parse()
284 strchr(name, arch->objdump.skip_functions_char)) in call__parse()
362 static int jump__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms, in jump__parse() argument
373 ops->jump.raw_comment = strchr(ops->raw, arch->objdump.comment_char); in jump__parse()
522 static int lock__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms, in lock__parse() argument
532 ops->locked.ins.ops = ins__find(arch, ops->locked.ins.name, 0); in lock__parse()
538 ops->locked.ins.ops->parse(arch, ops->locked.ops, ms, NULL) < 0) in lock__parse()
589 static bool check_multi_regs(struct arch *arch, const char *op) in check_multi_regs() argument
593 if (arch->objdump.register_char == 0) in check_multi_regs()
596 if (arch->objdump.memory_ref_char) { in check_multi_regs()
597 op = strchr(op, arch->objdump.memory_ref_char); in check_multi_regs()
602 while ((op = strchr(op, arch->objdump.register_char)) != NULL) { in check_multi_regs()
610 static int mov__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms __maybe_un… in mov__parse() argument
638 ops->source.multi_regs = check_multi_regs(arch, ops->source.raw); in mov__parse()
641 comment = strchr(s, arch->objdump.comment_char); in mov__parse()
660 ops->target.multi_regs = check_multi_regs(arch, ops->target.raw); in mov__parse()
716 static int arithmetic__parse(struct arch *arch __maybe_unused, struct ins_operands *ops, in arithmetic__parse()
753 static int load_store__parse(struct arch *arch __maybe_unused, struct ins_operands *ops, in load_store__parse()
773 static int dec__parse(struct arch *arch __maybe_unused, struct ins_operands *ops, struct map_symbol… in dec__parse()
791 comment = strchr(s, arch->objdump.comment_char); in dec__parse()
857 static void ins__sort(struct arch *arch) in ins__sort() argument
859 const int nmemb = arch->nr_instructions; in ins__sort()
861 qsort(arch->instructions, nmemb, sizeof(struct ins), ins__cmp); in ins__sort()
864 static struct ins_ops *__ins__find(struct arch *arch, const char *name, struct disasm_line *dl) in __ins__find() argument
867 const int nmemb = arch->nr_instructions; in __ins__find()
869 if (arch__is(arch, "powerpc")) { in __ins__find()
881 if (!arch->sorted_instructions) { in __ins__find()
882 ins__sort(arch); in __ins__find()
883 arch->sorted_instructions = true; in __ins__find()
886 ins = bsearch(name, arch->instructions, nmemb, sizeof(struct ins), ins__key_cmp); in __ins__find()
890 if (arch->insn_suffix) { in __ins__find()
899 if (strchr(arch->insn_suffix, suffix) == NULL) in __ins__find()
905 ins = bsearch(tmp, arch->instructions, nmemb, sizeof(struct ins), ins__key_cmp); in __ins__find()
910 struct ins_ops *ins__find(struct arch *arch, const char *name, struct disasm_line *dl) in ins__find() argument
912 struct ins_ops *ops = __ins__find(arch, name, dl); in ins__find()
914 if (!ops && arch->associate_instruction_ops) in ins__find()
915 ops = arch->associate_instruction_ops(arch, name); in ins__find()
920 static void disasm_line__init_ins(struct disasm_line *dl, struct arch *arch, struct map_symbol *ms) in disasm_line__init_ins() argument
922 dl->ins.ops = ins__find(arch, dl->ins.name, dl); in disasm_line__init_ins()
927 if (dl->ins.ops->parse && dl->ins.ops->parse(arch, &dl->ops, ms, dl) < 0) in disasm_line__init_ins()
1057 if (arch__is(args->arch, "powerpc")) { in disasm_line__new()
1063 disasm_line__init_ins(dl, args->arch, &args->ms); in disasm_line__new()
1345 if (!arch__is(args->arch, "x86")) in open_capstone_handle()
1449 if (!arch__is(args->arch, "x86")) in print_capstone_detail()
1899 if (arch__is(args->arch, "x86")) { in symbol__disassemble_llvm()
1906 args->arch->name); in symbol__disassemble_llvm()
2273 if (arch__is(args->arch, "powerpc")) { in symbol__disassemble()