xref: /openbmc/linux/tools/perf/util/branch.h (revision f1a397f33743bbb7346cb01e41cc70ca318426e8)
1992c7e92SJin Yao #ifndef _PERF_BRANCH_H
2992c7e92SJin Yao #define _PERF_BRANCH_H 1
3992c7e92SJin Yao 
4*f1a397f3SArnaldo Carvalho de Melo #include <stdio.h>
5992c7e92SJin Yao #include <stdint.h>
6*f1a397f3SArnaldo Carvalho de Melo #include <linux/perf_event.h>
7*f1a397f3SArnaldo Carvalho de Melo #include <linux/types.h>
8*f1a397f3SArnaldo Carvalho de Melo 
9*f1a397f3SArnaldo Carvalho de Melo struct branch_flags {
10*f1a397f3SArnaldo Carvalho de Melo 	u64 mispred:1;
11*f1a397f3SArnaldo Carvalho de Melo 	u64 predicted:1;
12*f1a397f3SArnaldo Carvalho de Melo 	u64 in_tx:1;
13*f1a397f3SArnaldo Carvalho de Melo 	u64 abort:1;
14*f1a397f3SArnaldo Carvalho de Melo 	u64 cycles:16;
15*f1a397f3SArnaldo Carvalho de Melo 	u64 type:4;
16*f1a397f3SArnaldo Carvalho de Melo 	u64 reserved:40;
17*f1a397f3SArnaldo Carvalho de Melo };
18*f1a397f3SArnaldo Carvalho de Melo 
19*f1a397f3SArnaldo Carvalho de Melo struct branch_entry {
20*f1a397f3SArnaldo Carvalho de Melo 	u64			from;
21*f1a397f3SArnaldo Carvalho de Melo 	u64			to;
22*f1a397f3SArnaldo Carvalho de Melo 	struct branch_flags	flags;
23*f1a397f3SArnaldo Carvalho de Melo };
24*f1a397f3SArnaldo Carvalho de Melo 
25*f1a397f3SArnaldo Carvalho de Melo struct branch_stack {
26*f1a397f3SArnaldo Carvalho de Melo 	u64			nr;
27*f1a397f3SArnaldo Carvalho de Melo 	struct branch_entry	entries[0];
28*f1a397f3SArnaldo Carvalho de Melo };
29992c7e92SJin Yao 
30992c7e92SJin Yao struct branch_type_stat {
31a1a8bed3SJin Yao 	bool	branch_to;
32992c7e92SJin Yao 	u64	counts[PERF_BR_MAX];
33992c7e92SJin Yao 	u64	cond_fwd;
34992c7e92SJin Yao 	u64	cond_bwd;
35992c7e92SJin Yao 	u64	cross_4k;
36992c7e92SJin Yao 	u64	cross_2m;
37992c7e92SJin Yao };
38992c7e92SJin Yao 
39992c7e92SJin Yao void branch_type_count(struct branch_type_stat *st, struct branch_flags *flags,
40992c7e92SJin Yao 		       u64 from, u64 to);
41992c7e92SJin Yao 
42992c7e92SJin Yao const char *branch_type_name(int type);
43992c7e92SJin Yao void branch_type_stat_display(FILE *fp, struct branch_type_stat *st);
44992c7e92SJin Yao int branch_type_str(struct branch_type_stat *st, char *bf, int bfsize);
45992c7e92SJin Yao 
46992c7e92SJin Yao #endif /* _PERF_BRANCH_H */
47