[PATCH 05/25] perf arm_spe: Decode ASE and FP fields in other operation
James Clark
james.clark at linaro.org
Thu Oct 9 02:04:38 PDT 2025
On 29/09/2025 5:37 pm, Leo Yan wrote:
> Add a check for other operation, which prevents any incorrectly
> classifying. Parse the ASE and FP fields.
>
> After:
>
> . 0000002f: 48 06 OTHER ASE FP INSN-OTHER
> . 00000031: b2 08 80 48 01 08 00 ff ff VA 0xffff000801488008
> . 0000003a: 9a 00 00 LAT 0 XLAT
> . 0000003d: 42 16 EV RETIRED L1D-ACCESS TLB-ACCESS
>
> Signed-off-by: Leo Yan <leo.yan at arm.com>
> ---
> tools/perf/util/arm-spe-decoder/arm-spe-pkt-decoder.c | 6 +++++-
> tools/perf/util/arm-spe-decoder/arm-spe-pkt-decoder.h | 4 ++++
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/arm-spe-decoder/arm-spe-pkt-decoder.c b/tools/perf/util/arm-spe-decoder/arm-spe-pkt-decoder.c
> index 533920b738cbcb39136d1ba3d88e99f9d8009e74..21b65a9b40f481b6cb25aaf01ab627ade046ff72 100644
> --- a/tools/perf/util/arm-spe-decoder/arm-spe-pkt-decoder.c
> +++ b/tools/perf/util/arm-spe-decoder/arm-spe-pkt-decoder.c
> @@ -351,8 +351,12 @@ static int arm_spe_pkt_desc_op_type(const struct arm_spe_pkt *packet,
> arm_spe_pkt_out_string(&err, &buf, &buf_len, " FP");
> if (payload & SPE_OP_PKT_SVE_PRED)
> arm_spe_pkt_out_string(&err, &buf, &buf_len, " PRED");
> - } else {
> + } else if (SPE_OP_PKT_OTHER_SUBCLASS_OTHER(payload)) {
> arm_spe_pkt_out_string(&err, &buf, &buf_len, "OTHER");
> + if (payload & SPE_OP_PKT_OTHER_ASE)
> + arm_spe_pkt_out_string(&err, &buf, &buf_len, " ASE");
> + if (payload & SPE_OP_PKT_OTHER_FP)
> + arm_spe_pkt_out_string(&err, &buf, &buf_len, " FP");
> arm_spe_pkt_out_string(&err, &buf, &buf_len, " %s",
> payload & SPE_OP_PKT_COND ?
> "COND-SELECT" : "INSN-OTHER");
A warning for unknown packet type would be useful here now that there is
no final else catch-all.
> diff --git a/tools/perf/util/arm-spe-decoder/arm-spe-pkt-decoder.h b/tools/perf/util/arm-spe-decoder/arm-spe-pkt-decoder.h
> index 48bd9e9ef132b11b79ffe2e2fbc7cfe4c340ff92..704601c6dbe30e93f83a82670d0d60344a22222a 100644
> --- a/tools/perf/util/arm-spe-decoder/arm-spe-pkt-decoder.h
> +++ b/tools/perf/util/arm-spe-decoder/arm-spe-pkt-decoder.h
> @@ -123,8 +123,12 @@ enum arm_spe_events {
> #define SPE_OP_PKT_HDR_CLASS_LD_ST_ATOMIC 0x1
> #define SPE_OP_PKT_HDR_CLASS_BR_ERET 0x2
>
> +#define SPE_OP_PKT_OTHER_SUBCLASS_OTHER(v) (((v) & GENMASK_ULL(7, 3)) == 0x0)
> #define SPE_OP_PKT_OTHER_SUBCLASS_SVE(v) (((v) & (BIT(7) | BIT(3) | BIT(0))) == 0x8)
>
> +#define SPE_OP_PKT_OTHER_ASE BIT(2)
> +#define SPE_OP_PKT_OTHER_FP BIT(1)
> +
> #define SPE_OP_PKT_LDST_SUBCLASS_GP_REG(v) (((v) & GENMASK_ULL(7, 1)) == 0x0)
> #define SPE_OP_PKT_LDST_SUBCLASS_SIMD_FP(v) (((v) & GENMASK_ULL(7, 1)) == 0x4)
> #define SPE_OP_PKT_LDST_SUBCLASS_UNSPEC_REG(v) (((v) & GENMASK_ULL(7, 1)) == 0x10)
>
More information about the linux-arm-kernel
mailing list