1*07b972ffSIan Rogers // SPDX-License-Identifier: GPL-2.0 2*07b972ffSIan Rogers // Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd. 3*07b972ffSIan Rogers #include <string.h> 4*07b972ffSIan Rogers #include <linux/compiler.h> 5*07b972ffSIan Rogers #include "../disasm.h" 6*07b972ffSIan Rogers 7*07b972ffSIan Rogers static const struct ins_ops *csky__associate_ins_ops(struct arch *arch, 8*07b972ffSIan Rogers const char *name) 9*07b972ffSIan Rogers { 10*07b972ffSIan Rogers const struct ins_ops *ops = NULL; 11*07b972ffSIan Rogers 12*07b972ffSIan Rogers /* catch all kind of jumps */ 13*07b972ffSIan Rogers if (!strcmp(name, "bt") || 14*07b972ffSIan Rogers !strcmp(name, "bf") || 15*07b972ffSIan Rogers !strcmp(name, "bez") || 16*07b972ffSIan Rogers !strcmp(name, "bnez") || 17*07b972ffSIan Rogers !strcmp(name, "bnezad") || 18*07b972ffSIan Rogers !strcmp(name, "bhsz") || 19*07b972ffSIan Rogers !strcmp(name, "bhz") || 20*07b972ffSIan Rogers !strcmp(name, "blsz") || 21*07b972ffSIan Rogers !strcmp(name, "blz") || 22*07b972ffSIan Rogers !strcmp(name, "br") || 23*07b972ffSIan Rogers !strcmp(name, "jmpi") || 24*07b972ffSIan Rogers !strcmp(name, "jmp")) 25*07b972ffSIan Rogers ops = &jump_ops; 26*07b972ffSIan Rogers 27*07b972ffSIan Rogers /* catch function call */ 28*07b972ffSIan Rogers if (!strcmp(name, "bsr") || 29*07b972ffSIan Rogers !strcmp(name, "jsri") || 30*07b972ffSIan Rogers !strcmp(name, "jsr")) 31*07b972ffSIan Rogers ops = &call_ops; 32*07b972ffSIan Rogers 33*07b972ffSIan Rogers /* catch function return */ 34*07b972ffSIan Rogers if (!strcmp(name, "rts")) 35*07b972ffSIan Rogers ops = &ret_ops; 36*07b972ffSIan Rogers 37*07b972ffSIan Rogers if (ops) 38*07b972ffSIan Rogers arch__associate_ins_ops(arch, name, ops); 39*07b972ffSIan Rogers return ops; 40*07b972ffSIan Rogers } 41*07b972ffSIan Rogers 42*07b972ffSIan Rogers int csky__annotate_init(struct arch *arch, char *cpuid __maybe_unused) 43*07b972ffSIan Rogers { 44*07b972ffSIan Rogers arch->initialized = true; 45*07b972ffSIan Rogers arch->objdump.comment_char = '/'; 46*07b972ffSIan Rogers arch->associate_instruction_ops = csky__associate_ins_ops; 47*07b972ffSIan Rogers return 0; 48*07b972ffSIan Rogers } 49