1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/types.h>
3 #include <linux/string.h>
4 #include <linux/zalloc.h>
5 
6 #include "../../../util/event.h"
7 #include "../../../util/synthetic-events.h"
8 #include "../../../util/machine.h"
9 #include "../../../util/tool.h"
10 #include "../../../util/map.h"
11 #include "../../../util/debug.h"
12 #include "../../../util/sample.h"
13 
arch_perf_parse_sample_weight(struct perf_sample * data,const __u64 * array,u64 type)14 void arch_perf_parse_sample_weight(struct perf_sample *data,
15 				   const __u64 *array, u64 type)
16 {
17 	union perf_sample_weight weight;
18 
19 	weight.full = *array;
20 	if (type & PERF_SAMPLE_WEIGHT)
21 		data->weight = weight.full;
22 	else {
23 		data->weight = weight.var1_dw;
24 		data->ins_lat = weight.var2_w;
25 		data->p_stage_cyc = weight.var3_w;
26 	}
27 }
28 
arch_perf_synthesize_sample_weight(const struct perf_sample * data,__u64 * array,u64 type)29 void arch_perf_synthesize_sample_weight(const struct perf_sample *data,
30 					__u64 *array, u64 type)
31 {
32 	*array = data->weight;
33 
34 	if (type & PERF_SAMPLE_WEIGHT_STRUCT) {
35 		*array &= 0xffffffff;
36 		*array |= ((u64)data->ins_lat << 32);
37 	}
38 }
39 
arch_perf_header_entry(const char * se_header)40 const char *arch_perf_header_entry(const char *se_header)
41 {
42 	if (!strcmp(se_header, "Local INSTR Latency"))
43 		return "Finish Cyc";
44 	else if (!strcmp(se_header, "INSTR Latency"))
45 		return "Global Finish_cyc";
46 	else if (!strcmp(se_header, "Local Pipeline Stage Cycle"))
47 		return "Dispatch Cyc";
48 	else if (!strcmp(se_header, "Pipeline Stage Cycle"))
49 		return "Global Dispatch_cyc";
50 	return se_header;
51 }
52 
arch_support_sort_key(const char * sort_key)53 int arch_support_sort_key(const char *sort_key)
54 {
55 	if (!strcmp(sort_key, "p_stage_cyc"))
56 		return 1;
57 	if (!strcmp(sort_key, "local_p_stage_cyc"))
58 		return 1;
59 	return 0;
60 }
61