From: Leo Yan Date: Fri, 10 Apr 2026 07:36:59 +0000 (+0100) Subject: perf sort: Sort disabled and full predicated flags X-Git-Url: http://git.ipfire.org/index.cgi?a=commitdiff_plain;h=0f648fc245c316d799f853d7ab97f2bfef68d7dd;p=thirdparty%2Fkernel%2Flinux.git perf sort: Sort disabled and full predicated flags According to the Arm ARM (ARM DDI 0487, L.a), section D18.2.6 "Events packet", apart from the empty predicate and partial predicates, an SVE or SME operation can be predicate-disabled or full predicated. To provide complete results, introduce two predicate types for these cases. Reviewed-by: James Clark Reviewed-by: Ian Rogers Signed-off-by: Leo Yan Signed-off-by: Namhyung Kim --- diff --git a/tools/perf/util/sample.h b/tools/perf/util/sample.h index 0e5ee7e0fb94f..ca0c407c4423a 100644 --- a/tools/perf/util/sample.h +++ b/tools/perf/util/sample.h @@ -72,8 +72,8 @@ struct aux_sample { struct simd_flags { u8 arch: 2, /* architecture (isa) */ - pred: 2, /* predication */ - resv: 4; /* reserved */ + pred: 3, /* predication */ + resv: 3; /* reserved */ }; /* simd architecture flags */ @@ -85,8 +85,13 @@ enum simd_op_flags { }; /* simd predicate flags */ -#define SIMD_OP_FLAGS_PRED_PARTIAL 0x01 /* partial predicate */ -#define SIMD_OP_FLAGS_PRED_EMPTY 0x02 /* empty predicate */ +enum simd_pred_flags { + SIMD_OP_FLAGS_PRED_NONE = 0x0, /* Not available */ + SIMD_OP_FLAGS_PRED_PARTIAL, /* partial predicate */ + SIMD_OP_FLAGS_PRED_EMPTY, /* empty predicate */ + SIMD_OP_FLAGS_PRED_FULL, /* full predicate */ + SIMD_OP_FLAGS_PRED_DISABLED, /* disabled predicate */ +}; /** * struct perf_sample diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c index 7198eb3ae560c..0020089cb13c7 100644 --- a/tools/perf/util/sort.c +++ b/tools/perf/util/sort.c @@ -209,18 +209,23 @@ static int hist_entry__simd_snprintf(struct hist_entry *he, char *bf, size_t size, unsigned int width __maybe_unused) { const char *name; + const char *pred_str = "."; if (!he->simd_flags.arch) return repsep_snprintf(bf, size, ""); name = hist_entry__get_simd_name(&he->simd_flags); - if (he->simd_flags.pred & SIMD_OP_FLAGS_PRED_EMPTY) - return repsep_snprintf(bf, size, "[e] %s", name); - else if (he->simd_flags.pred & SIMD_OP_FLAGS_PRED_PARTIAL) - return repsep_snprintf(bf, size, "[p] %s", name); + if (he->simd_flags.pred == SIMD_OP_FLAGS_PRED_EMPTY) + pred_str = "e"; + else if (he->simd_flags.pred == SIMD_OP_FLAGS_PRED_PARTIAL) + pred_str = "p"; + else if (he->simd_flags.pred == SIMD_OP_FLAGS_PRED_DISABLED) + pred_str = "d"; + else if (he->simd_flags.pred == SIMD_OP_FLAGS_PRED_FULL) + pred_str = "f"; - return repsep_snprintf(bf, size, "[.] %s", name); + return repsep_snprintf(bf, size, "[%s] %s", pred_str, name); } static struct sort_entry sort_simd = {