1*07b972ffSIan Rogers // SPDX-License-Identifier: GPL-2.0 2*07b972ffSIan Rogers #include <string.h> 3*07b972ffSIan Rogers #include <linux/compiler.h> 4*07b972ffSIan Rogers #include "../disasm.h" 5*07b972ffSIan Rogers 6*07b972ffSIan Rogers static 7*07b972ffSIan Rogers const struct ins_ops *mips__associate_ins_ops(struct arch *arch, const char *name) 8*07b972ffSIan Rogers { 9*07b972ffSIan Rogers const struct ins_ops *ops = NULL; 10*07b972ffSIan Rogers 11*07b972ffSIan Rogers if (!strncmp(name, "bal", 3) || 12*07b972ffSIan Rogers !strncmp(name, "bgezal", 6) || 13*07b972ffSIan Rogers !strncmp(name, "bltzal", 6) || 14*07b972ffSIan Rogers !strncmp(name, "bgtzal", 6) || 15*07b972ffSIan Rogers !strncmp(name, "blezal", 6) || 16*07b972ffSIan Rogers !strncmp(name, "beqzal", 6) || 17*07b972ffSIan Rogers !strncmp(name, "bnezal", 6) || 18*07b972ffSIan Rogers !strncmp(name, "bgtzl", 5) || 19*07b972ffSIan Rogers !strncmp(name, "bltzl", 5) || 20*07b972ffSIan Rogers !strncmp(name, "bgezl", 5) || 21*07b972ffSIan Rogers !strncmp(name, "blezl", 5) || 22*07b972ffSIan Rogers !strncmp(name, "jialc", 5) || 23*07b972ffSIan Rogers !strncmp(name, "beql", 4) || 24*07b972ffSIan Rogers !strncmp(name, "bnel", 4) || 25*07b972ffSIan Rogers !strncmp(name, "jal", 3)) 26*07b972ffSIan Rogers ops = &call_ops; 27*07b972ffSIan Rogers else if (!strncmp(name, "jr", 2)) 28*07b972ffSIan Rogers ops = &ret_ops; 29*07b972ffSIan Rogers else if (name[0] == 'j' || name[0] == 'b') 30*07b972ffSIan Rogers ops = &jump_ops; 31*07b972ffSIan Rogers else 32*07b972ffSIan Rogers return NULL; 33*07b972ffSIan Rogers 34*07b972ffSIan Rogers arch__associate_ins_ops(arch, name, ops); 35*07b972ffSIan Rogers 36*07b972ffSIan Rogers return ops; 37*07b972ffSIan Rogers } 38*07b972ffSIan Rogers 39*07b972ffSIan Rogers int mips__annotate_init(struct arch *arch, char *cpuid __maybe_unused) 40*07b972ffSIan Rogers { 41*07b972ffSIan Rogers if (!arch->initialized) { 42*07b972ffSIan Rogers arch->associate_instruction_ops = mips__associate_ins_ops; 43*07b972ffSIan Rogers arch->initialized = true; 44*07b972ffSIan Rogers arch->objdump.comment_char = '#'; 45*07b972ffSIan Rogers } 46*07b972ffSIan Rogers 47*07b972ffSIan Rogers return 0; 48*07b972ffSIan Rogers } 49