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
arch_perf_parse_sample_weight(struct perf_sample * data,const __u64 * array,u64 type)13 void arch_perf_parse_sample_weight(struct perf_sample *data,
14 const __u64 *array, u64 type)
15 {
16 union perf_sample_weight weight;
17
18 weight.full = *array;
19 if (type & PERF_SAMPLE_WEIGHT)
20 data->weight = weight.full;
21 else {
22 data->weight = weight.var1_dw;
23 data->ins_lat = weight.var2_w;
24 data->p_stage_cyc = weight.var3_w;
25 }
26 }
27
arch_perf_synthesize_sample_weight(const struct perf_sample * data,__u64 * array,u64 type)28 void arch_perf_synthesize_sample_weight(const struct perf_sample *data,
29 __u64 *array, u64 type)
30 {
31 *array = data->weight;
32
33 if (type & PERF_SAMPLE_WEIGHT_STRUCT) {
34 *array &= 0xffffffff;
35 *array |= ((u64)data->ins_lat << 32);
36 }
37 }
38
arch_perf_header_entry(const char * se_header)39 const char *arch_perf_header_entry(const char *se_header)
40 {
41 if (!strcmp(se_header, "Local INSTR Latency"))
42 return "Finish Cyc";
43 else if (!strcmp(se_header, "INSTR Latency"))
44 return "Global Finish_cyc";
45 else if (!strcmp(se_header, "Local Pipeline Stage Cycle"))
46 return "Dispatch Cyc";
47 else if (!strcmp(se_header, "Pipeline Stage Cycle"))
48 return "Global Dispatch_cyc";
49 return se_header;
50 }
51
arch_support_sort_key(const char * sort_key)52 int arch_support_sort_key(const char *sort_key)
53 {
54 if (!strcmp(sort_key, "p_stage_cyc"))
55 return 1;
56 if (!strcmp(sort_key, "local_p_stage_cyc"))
57 return 1;
58 return 0;
59 }
60