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