Lines Matching refs:arch
38 #include "arch/common.h"
71 static struct ins_ops *ins__find(struct arch *arch, const char *name);
72 static void ins__sort(struct arch *arch);
75 struct arch {
80 struct ins_ops *(*associate_instruction_ops)(struct arch *arch, const char *name);
86 int (*init)(struct arch *arch, char *cpuid);
87 bool (*ins_is_fused)(struct arch *arch, const char *ins1,
103 static int arch__grow_instructions(struct arch *arch)
108 if (arch->nr_instructions_allocated == 0 && arch->instructions)
111 new_nr_allocated = arch->nr_instructions_allocated + 128;
112 new_instructions = realloc(arch->instructions, new_nr_allocated * sizeof(struct ins));
117 arch->instructions = new_instructions;
118 arch->nr_instructions_allocated = new_nr_allocated;
122 new_nr_allocated = arch->nr_instructions + 128;
127 memcpy(new_instructions, arch->instructions, arch->nr_instructions);
131 static int arch__associate_ins_ops(struct arch* arch, const char *name, struct ins_ops *ops)
135 if (arch->nr_instructions == arch->nr_instructions_allocated &&
136 arch__grow_instructions(arch))
139 ins = &arch->instructions[arch->nr_instructions];
145 arch->nr_instructions++;
147 ins__sort(arch);
151 #include "arch/arc/annotate/instructions.c"
152 #include "arch/arm/annotate/instructions.c"
153 #include "arch/arm64/annotate/instructions.c"
154 #include "arch/csky/annotate/instructions.c"
155 #include "arch/x86/annotate/instructions.c"
156 #include "arch/powerpc/annotate/instructions.c"
157 #include "arch/s390/annotate/instructions.c"
158 #include "arch/sparc/annotate/instructions.c"
159 #include "arch/loongarch/annotate/instructions.c"
161 static struct arch architectures[] = {
240 bool ins__is_fused(struct arch *arch, const char *ins1, const char *ins2)
242 if (!arch || !arch->ins_is_fused)
245 return arch->ins_is_fused(arch, ins1, ins2);
248 static int call__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms)
264 if (arch->objdump.skip_functions_char &&
265 strchr(name, arch->objdump.skip_functions_char))
343 static int jump__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms)
353 ops->raw_comment = strchr(ops->raw, arch->objdump.comment_char);
446 /* mirror arch objdump's space-after-comma style */
493 static int lock__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms)
502 ops->locked.ins.ops = ins__find(arch, ops->locked.ins.name);
508 ops->locked.ins.ops->parse(arch, ops->locked.ops, ms) < 0)
551 static int mov__parse(struct arch *arch, struct ins_operands *ops, struct map_symbol *ms __maybe_unused)
566 comment = strchr(s, arch->objdump.comment_char);
612 static int dec__parse(struct arch *arch __maybe_unused, struct ins_operands *ops, struct map_symbol *ms __maybe_unused)
629 comment = strchr(s, arch->objdump.comment_char);
690 static void ins__sort(struct arch *arch)
692 const int nmemb = arch->nr_instructions;
694 qsort(arch->instructions, nmemb, sizeof(struct ins), ins__cmp);
697 static struct ins_ops *__ins__find(struct arch *arch, const char *name)
700 const int nmemb = arch->nr_instructions;
702 if (!arch->sorted_instructions) {
703 ins__sort(arch);
704 arch->sorted_instructions = true;
707 ins = bsearch(name, arch->instructions, nmemb, sizeof(struct ins), ins__key_cmp);
711 static struct ins_ops *ins__find(struct arch *arch, const char *name)
713 struct ins_ops *ops = __ins__find(arch, name);
715 if (!ops && arch->associate_instruction_ops)
716 ops = arch->associate_instruction_ops(arch, name);
723 const struct arch *arch = archp;
725 return strcmp(name, arch->name);
730 const struct arch *aa = a;
731 const struct arch *ab = b;
740 qsort(architectures, nmemb, sizeof(struct arch), arch__cmp);
743 static struct arch *arch__find(const char *name)
753 return bsearch(name, architectures, nmemb, sizeof(struct arch), arch__key_cmp);
1121 static void disasm_line__init_ins(struct disasm_line *dl, struct arch *arch, struct map_symbol *ms)
1123 dl->ins.ops = ins__find(arch, dl->ins.name);
1128 if (dl->ins.ops->parse && dl->ins.ops->parse(arch, &dl->ops, ms) < 0)
1161 struct arch *arch;
1224 disasm_line__init_ins(dl, args->arch, &args->ms);
1613 scnprintf(buf, buflen, "Problems with arch specific instruction name regular expressions.");
1616 scnprintf(buf, buflen, "Problems while parsing the CPUID in the arch specific initialization.");
1743 info.arch = bfd_get_arch(bfdf);
1774 disassemble = disassembler(info.arch,
2176 struct annotation_options *options, struct arch **parch)
2186 struct arch *arch;
2192 args.arch = arch = arch__find(arch_name);
2193 if (arch == NULL) {
2194 pr_err("%s: unsupported arch %s\n", __func__, arch_name);
2199 *parch = arch;
2201 if (arch->init) {
2202 err = arch->init(arch, env ? env->cpuid : NULL);
2204 pr_err("%s: failed to initialize %s arch priv area\n", __func__, arch->name);
3083 struct annotation_options *options, struct arch **parch)