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