PR #24814 opened by Zhao Zhili (quink) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24814 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24814.patch
# Summary of changes Briefly describe what this PR does and why. <!-- If this PR requires new FATE test samples, attach them to the PR and list their target paths below (relative to the fate-suite root). Attached filenames must match the sample's filename: ```fate-samples # e.g. vorbis/new-sample.ogg ``` --> >From 1307249f615731e660eba0397dfff6c1a4e83914 Mon Sep 17 00:00:00 2001 From: Zhao Zhili <[email protected]> Date: Wed, 30 Sep 2026 19:23:36 +0800 Subject: [PATCH 1/4] aarch64/h26x: factor the weighted qpel hv vertical row step into macros No functional changes. --- libavcodec/aarch64/h26x/qpel_neon.S | 353 +++++++--------------------- 1 file changed, 89 insertions(+), 264 deletions(-) diff --git a/libavcodec/aarch64/h26x/qpel_neon.S b/libavcodec/aarch64/h26x/qpel_neon.S index 25925665dc..e06e7f4356 100644 --- a/libavcodec/aarch64/h26x/qpel_neon.S +++ b/libavcodec/aarch64/h26x/qpel_neon.S @@ -5491,6 +5491,14 @@ DISABLE_I8MM smlal2 \dst\().4s, \src7\().8h, v0.h[7] .endm +.macro qpel_uni_w_hv4_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7 + ldr \tmp, [sp] + add sp, sp, x10 + QPEL_FILTER_H v26, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 + subs w22, w22, #1 + QPEL_UNI_W_HV_4 +.endm + function hevc_put_hevc_qpel_uni_w_hv4_8_end_neon ldr d16, [sp] ldr d17, [sp, x10] @@ -5504,60 +5512,28 @@ function hevc_put_hevc_qpel_uni_w_hv4_8_end_neon ldr d22, [sp] add sp, sp, x10 1: - ldr d23, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v16, v17, v18, v19, v20, v21, v22, v23 - subs w22, w22, #1 - QPEL_UNI_W_HV_4 + qpel_uni_w_hv4_end_step d23, v16, v17, v18, v19, v20, v21, v22, v23 b.eq 2f - ldr d16, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v17, v18, v19, v20, v21, v22, v23, v16 - subs w22, w22, #1 - QPEL_UNI_W_HV_4 + qpel_uni_w_hv4_end_step d16, v17, v18, v19, v20, v21, v22, v23, v16 b.eq 2f - ldr d17, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v18, v19, v20, v21, v22, v23, v16, v17 - subs w22, w22, #1 - QPEL_UNI_W_HV_4 + qpel_uni_w_hv4_end_step d17, v18, v19, v20, v21, v22, v23, v16, v17 b.eq 2f - ldr d18, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v19, v20, v21, v22, v23, v16, v17, v18 - subs w22, w22, #1 - QPEL_UNI_W_HV_4 + qpel_uni_w_hv4_end_step d18, v19, v20, v21, v22, v23, v16, v17, v18 b.eq 2f - ldr d19, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v20, v21, v22, v23, v16, v17, v18, v19 - subs w22, w22, #1 - QPEL_UNI_W_HV_4 + qpel_uni_w_hv4_end_step d19, v20, v21, v22, v23, v16, v17, v18, v19 b.eq 2f - ldr d20, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v21, v22, v23, v16, v17, v18, v19, v20 - subs w22, w22, #1 - QPEL_UNI_W_HV_4 + qpel_uni_w_hv4_end_step d20, v21, v22, v23, v16, v17, v18, v19, v20 b.eq 2f - ldr d21, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v22, v23, v16, v17, v18, v19, v20, v21 - subs w22, w22, #1 - QPEL_UNI_W_HV_4 + qpel_uni_w_hv4_end_step d21, v22, v23, v16, v17, v18, v19, v20, v21 b.eq 2f - ldr d22, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v23, v16, v17, v18, v19, v20, v21, v22 - subs w22, w22, #1 - QPEL_UNI_W_HV_4 + qpel_uni_w_hv4_end_step d22, v23, v16, v17, v18, v19, v20, v21, v22 b.hi 1b 2: @@ -5583,6 +5559,15 @@ endfunc st1 {v24.h}[2], [x15] .endm +.macro qpel_uni_w_hv6_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7 + ldr \tmp, [sp] + add sp, sp, x10 + QPEL_FILTER_H v26, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 + QPEL_FILTER_H2 v27, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 + subs w22, w22, #1 + QPEL_UNI_W_HV_6 +.endm + function hevc_put_hevc_qpel_uni_w_hv6_8_end_neon ldr q16, [sp] ldr q17, [sp, x10] @@ -5596,68 +5581,28 @@ function hevc_put_hevc_qpel_uni_w_hv6_8_end_neon ldr q22, [sp] add sp, sp, x10 1: - ldr q23, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v16, v17, v18, v19, v20, v21, v22, v23 - QPEL_FILTER_H2 v27, v16, v17, v18, v19, v20, v21, v22, v23 - subs w22, w22, #1 - QPEL_UNI_W_HV_6 + qpel_uni_w_hv6_end_step q23, v16, v17, v18, v19, v20, v21, v22, v23 b.eq 2f - ldr q16, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v17, v18, v19, v20, v21, v22, v23, v16 - QPEL_FILTER_H2 v27, v17, v18, v19, v20, v21, v22, v23, v16 - subs w22, w22, #1 - QPEL_UNI_W_HV_6 + qpel_uni_w_hv6_end_step q16, v17, v18, v19, v20, v21, v22, v23, v16 b.eq 2f - ldr q17, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v18, v19, v20, v21, v22, v23, v16, v17 - QPEL_FILTER_H2 v27, v18, v19, v20, v21, v22, v23, v16, v17 - subs w22, w22, #1 - QPEL_UNI_W_HV_6 + qpel_uni_w_hv6_end_step q17, v18, v19, v20, v21, v22, v23, v16, v17 b.eq 2f - ldr q18, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v19, v20, v21, v22, v23, v16, v17, v18 - QPEL_FILTER_H2 v27, v19, v20, v21, v22, v23, v16, v17, v18 - subs w22, w22, #1 - QPEL_UNI_W_HV_6 + qpel_uni_w_hv6_end_step q18, v19, v20, v21, v22, v23, v16, v17, v18 b.eq 2f - ldr q19, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v20, v21, v22, v23, v16, v17, v18, v19 - QPEL_FILTER_H2 v27, v20, v21, v22, v23, v16, v17, v18, v19 - subs w22, w22, #1 - QPEL_UNI_W_HV_6 + qpel_uni_w_hv6_end_step q19, v20, v21, v22, v23, v16, v17, v18, v19 b.eq 2f - ldr q20, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v21, v22, v23, v16, v17, v18, v19, v20 - QPEL_FILTER_H2 v27, v21, v22, v23, v16, v17, v18, v19, v20 - subs w22, w22, #1 - QPEL_UNI_W_HV_6 + qpel_uni_w_hv6_end_step q20, v21, v22, v23, v16, v17, v18, v19, v20 b.eq 2f - ldr q21, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v22, v23, v16, v17, v18, v19, v20, v21 - QPEL_FILTER_H2 v27, v22, v23, v16, v17, v18, v19, v20, v21 - subs w22, w22, #1 - QPEL_UNI_W_HV_6 + qpel_uni_w_hv6_end_step q21, v22, v23, v16, v17, v18, v19, v20, v21 b.eq 2f - ldr q22, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v23, v16, v17, v18, v19, v20, v21, v22 - QPEL_FILTER_H2 v27, v23, v16, v17, v18, v19, v20, v21, v22 - subs w22, w22, #1 - QPEL_UNI_W_HV_6 + qpel_uni_w_hv6_end_step q22, v23, v16, v17, v18, v19, v20, v21, v22 b.hi 1b 2: @@ -5680,6 +5625,15 @@ endfunc st1 {v24.d}[0], [x20], x21 .endm +.macro qpel_uni_w_hv8_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7 + ldr \tmp, [sp] + add sp, sp, x10 + QPEL_FILTER_H v26, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 + QPEL_FILTER_H2 v27, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 + subs w22, w22, #1 + QPEL_UNI_W_HV_8 +.endm + function hevc_put_hevc_qpel_uni_w_hv8_8_end_neon ldr q16, [sp] ldr q17, [sp, x10] @@ -5693,68 +5647,28 @@ function hevc_put_hevc_qpel_uni_w_hv8_8_end_neon ldr q22, [sp] add sp, sp, x10 1: - ldr q23, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v16, v17, v18, v19, v20, v21, v22, v23 - QPEL_FILTER_H2 v27, v16, v17, v18, v19, v20, v21, v22, v23 - subs w22, w22, #1 - QPEL_UNI_W_HV_8 + qpel_uni_w_hv8_end_step q23, v16, v17, v18, v19, v20, v21, v22, v23 b.eq 2f - ldr q16, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v17, v18, v19, v20, v21, v22, v23, v16 - QPEL_FILTER_H2 v27, v17, v18, v19, v20, v21, v22, v23, v16 - subs w22, w22, #1 - QPEL_UNI_W_HV_8 + qpel_uni_w_hv8_end_step q16, v17, v18, v19, v20, v21, v22, v23, v16 b.eq 2f - ldr q17, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v18, v19, v20, v21, v22, v23, v16, v17 - QPEL_FILTER_H2 v27, v18, v19, v20, v21, v22, v23, v16, v17 - subs w22, w22, #1 - QPEL_UNI_W_HV_8 + qpel_uni_w_hv8_end_step q17, v18, v19, v20, v21, v22, v23, v16, v17 b.eq 2f - ldr q18, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v19, v20, v21, v22, v23, v16, v17, v18 - QPEL_FILTER_H2 v27, v19, v20, v21, v22, v23, v16, v17, v18 - subs w22, w22, #1 - QPEL_UNI_W_HV_8 + qpel_uni_w_hv8_end_step q18, v19, v20, v21, v22, v23, v16, v17, v18 b.eq 2f - ldr q19, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v20, v21, v22, v23, v16, v17, v18, v19 - QPEL_FILTER_H2 v27, v20, v21, v22, v23, v16, v17, v18, v19 - subs w22, w22, #1 - QPEL_UNI_W_HV_8 + qpel_uni_w_hv8_end_step q19, v20, v21, v22, v23, v16, v17, v18, v19 b.eq 2f - ldr q20, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v21, v22, v23, v16, v17, v18, v19, v20 - QPEL_FILTER_H2 v27, v21, v22, v23, v16, v17, v18, v19, v20 - subs w22, w22, #1 - QPEL_UNI_W_HV_8 + qpel_uni_w_hv8_end_step q20, v21, v22, v23, v16, v17, v18, v19, v20 b.eq 2f - ldr q21, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v22, v23, v16, v17, v18, v19, v20, v21 - QPEL_FILTER_H2 v27, v22, v23, v16, v17, v18, v19, v20, v21 - subs w22, w22, #1 - QPEL_UNI_W_HV_8 + qpel_uni_w_hv8_end_step q21, v22, v23, v16, v17, v18, v19, v20, v21 b.eq 2f - ldr q22, [sp] - add sp, sp, x10 - QPEL_FILTER_H v26, v23, v16, v17, v18, v19, v20, v21, v22 - QPEL_FILTER_H2 v27, v23, v16, v17, v18, v19, v20, v21, v22 - subs w22, w22, #1 - QPEL_UNI_W_HV_8 + qpel_uni_w_hv8_end_step q22, v23, v16, v17, v18, v19, v20, v21, v22 b.hi 1b 2: @@ -5789,6 +5703,17 @@ endfunc st1 {v26.s}[0], [x15] .endm +.macro qpel_uni_w_hv12_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15 + ldr \tmp0, [sp] + ldr \tmp1, [sp, #16] + add sp, sp, x10 + QPEL_FILTER_H v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 + QPEL_FILTER_H2 v25, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 + QPEL_FILTER_H v26, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15 + subs w22, w22, #1 + QPEL_UNI_W_HV_12 +.endm + function hevc_put_hevc_qpel_uni_w_hv12_8_end_neon // Load first 7 rows of 12 elements each // Each row: q16-q22 (first 8 elements) + d1-d7 (elements 8-11) @@ -5814,84 +5739,28 @@ function hevc_put_hevc_qpel_uni_w_hv12_8_end_neon ldr d7, [sp, #16] add sp, sp, x10 1: - ldr q23, [sp] - ldr d31, [sp, #16] - add sp, sp, x10 - QPEL_FILTER_H v24, v16, v17, v18, v19, v20, v21, v22, v23 - QPEL_FILTER_H2 v25, v16, v17, v18, v19, v20, v21, v22, v23 - QPEL_FILTER_H v26, v1, v2, v3, v4, v5, v6, v7, v31 - subs w22, w22, #1 - QPEL_UNI_W_HV_12 + qpel_uni_w_hv12_end_step q23, d31, v16, v17, v18, v19, v20, v21, v22, v23, v1, v2, v3, v4, v5, v6, v7, v31 b.eq 2f - ldr q16, [sp] - ldr d1, [sp, #16] - add sp, sp, x10 - QPEL_FILTER_H v24, v17, v18, v19, v20, v21, v22, v23, v16 - QPEL_FILTER_H2 v25, v17, v18, v19, v20, v21, v22, v23, v16 - QPEL_FILTER_H v26, v2, v3, v4, v5, v6, v7, v31, v1 - subs w22, w22, #1 - QPEL_UNI_W_HV_12 + qpel_uni_w_hv12_end_step q16, d1, v17, v18, v19, v20, v21, v22, v23, v16, v2, v3, v4, v5, v6, v7, v31, v1 b.eq 2f - ldr q17, [sp] - ldr d2, [sp, #16] - add sp, sp, x10 - QPEL_FILTER_H v24, v18, v19, v20, v21, v22, v23, v16, v17 - QPEL_FILTER_H2 v25, v18, v19, v20, v21, v22, v23, v16, v17 - QPEL_FILTER_H v26, v3, v4, v5, v6, v7, v31, v1, v2 - subs w22, w22, #1 - QPEL_UNI_W_HV_12 + qpel_uni_w_hv12_end_step q17, d2, v18, v19, v20, v21, v22, v23, v16, v17, v3, v4, v5, v6, v7, v31, v1, v2 b.eq 2f - ldr q18, [sp] - ldr d3, [sp, #16] - add sp, sp, x10 - QPEL_FILTER_H v24, v19, v20, v21, v22, v23, v16, v17, v18 - QPEL_FILTER_H2 v25, v19, v20, v21, v22, v23, v16, v17, v18 - QPEL_FILTER_H v26, v4, v5, v6, v7, v31, v1, v2, v3 - subs w22, w22, #1 - QPEL_UNI_W_HV_12 + qpel_uni_w_hv12_end_step q18, d3, v19, v20, v21, v22, v23, v16, v17, v18, v4, v5, v6, v7, v31, v1, v2, v3 b.eq 2f - ldr q19, [sp] - ldr d4, [sp, #16] - add sp, sp, x10 - QPEL_FILTER_H v24, v20, v21, v22, v23, v16, v17, v18, v19 - QPEL_FILTER_H2 v25, v20, v21, v22, v23, v16, v17, v18, v19 - QPEL_FILTER_H v26, v5, v6, v7, v31, v1, v2, v3, v4 - subs w22, w22, #1 - QPEL_UNI_W_HV_12 + qpel_uni_w_hv12_end_step q19, d4, v20, v21, v22, v23, v16, v17, v18, v19, v5, v6, v7, v31, v1, v2, v3, v4 b.eq 2f - ldr q20, [sp] - ldr d5, [sp, #16] - add sp, sp, x10 - QPEL_FILTER_H v24, v21, v22, v23, v16, v17, v18, v19, v20 - QPEL_FILTER_H2 v25, v21, v22, v23, v16, v17, v18, v19, v20 - QPEL_FILTER_H v26, v6, v7, v31, v1, v2, v3, v4, v5 - subs w22, w22, #1 - QPEL_UNI_W_HV_12 + qpel_uni_w_hv12_end_step q20, d5, v21, v22, v23, v16, v17, v18, v19, v20, v6, v7, v31, v1, v2, v3, v4, v5 b.eq 2f - ldr q21, [sp] - ldr d6, [sp, #16] - add sp, sp, x10 - QPEL_FILTER_H v24, v22, v23, v16, v17, v18, v19, v20, v21 - QPEL_FILTER_H2 v25, v22, v23, v16, v17, v18, v19, v20, v21 - QPEL_FILTER_H v26, v7, v31, v1, v2, v3, v4, v5, v6 - subs w22, w22, #1 - QPEL_UNI_W_HV_12 + qpel_uni_w_hv12_end_step q21, d6, v22, v23, v16, v17, v18, v19, v20, v21, v7, v31, v1, v2, v3, v4, v5, v6 b.eq 2f - ldr q22, [sp] - ldr d7, [sp, #16] - add sp, sp, x10 - QPEL_FILTER_H v24, v23, v16, v17, v18, v19, v20, v21, v22 - QPEL_FILTER_H2 v25, v23, v16, v17, v18, v19, v20, v21, v22 - QPEL_FILTER_H v26, v31, v1, v2, v3, v4, v5, v6, v7 - subs w22, w22, #1 - QPEL_UNI_W_HV_12 + qpel_uni_w_hv12_end_step q22, d7, v23, v16, v17, v18, v19, v20, v21, v22, v31, v1, v2, v3, v4, v5, v6, v7 b.hi 1b 2: @@ -5926,6 +5795,17 @@ endfunc st1 {v24.16b}, [x20], x21 .endm +.macro qpel_uni_w_hv16_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15 + ldp \tmp0, \tmp1, [x11] + add x11, x11, x10 + QPEL_FILTER_H v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 + QPEL_FILTER_H2 v25, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 + QPEL_FILTER_H v26, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15 + QPEL_FILTER_H2 v27, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15 + subs w22, w22, #1 + QPEL_UNI_W_HV_16 +.endm + function hevc_put_hevc_qpel_uni_w_hv16_8_end_neon mov x11, sp mov w12, w22 @@ -5947,85 +5827,30 @@ function hevc_put_hevc_qpel_uni_w_hv16_8_end_neon ldp q22, q7, [x11] add x11, x11, x10 1: - ldp q23, q31, [x11] - add x11, x11, x10 - QPEL_FILTER_H v24, v16, v17, v18, v19, v20, v21, v22, v23 - QPEL_FILTER_H2 v25, v16, v17, v18, v19, v20, v21, v22, v23 - QPEL_FILTER_H v26, v1, v2, v3, v4, v5, v6, v7, v31 - QPEL_FILTER_H2 v27, v1, v2, v3, v4, v5, v6, v7, v31 - subs w22, w22, #1 - QPEL_UNI_W_HV_16 + qpel_uni_w_hv16_end_step q23, q31, v16, v17, v18, v19, v20, v21, v22, v23, v1, v2, v3, v4, v5, v6, v7, v31 b.eq 2f - ldp q16, q1, [x11] - add x11, x11, x10 - QPEL_FILTER_H v24, v17, v18, v19, v20, v21, v22, v23, v16 - QPEL_FILTER_H2 v25, v17, v18, v19, v20, v21, v22, v23, v16 - QPEL_FILTER_H v26, v2, v3, v4, v5, v6, v7, v31, v1 - QPEL_FILTER_H2 v27, v2, v3, v4, v5, v6, v7, v31, v1 - subs w22, w22, #1 - QPEL_UNI_W_HV_16 + qpel_uni_w_hv16_end_step q16, q1, v17, v18, v19, v20, v21, v22, v23, v16, v2, v3, v4, v5, v6, v7, v31, v1 b.eq 2f - ldp q17, q2, [x11] - add x11, x11, x10 - QPEL_FILTER_H v24, v18, v19, v20, v21, v22, v23, v16, v17 - QPEL_FILTER_H2 v25, v18, v19, v20, v21, v22, v23, v16, v17 - QPEL_FILTER_H v26, v3, v4, v5, v6, v7, v31, v1, v2 - QPEL_FILTER_H2 v27, v3, v4, v5, v6, v7, v31, v1, v2 - subs w22, w22, #1 - QPEL_UNI_W_HV_16 + qpel_uni_w_hv16_end_step q17, q2, v18, v19, v20, v21, v22, v23, v16, v17, v3, v4, v5, v6, v7, v31, v1, v2 b.eq 2f - ldp q18, q3, [x11] - add x11, x11, x10 - QPEL_FILTER_H v24, v19, v20, v21, v22, v23, v16, v17, v18 - QPEL_FILTER_H2 v25, v19, v20, v21, v22, v23, v16, v17, v18 - QPEL_FILTER_H v26, v4, v5, v6, v7, v31, v1, v2, v3 - QPEL_FILTER_H2 v27, v4, v5, v6, v7, v31, v1, v2, v3 - subs w22, w22, #1 - QPEL_UNI_W_HV_16 + qpel_uni_w_hv16_end_step q18, q3, v19, v20, v21, v22, v23, v16, v17, v18, v4, v5, v6, v7, v31, v1, v2, v3 b.eq 2f - ldp q19, q4, [x11] - add x11, x11, x10 - QPEL_FILTER_H v24, v20, v21, v22, v23, v16, v17, v18, v19 - QPEL_FILTER_H2 v25, v20, v21, v22, v23, v16, v17, v18, v19 - QPEL_FILTER_H v26, v5, v6, v7, v31, v1, v2, v3, v4 - QPEL_FILTER_H2 v27, v5, v6, v7, v31, v1, v2, v3, v4 - subs w22, w22, #1 - QPEL_UNI_W_HV_16 + qpel_uni_w_hv16_end_step q19, q4, v20, v21, v22, v23, v16, v17, v18, v19, v5, v6, v7, v31, v1, v2, v3, v4 b.eq 2f - ldp q20, q5, [x11] - add x11, x11, x10 - QPEL_FILTER_H v24, v21, v22, v23, v16, v17, v18, v19, v20 - QPEL_FILTER_H2 v25, v21, v22, v23, v16, v17, v18, v19, v20 - QPEL_FILTER_H v26, v6, v7, v31, v1, v2, v3, v4, v5 - QPEL_FILTER_H2 v27, v6, v7, v31, v1, v2, v3, v4, v5 - subs w22, w22, #1 - QPEL_UNI_W_HV_16 + qpel_uni_w_hv16_end_step q20, q5, v21, v22, v23, v16, v17, v18, v19, v20, v6, v7, v31, v1, v2, v3, v4, v5 b.eq 2f - ldp q21, q6, [x11] - add x11, x11, x10 - QPEL_FILTER_H v24, v22, v23, v16, v17, v18, v19, v20, v21 - QPEL_FILTER_H2 v25, v22, v23, v16, v17, v18, v19, v20, v21 - QPEL_FILTER_H v26, v7, v31, v1, v2, v3, v4, v5, v6 - QPEL_FILTER_H2 v27, v7, v31, v1, v2, v3, v4, v5, v6 - subs w22, w22, #1 - QPEL_UNI_W_HV_16 + qpel_uni_w_hv16_end_step q21, q6, v22, v23, v16, v17, v18, v19, v20, v21, v7, v31, v1, v2, v3, v4, v5, v6 b.eq 2f - ldp q22, q7, [x11] - add x11, x11, x10 - QPEL_FILTER_H v24, v23, v16, v17, v18, v19, v20, v21, v22 - QPEL_FILTER_H2 v25, v23, v16, v17, v18, v19, v20, v21, v22 - QPEL_FILTER_H v26, v31, v1, v2, v3, v4, v5, v6, v7 - QPEL_FILTER_H2 v27, v31, v1, v2, v3, v4, v5, v6, v7 - subs w22, w22, #1 - QPEL_UNI_W_HV_16 + qpel_uni_w_hv16_end_step q22, q7, v23, v16, v17, v18, v19, v20, v21, v22, v31, v1, v2, v3, v4, v5, v6, v7 b.hi 1b + 2: subs w27, w27, #16 add x11, x14, #32 -- 2.52.0 >From 1d56e153dbd90dd4070dc535cdea6806753a6815 Mon Sep 17 00:00:00 2001 From: Zhao Zhili <[email protected]> Date: Wed, 30 Sep 2026 19:23:54 +0800 Subject: [PATCH 2/4] aarch64/h26x: share the weighted qpel hv vertical tail up to 8 wide No functional changes. --- libavcodec/aarch64/h26x/qpel_neon.S | 125 +++++----------------------- 1 file changed, 22 insertions(+), 103 deletions(-) diff --git a/libavcodec/aarch64/h26x/qpel_neon.S b/libavcodec/aarch64/h26x/qpel_neon.S index e06e7f4356..51eac7469c 100644 --- a/libavcodec/aarch64/h26x/qpel_neon.S +++ b/libavcodec/aarch64/h26x/qpel_neon.S @@ -5499,46 +5499,41 @@ DISABLE_I8MM QPEL_UNI_W_HV_4 .endm -function hevc_put_hevc_qpel_uni_w_hv4_8_end_neon - ldr d16, [sp] - ldr d17, [sp, x10] +.macro qpel_uni_w_hv_tail reg, step + ldr \reg\()16, [sp] + ldr \reg\()17, [sp, x10] add sp, sp, x10, lsl #1 - ldr d18, [sp] - ldr d19, [sp, x10] + ldr \reg\()18, [sp] + ldr \reg\()19, [sp, x10] add sp, sp, x10, lsl #1 - ldr d20, [sp] - ldr d21, [sp, x10] + ldr \reg\()20, [sp] + ldr \reg\()21, [sp, x10] add sp, sp, x10, lsl #1 - ldr d22, [sp] + ldr \reg\()22, [sp] add sp, sp, x10 -1: - qpel_uni_w_hv4_end_step d23, v16, v17, v18, v19, v20, v21, v22, v23 +1: \step \reg\()23, v16, v17, v18, v19, v20, v21, v22, v23 b.eq 2f - - qpel_uni_w_hv4_end_step d16, v17, v18, v19, v20, v21, v22, v23, v16 + \step \reg\()16, v17, v18, v19, v20, v21, v22, v23, v16 b.eq 2f - - qpel_uni_w_hv4_end_step d17, v18, v19, v20, v21, v22, v23, v16, v17 + \step \reg\()17, v18, v19, v20, v21, v22, v23, v16, v17 b.eq 2f - - qpel_uni_w_hv4_end_step d18, v19, v20, v21, v22, v23, v16, v17, v18 + \step \reg\()18, v19, v20, v21, v22, v23, v16, v17, v18 b.eq 2f - - qpel_uni_w_hv4_end_step d19, v20, v21, v22, v23, v16, v17, v18, v19 + \step \reg\()19, v20, v21, v22, v23, v16, v17, v18, v19 b.eq 2f - - qpel_uni_w_hv4_end_step d20, v21, v22, v23, v16, v17, v18, v19, v20 + \step \reg\()20, v21, v22, v23, v16, v17, v18, v19, v20 b.eq 2f - - qpel_uni_w_hv4_end_step d21, v22, v23, v16, v17, v18, v19, v20, v21 + \step \reg\()21, v22, v23, v16, v17, v18, v19, v20, v21 b.eq 2f - - qpel_uni_w_hv4_end_step d22, v23, v16, v17, v18, v19, v20, v21, v22 + \step \reg\()22, v23, v16, v17, v18, v19, v20, v21, v22 b.hi 1b - 2: QPEL_UNI_W_HV_END ret +.endm + +function hevc_put_hevc_qpel_uni_w_hv4_8_end_neon + qpel_uni_w_hv_tail d, qpel_uni_w_hv4_end_step endfunc // hv6: process 6 pixels (4 + 2), use 8-element loads/stores @@ -5569,45 +5564,7 @@ endfunc .endm function hevc_put_hevc_qpel_uni_w_hv6_8_end_neon - ldr q16, [sp] - ldr q17, [sp, x10] - add sp, sp, x10, lsl #1 - ldr q18, [sp] - ldr q19, [sp, x10] - add sp, sp, x10, lsl #1 - ldr q20, [sp] - ldr q21, [sp, x10] - add sp, sp, x10, lsl #1 - ldr q22, [sp] - add sp, sp, x10 -1: - qpel_uni_w_hv6_end_step q23, v16, v17, v18, v19, v20, v21, v22, v23 - b.eq 2f - - qpel_uni_w_hv6_end_step q16, v17, v18, v19, v20, v21, v22, v23, v16 - b.eq 2f - - qpel_uni_w_hv6_end_step q17, v18, v19, v20, v21, v22, v23, v16, v17 - b.eq 2f - - qpel_uni_w_hv6_end_step q18, v19, v20, v21, v22, v23, v16, v17, v18 - b.eq 2f - - qpel_uni_w_hv6_end_step q19, v20, v21, v22, v23, v16, v17, v18, v19 - b.eq 2f - - qpel_uni_w_hv6_end_step q20, v21, v22, v23, v16, v17, v18, v19, v20 - b.eq 2f - - qpel_uni_w_hv6_end_step q21, v22, v23, v16, v17, v18, v19, v20, v21 - b.eq 2f - - qpel_uni_w_hv6_end_step q22, v23, v16, v17, v18, v19, v20, v21, v22 - b.hi 1b - -2: - QPEL_UNI_W_HV_END - ret + qpel_uni_w_hv_tail q, qpel_uni_w_hv6_end_step endfunc .macro QPEL_UNI_W_HV_8 @@ -5635,45 +5592,7 @@ endfunc .endm function hevc_put_hevc_qpel_uni_w_hv8_8_end_neon - ldr q16, [sp] - ldr q17, [sp, x10] - add sp, sp, x10, lsl #1 - ldr q18, [sp] - ldr q19, [sp, x10] - add sp, sp, x10, lsl #1 - ldr q20, [sp] - ldr q21, [sp, x10] - add sp, sp, x10, lsl #1 - ldr q22, [sp] - add sp, sp, x10 -1: - qpel_uni_w_hv8_end_step q23, v16, v17, v18, v19, v20, v21, v22, v23 - b.eq 2f - - qpel_uni_w_hv8_end_step q16, v17, v18, v19, v20, v21, v22, v23, v16 - b.eq 2f - - qpel_uni_w_hv8_end_step q17, v18, v19, v20, v21, v22, v23, v16, v17 - b.eq 2f - - qpel_uni_w_hv8_end_step q18, v19, v20, v21, v22, v23, v16, v17, v18 - b.eq 2f - - qpel_uni_w_hv8_end_step q19, v20, v21, v22, v23, v16, v17, v18, v19 - b.eq 2f - - qpel_uni_w_hv8_end_step q20, v21, v22, v23, v16, v17, v18, v19, v20 - b.eq 2f - - qpel_uni_w_hv8_end_step q21, v22, v23, v16, v17, v18, v19, v20, v21 - b.eq 2f - - qpel_uni_w_hv8_end_step q22, v23, v16, v17, v18, v19, v20, v21, v22 - b.hi 1b - -2: - QPEL_UNI_W_HV_END - ret + qpel_uni_w_hv_tail q, qpel_uni_w_hv8_end_step endfunc // hv12: process 12 pixels = 8 + 4 -- 2.52.0 >From 99c894812615ad5535f47ac2d108abd0dfdf416d Mon Sep 17 00:00:00 2001 From: Zhao Zhili <[email protected]> Date: Wed, 30 Sep 2026 19:55:14 +0800 Subject: [PATCH 3/4] aarch64/h26x: load a weighted qpel hv row with one instruction The unweighted step macros in this file let a post-indexed load walk the intermediate plane, while these weighted steps loaded a row and then advanced sp with a separate add. Fold the advance into the load. The step macro now names its row register without a width letter, which is what the next change needs in order to drive these tails from calc_all. --- libavcodec/aarch64/h26x/qpel_neon.S | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/libavcodec/aarch64/h26x/qpel_neon.S b/libavcodec/aarch64/h26x/qpel_neon.S index 51eac7469c..b8f5f17df7 100644 --- a/libavcodec/aarch64/h26x/qpel_neon.S +++ b/libavcodec/aarch64/h26x/qpel_neon.S @@ -5492,8 +5492,7 @@ DISABLE_I8MM .endm .macro qpel_uni_w_hv4_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7 - ldr \tmp, [sp] - add sp, sp, x10 + ld1 {\tmp\().4h}, [sp], x10 QPEL_FILTER_H v26, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 subs w22, w22, #1 QPEL_UNI_W_HV_4 @@ -5511,21 +5510,21 @@ DISABLE_I8MM add sp, sp, x10, lsl #1 ldr \reg\()22, [sp] add sp, sp, x10 -1: \step \reg\()23, v16, v17, v18, v19, v20, v21, v22, v23 +1: \step v23, v16, v17, v18, v19, v20, v21, v22, v23 b.eq 2f - \step \reg\()16, v17, v18, v19, v20, v21, v22, v23, v16 + \step v16, v17, v18, v19, v20, v21, v22, v23, v16 b.eq 2f - \step \reg\()17, v18, v19, v20, v21, v22, v23, v16, v17 + \step v17, v18, v19, v20, v21, v22, v23, v16, v17 b.eq 2f - \step \reg\()18, v19, v20, v21, v22, v23, v16, v17, v18 + \step v18, v19, v20, v21, v22, v23, v16, v17, v18 b.eq 2f - \step \reg\()19, v20, v21, v22, v23, v16, v17, v18, v19 + \step v19, v20, v21, v22, v23, v16, v17, v18, v19 b.eq 2f - \step \reg\()20, v21, v22, v23, v16, v17, v18, v19, v20 + \step v20, v21, v22, v23, v16, v17, v18, v19, v20 b.eq 2f - \step \reg\()21, v22, v23, v16, v17, v18, v19, v20, v21 + \step v21, v22, v23, v16, v17, v18, v19, v20, v21 b.eq 2f - \step \reg\()22, v23, v16, v17, v18, v19, v20, v21, v22 + \step v22, v23, v16, v17, v18, v19, v20, v21, v22 b.hi 1b 2: QPEL_UNI_W_HV_END @@ -5555,8 +5554,7 @@ endfunc .endm .macro qpel_uni_w_hv6_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7 - ldr \tmp, [sp] - add sp, sp, x10 + ld1 {\tmp\().8h}, [sp], x10 QPEL_FILTER_H v26, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 QPEL_FILTER_H2 v27, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 subs w22, w22, #1 @@ -5583,8 +5581,7 @@ endfunc .endm .macro qpel_uni_w_hv8_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7 - ldr \tmp, [sp] - add sp, sp, x10 + ld1 {\tmp\().8h}, [sp], x10 QPEL_FILTER_H v26, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 QPEL_FILTER_H2 v27, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7 subs w22, w22, #1 -- 2.52.0 >From 072b3b04ed3285b30a425fddb2257fe0971656d8 Mon Sep 17 00:00:00 2001 From: Zhao Zhili <[email protected]> Date: Wed, 30 Sep 2026 19:55:14 +0800 Subject: [PATCH 4/4] aarch64/h26x: reuse the shared qpel hv window rotation The eight positions of the eight-row window are the same walk for every vertical tail, and calc_all already carries it. The wider weighted tails stay as they are: calc_all2 fixes its window to v16..v31, so handing them over means moving their accumulators and weight vectors out of that range first. No functional changes. --- libavcodec/aarch64/h26x/qpel_neon.S | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/libavcodec/aarch64/h26x/qpel_neon.S b/libavcodec/aarch64/h26x/qpel_neon.S index b8f5f17df7..c65e3d750b 100644 --- a/libavcodec/aarch64/h26x/qpel_neon.S +++ b/libavcodec/aarch64/h26x/qpel_neon.S @@ -5510,22 +5510,7 @@ DISABLE_I8MM add sp, sp, x10, lsl #1 ldr \reg\()22, [sp] add sp, sp, x10 -1: \step v23, v16, v17, v18, v19, v20, v21, v22, v23 - b.eq 2f - \step v16, v17, v18, v19, v20, v21, v22, v23, v16 - b.eq 2f - \step v17, v18, v19, v20, v21, v22, v23, v16, v17 - b.eq 2f - \step v18, v19, v20, v21, v22, v23, v16, v17, v18 - b.eq 2f - \step v19, v20, v21, v22, v23, v16, v17, v18, v19 - b.eq 2f - \step v20, v21, v22, v23, v16, v17, v18, v19, v20 - b.eq 2f - \step v21, v22, v23, v16, v17, v18, v19, v20, v21 - b.eq 2f - \step v22, v23, v16, v17, v18, v19, v20, v21, v22 - b.hi 1b +1: calc_all \step 2: QPEL_UNI_W_HV_END ret -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
