[PR] aarch64/h26x: give step macros self-documenting names (PR #23691)

Zhao Zhili via ffmpeg-devel <[email protected]> Fri, 03 Jul 2026 14:31:22 -0000
Newsgroups gmane.comp.video.ffmpeg.devel
Message-ID <178308908309.59.8051353380823328153@29965ddac10e>
PR #23691 opened by Zhao Zhili (quink)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23691
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23691.patch

# Summary of changes

The h26x NEON epel/qpel helpers use a locally redefined `.macro calc` followed by `.purgem calc` inside each function, with `calc_all<N>` as the unroller.
It's hard to read and understand.

This patchset replaces `.macro calc / .purgem calc` with named step macros.

I split patch 3/3 from patch 2/3, so the change in patch 2/3 is straight forward rename, and patch 3/3 is just move code around with no functional changes.


>From cfc65b1402aaf74c5c6071df366eee36d1fa2522 Mon Sep 17 00:00:00 2001
From: Zhao Zhili <[email protected]>
Date: Fri, 3 Jul 2026 21:22:39 +0800
Subject: [PATCH 1/3] aarch64/h26x: parameterize calc_all step macro name

So callers can pass a named step macro instead of relying on a locally
redefined `calc` followed by `.purgem calc`.

Signed-off-by: Zhao Zhili <[email protected]>
---
 libavcodec/aarch64/h26x/epel_neon.S | 40 ++++++++++++++---------------
 libavcodec/aarch64/h26x/qpel_neon.S | 36 +++++++++++++-------------
 2 files changed, 38 insertions(+), 38 deletions(-)

diff --git a/libavcodec/aarch64/h26x/epel_neon.S b/libavcodec/aarch64/h26x/epel_neon.S
index 22f58ba5fa..f28bd3faad 100644
--- a/libavcodec/aarch64/h26x/epel_neon.S
+++ b/libavcodec/aarch64/h26x/epel_neon.S
@@ -93,47 +93,47 @@ endconst
         sqshrn2         \dst\().8h, \tmp\().4s, #6
 .endm
 
-.macro calc_all4
-        calc            v16, v17, v18, v19
+.macro calc_all4 op=calc
+        \op             v16, v17, v18, v19
         b.eq            2f
-        calc            v17, v18, v19, v16
+        \op             v17, v18, v19, v16
         b.eq            2f
-        calc            v18, v19, v16, v17
+        \op             v18, v19, v16, v17
         b.eq            2f
-        calc            v19, v16, v17, v18
+        \op             v19, v16, v17, v18
         b.ne            1b
 .endm
 
-.macro calc_all8
-        calc            v16, v17, v18, v19, v20, v21, v22, v23
+.macro calc_all8 op=calc
+        \op             v16, v17, v18, v19, v20, v21, v22, v23
         b.eq            2f
-        calc            v18, v19, v20, v21, v22, v23, v16, v17
+        \op             v18, v19, v20, v21, v22, v23, v16, v17
         b.eq            2f
-        calc            v20, v21, v22, v23, v16, v17, v18, v19
+        \op             v20, v21, v22, v23, v16, v17, v18, v19
         b.eq            2f
-        calc            v22, v23, v16, v17, v18, v19, v20, v21
+        \op             v22, v23, v16, v17, v18, v19, v20, v21
         b.ne            1b
 .endm
 
-.macro calc_all12
-        calc            v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27
+.macro calc_all12 op=calc
+        \op             v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27
         b.eq            2f
-        calc            v19, v20, v21, v22, v23, v24, v25, v26, v27, v16, v17, v18
+        \op             v19, v20, v21, v22, v23, v24, v25, v26, v27, v16, v17, v18
         b.eq            2f
-        calc            v22, v23, v24, v25, v26, v27, v16, v17, v18, v19, v20, v21
+        \op             v22, v23, v24, v25, v26, v27, v16, v17, v18, v19, v20, v21
         b.eq            2f
-        calc            v25, v26, v27, v16, v17, v18, v19, v20, v21, v22, v23, v24
+        \op             v25, v26, v27, v16, v17, v18, v19, v20, v21, v22, v23, v24
         b.ne            1b
 .endm
 
-.macro calc_all16
-        calc            v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31
+.macro calc_all16 op=calc
+        \op             v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31
         b.eq            2f
-        calc            v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v16, v17, v18, v19
+        \op             v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v16, v17, v18, v19
         b.eq            2f
-        calc            v24, v25, v26, v27, v28, v29, v30, v31, v16, v17, v18, v19, v20, v21, v22, v23
+        \op             v24, v25, v26, v27, v28, v29, v30, v31, v16, v17, v18, v19, v20, v21, v22, v23
         b.eq            2f
-        calc            v28, v29, v30, v31, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27
+        \op             v28, v29, v30, v31, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27
         b.ne            1b
 .endm
 
diff --git a/libavcodec/aarch64/h26x/qpel_neon.S b/libavcodec/aarch64/h26x/qpel_neon.S
index 53a8629363..cdd065c6bd 100644
--- a/libavcodec/aarch64/h26x/qpel_neon.S
+++ b/libavcodec/aarch64/h26x/qpel_neon.S
@@ -131,41 +131,41 @@ endconst
 .endif
 .endm
 
-.macro calc_all
-        calc            v23, v16, v17, v18, v19, v20, v21, v22, v23
+.macro calc_all op=calc
+        \op             v23, v16, v17, v18, v19, v20, v21, v22, v23
         b.eq            2f
-        calc            v16, v17, v18, v19, v20, v21, v22, v23, v16
+        \op             v16, v17, v18, v19, v20, v21, v22, v23, v16
         b.eq            2f
-        calc            v17, v18, v19, v20, v21, v22, v23, v16, v17
+        \op             v17, v18, v19, v20, v21, v22, v23, v16, v17
         b.eq            2f
-        calc            v18, v19, v20, v21, v22, v23, v16, v17, v18
+        \op             v18, v19, v20, v21, v22, v23, v16, v17, v18
         b.eq            2f
-        calc            v19, v20, v21, v22, v23, v16, v17, v18, v19
+        \op             v19, v20, v21, v22, v23, v16, v17, v18, v19
         b.eq            2f
-        calc            v20, v21, v22, v23, v16, v17, v18, v19, v20
+        \op             v20, v21, v22, v23, v16, v17, v18, v19, v20
         b.eq            2f
-        calc            v21, v22, v23, v16, v17, v18, v19, v20, v21
+        \op             v21, v22, v23, v16, v17, v18, v19, v20, v21
         b.eq            2f
-        calc            v22, v23, v16, v17, v18, v19, v20, v21, v22
+        \op             v22, v23, v16, v17, v18, v19, v20, v21, v22
         b.hi            1b
 .endm
 
-.macro calc_all2
-        calc            v30, v31, v16, v18, v20, v22, v24, v26, v28, v30, v17, v19, v21, v23, v25, v27, v29, v31
+.macro calc_all2 op=calc
+        \op             v30, v31, v16, v18, v20, v22, v24, v26, v28, v30, v17, v19, v21, v23, v25, v27, v29, v31
         b.eq            2f
-        calc            v16, v17, v18, v20, v22, v24, v26, v28, v30, v16, v19, v21, v23, v25, v27, v29, v31, v17
+        \op             v16, v17, v18, v20, v22, v24, v26, v28, v30, v16, v19, v21, v23, v25, v27, v29, v31, v17
         b.eq            2f
-        calc            v18, v19, v20, v22, v24, v26, v28, v30, v16, v18, v21, v23, v25, v27, v29, v31, v17, v19
+        \op             v18, v19, v20, v22, v24, v26, v28, v30, v16, v18, v21, v23, v25, v27, v29, v31, v17, v19
         b.eq            2f
-        calc            v20, v21, v22, v24, v26, v28, v30, v16, v18, v20, v23, v25, v27, v29, v31, v17, v19, v21
+        \op             v20, v21, v22, v24, v26, v28, v30, v16, v18, v20, v23, v25, v27, v29, v31, v17, v19, v21
         b.eq            2f
-        calc            v22, v23, v24, v26, v28, v30, v16, v18, v20, v22, v25, v27, v29, v31, v17, v19, v21, v23
+        \op             v22, v23, v24, v26, v28, v30, v16, v18, v20, v22, v25, v27, v29, v31, v17, v19, v21, v23
         b.eq            2f
-        calc            v24, v25, v26, v28, v30, v16, v18, v20, v22, v24, v27, v29, v31, v17, v19, v21, v23, v25
+        \op             v24, v25, v26, v28, v30, v16, v18, v20, v22, v24, v27, v29, v31, v17, v19, v21, v23, v25
         b.eq            2f
-        calc            v26, v27, v28, v30, v16, v18, v20, v22, v24, v26, v29, v31, v17, v19, v21, v23, v25, v27
+        \op             v26, v27, v28, v30, v16, v18, v20, v22, v24, v26, v29, v31, v17, v19, v21, v23, v25, v27
         b.eq            2f
-        calc            v28, v29, v30, v16, v18, v20, v22, v24, v26, v28, v31, v17, v19, v21, v23, v25, v27, v29
+        \op             v28, v29, v30, v16, v18, v20, v22, v24, v26, v28, v31, v17, v19, v21, v23, v25, v27, v29
         b.hi            1b
 .endm
 
-- 
2.52.0


>From f66e56e7ebbc54f3c4866724b04c0a313ad60706 Mon Sep 17 00:00:00 2001
From: Zhao Zhili <[email protected]>
Date: Fri, 3 Jul 2026 21:22:39 +0800
Subject: [PATCH 2/3] aarch64/h26x: give step macros distinct names per
 function

Signed-off-by: Zhao Zhili <[email protected]>
---
 libavcodec/aarch64/h26x/epel_neon.S | 220 +++++++++++-----------------
 libavcodec/aarch64/h26x/qpel_neon.S | 180 +++++++++--------------
 2 files changed, 160 insertions(+), 240 deletions(-)

diff --git a/libavcodec/aarch64/h26x/epel_neon.S b/libavcodec/aarch64/h26x/epel_neon.S
index f28bd3faad..32ba266eb0 100644
--- a/libavcodec/aarch64/h26x/epel_neon.S
+++ b/libavcodec/aarch64/h26x/epel_neon.S
@@ -1102,7 +1102,7 @@ function ff_hevc_put_hevc_epel_bi_v4_8_neon, export=1
         ld1             {v16.s}[0], [x2], x3
         ld1             {v17.s}[0], [x2], x3
         ld1             {v18.s}[0], [x2], x3
-.macro calc src0, src1, src2, src3
+.macro epel_bi_v4_step src0, src1, src2, src3
         ld1             {\src3\().s}[0], [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
         ld1             {v24.4h}, [x4], x10
@@ -1111,8 +1111,7 @@ function ff_hevc_put_hevc_epel_bi_v4_8_neon, export=1
         subs            w5, w5, #1
         st1             {v4.s}[0], [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_bi_v4_step
 2:      ret
 endfunc
 
@@ -1124,7 +1123,7 @@ function ff_hevc_put_hevc_epel_bi_v6_8_neon, export=1
         ld1             {v16.8b}, [x2], x3
         ld1             {v17.8b}, [x2], x3
         ld1             {v18.8b}, [x2], x3
-.macro calc src0, src1, src2, src3
+.macro epel_bi_v6_step src0, src1, src2, src3
         ld1             {\src3\().8b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
         ld1             {v24.8h}, [x4], x10
@@ -1134,8 +1133,7 @@ function ff_hevc_put_hevc_epel_bi_v6_8_neon, export=1
         subs            w5, w5, #1
         st1             {v4.h}[2], [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_bi_v6_step
 2:      ret
 endfunc
 
@@ -1146,7 +1144,7 @@ function ff_hevc_put_hevc_epel_bi_v8_8_neon, export=1
         ld1             {v16.8b}, [x2], x3
         ld1             {v17.8b}, [x2], x3
         ld1             {v18.8b}, [x2], x3
-.macro calc src0, src1, src2, src3
+.macro epel_bi_v8_step src0, src1, src2, src3
         ld1             {\src3\().8b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
         ld1             {v24.8h}, [x4], x10
@@ -1155,8 +1153,7 @@ function ff_hevc_put_hevc_epel_bi_v8_8_neon, export=1
         subs            w5, w5, #1
         st1             {v4.8b}, [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_bi_v8_step
 2:      ret
 endfunc
 
@@ -1168,7 +1165,7 @@ function ff_hevc_put_hevc_epel_bi_v12_8_neon, export=1
         ld1             {v16.16b}, [x2], x3
         ld1             {v17.16b}, [x2], x3
         ld1             {v18.16b}, [x2], x3
-.macro calc src0, src1, src2, src3
+.macro epel_bi_v12_step src0, src1, src2, src3
         ld1             {\src3\().16b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
         calc_epelb2     v5, \src0, \src1, \src2, \src3
@@ -1181,8 +1178,7 @@ function ff_hevc_put_hevc_epel_bi_v12_8_neon, export=1
         subs            w5, w5, #1
         st1             {v4.s}[2], [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_bi_v12_step
 2:      ret
 endfunc
 
@@ -1193,7 +1189,7 @@ function ff_hevc_put_hevc_epel_bi_v16_8_neon, export=1
         ld1             {v16.16b}, [x2], x3
         ld1             {v17.16b}, [x2], x3
         ld1             {v18.16b}, [x2], x3
-.macro calc src0, src1, src2, src3
+.macro epel_bi_v16_step src0, src1, src2, src3
         ld1             {\src3\().16b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
         calc_epelb2     v5, \src0, \src1, \src2, \src3
@@ -1205,8 +1201,7 @@ function ff_hevc_put_hevc_epel_bi_v16_8_neon, export=1
         st1             {v4.16b}, [x0], x1
         subs            w5, w5, #1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_bi_v16_step
 2:      ret
 endfunc
 
@@ -1217,7 +1212,7 @@ function ff_hevc_put_hevc_epel_bi_v24_8_neon, export=1
         ld1             {v16.8b, v17.8b, v18.8b}, [x2], x3
         ld1             {v19.8b, v20.8b, v21.8b}, [x2], x3
         ld1             {v22.8b, v23.8b, v24.8b}, [x2], x3
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
+.macro epel_bi_v24_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().8b, \src10\().8b, \src11\().8b}, [x2], x3
         calc_epelb      v4, \src0, \src3, \src6, \src9
         calc_epelb      v5, \src1, \src4, \src7, \src10
@@ -1232,8 +1227,7 @@ function ff_hevc_put_hevc_epel_bi_v24_8_neon, export=1
         subs            w5, w5, #1
         st1             {v4.8b, v5.8b, v6.8b}, [x0], x1
 .endm
-1:      calc_all12
-.purgem calc
+1:      calc_all12 epel_bi_v24_step
 2:      ret
 endfunc
 
@@ -1244,7 +1238,7 @@ function ff_hevc_put_hevc_epel_bi_v32_8_neon, export=1
         ld1             {v16.16b, v17.16b}, [x2], x3
         ld1             {v18.16b, v19.16b}, [x2], x3
         ld1             {v20.16b, v21.16b}, [x2], x3
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7
+.macro epel_bi_v32_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().16b, \src7\().16b}, [x2], x3
         calc_epelb      v4, \src0, \src2, \src4, \src6
         calc_epelb2     v5, \src0, \src2, \src4, \src6
@@ -1262,8 +1256,7 @@ function ff_hevc_put_hevc_epel_bi_v32_8_neon, export=1
         st1             {v4.16b, v5.16b}, [x0], x1
         subs            w5, w5, #1
 .endm
-1:      calc_all8
-.purgem calc
+1:      calc_all8 epel_bi_v32_step
 2:      ret
 endfunc
 
@@ -1319,15 +1312,14 @@ function ff_hevc_put_hevc_epel_v4_8_neon, export=1
         ldr             s17, [x1, x2]
         add             x1, x1, x2, lsl #1
         ld1             {v18.s}[0], [x1], x2
-.macro calc src0, src1, src2, src3
+.macro epel_v4_step src0, src1, src2, src3
         ld1             {\src3\().s}[0], [x1], x2
         movi            v4.8h, #0
         calc_epelb      v4, \src0, \src1, \src2, \src3
         subs            w3, w3, #1
         st1             {v4.4h}, [x0], x10
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_v4_step
 2:      ret
 endfunc
 
@@ -1339,7 +1331,7 @@ function ff_hevc_put_hevc_epel_v6_8_neon, export=1
         ldr             d17, [x1, x2]
         add             x1, x1, x2, lsl #1
         ld1             {v18.8b}, [x1], x2
-.macro calc src0, src1, src2, src3
+.macro epel_v6_step src0, src1, src2, src3
         ld1             {\src3\().8b}, [x1], x2
         movi            v4.8h, #0
         calc_epelb      v4, \src0, \src1, \src2, \src3
@@ -1347,8 +1339,7 @@ function ff_hevc_put_hevc_epel_v6_8_neon, export=1
         subs            w3, w3, #1
         st1             {v4.s}[2], [x0], x10
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_v6_step
 2:      ret
 endfunc
 
@@ -1360,15 +1351,14 @@ function ff_hevc_put_hevc_epel_v8_8_neon, export=1
         ldr             d17, [x1, x2]
         add             x1, x1, x2, lsl #1
         ld1             {v18.8b}, [x1], x2
-.macro calc src0, src1, src2, src3
+.macro epel_v8_step src0, src1, src2, src3
         ld1             {\src3\().8b}, [x1], x2
         movi            v4.8h, #0
         calc_epelb      v4, \src0, \src1, \src2, \src3
         subs            w3, w3, #1
         st1             {v4.8h}, [x0], x10
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_v8_step
 2:      ret
 endfunc
 
@@ -1380,7 +1370,7 @@ function ff_hevc_put_hevc_epel_v12_8_neon, export=1
         ldr             q17, [x1, x2]
         add             x1, x1, x2, lsl #1
         ld1             {v18.16b}, [x1], x2
-.macro calc src0, src1, src2, src3
+.macro epel_v12_step src0, src1, src2, src3
         ld1             {\src3\().16b}, [x1], x2
         movi            v4.8h, #0
         movi            v5.8h, #0
@@ -1391,8 +1381,7 @@ function ff_hevc_put_hevc_epel_v12_8_neon, export=1
         str             d5, [x0, #16]
         add             x0, x0, x10
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_v12_step
 2:      ret
 endfunc
 
@@ -1404,7 +1393,7 @@ function ff_hevc_put_hevc_epel_v16_8_neon, export=1
         ldr             q17, [x1, x2]
         add             x1, x1, x2, lsl #1
         ld1             {v18.16b}, [x1], x2
-.macro calc src0, src1, src2, src3
+.macro epel_v16_step src0, src1, src2, src3
         ld1             {\src3\().16b}, [x1], x2
         movi            v4.8h, #0
         movi            v5.8h, #0
@@ -1413,8 +1402,7 @@ function ff_hevc_put_hevc_epel_v16_8_neon, export=1
         subs            w3, w3, #1
         st1             {v4.8h, v5.8h}, [x0], x10
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_v16_step
 2:      ret
 endfunc
 
@@ -1425,7 +1413,7 @@ function ff_hevc_put_hevc_epel_v24_8_neon, export=1
         ld1             {v16.8b, v17.8b, v18.8b}, [x1], x2
         ld1             {v19.8b, v20.8b, v21.8b}, [x1], x2
         ld1             {v22.8b, v23.8b, v24.8b}, [x1], x2
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
+.macro epel_v24_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().8b, \src10\().8b, \src11\().8b}, [x1], x2
         movi            v4.8h, #0
         movi            v5.8h, #0
@@ -1436,8 +1424,7 @@ function ff_hevc_put_hevc_epel_v24_8_neon, export=1
         subs            w3, w3, #1
         st1             {v4.8h-v6.8h}, [x0], x10
 .endm
-1:      calc_all12
-.purgem calc
+1:      calc_all12 epel_v24_step
 2:      ret
 endfunc
 
@@ -1448,7 +1435,7 @@ function ff_hevc_put_hevc_epel_v32_8_neon, export=1
         ld1             {v16.16b, v17.16b}, [x1], x2
         ld1             {v18.16b, v19.16b}, [x1], x2
         ld1             {v20.16b, v21.16b}, [x1], x2
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7
+.macro epel_v32_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().16b, \src7\().16b}, [x1], x2
         movi            v4.8h, #0
         movi            v5.8h, #0
@@ -1461,8 +1448,7 @@ function ff_hevc_put_hevc_epel_v32_8_neon, export=1
         subs            w3, w3, #1
         st1             {v4.8h-v7.8h}, [x0], x10
 .endm
-1:      calc_all8
-.purgem calc
+1:      calc_all8 epel_v32_step
 2:      ret
 endfunc
 
@@ -1473,7 +1459,7 @@ function ff_hevc_put_hevc_epel_v48_8_neon, export=1
         ld1             {v16.16b, v17.16b, v18.16b}, [x1], x2
         ld1             {v19.16b, v20.16b, v21.16b}, [x1], x2
         ld1             {v22.16b, v23.16b, v24.16b}, [x1], x2
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
+.macro epel_v48_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().16b, \src10\().16b, \src11\().16b}, [x1], x2
         movi            v4.8h, #0
         movi            v5.8h, #0
@@ -1491,8 +1477,7 @@ function ff_hevc_put_hevc_epel_v48_8_neon, export=1
         subs            w3, w3, #1
         st1             {v28.8h-v29.8h}, [x0], x10
 .endm
-1:      calc_all12
-.purgem calc
+1:      calc_all12 epel_v48_step
 2:      ret
 endfunc
 
@@ -1504,7 +1489,7 @@ function ff_hevc_put_hevc_epel_v64_8_neon, export=1
         ld1             {v16.16b, v17.16b, v18.16b, v19.16b}, [x1], x2
         ld1             {v20.16b, v21.16b, v22.16b, v23.16b}, [x1], x2
         ld1             {v24.16b, v25.16b, v26.16b, v27.16b}, [x1], x2
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+.macro epel_v64_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\src12\().16b-\src15\().16b}, [x1], x2
         movi            v4.8h, #0
         movi            v5.8h, #0
@@ -1526,8 +1511,7 @@ function ff_hevc_put_hevc_epel_v64_8_neon, export=1
         subs            w3, w3, #1
         st1             {v8.8h-v11.8h}, [x0], #64
 .endm
-1:      calc_all16
-.purgem calc
+1:      calc_all16 epel_v64_step
 2:      ld1             {v8.8b-v11.8b}, [sp]
         add             sp, sp, #32
         ret
@@ -1539,15 +1523,14 @@ function ff_hevc_put_hevc_epel_uni_v4_8_neon, export=1
         ld1             {v16.s}[0], [x2], x3
         ld1             {v17.s}[0], [x2], x3
         ld1             {v18.s}[0], [x2], x3
-.macro calc src0, src1, src2, src3
+.macro epel_uni_v4_step src0, src1, src2, src3
         ld1             {\src3\().s}[0], [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
         sqrshrun        v4.8b, v4.8h, #6
         subs            w4, w4, #1
         st1             {v4.s}[0], [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_uni_v4_step
 2:      ret
 endfunc
 
@@ -1558,7 +1541,7 @@ function ff_hevc_put_hevc_epel_uni_v6_8_neon, export=1
         ld1             {v16.8b}, [x2], x3
         ld1             {v17.8b}, [x2], x3
         ld1             {v18.8b}, [x2], x3
-.macro calc src0, src1, src2, src3
+.macro epel_uni_v6_step src0, src1, src2, src3
         ld1             {\src3\().8b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
         sqrshrun        v4.8b, v4.8h, #6
@@ -1566,8 +1549,7 @@ function ff_hevc_put_hevc_epel_uni_v6_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.h}[2], [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_uni_v6_step
 2:      ret
 endfunc
 
@@ -1577,15 +1559,14 @@ function ff_hevc_put_hevc_epel_uni_v8_8_neon, export=1
         ld1             {v16.8b}, [x2], x3
         ld1             {v17.8b}, [x2], x3
         ld1             {v18.8b}, [x2], x3
-.macro calc src0, src1, src2, src3
+.macro epel_uni_v8_step src0, src1, src2, src3
         ld1             {\src3\().8b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
         sqrshrun        v4.8b,  v4.8h, #6
         subs            w4, w4, #1
         st1             {v4.8b}, [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_uni_v8_step
 2:      ret
 endfunc
 
@@ -1596,7 +1577,7 @@ function ff_hevc_put_hevc_epel_uni_v12_8_neon, export=1
         ld1             {v16.16b}, [x2], x3
         ld1             {v17.16b}, [x2], x3
         ld1             {v18.16b}, [x2], x3
-.macro calc src0, src1, src2, src3
+.macro epel_uni_v12_step src0, src1, src2, src3
         ld1             {\src3\().16b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
         calc_epelb2     v5, \src0, \src1, \src2, \src3
@@ -1606,8 +1587,7 @@ function ff_hevc_put_hevc_epel_uni_v12_8_neon, export=1
         st1             {v4.8b}, [x0], #8
         st1             {v4.s}[2], [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_uni_v12_step
 2:      ret
 endfunc
 
@@ -1617,7 +1597,7 @@ function ff_hevc_put_hevc_epel_uni_v16_8_neon, export=1
         ld1             {v16.16b}, [x2], x3
         ld1             {v17.16b}, [x2], x3
         ld1             {v18.16b}, [x2], x3
-.macro calc src0, src1, src2, src3
+.macro epel_uni_v16_step src0, src1, src2, src3
         ld1             {\src3\().16b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
         calc_epelb2     v5, \src0, \src1, \src2, \src3
@@ -1626,8 +1606,7 @@ function ff_hevc_put_hevc_epel_uni_v16_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.16b}, [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_uni_v16_step
 2:      ret
 endfunc
 
@@ -1637,7 +1616,7 @@ function ff_hevc_put_hevc_epel_uni_v24_8_neon, export=1
         ld1             {v16.8b, v17.8b, v18.8b}, [x2], x3
         ld1             {v19.8b, v20.8b, v21.8b}, [x2], x3
         ld1             {v22.8b, v23.8b, v24.8b}, [x2], x3
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
+.macro epel_uni_v24_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().8b, \src10\().8b, \src11\().8b}, [x2], x3
         calc_epelb      v4, \src0, \src3, \src6, \src9
         calc_epelb      v5, \src1, \src4, \src7, \src10
@@ -1648,8 +1627,7 @@ function ff_hevc_put_hevc_epel_uni_v24_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.8b-v6.8b}, [x0], x1
 .endm
-1:      calc_all12
-.purgem calc
+1:      calc_all12 epel_uni_v24_step
 2:      ret
 endfunc
 
@@ -1659,7 +1637,7 @@ function ff_hevc_put_hevc_epel_uni_v32_8_neon, export=1
         ld1             {v16.16b, v17.16b}, [x2], x3
         ld1             {v18.16b, v19.16b}, [x2], x3
         ld1             {v20.16b, v21.16b}, [x2], x3
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7
+.macro epel_uni_v32_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().16b, \src7\().16b}, [x2], x3
         calc_epelb      v4, \src0, \src2, \src4, \src6
         calc_epelb2     v5, \src0, \src2, \src4, \src6
@@ -1672,8 +1650,7 @@ function ff_hevc_put_hevc_epel_uni_v32_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.16b, v5.16b}, [x0], x1
 .endm
-1:      calc_all8
-.purgem calc
+1:      calc_all8 epel_uni_v32_step
 2:      ret
 endfunc
 
@@ -1683,7 +1660,7 @@ function ff_hevc_put_hevc_epel_uni_v48_8_neon, export=1
         ld1             {v16.16b, v17.16b, v18.16b}, [x2], x3
         ld1             {v19.16b, v20.16b, v21.16b}, [x2], x3
         ld1             {v22.16b, v23.16b, v24.16b}, [x2], x3
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
+.macro epel_uni_v48_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().16b, \src10\().16b, \src11\().16b}, [x2], x3
         calc_epelb      v4,  \src0, \src3, \src6, \src9
         calc_epelb2     v5,  \src0, \src3, \src6, \src9
@@ -1700,8 +1677,7 @@ function ff_hevc_put_hevc_epel_uni_v48_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.16b, v5.16b, v6.16b}, [x0], x1
 .endm
-1:      calc_all12
-.purgem calc
+1:      calc_all12 epel_uni_v48_step
 2:      ret
 endfunc
 
@@ -1713,7 +1689,7 @@ function ff_hevc_put_hevc_epel_uni_v64_8_neon, export=1
         ld1             {v16.16b, v17.16b, v18.16b, v19.16b}, [x2], x3
         ld1             {v20.16b, v21.16b, v22.16b, v23.16b}, [x2], x3
         ld1             {v24.16b, v25.16b, v26.16b, v27.16b}, [x2], x3
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+.macro epel_uni_v64_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\src12\().16b, \src13\().16b, \src14\().16b, \src15\().16b}, [x2], x3
         calc_epelb      v10, \src3, \src7, \src11, \src15
         calc_epelb2     v11, \src3, \src7, \src11, \src15
@@ -1734,8 +1710,7 @@ function ff_hevc_put_hevc_epel_uni_v64_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.16b, v5.16b, v6.16b, v7.16b}, [x0], x1
 .endm
-1:      calc_all16
-.purgem calc
+1:      calc_all16 epel_uni_v64_step
 2:      ld1             {v8.8b-v11.8b}, [sp], #32
         ret
 endfunc
@@ -3079,14 +3054,13 @@ function hevc_put_hevc_epel_hv4_8_end_neon
         ldr             d17, [sp, x10]
         add             sp, sp, x10, lsl #1
         ld1             {v18.4h}, [sp], x10
-.macro calc src0, src1, src2, src3
+.macro epel_hv4_end_step src0, src1, src2, src3
         ld1             {\src3\().4h}, [sp], x10
         calc_epelh      v4, \src0, \src1, \src2, \src3
         subs            w3, w3, #1
         st1             {v4.4h}, [x0], x10
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_hv4_end_step
 2:      ret
 endfunc
 
@@ -3098,7 +3072,7 @@ function hevc_put_hevc_epel_hv6_8_end_neon
         ldr             q17, [sp, x10]
         add             sp, sp, x10, lsl #1
         ld1             {v18.8h}, [sp], x10
-.macro calc src0, src1, src2, src3
+.macro epel_hv6_end_step src0, src1, src2, src3
         ld1             {\src3\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src1, \src2, \src3
         calc_epelh2     v4, v5, \src0, \src1, \src2, \src3
@@ -3106,8 +3080,7 @@ function hevc_put_hevc_epel_hv6_8_end_neon
         subs            w3, w3, #1
         st1             {v4.s}[2], [x0], x5
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_hv6_end_step
 2:      ret
 endfunc
 
@@ -3125,15 +3098,14 @@ function hevc_put_hevc_epel_hv8_8_end_neon
         ldr             q17, [sp, x10]
         add             sp, sp, x10, lsl #1
         ld1             {v18.8h}, [sp], x10
-.macro calc src0, src1, src2, src3
+.macro epel_hv8_end_step src0, src1, src2, src3
         ld1             {\src3\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src1, \src2, \src3
         calc_epelh2     v4, v5, \src0, \src1, \src2, \src3
         subs            w3, w3, #1
         st1             {v4.8h}, [x0], x10
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_hv8_end_step
 2:      ret
 endfunc
 
@@ -3144,7 +3116,7 @@ function hevc_put_hevc_epel_hv12_8_end_neon
         ld1             {v16.8h, v17.8h}, [sp], x10
         ld1             {v18.8h, v19.8h}, [sp], x10
         ld1             {v20.8h, v21.8h}, [sp], x10
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7
+.macro epel_hv12_end_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().8h, \src7\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src2, \src4, \src6
         calc_epelh2     v4, v5, \src0, \src2, \src4, \src6
@@ -3153,8 +3125,7 @@ function hevc_put_hevc_epel_hv12_8_end_neon
         subs            w3, w3, #1
         st1             {v5.4h}, [x0], x5
 .endm
-1:      calc_all8
-.purgem calc
+1:      calc_all8 epel_hv12_end_step
 2:      ret
 endfunc
 
@@ -3171,7 +3142,7 @@ function hevc_put_hevc_epel_hv16_8_end_neon
         ld1             {v16.8h, v17.8h}, [sp], x10
         ld1             {v18.8h, v19.8h}, [sp], x10
         ld1             {v20.8h, v21.8h}, [sp], x10
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7
+.macro epel_hv16_end_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().8h, \src7\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src2, \src4, \src6
         calc_epelh2     v4, v5, \src0, \src2, \src4, \src6
@@ -3180,8 +3151,7 @@ function hevc_put_hevc_epel_hv16_8_end_neon
         subs            w3, w3, #1
         st1             {v4.8h, v5.8h}, [x0], x10
 .endm
-1:      calc_all8
-.purgem calc
+1:      calc_all8 epel_hv16_end_step
 2:      ret
 endfunc
 
@@ -3191,7 +3161,7 @@ function hevc_put_hevc_epel_hv24_8_end_neon
         ld1             {v16.8h, v17.8h, v18.8h}, [sp], x10
         ld1             {v19.8h, v20.8h, v21.8h}, [sp], x10
         ld1             {v22.8h, v23.8h, v24.8h}, [sp], x10
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
+.macro epel_hv24_end_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().8h-\src11\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src3, \src6, \src9
         calc_epelh2     v4, v5, \src0, \src3, \src6, \src9
@@ -3202,8 +3172,7 @@ function hevc_put_hevc_epel_hv24_8_end_neon
         subs            w3, w3, #1
         st1             {v4.8h-v6.8h}, [x0], x10
 .endm
-1:      calc_all12
-.purgem calc
+1:      calc_all12 epel_hv24_end_step
 2:      ret
 endfunc
 
@@ -3505,15 +3474,14 @@ function hevc_put_hevc_epel_uni_hv4_8_end_neon
         ld1             {v16.4h}, [sp], x10
         ld1             {v17.4h}, [sp], x10
         ld1             {v18.4h}, [sp], x10
-.macro calc src0, src1, src2, src3
+.macro epel_uni_hv4_end_step src0, src1, src2, src3
         ld1             {\src3\().4h}, [sp], x10
         calc_epelh      v4, \src0, \src1, \src2, \src3
         sqrshrun        v4.8b, v4.8h, #6
         subs            w4, w4, #1
         st1             {v4.s}[0], [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_uni_hv4_end_step
 2:      ret
 endfunc
 
@@ -3524,7 +3492,7 @@ function hevc_put_hevc_epel_uni_hv6_8_end_neon
         ld1             {v16.8h}, [sp], x10
         ld1             {v17.8h}, [sp], x10
         ld1             {v18.8h}, [sp], x10
-.macro calc src0, src1, src2, src3
+.macro epel_uni_hv6_end_step src0, src1, src2, src3
         ld1             {\src3\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src1, \src2, \src3
         calc_epelh2     v4, v5, \src0, \src1, \src2, \src3
@@ -3533,8 +3501,7 @@ function hevc_put_hevc_epel_uni_hv6_8_end_neon
         subs            w4, w4, #1
         st1             {v4.h}[2], [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_uni_hv6_end_step
 2:      ret
 endfunc
 
@@ -3544,7 +3511,7 @@ function hevc_put_hevc_epel_uni_hv8_8_end_neon
         ld1             {v16.8h}, [sp], x10
         ld1             {v17.8h}, [sp], x10
         ld1             {v18.8h}, [sp], x10
-.macro calc src0, src1, src2, src3
+.macro epel_uni_hv8_end_step src0, src1, src2, src3
         ld1             {\src3\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src1, \src2, \src3
         calc_epelh2     v4, v5, \src0, \src1, \src2, \src3
@@ -3552,8 +3519,7 @@ function hevc_put_hevc_epel_uni_hv8_8_end_neon
         subs            w4, w4, #1
         st1             {v4.8b}, [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_uni_hv8_end_step
 2:      ret
 endfunc
 
@@ -3564,7 +3530,7 @@ function hevc_put_hevc_epel_uni_hv12_8_end_neon
         ld1             {v16.8h, v17.8h}, [sp], x10
         ld1             {v18.8h, v19.8h}, [sp], x10
         ld1             {v20.8h, v21.8h}, [sp], x10
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7
+.macro epel_uni_hv12_end_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().8h, \src7\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src2, \src4, \src6
         calc_epelh2     v4, v5, \src0, \src2, \src4, \src6
@@ -3575,8 +3541,7 @@ function hevc_put_hevc_epel_uni_hv12_8_end_neon
         st1             {v4.s}[2], [x0], x1
         subs            w4, w4, #1
 .endm
-1:      calc_all8
-.purgem calc
+1:      calc_all8 epel_uni_hv12_end_step
 2:      ret
 endfunc
 
@@ -3586,7 +3551,7 @@ function hevc_put_hevc_epel_uni_hv16_8_end_neon
         ld1             {v16.8h, v17.8h}, [sp], x10
         ld1             {v18.8h, v19.8h}, [sp], x10
         ld1             {v20.8h, v21.8h}, [sp], x10
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7
+.macro epel_uni_hv16_end_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().8h, \src7\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src2, \src4, \src6
         calc_epelh2     v4, v5, \src0, \src2, \src4, \src6
@@ -3597,8 +3562,7 @@ function hevc_put_hevc_epel_uni_hv16_8_end_neon
         subs            w4, w4, #1
         st1             {v4.16b}, [x0], x1
 .endm
-1:      calc_all8
-.purgem calc
+1:      calc_all8 epel_uni_hv16_end_step
 2:      ret
 endfunc
 
@@ -3608,7 +3572,7 @@ function hevc_put_hevc_epel_uni_hv24_8_end_neon
         ld1             {v16.8h, v17.8h, v18.8h}, [sp], x10
         ld1             {v19.8h, v20.8h, v21.8h}, [sp], x10
         ld1             {v22.8h, v23.8h, v24.8h}, [sp], x10
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
+.macro epel_uni_hv24_end_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().8h, \src10\().8h, \src11\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src3, \src6, \src9
         calc_epelh2     v4, v5, \src0, \src3, \src6, \src9
@@ -3622,8 +3586,7 @@ function hevc_put_hevc_epel_uni_hv24_8_end_neon
         subs            w4, w4, #1
         st1             {v4.8b, v5.8b, v6.8b}, [x0], x1
 .endm
-1:      calc_all12
-.purgem calc
+1:      calc_all12 epel_uni_hv24_end_step
 2:      ret
 endfunc
 
@@ -4874,7 +4837,7 @@ function hevc_put_hevc_epel_bi_hv4_8_end_neon
         ld1             {v16.4h}, [sp], x10
         ld1             {v17.4h}, [sp], x10
         ld1             {v18.4h}, [sp], x10
-.macro calc src0, src1, src2, src3
+.macro epel_bi_hv4_end_step src0, src1, src2, src3
         ld1             {\src3\().4h}, [sp], x10
         calc_epelh      v4, \src0, \src1, \src2, \src3
         ld1             {v6.4h}, [x4], x10
@@ -4883,8 +4846,7 @@ function hevc_put_hevc_epel_bi_hv4_8_end_neon
         subs            w5, w5, #1
         st1             {v4.s}[0], [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_bi_hv4_end_step
 2:      ret
 endfunc
 
@@ -4895,7 +4857,7 @@ function hevc_put_hevc_epel_bi_hv6_8_end_neon
         ld1             {v16.8h}, [sp], x10
         ld1             {v17.8h}, [sp], x10
         ld1             {v18.8h}, [sp], x10
-.macro calc src0, src1, src2, src3
+.macro epel_bi_hv6_end_step src0, src1, src2, src3
         ld1             {\src3\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src1, \src2, \src3
         calc_epelh2     v4, v5, \src0, \src1, \src2, \src3
@@ -4906,8 +4868,7 @@ function hevc_put_hevc_epel_bi_hv6_8_end_neon
         subs            w5, w5, #1
         st1             {v4.h}[2], [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_bi_hv6_end_step
 2:      ret
 endfunc
 
@@ -4917,7 +4878,7 @@ function hevc_put_hevc_epel_bi_hv8_8_end_neon
         ld1             {v16.8h}, [sp], x10
         ld1             {v17.8h}, [sp], x10
         ld1             {v18.8h}, [sp], x10
-.macro calc src0, src1, src2, src3
+.macro epel_bi_hv8_end_step src0, src1, src2, src3
         ld1             {\src3\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src1, \src2, \src3
         calc_epelh2     v4, v5, \src0, \src1, \src2, \src3
@@ -4927,8 +4888,7 @@ function hevc_put_hevc_epel_bi_hv8_8_end_neon
         subs            w5, w5, #1
         st1             {v4.8b}, [x0], x1
 .endm
-1:      calc_all4
-.purgem calc
+1:      calc_all4 epel_bi_hv8_end_step
 2:      ret
 endfunc
 
@@ -4939,7 +4899,7 @@ function hevc_put_hevc_epel_bi_hv12_8_end_neon
         ld1             {v16.8h, v17.8h}, [sp], x10
         ld1             {v18.8h, v19.8h}, [sp], x10
         ld1             {v20.8h, v21.8h}, [sp], x10
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7
+.macro epel_bi_hv12_end_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().8h, \src7\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src2, \src4, \src6
         calc_epelh2     v4, v5, \src0, \src2, \src4, \src6
@@ -4953,8 +4913,7 @@ function hevc_put_hevc_epel_bi_hv12_8_end_neon
         subs            w5, w5, #1
         st1             {v4.s}[2], [x0], x1
 .endm
-1:      calc_all8
-.purgem calc
+1:      calc_all8 epel_bi_hv12_end_step
 2:      ret
 endfunc
 
@@ -4964,7 +4923,7 @@ function hevc_put_hevc_epel_bi_hv16_8_end_neon
         ld1             {v16.8h, v17.8h}, [sp], x10
         ld1             {v18.8h, v19.8h}, [sp], x10
         ld1             {v20.8h, v21.8h}, [sp], x10
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7
+.macro epel_bi_hv16_end_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().8h, \src7\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src2, \src4, \src6
         calc_epelh2     v4, v5, \src0, \src2, \src4, \src6
@@ -4978,8 +4937,7 @@ function hevc_put_hevc_epel_bi_hv16_8_end_neon
         st1             {v4.16b}, [x0], x1
         subs            w5, w5, #1
 .endm
-1:      calc_all8
-.purgem calc
+1:      calc_all8 epel_bi_hv16_end_step
 2:      ret
 endfunc
 
@@ -4989,7 +4947,7 @@ function hevc_put_hevc_epel_bi_hv24_8_end_neon
         ld1             {v16.8h, v17.8h, v18.8h}, [sp], x10
         ld1             {v19.8h, v20.8h, v21.8h}, [sp], x10
         ld1             {v22.8h, v23.8h, v24.8h}, [sp], x10
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
+.macro epel_bi_hv24_end_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().8h, \src10\().8h, \src11\().8h}, [sp], x10
         calc_epelh      v1,     \src0, \src3, \src6, \src9
         calc_epelh2     v1, v2, \src0, \src3, \src6, \src9
@@ -5007,8 +4965,7 @@ function hevc_put_hevc_epel_bi_hv24_8_end_neon
         subs            w5, w5, #1
         st1             {v1.8b, v2.8b, v3.8b}, [x0], x1
 .endm
-1:      calc_all12
-.purgem calc
+1:      calc_all12 epel_bi_hv24_end_step
 2:      ret
 endfunc
 
@@ -5018,7 +4975,7 @@ function hevc_put_hevc_epel_bi_hv32_8_end_neon
         ld1             {v16.8h, v17.8h, v18.8h, v19.8h}, [sp], x10
         ld1             {v20.8h, v21.8h, v22.8h, v23.8h}, [sp], x10
         ld1             {v24.8h, v25.8h, v26.8h, v27.8h}, [sp], x10
-.macro calc src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+.macro epel_bi_hv32_end_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\src12\().8h, \src13\().8h, \src14\().8h, \src15\().8h}, [sp], x10
         calc_epelh      v1,     \src0, \src4, \src8,  \src12
         calc_epelh2     v1, v2, \src0, \src4, \src8,  \src12
@@ -5040,8 +4997,7 @@ function hevc_put_hevc_epel_bi_hv32_8_end_neon
         st1             {v1.8b, v2.8b, v3.8b, v4.8b}, [x0], x1
         subs            w5, w5, #1
 .endm
-1:      calc_all16
-.purgem calc
+1:      calc_all16 epel_bi_hv32_end_step
 2:      ldr             d8, [sp], #16
         ret
 endfunc
diff --git a/libavcodec/aarch64/h26x/qpel_neon.S b/libavcodec/aarch64/h26x/qpel_neon.S
index cdd065c6bd..f123f02751 100644
--- a/libavcodec/aarch64/h26x/qpel_neon.S
+++ b/libavcodec/aarch64/h26x/qpel_neon.S
@@ -961,15 +961,14 @@ function ff_hevc_put_hevc_qpel_v4_8_neon, export=1
         add             x1, x1, x2, lsl #1
         ldr             s22, [x1]
         add             x1, x1, x2
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_v4_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().s}[0], [x1], x2
         movi            v24.8h, #0
         calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
         st1             {v24.4h}, [x0], x9
         subs            w3, w3, #1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_v4_step
 2:      ret
 endfunc
 
@@ -989,7 +988,7 @@ function ff_hevc_put_hevc_qpel_v6_8_neon, export=1
         add             x1, x1, x2, lsl #1
         ldr             d22, [x1]
         add             x1, x1, x2
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_v6_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8b}, [x1], x2
         movi            v24.8h, #0
         calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
@@ -997,8 +996,7 @@ function ff_hevc_put_hevc_qpel_v6_8_neon, export=1
         st1             {v24.s}[2], [x0], x9
         subs            w3, w3, #1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_v6_step
 2:      ret
 endfunc
 
@@ -1018,15 +1016,14 @@ function ff_hevc_put_hevc_qpel_v8_8_neon, export=1
         add             x1, x1, x2, lsl #1
         ldr             d22, [x1]
         add             x1, x1, x2
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_v8_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8b}, [x1], x2
         movi            v24.8h, #0
         calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
         st1             {v24.8h}, [x0], x9
         subs            w3, w3, #1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_v8_step
 2:      ret
 endfunc
 
@@ -1046,7 +1043,7 @@ function ff_hevc_put_hevc_qpel_v12_8_neon, export=1
         add             x1, x1, x2, lsl #1
         ldr             q22, [x1]
         add             x1, x1, x2
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_v12_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().16b}, [x1], x2
         movi            v24.8h, #0
         movi            v25.8h, #0
@@ -1056,8 +1053,7 @@ function ff_hevc_put_hevc_qpel_v12_8_neon, export=1
         subs            w3, w3, #1
         st1             {v25.4h}, [x0], x9
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_v12_step
 2:      ret
 endfunc
 
@@ -1077,7 +1073,7 @@ function ff_hevc_put_hevc_qpel_v16_8_neon, export=1
         add             x1, x1, x2, lsl #1
         ldr             q22, [x1]
         add             x1, x1, x2
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_v16_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().16b}, [x1], x2
         movi            v24.8h, #0
         movi            v25.8h, #0
@@ -1086,8 +1082,7 @@ function ff_hevc_put_hevc_qpel_v16_8_neon, export=1
         subs            w3, w3, #1
         st1             {v24.8h, v25.8h}, [x0], x9
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_v16_step
 2:      ret
 endfunc
 
@@ -1106,7 +1101,7 @@ function ff_hevc_put_hevc_qpel_v24_8_neon, export=1
         ld1             {v24.16b, v25.16b}, [x1], x2
         ld1             {v26.16b, v27.16b}, [x1], x2
         ld1             {v28.16b, v29.16b}, [x1], x2
-.macro calc tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+.macro qpel_v24_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\tmp0\().16b, \tmp1\().16b}, [x1], x2
         movi            v8.8h, #0
         movi            v9.8h, #0
@@ -1117,8 +1112,7 @@ function ff_hevc_put_hevc_qpel_v24_8_neon, export=1
         subs            w3, w3, #1
         st1             {v8.8h, v9.8h, v10.8h}, [x0], x9
 .endm
-1:      calc_all2
-.purgem calc
+1:      calc_all2 qpel_v24_step
 2:      ld1             {v8.8b, v9.8b, v10.8b}, [sp]
         add             sp, sp, #32
         ret
@@ -1138,7 +1132,7 @@ function ff_hevc_put_hevc_qpel_v32_8_neon, export=1
         ld1             {v24.16b, v25.16b}, [x1], x2
         ld1             {v26.16b, v27.16b}, [x1], x2
         ld1             {v28.16b, v29.16b}, [x1], x2
-.macro calc tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+.macro qpel_v32_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\tmp0\().16b, \tmp1\().16b}, [x1], x2
         movi            v8.8h, #0
         movi            v9.8h, #0
@@ -1151,8 +1145,7 @@ function ff_hevc_put_hevc_qpel_v32_8_neon, export=1
         subs            w3, w3, #1
         st1             {v8.8h-v11.8h}, [x0], x9
 .endm
-1:      calc_all2
-.purgem calc
+1:      calc_all2 qpel_v32_step
 2:      ld1             {v8.8b-v11.8b}, [sp], #32
         ret
 endfunc
@@ -1192,7 +1185,7 @@ function ff_hevc_put_hevc_qpel_v64_8_neon, export=1
         ld1             {v24.16b, v25.16b}, [x8], x2
         ld1             {v26.16b, v27.16b}, [x8], x2
         ld1             {v28.16b, v29.16b}, [x8], x2
-.macro calc tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+.macro qpel_v64_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\tmp0\().16b, \tmp1\().16b}, [x8], x2
         movi            v8.8h, #0
         movi            v9.8h, #0
@@ -1205,8 +1198,7 @@ function ff_hevc_put_hevc_qpel_v64_8_neon, export=1
         subs            x11, x11, #1
         st1             {v8.8h-v11.8h}, [x10], x9
 .endm
-1:      calc_all2
-.purgem calc
+1:      calc_all2 qpel_v64_step
 2:      add             x0, x0, #64
         add             x1, x1, #32
         subs            w6, w6, #32
@@ -1242,7 +1234,7 @@ function ff_vvc_put_qpel_v4_8_neon, export=1
         uxtl            v20.8h, v20.8b
         uxtl            v21.8h, v21.8b
         uxtl            v22.8h, v22.8b
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro vvc_qpel_v4_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().s}[0], [x1], x2
         uxtl            \tmp\().8h, \tmp\().8b
         calc_qpelh      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqxtn
@@ -1250,8 +1242,7 @@ function ff_vvc_put_qpel_v4_8_neon, export=1
         st1             {v24.4h}, [x0], x9
 .endm
 1:
-        calc_all
-.purgem calc
+        calc_all vvc_qpel_v4_step
 2:
         ret
 endfunc
@@ -1283,7 +1274,7 @@ function ff_vvc_put_qpel_v8_8_neon, export=1
         uxtl            v20.8h, v20.8b
         uxtl            v21.8h, v21.8b
         uxtl            v22.8h, v22.8b
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro vvc_qpel_v8_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8b}, [x8], x2
         uxtl            \tmp\().8h, \tmp\().8b
         calc_qpelh      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqxtn
@@ -1292,8 +1283,7 @@ function ff_vvc_put_qpel_v8_8_neon, export=1
         st1             {v24.8h}, [x10], x9
 .endm
 1:
-        calc_all
-.purgem calc
+        calc_all vvc_qpel_v8_step
 2:
         subs            w6, w6, #8
         add             x0, x0, #16
@@ -1314,7 +1304,7 @@ function ff_hevc_put_hevc_qpel_bi_v4_8_neon, export=1
         ld1             {v20.s}[0], [x2], x3
         ld1             {v21.s}[0], [x2], x3
         ld1             {v22.s}[0], [x2], x3
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_bi_v4_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().s}[0], [x2], x3
         movi            v24.8h, #0
         calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
@@ -1324,8 +1314,7 @@ function ff_hevc_put_hevc_qpel_bi_v4_8_neon, export=1
         subs            w5, w5, #1
         st1             {v25.s}[0], [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_bi_v4_step
 2:      ret
 endfunc
 
@@ -1342,7 +1331,7 @@ function ff_hevc_put_hevc_qpel_bi_v6_8_neon, export=1
         ld1             {v20.8b}, [x2], x3
         ld1             {v21.8b}, [x2], x3
         ld1             {v22.8b}, [x2], x3
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_bi_v6_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8b}, [x2], x3
         movi            v24.8h, #0
         calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
@@ -1353,8 +1342,7 @@ function ff_hevc_put_hevc_qpel_bi_v6_8_neon, export=1
         subs            w5, w5, #1
         st1             {v25.h}[2], [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_bi_v6_step
 2:      ret
 endfunc
 
@@ -1370,7 +1358,7 @@ function ff_hevc_put_hevc_qpel_bi_v8_8_neon, export=1
         ld1             {v20.8b}, [x2], x3
         ld1             {v21.8b}, [x2], x3
         ld1             {v22.8b}, [x2], x3
- .macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+ .macro qpel_bi_v8_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8b}, [x2], x3
         movi            v24.8h, #0
         calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
@@ -1380,8 +1368,7 @@ function ff_hevc_put_hevc_qpel_bi_v8_8_neon, export=1
         subs            w5, w5, #1
         st1             {v25.8b}, [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_bi_v8_step
 2:      ret
 endfunc
 
@@ -1398,7 +1385,7 @@ function ff_hevc_put_hevc_qpel_bi_v12_8_neon, export=1
         ld1             {v20.16b}, [x2], x3
         ld1             {v21.16b}, [x2], x3
         ld1             {v22.16b}, [x2], x3
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_bi_v12_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().16b}, [x2], x3
         movi            v24.8h, #0
         movi            v25.8h, #0
@@ -1413,8 +1400,7 @@ function ff_hevc_put_hevc_qpel_bi_v12_8_neon, export=1
         subs            w5, w5, #1
         st1             {v26.s}[2], [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_bi_v12_step
 2:      ret
 endfunc
 
@@ -1430,7 +1416,7 @@ function ff_hevc_put_hevc_qpel_bi_v16_8_neon, export=1
         ld1             {v20.16b}, [x2], x3
         ld1             {v21.16b}, [x2], x3
         ld1             {v22.16b}, [x2], x3
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_bi_v16_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().16b}, [x2], x3
         movi            v24.8h, #0
         movi            v25.8h, #0
@@ -1444,8 +1430,7 @@ function ff_hevc_put_hevc_qpel_bi_v16_8_neon, export=1
         sqrshrun2       v26.16b, v25.8h, #7
         st1             {v26.16b}, [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_bi_v16_step
 2:      ret
 endfunc
 
@@ -1491,7 +1476,7 @@ function ff_hevc_put_hevc_qpel_bi_v32_8_neon, export=1
         ld1             {v24.16b, v25.16b}, [x8], x3
         ld1             {v26.16b, v27.16b}, [x8], x3
         ld1             {v28.16b, v29.16b}, [x8], x3
-.macro calc tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+.macro qpel_bi_v32_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\tmp0\().8h, \tmp1\().8h}, [x8], x3
         movi            v8.8h, #0
         movi            v9.8h, #0
@@ -1513,8 +1498,7 @@ function ff_hevc_put_hevc_qpel_bi_v32_8_neon, export=1
         subs            x11, x11, #1
         st1             {v12.16b, v13.16b}, [x10], x1
 .endm
-1:      calc_all2
-.purgem calc
+1:      calc_all2 qpel_bi_v32_step
 2:      add             x0, x0, #32 // dst
         add             x2, x2, #32 // src
         add             x4, x4, #64 // src2
@@ -1708,15 +1692,14 @@ function ff_hevc_put_hevc_qpel_uni_v4_8_neon, export=1
         add             x2, x2, x3, lsl #1
         ldr             s22, [x2]
         add             x2, x2, x3
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_uni_v4_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().s}[0], [x2], x3
         calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
         sqrshrun        v24.8b, v24.8h, #6
         subs            w4, w4, #1
         st1             {v24.s}[0], [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_uni_v4_step
 2:      ret
 endfunc
 
@@ -1736,7 +1719,7 @@ function ff_hevc_put_hevc_qpel_uni_v6_8_neon, export=1
         add             x2, x2, x3, lsl #1
         ldr             d22, [x2]
         add             x2, x2, x3
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_uni_v6_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8b}, [x2], x3
         calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
         sqrshrun        v24.8b, v24.8h, #6
@@ -1744,8 +1727,7 @@ function ff_hevc_put_hevc_qpel_uni_v6_8_neon, export=1
         subs            w4, w4, #1
         st1             {v24.h}[2], [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_uni_v6_step
 2:      ret
 endfunc
 
@@ -1764,15 +1746,14 @@ function ff_hevc_put_hevc_qpel_uni_v8_8_neon, export=1
         add             x2, x2, x3, lsl #1
         ldr             d22, [x2]
         add             x2, x2, x3
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_uni_v8_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8b}, [x2], x3
         calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
         sqrshrun        v24.8b, v24.8h, #6
         subs            w4, w4, #1
         st1             {v24.8b}, [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_uni_v8_step
 2:      ret
 endfunc
 
@@ -1795,7 +1776,7 @@ function ff_hevc_put_hevc_qpel_uni_v12_8_neon, export=1
         add             x8, x8, x3, lsl #1
         ldr             q22, [x8]
         add             x8, x8, x3
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_uni_v12_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().16b}, [x8], x3
         calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
         calc_qpelb2     v25, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
@@ -1805,8 +1786,7 @@ function ff_hevc_put_hevc_qpel_uni_v12_8_neon, export=1
         subs            x11, x11, #1
         st1             {v24.s}[2], [x10], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_uni_v12_step
 2:      add             x0, x0, #12
         add             x2, x2, #12
         subs            w7, w7, #12
@@ -1832,7 +1812,7 @@ function ff_hevc_put_hevc_qpel_uni_v16_8_neon, export=1
         add             x8, x8, x3, lsl #1
         ldr             q22, [x8]
         add             x8, x8, x3
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_uni_v16_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().16b}, [x8], x3
         calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
         calc_qpelb2     v25, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
@@ -1841,8 +1821,7 @@ function ff_hevc_put_hevc_qpel_uni_v16_8_neon, export=1
         subs            x11, x11, #1
         st1             {v24.16b}, [x10], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_uni_v16_step
 2:      add             x0, x0, #16
         add             x2, x2, #16
         subs            w7, w7, #16
@@ -3148,15 +3127,14 @@ function hevc_put_hevc_qpel_uni_hv4_8_end_neon
         add             sp, sp, x9, lsl #1
         ldr             d22, [sp]
         add             sp, sp, x9
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_uni_hv4_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().4h}, [sp], x9
         calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn, #12
         sqxtun          v1.8b, v1.8h
         subs            w4, w4, #1
         st1             {v1.s}[0], [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_uni_hv4_end_step
 2:      mov             sp, x14
         ret
 endfunc
@@ -3176,7 +3154,7 @@ function hevc_put_hevc_qpel_uni_hv6_8_end_neon
         add             sp, sp, x9, lsl #1
         ldr             q22, [sp]
         add             sp, sp, x9
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_uni_hv6_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8h}, [sp], x9
         calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn, #12
         calc_qpelh2     v1, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn2, #12
@@ -3185,8 +3163,7 @@ function hevc_put_hevc_qpel_uni_hv6_8_end_neon
         subs            w4, w4, #1
         st1             {v1.h}[2], [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_uni_hv6_end_step
 2:      mov             sp, x14
         ret
 endfunc
@@ -3205,7 +3182,7 @@ function hevc_put_hevc_qpel_uni_hv8_8_end_neon
         add             sp, sp, x9, lsl #1
         ldr             q22, [sp]
         add             sp, sp, x9
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_uni_hv8_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8h}, [sp], x9
         calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn, #12
         calc_qpelh2     v1, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn2, #12
@@ -3213,8 +3190,7 @@ function hevc_put_hevc_qpel_uni_hv8_8_end_neon
         subs            w4, w4, #1
         st1             {v1.8b}, [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_uni_hv8_end_step
 2:      mov             sp, x14
         ret
 endfunc
@@ -3230,7 +3206,7 @@ function hevc_put_hevc_qpel_uni_hv12_8_end_neon
         ld1             {v24.8h, v25.8h}, [sp], x9
         ld1             {v26.8h, v27.8h}, [sp], x9
         ld1             {v28.8h, v29.8h}, [sp], x9
-.macro calc tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+.macro qpel_uni_hv12_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\tmp0\().8h, \tmp1\().8h}, [sp], x9
         calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqrshrn, #12
         calc_qpelh2     v1, v2, \src0, \src1,  \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqrshrn2, #12
@@ -3241,8 +3217,7 @@ function hevc_put_hevc_qpel_uni_hv12_8_end_neon
         subs            w4, w4, #1
         st1             {v1.s}[2], [x0], x1
 .endm
-1:      calc_all2
-.purgem calc
+1:      calc_all2 qpel_uni_hv12_end_step
 2:      mov             sp, x14
         ret
 endfunc
@@ -3261,7 +3236,7 @@ function hevc_put_hevc_qpel_uni_hv16_8_end_neon
         ld1             {v24.8h, v25.8h}, [x8], x9
         ld1             {v26.8h, v27.8h}, [x8], x9
         ld1             {v28.8h, v29.8h}, [x8], x9
-.macro calc tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+.macro qpel_uni_hv16_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\tmp0\().8h, \tmp1\().8h}, [x8], x9
         calc_qpelh      v1,     \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7,  sqrshrn,  #12
         calc_qpelh2     v1, v2, \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7,  sqrshrn2, #12
@@ -3272,8 +3247,7 @@ function hevc_put_hevc_qpel_uni_hv16_8_end_neon
         sqxtun2         v1.16b, v2.8h
         st1             {v1.16b}, [x10], x1
 .endm
-1:      calc_all2
-.purgem calc
+1:      calc_all2 qpel_uni_hv16_end_step
 2:      add             x0, x0, #16
         add             sp, sp, #32
         subs            w7, w7, #16
@@ -4904,14 +4878,13 @@ function hevc_put_hevc_qpel_hv4_8_end_neon
         add             sp, sp, x7, lsl #1
         ldr             d22, [sp]
         add             sp, sp, x7
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_hv4_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().4h}, [sp], x7
         calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn
         subs            w3, w3, #1
         st1             {v1.4h}, [x0], x7
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_hv4_end_step
 2:      mov             sp, x14
         ret
 endfunc
@@ -4930,7 +4903,7 @@ function hevc_put_hevc_qpel_hv6_8_end_neon
         add             sp, sp, x7, lsl #1
         ldr             q22, [sp]
         add             sp, sp, x7
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_hv6_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8h}, [sp], x7
         calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn
         calc_qpelh2     v1, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn2
@@ -4938,8 +4911,7 @@ function hevc_put_hevc_qpel_hv6_8_end_neon
         subs            w3, w3, #1
         st1             {v1.s}[2], [x0], x8
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_hv6_end_step
 2:      mov             sp, x14
         ret
 endfunc
@@ -4965,15 +4937,14 @@ function hevc_put_hevc_qpel_hv8_8_end_neon
         add             sp, sp, x7, lsl #1
         ldr             q22, [sp]
         add             sp, sp, x7
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_hv8_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8h}, [sp], x7
         calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn
         calc_qpelh2     v1, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn2
         subs            w3, w3, #1
         st1             {v1.8h}, [x0], x7
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_hv8_end_step
 2:      mov             sp, x14
         ret
 endfunc
@@ -4989,7 +4960,7 @@ function hevc_put_hevc_qpel_hv12_8_end_neon
         ld1             {v24.8h, v25.8h}, [sp], x7
         ld1             {v26.8h, v27.8h}, [sp], x7
         ld1             {v28.8h, v29.8h}, [sp], x7
-.macro calc tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+.macro qpel_hv12_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\tmp0\().8h, \tmp1\().8h}, [sp], x7
         calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn
         calc_qpelh2     v1, v2, \src0, \src1,  \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn2
@@ -4998,8 +4969,7 @@ function hevc_put_hevc_qpel_hv12_8_end_neon
         subs            w3, w3, #1
         st1             {v2.4h}, [x0], x8
 .endm
-1:      calc_all2
-.purgem calc
+1:      calc_all2 qpel_hv12_end_step
 2:      mov             sp, x14
         ret
 endfunc
@@ -5021,7 +4991,7 @@ function hevc_put_hevc_qpel_hv16_8_end_neon
         ld1             {v24.8h, v25.8h}, [sp], x7
         ld1             {v26.8h, v27.8h}, [sp], x7
         ld1             {v28.8h, v29.8h}, [sp], x7
-.macro calc tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+.macro qpel_hv16_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\tmp0\().8h, \tmp1\().8h}, [sp], x7
         calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn
         calc_qpelh2     v1, v2, \src0, \src1,  \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn2
@@ -5030,8 +5000,7 @@ function hevc_put_hevc_qpel_hv16_8_end_neon
         subs            w3, w3, #1
         st1             {v1.8h, v2.8h}, [x0], x7
 .endm
-1:      calc_all2
-.purgem calc
+1:      calc_all2 qpel_hv16_end_step
 2:      mov             sp, x14
         ret
 endfunc
@@ -5055,7 +5024,7 @@ function hevc_put_hevc_qpel_hv32_8_end_neon
         ld1             {v24.8h, v25.8h}, [x8], x7
         ld1             {v26.8h, v27.8h}, [x8], x7
         ld1             {v28.8h, v29.8h}, [x8], x7
-.macro calc tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+.macro qpel_hv32_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\tmp0\().8h, \tmp1\().8h}, [x8], x7
         calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn
         calc_qpelh2     v1, v2, \src0, \src1,  \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn2
@@ -5064,8 +5033,7 @@ function hevc_put_hevc_qpel_hv32_8_end_neon
         subs            x9, x9, #1
         st1             {v1.8h, v2.8h}, [x5], x7
 .endm
-1:      calc_all2
-.purgem calc
+1:      calc_all2 qpel_hv32_end_step
 2:      add             x0, x0, #32
         add             sp, sp, #32
         subs            w6, w6, #16
@@ -6106,7 +6074,7 @@ function hevc_put_hevc_qpel_bi_hv4_8_end_neon
         ld1             {v20.4h}, [sp], x9
         ld1             {v21.4h}, [sp], x9
         ld1             {v22.4h}, [sp], x9
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_bi_hv4_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().4h}, [sp], x9
         calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sshr
         ld1             {v5.4h}, [x4], x9 // src2
@@ -6116,8 +6084,7 @@ function hevc_put_hevc_qpel_bi_hv4_8_end_neon
         subs            w5, w5, #1
         st1             {v1.s}[0], [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_bi_hv4_end_step
 2:      mov             sp, x14
         ret
 endfunc
@@ -6133,7 +6100,7 @@ function hevc_put_hevc_qpel_bi_hv6_8_end_neon
         ld1             {v20.8h}, [sp], x9
         ld1             {v21.8h}, [sp], x9
         ld1             {v22.8h}, [sp], x9
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_bi_hv6_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8h}, [sp], x9
         calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sshr
         calc_qpelh2     v2, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sshr
@@ -6147,8 +6114,7 @@ function hevc_put_hevc_qpel_bi_hv6_8_end_neon
         subs            w5, w5, #1
         st1             {v1.h}[2], [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_bi_hv6_end_step
 2:      mov             sp, x14
         ret
 endfunc
@@ -6163,7 +6129,7 @@ function hevc_put_hevc_qpel_bi_hv8_8_end_neon
         ld1             {v20.8h}, [sp], x9
         ld1             {v21.8h}, [sp], x9
         ld1             {v22.8h}, [sp], x9
-.macro calc tmp, src0, src1, src2, src3, src4, src5, src6, src7
+.macro qpel_bi_hv8_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8h}, [sp], x9
         calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sshr
         calc_qpelh2     v2, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sshr
@@ -6176,8 +6142,7 @@ function hevc_put_hevc_qpel_bi_hv8_8_end_neon
         subs            w5, w5, #1
         st1             {v1.8b}, [x0], x1
 .endm
-1:      calc_all
-.purgem calc
+1:      calc_all qpel_bi_hv8_end_step
 2:      mov             sp, x14
         ret
 endfunc
@@ -6197,7 +6162,7 @@ function hevc_put_hevc_qpel_bi_hv16_8_end_neon
         ld1             {v24.8h, v25.8h}, [x8], x9
         ld1             {v26.8h, v27.8h}, [x8], x9
         ld1             {v28.8h, v29.8h}, [x8], x9
-.macro calc tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+.macro qpel_bi_hv16_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\tmp0\().8h, \tmp1\().8h}, [x8], x9
         calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sshr
         calc_qpelh2     v2, v2, \src0, \src1,  \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sshr
@@ -6217,8 +6182,7 @@ function hevc_put_hevc_qpel_bi_hv16_8_end_neon
         subs            x11, x11, #1
         st1             {v1.16b}, [x7], x1
 .endm
-1:      calc_all2
-.purgem calc
+1:      calc_all2 qpel_bi_hv16_end_step
 2:      add             x0, x0, #16
         add             sp, sp, #32
         subs            x10, x10, #16
-- 
2.52.0


>From e114baa30e030af3b777aa9613bcd31cc0c2e9cf Mon Sep 17 00:00:00 2001
From: Zhao Zhili <[email protected]>
Date: Fri, 3 Jul 2026 22:01:55 +0800
Subject: [PATCH 3/3] aarch64/h26x: move step macros before their functions

No functional changes.

Signed-off-by: Zhao Zhili <[email protected]>
---
 libavcodec/aarch64/h26x/epel_neon.S | 606 +++++++++++++-----------
 libavcodec/aarch64/h26x/qpel_neon.S | 707 +++++++++++++++-------------
 2 files changed, 697 insertions(+), 616 deletions(-)

diff --git a/libavcodec/aarch64/h26x/epel_neon.S b/libavcodec/aarch64/h26x/epel_neon.S
index 32ba266eb0..41b62df56d 100644
--- a/libavcodec/aarch64/h26x/epel_neon.S
+++ b/libavcodec/aarch64/h26x/epel_neon.S
@@ -1095,13 +1095,6 @@ function ff_hevc_put_hevc_epel_bi_h64_8_neon, export=1
         ret
 endfunc
 
-function ff_hevc_put_hevc_epel_bi_v4_8_neon, export=1
-        load_epel_filterb x7, x6
-        sub             x2, x2, x3
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.s}[0], [x2], x3
-        ld1             {v17.s}[0], [x2], x3
-        ld1             {v18.s}[0], [x2], x3
 .macro epel_bi_v4_step src0, src1, src2, src3
         ld1             {\src3\().s}[0], [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
@@ -1111,18 +1104,18 @@ function ff_hevc_put_hevc_epel_bi_v4_8_neon, export=1
         subs            w5, w5, #1
         st1             {v4.s}[0], [x0], x1
 .endm
+
+function ff_hevc_put_hevc_epel_bi_v4_8_neon, export=1
+        load_epel_filterb x7, x6
+        sub             x2, x2, x3
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.s}[0], [x2], x3
+        ld1             {v17.s}[0], [x2], x3
+        ld1             {v18.s}[0], [x2], x3
 1:      calc_all4 epel_bi_v4_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_bi_v6_8_neon, export=1
-        load_epel_filterb x7, x6
-        sub             x2, x2, x3
-        sub             x1, x1, #4
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.8b}, [x2], x3
-        ld1             {v17.8b}, [x2], x3
-        ld1             {v18.8b}, [x2], x3
 .macro epel_bi_v6_step src0, src1, src2, src3
         ld1             {\src3\().8b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
@@ -1133,17 +1126,19 @@ function ff_hevc_put_hevc_epel_bi_v6_8_neon, export=1
         subs            w5, w5, #1
         st1             {v4.h}[2], [x0], x1
 .endm
-1:      calc_all4 epel_bi_v6_step
-2:      ret
-endfunc
 
-function ff_hevc_put_hevc_epel_bi_v8_8_neon, export=1
+function ff_hevc_put_hevc_epel_bi_v6_8_neon, export=1
         load_epel_filterb x7, x6
         sub             x2, x2, x3
+        sub             x1, x1, #4
         mov             x10, #(HEVC_MAX_PB_SIZE * 2)
         ld1             {v16.8b}, [x2], x3
         ld1             {v17.8b}, [x2], x3
         ld1             {v18.8b}, [x2], x3
+1:      calc_all4 epel_bi_v6_step
+2:      ret
+endfunc
+
 .macro epel_bi_v8_step src0, src1, src2, src3
         ld1             {\src3\().8b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
@@ -1153,18 +1148,18 @@ function ff_hevc_put_hevc_epel_bi_v8_8_neon, export=1
         subs            w5, w5, #1
         st1             {v4.8b}, [x0], x1
 .endm
+
+function ff_hevc_put_hevc_epel_bi_v8_8_neon, export=1
+        load_epel_filterb x7, x6
+        sub             x2, x2, x3
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.8b}, [x2], x3
+        ld1             {v17.8b}, [x2], x3
+        ld1             {v18.8b}, [x2], x3
 1:      calc_all4 epel_bi_v8_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_bi_v12_8_neon, export=1
-        load_epel_filterb x7, x6
-        sub             x1, x1, #8
-        sub             x2, x2, x3
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.16b}, [x2], x3
-        ld1             {v17.16b}, [x2], x3
-        ld1             {v18.16b}, [x2], x3
 .macro epel_bi_v12_step src0, src1, src2, src3
         ld1             {\src3\().16b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
@@ -1178,17 +1173,19 @@ function ff_hevc_put_hevc_epel_bi_v12_8_neon, export=1
         subs            w5, w5, #1
         st1             {v4.s}[2], [x0], x1
 .endm
-1:      calc_all4 epel_bi_v12_step
-2:      ret
-endfunc
 
-function ff_hevc_put_hevc_epel_bi_v16_8_neon, export=1
+function ff_hevc_put_hevc_epel_bi_v12_8_neon, export=1
         load_epel_filterb x7, x6
+        sub             x1, x1, #8
         sub             x2, x2, x3
         mov             x10, #(HEVC_MAX_PB_SIZE * 2)
         ld1             {v16.16b}, [x2], x3
         ld1             {v17.16b}, [x2], x3
         ld1             {v18.16b}, [x2], x3
+1:      calc_all4 epel_bi_v12_step
+2:      ret
+endfunc
+
 .macro epel_bi_v16_step src0, src1, src2, src3
         ld1             {\src3\().16b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
@@ -1201,17 +1198,18 @@ function ff_hevc_put_hevc_epel_bi_v16_8_neon, export=1
         st1             {v4.16b}, [x0], x1
         subs            w5, w5, #1
 .endm
+
+function ff_hevc_put_hevc_epel_bi_v16_8_neon, export=1
+        load_epel_filterb x7, x6
+        sub             x2, x2, x3
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.16b}, [x2], x3
+        ld1             {v17.16b}, [x2], x3
+        ld1             {v18.16b}, [x2], x3
 1:      calc_all4 epel_bi_v16_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_bi_v24_8_neon, export=1
-        load_epel_filterb x7, x6
-        sub             x2, x2, x3
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.8b, v17.8b, v18.8b}, [x2], x3
-        ld1             {v19.8b, v20.8b, v21.8b}, [x2], x3
-        ld1             {v22.8b, v23.8b, v24.8b}, [x2], x3
 .macro epel_bi_v24_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().8b, \src10\().8b, \src11\().8b}, [x2], x3
         calc_epelb      v4, \src0, \src3, \src6, \src9
@@ -1227,17 +1225,18 @@ function ff_hevc_put_hevc_epel_bi_v24_8_neon, export=1
         subs            w5, w5, #1
         st1             {v4.8b, v5.8b, v6.8b}, [x0], x1
 .endm
+
+function ff_hevc_put_hevc_epel_bi_v24_8_neon, export=1
+        load_epel_filterb x7, x6
+        sub             x2, x2, x3
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.8b, v17.8b, v18.8b}, [x2], x3
+        ld1             {v19.8b, v20.8b, v21.8b}, [x2], x3
+        ld1             {v22.8b, v23.8b, v24.8b}, [x2], x3
 1:      calc_all12 epel_bi_v24_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_bi_v32_8_neon, export=1
-        load_epel_filterb x7, x6
-        sub             x2, x2, x3
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.16b, v17.16b}, [x2], x3
-        ld1             {v18.16b, v19.16b}, [x2], x3
-        ld1             {v20.16b, v21.16b}, [x2], x3
 .macro epel_bi_v32_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().16b, \src7\().16b}, [x2], x3
         calc_epelb      v4, \src0, \src2, \src4, \src6
@@ -1256,6 +1255,14 @@ function ff_hevc_put_hevc_epel_bi_v32_8_neon, export=1
         st1             {v4.16b, v5.16b}, [x0], x1
         subs            w5, w5, #1
 .endm
+
+function ff_hevc_put_hevc_epel_bi_v32_8_neon, export=1
+        load_epel_filterb x7, x6
+        sub             x2, x2, x3
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.16b, v17.16b}, [x2], x3
+        ld1             {v18.16b, v19.16b}, [x2], x3
+        ld1             {v20.16b, v21.16b}, [x2], x3
 1:      calc_all8 epel_bi_v32_step
 2:      ret
 endfunc
@@ -1304,6 +1311,14 @@ function ff_hevc_put_hevc_epel_bi_v64_8_neon, export=1
         ret
 endfunc
 
+.macro epel_v4_step src0, src1, src2, src3
+        ld1             {\src3\().s}[0], [x1], x2
+        movi            v4.8h, #0
+        calc_epelb      v4, \src0, \src1, \src2, \src3
+        subs            w3, w3, #1
+        st1             {v4.4h}, [x0], x10
+.endm
+
 function ff_hevc_put_hevc_epel_v4_8_neon, export=1
         load_epel_filterb x5, x4
         sub             x1, x1, x2
@@ -1312,17 +1327,19 @@ function ff_hevc_put_hevc_epel_v4_8_neon, export=1
         ldr             s17, [x1, x2]
         add             x1, x1, x2, lsl #1
         ld1             {v18.s}[0], [x1], x2
-.macro epel_v4_step src0, src1, src2, src3
-        ld1             {\src3\().s}[0], [x1], x2
-        movi            v4.8h, #0
-        calc_epelb      v4, \src0, \src1, \src2, \src3
-        subs            w3, w3, #1
-        st1             {v4.4h}, [x0], x10
-.endm
 1:      calc_all4 epel_v4_step
 2:      ret
 endfunc
 
+.macro epel_v6_step src0, src1, src2, src3
+        ld1             {\src3\().8b}, [x1], x2
+        movi            v4.8h, #0
+        calc_epelb      v4, \src0, \src1, \src2, \src3
+        st1             {v4.d}[0], [x0], #8
+        subs            w3, w3, #1
+        st1             {v4.s}[2], [x0], x10
+.endm
+
 function ff_hevc_put_hevc_epel_v6_8_neon, export=1
         load_epel_filterb x5, x4
         sub             x1, x1, x2
@@ -1331,18 +1348,18 @@ function ff_hevc_put_hevc_epel_v6_8_neon, export=1
         ldr             d17, [x1, x2]
         add             x1, x1, x2, lsl #1
         ld1             {v18.8b}, [x1], x2
-.macro epel_v6_step src0, src1, src2, src3
-        ld1             {\src3\().8b}, [x1], x2
-        movi            v4.8h, #0
-        calc_epelb      v4, \src0, \src1, \src2, \src3
-        st1             {v4.d}[0], [x0], #8
-        subs            w3, w3, #1
-        st1             {v4.s}[2], [x0], x10
-.endm
 1:      calc_all4 epel_v6_step
 2:      ret
 endfunc
 
+.macro epel_v8_step src0, src1, src2, src3
+        ld1             {\src3\().8b}, [x1], x2
+        movi            v4.8h, #0
+        calc_epelb      v4, \src0, \src1, \src2, \src3
+        subs            w3, w3, #1
+        st1             {v4.8h}, [x0], x10
+.endm
+
 function ff_hevc_put_hevc_epel_v8_8_neon, export=1
         load_epel_filterb x5, x4
         sub             x1, x1, x2
@@ -1351,25 +1368,10 @@ function ff_hevc_put_hevc_epel_v8_8_neon, export=1
         ldr             d17, [x1, x2]
         add             x1, x1, x2, lsl #1
         ld1             {v18.8b}, [x1], x2
-.macro epel_v8_step src0, src1, src2, src3
-        ld1             {\src3\().8b}, [x1], x2
-        movi            v4.8h, #0
-        calc_epelb      v4, \src0, \src1, \src2, \src3
-        subs            w3, w3, #1
-        st1             {v4.8h}, [x0], x10
-.endm
 1:      calc_all4 epel_v8_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_v12_8_neon, export=1
-        load_epel_filterb x5, x4
-        sub             x1, x1, x2
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ldr             q16, [x1]
-        ldr             q17, [x1, x2]
-        add             x1, x1, x2, lsl #1
-        ld1             {v18.16b}, [x1], x2
 .macro epel_v12_step src0, src1, src2, src3
         ld1             {\src3\().16b}, [x1], x2
         movi            v4.8h, #0
@@ -1381,11 +1383,8 @@ function ff_hevc_put_hevc_epel_v12_8_neon, export=1
         str             d5, [x0, #16]
         add             x0, x0, x10
 .endm
-1:      calc_all4 epel_v12_step
-2:      ret
-endfunc
 
-function ff_hevc_put_hevc_epel_v16_8_neon, export=1
+function ff_hevc_put_hevc_epel_v12_8_neon, export=1
         load_epel_filterb x5, x4
         sub             x1, x1, x2
         mov             x10, #(HEVC_MAX_PB_SIZE * 2)
@@ -1393,6 +1392,10 @@ function ff_hevc_put_hevc_epel_v16_8_neon, export=1
         ldr             q17, [x1, x2]
         add             x1, x1, x2, lsl #1
         ld1             {v18.16b}, [x1], x2
+1:      calc_all4 epel_v12_step
+2:      ret
+endfunc
+
 .macro epel_v16_step src0, src1, src2, src3
         ld1             {\src3\().16b}, [x1], x2
         movi            v4.8h, #0
@@ -1402,17 +1405,19 @@ function ff_hevc_put_hevc_epel_v16_8_neon, export=1
         subs            w3, w3, #1
         st1             {v4.8h, v5.8h}, [x0], x10
 .endm
+
+function ff_hevc_put_hevc_epel_v16_8_neon, export=1
+        load_epel_filterb x5, x4
+        sub             x1, x1, x2
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ldr             q16, [x1]
+        ldr             q17, [x1, x2]
+        add             x1, x1, x2, lsl #1
+        ld1             {v18.16b}, [x1], x2
 1:      calc_all4 epel_v16_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_v24_8_neon, export=1
-        load_epel_filterb x5, x4
-        sub             x1, x1, x2
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.8b, v17.8b, v18.8b}, [x1], x2
-        ld1             {v19.8b, v20.8b, v21.8b}, [x1], x2
-        ld1             {v22.8b, v23.8b, v24.8b}, [x1], x2
 .macro epel_v24_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().8b, \src10\().8b, \src11\().8b}, [x1], x2
         movi            v4.8h, #0
@@ -1424,17 +1429,18 @@ function ff_hevc_put_hevc_epel_v24_8_neon, export=1
         subs            w3, w3, #1
         st1             {v4.8h-v6.8h}, [x0], x10
 .endm
+
+function ff_hevc_put_hevc_epel_v24_8_neon, export=1
+        load_epel_filterb x5, x4
+        sub             x1, x1, x2
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.8b, v17.8b, v18.8b}, [x1], x2
+        ld1             {v19.8b, v20.8b, v21.8b}, [x1], x2
+        ld1             {v22.8b, v23.8b, v24.8b}, [x1], x2
 1:      calc_all12 epel_v24_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_v32_8_neon, export=1
-        load_epel_filterb x5, x4
-        sub             x1, x1, x2
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.16b, v17.16b}, [x1], x2
-        ld1             {v18.16b, v19.16b}, [x1], x2
-        ld1             {v20.16b, v21.16b}, [x1], x2
 .macro epel_v32_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().16b, \src7\().16b}, [x1], x2
         movi            v4.8h, #0
@@ -1448,17 +1454,18 @@ function ff_hevc_put_hevc_epel_v32_8_neon, export=1
         subs            w3, w3, #1
         st1             {v4.8h-v7.8h}, [x0], x10
 .endm
+
+function ff_hevc_put_hevc_epel_v32_8_neon, export=1
+        load_epel_filterb x5, x4
+        sub             x1, x1, x2
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.16b, v17.16b}, [x1], x2
+        ld1             {v18.16b, v19.16b}, [x1], x2
+        ld1             {v20.16b, v21.16b}, [x1], x2
 1:      calc_all8 epel_v32_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_v48_8_neon, export=1
-        load_epel_filterb x5, x4
-        sub             x1, x1, x2
-        mov             x10, #64
-        ld1             {v16.16b, v17.16b, v18.16b}, [x1], x2
-        ld1             {v19.16b, v20.16b, v21.16b}, [x1], x2
-        ld1             {v22.16b, v23.16b, v24.16b}, [x1], x2
 .macro epel_v48_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().16b, \src10\().16b, \src11\().16b}, [x1], x2
         movi            v4.8h, #0
@@ -1477,18 +1484,18 @@ function ff_hevc_put_hevc_epel_v48_8_neon, export=1
         subs            w3, w3, #1
         st1             {v28.8h-v29.8h}, [x0], x10
 .endm
+
+function ff_hevc_put_hevc_epel_v48_8_neon, export=1
+        load_epel_filterb x5, x4
+        sub             x1, x1, x2
+        mov             x10, #64
+        ld1             {v16.16b, v17.16b, v18.16b}, [x1], x2
+        ld1             {v19.16b, v20.16b, v21.16b}, [x1], x2
+        ld1             {v22.16b, v23.16b, v24.16b}, [x1], x2
 1:      calc_all12 epel_v48_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_v64_8_neon, export=1
-        load_epel_filterb x5, x4
-        sub             sp, sp, #32
-        st1             {v8.8b-v11.8b}, [sp]
-        sub             x1, x1, x2
-        ld1             {v16.16b, v17.16b, v18.16b, v19.16b}, [x1], x2
-        ld1             {v20.16b, v21.16b, v22.16b, v23.16b}, [x1], x2
-        ld1             {v24.16b, v25.16b, v26.16b, v27.16b}, [x1], x2
 .macro epel_v64_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\src12\().16b-\src15\().16b}, [x1], x2
         movi            v4.8h, #0
@@ -1511,18 +1518,21 @@ function ff_hevc_put_hevc_epel_v64_8_neon, export=1
         subs            w3, w3, #1
         st1             {v8.8h-v11.8h}, [x0], #64
 .endm
+
+function ff_hevc_put_hevc_epel_v64_8_neon, export=1
+        load_epel_filterb x5, x4
+        sub             sp, sp, #32
+        st1             {v8.8b-v11.8b}, [sp]
+        sub             x1, x1, x2
+        ld1             {v16.16b, v17.16b, v18.16b, v19.16b}, [x1], x2
+        ld1             {v20.16b, v21.16b, v22.16b, v23.16b}, [x1], x2
+        ld1             {v24.16b, v25.16b, v26.16b, v27.16b}, [x1], x2
 1:      calc_all16 epel_v64_step
 2:      ld1             {v8.8b-v11.8b}, [sp]
         add             sp, sp, #32
         ret
 endfunc
 
-function ff_hevc_put_hevc_epel_uni_v4_8_neon, export=1
-        load_epel_filterb x6, x5
-        sub             x2, x2, x3
-        ld1             {v16.s}[0], [x2], x3
-        ld1             {v17.s}[0], [x2], x3
-        ld1             {v18.s}[0], [x2], x3
 .macro epel_uni_v4_step src0, src1, src2, src3
         ld1             {\src3\().s}[0], [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
@@ -1530,17 +1540,17 @@ function ff_hevc_put_hevc_epel_uni_v4_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.s}[0], [x0], x1
 .endm
+
+function ff_hevc_put_hevc_epel_uni_v4_8_neon, export=1
+        load_epel_filterb x6, x5
+        sub             x2, x2, x3
+        ld1             {v16.s}[0], [x2], x3
+        ld1             {v17.s}[0], [x2], x3
+        ld1             {v18.s}[0], [x2], x3
 1:      calc_all4 epel_uni_v4_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_uni_v6_8_neon, export=1
-        load_epel_filterb x6, x5
-        sub             x2, x2, x3
-        sub             x1, x1, #4
-        ld1             {v16.8b}, [x2], x3
-        ld1             {v17.8b}, [x2], x3
-        ld1             {v18.8b}, [x2], x3
 .macro epel_uni_v6_step src0, src1, src2, src3
         ld1             {\src3\().8b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
@@ -1549,16 +1559,18 @@ function ff_hevc_put_hevc_epel_uni_v6_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.h}[2], [x0], x1
 .endm
+
+function ff_hevc_put_hevc_epel_uni_v6_8_neon, export=1
+        load_epel_filterb x6, x5
+        sub             x2, x2, x3
+        sub             x1, x1, #4
+        ld1             {v16.8b}, [x2], x3
+        ld1             {v17.8b}, [x2], x3
+        ld1             {v18.8b}, [x2], x3
 1:      calc_all4 epel_uni_v6_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_uni_v8_8_neon, export=1
-        load_epel_filterb x6, x5
-        sub             x2, x2, x3
-        ld1             {v16.8b}, [x2], x3
-        ld1             {v17.8b}, [x2], x3
-        ld1             {v18.8b}, [x2], x3
 .macro epel_uni_v8_step src0, src1, src2, src3
         ld1             {\src3\().8b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
@@ -1566,17 +1578,17 @@ function ff_hevc_put_hevc_epel_uni_v8_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.8b}, [x0], x1
 .endm
+
+function ff_hevc_put_hevc_epel_uni_v8_8_neon, export=1
+        load_epel_filterb x6, x5
+        sub             x2, x2, x3
+        ld1             {v16.8b}, [x2], x3
+        ld1             {v17.8b}, [x2], x3
+        ld1             {v18.8b}, [x2], x3
 1:      calc_all4 epel_uni_v8_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_uni_v12_8_neon, export=1
-        load_epel_filterb x6, x5
-        sub             x2, x2, x3
-        sub             x1, x1, #8
-        ld1             {v16.16b}, [x2], x3
-        ld1             {v17.16b}, [x2], x3
-        ld1             {v18.16b}, [x2], x3
 .macro epel_uni_v12_step src0, src1, src2, src3
         ld1             {\src3\().16b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
@@ -1587,16 +1599,18 @@ function ff_hevc_put_hevc_epel_uni_v12_8_neon, export=1
         st1             {v4.8b}, [x0], #8
         st1             {v4.s}[2], [x0], x1
 .endm
+
+function ff_hevc_put_hevc_epel_uni_v12_8_neon, export=1
+        load_epel_filterb x6, x5
+        sub             x2, x2, x3
+        sub             x1, x1, #8
+        ld1             {v16.16b}, [x2], x3
+        ld1             {v17.16b}, [x2], x3
+        ld1             {v18.16b}, [x2], x3
 1:      calc_all4 epel_uni_v12_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_uni_v16_8_neon, export=1
-        load_epel_filterb x6, x5
-        sub             x2, x2, x3
-        ld1             {v16.16b}, [x2], x3
-        ld1             {v17.16b}, [x2], x3
-        ld1             {v18.16b}, [x2], x3
 .macro epel_uni_v16_step src0, src1, src2, src3
         ld1             {\src3\().16b}, [x2], x3
         calc_epelb      v4, \src0, \src1, \src2, \src3
@@ -1606,16 +1620,17 @@ function ff_hevc_put_hevc_epel_uni_v16_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.16b}, [x0], x1
 .endm
+
+function ff_hevc_put_hevc_epel_uni_v16_8_neon, export=1
+        load_epel_filterb x6, x5
+        sub             x2, x2, x3
+        ld1             {v16.16b}, [x2], x3
+        ld1             {v17.16b}, [x2], x3
+        ld1             {v18.16b}, [x2], x3
 1:      calc_all4 epel_uni_v16_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_uni_v24_8_neon, export=1
-        load_epel_filterb x6, x5
-        sub             x2, x2, x3
-        ld1             {v16.8b, v17.8b, v18.8b}, [x2], x3
-        ld1             {v19.8b, v20.8b, v21.8b}, [x2], x3
-        ld1             {v22.8b, v23.8b, v24.8b}, [x2], x3
 .macro epel_uni_v24_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().8b, \src10\().8b, \src11\().8b}, [x2], x3
         calc_epelb      v4, \src0, \src3, \src6, \src9
@@ -1627,16 +1642,17 @@ function ff_hevc_put_hevc_epel_uni_v24_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.8b-v6.8b}, [x0], x1
 .endm
+
+function ff_hevc_put_hevc_epel_uni_v24_8_neon, export=1
+        load_epel_filterb x6, x5
+        sub             x2, x2, x3
+        ld1             {v16.8b, v17.8b, v18.8b}, [x2], x3
+        ld1             {v19.8b, v20.8b, v21.8b}, [x2], x3
+        ld1             {v22.8b, v23.8b, v24.8b}, [x2], x3
 1:      calc_all12 epel_uni_v24_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_uni_v32_8_neon, export=1
-        load_epel_filterb x6, x5
-        sub             x2, x2, x3
-        ld1             {v16.16b, v17.16b}, [x2], x3
-        ld1             {v18.16b, v19.16b}, [x2], x3
-        ld1             {v20.16b, v21.16b}, [x2], x3
 .macro epel_uni_v32_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().16b, \src7\().16b}, [x2], x3
         calc_epelb      v4, \src0, \src2, \src4, \src6
@@ -1650,16 +1666,17 @@ function ff_hevc_put_hevc_epel_uni_v32_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.16b, v5.16b}, [x0], x1
 .endm
+
+function ff_hevc_put_hevc_epel_uni_v32_8_neon, export=1
+        load_epel_filterb x6, x5
+        sub             x2, x2, x3
+        ld1             {v16.16b, v17.16b}, [x2], x3
+        ld1             {v18.16b, v19.16b}, [x2], x3
+        ld1             {v20.16b, v21.16b}, [x2], x3
 1:      calc_all8 epel_uni_v32_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_uni_v48_8_neon, export=1
-        load_epel_filterb x6, x5
-        sub             x2, x2, x3
-        ld1             {v16.16b, v17.16b, v18.16b}, [x2], x3
-        ld1             {v19.16b, v20.16b, v21.16b}, [x2], x3
-        ld1             {v22.16b, v23.16b, v24.16b}, [x2], x3
 .macro epel_uni_v48_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().16b, \src10\().16b, \src11\().16b}, [x2], x3
         calc_epelb      v4,  \src0, \src3, \src6, \src9
@@ -1677,18 +1694,17 @@ function ff_hevc_put_hevc_epel_uni_v48_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.16b, v5.16b, v6.16b}, [x0], x1
 .endm
+
+function ff_hevc_put_hevc_epel_uni_v48_8_neon, export=1
+        load_epel_filterb x6, x5
+        sub             x2, x2, x3
+        ld1             {v16.16b, v17.16b, v18.16b}, [x2], x3
+        ld1             {v19.16b, v20.16b, v21.16b}, [x2], x3
+        ld1             {v22.16b, v23.16b, v24.16b}, [x2], x3
 1:      calc_all12 epel_uni_v48_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_epel_uni_v64_8_neon, export=1
-        load_epel_filterb x6, x5
-        sub             sp, sp, #32
-        st1             {v8.8b-v11.8b}, [sp]
-        sub             x2, x2, x3
-        ld1             {v16.16b, v17.16b, v18.16b, v19.16b}, [x2], x3
-        ld1             {v20.16b, v21.16b, v22.16b, v23.16b}, [x2], x3
-        ld1             {v24.16b, v25.16b, v26.16b, v27.16b}, [x2], x3
 .macro epel_uni_v64_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\src12\().16b, \src13\().16b, \src14\().16b, \src15\().16b}, [x2], x3
         calc_epelb      v10, \src3, \src7, \src11, \src15
@@ -1710,6 +1726,15 @@ function ff_hevc_put_hevc_epel_uni_v64_8_neon, export=1
         subs            w4, w4, #1
         st1             {v4.16b, v5.16b, v6.16b, v7.16b}, [x0], x1
 .endm
+
+function ff_hevc_put_hevc_epel_uni_v64_8_neon, export=1
+        load_epel_filterb x6, x5
+        sub             sp, sp, #32
+        st1             {v8.8b-v11.8b}, [sp]
+        sub             x2, x2, x3
+        ld1             {v16.16b, v17.16b, v18.16b, v19.16b}, [x2], x3
+        ld1             {v20.16b, v21.16b, v22.16b, v23.16b}, [x2], x3
+        ld1             {v24.16b, v25.16b, v26.16b, v27.16b}, [x2], x3
 1:      calc_all16 epel_uni_v64_step
 2:      ld1             {v8.8b-v11.8b}, [sp], #32
         ret
@@ -3046,6 +3071,13 @@ function vvc_put_epel_hv4_8_end_neon
         b               0f
 endfunc
 
+.macro epel_hv4_end_step src0, src1, src2, src3
+        ld1             {\src3\().4h}, [sp], x10
+        calc_epelh      v4, \src0, \src1, \src2, \src3
+        subs            w3, w3, #1
+        st1             {v4.4h}, [x0], x10
+.endm
+
 function hevc_put_hevc_epel_hv4_8_end_neon
         load_epel_filterh x5, x4
         mov             x10, #(HEVC_MAX_PB_SIZE * 2)
@@ -3054,16 +3086,19 @@ function hevc_put_hevc_epel_hv4_8_end_neon
         ldr             d17, [sp, x10]
         add             sp, sp, x10, lsl #1
         ld1             {v18.4h}, [sp], x10
-.macro epel_hv4_end_step src0, src1, src2, src3
-        ld1             {\src3\().4h}, [sp], x10
-        calc_epelh      v4, \src0, \src1, \src2, \src3
-        subs            w3, w3, #1
-        st1             {v4.4h}, [x0], x10
-.endm
 1:      calc_all4 epel_hv4_end_step
 2:      ret
 endfunc
 
+.macro epel_hv6_end_step src0, src1, src2, src3
+        ld1             {\src3\().8h}, [sp], x10
+        calc_epelh      v4,     \src0, \src1, \src2, \src3
+        calc_epelh2     v4, v5, \src0, \src1, \src2, \src3
+        st1             {v4.d}[0], [x0], #8
+        subs            w3, w3, #1
+        st1             {v4.s}[2], [x0], x5
+.endm
+
 function hevc_put_hevc_epel_hv6_8_end_neon
         load_epel_filterh x5, x4
         mov             x5, #120
@@ -3072,14 +3107,6 @@ function hevc_put_hevc_epel_hv6_8_end_neon
         ldr             q17, [sp, x10]
         add             sp, sp, x10, lsl #1
         ld1             {v18.8h}, [sp], x10
-.macro epel_hv6_end_step src0, src1, src2, src3
-        ld1             {\src3\().8h}, [sp], x10
-        calc_epelh      v4,     \src0, \src1, \src2, \src3
-        calc_epelh2     v4, v5, \src0, \src1, \src2, \src3
-        st1             {v4.d}[0], [x0], #8
-        subs            w3, w3, #1
-        st1             {v4.s}[2], [x0], x5
-.endm
 1:      calc_all4 epel_hv6_end_step
 2:      ret
 endfunc
@@ -3090,6 +3117,14 @@ function vvc_put_epel_hv8_8_end_neon
         b               0f
 endfunc
 
+.macro epel_hv8_end_step src0, src1, src2, src3
+        ld1             {\src3\().8h}, [sp], x10
+        calc_epelh      v4,     \src0, \src1, \src2, \src3
+        calc_epelh2     v4, v5, \src0, \src1, \src2, \src3
+        subs            w3, w3, #1
+        st1             {v4.8h}, [x0], x10
+.endm
+
 function hevc_put_hevc_epel_hv8_8_end_neon
         load_epel_filterh x5, x4
         mov             x10, #(HEVC_MAX_PB_SIZE * 2)
@@ -3098,24 +3133,10 @@ function hevc_put_hevc_epel_hv8_8_end_neon
         ldr             q17, [sp, x10]
         add             sp, sp, x10, lsl #1
         ld1             {v18.8h}, [sp], x10
-.macro epel_hv8_end_step src0, src1, src2, src3
-        ld1             {\src3\().8h}, [sp], x10
-        calc_epelh      v4,     \src0, \src1, \src2, \src3
-        calc_epelh2     v4, v5, \src0, \src1, \src2, \src3
-        subs            w3, w3, #1
-        st1             {v4.8h}, [x0], x10
-.endm
 1:      calc_all4 epel_hv8_end_step
 2:      ret
 endfunc
 
-function hevc_put_hevc_epel_hv12_8_end_neon
-        load_epel_filterh x5, x4
-        mov             x5, #112
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.8h, v17.8h}, [sp], x10
-        ld1             {v18.8h, v19.8h}, [sp], x10
-        ld1             {v20.8h, v21.8h}, [sp], x10
 .macro epel_hv12_end_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().8h, \src7\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src2, \src4, \src6
@@ -3125,6 +3146,14 @@ function hevc_put_hevc_epel_hv12_8_end_neon
         subs            w3, w3, #1
         st1             {v5.4h}, [x0], x5
 .endm
+
+function hevc_put_hevc_epel_hv12_8_end_neon
+        load_epel_filterh x5, x4
+        mov             x5, #112
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.8h, v17.8h}, [sp], x10
+        ld1             {v18.8h, v19.8h}, [sp], x10
+        ld1             {v20.8h, v21.8h}, [sp], x10
 1:      calc_all8 epel_hv12_end_step
 2:      ret
 endfunc
@@ -3135,13 +3164,6 @@ function vvc_put_epel_hv16_8_end_neon
         b               0f
 endfunc
 
-function hevc_put_hevc_epel_hv16_8_end_neon
-        load_epel_filterh x5, x4
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-0:
-        ld1             {v16.8h, v17.8h}, [sp], x10
-        ld1             {v18.8h, v19.8h}, [sp], x10
-        ld1             {v20.8h, v21.8h}, [sp], x10
 .macro epel_hv16_end_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().8h, \src7\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src2, \src4, \src6
@@ -3151,16 +3173,18 @@ function hevc_put_hevc_epel_hv16_8_end_neon
         subs            w3, w3, #1
         st1             {v4.8h, v5.8h}, [x0], x10
 .endm
+
+function hevc_put_hevc_epel_hv16_8_end_neon
+        load_epel_filterh x5, x4
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+0:
+        ld1             {v16.8h, v17.8h}, [sp], x10
+        ld1             {v18.8h, v19.8h}, [sp], x10
+        ld1             {v20.8h, v21.8h}, [sp], x10
 1:      calc_all8 epel_hv16_end_step
 2:      ret
 endfunc
 
-function hevc_put_hevc_epel_hv24_8_end_neon
-        load_epel_filterh x5, x4
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.8h, v17.8h, v18.8h}, [sp], x10
-        ld1             {v19.8h, v20.8h, v21.8h}, [sp], x10
-        ld1             {v22.8h, v23.8h, v24.8h}, [sp], x10
 .macro epel_hv24_end_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().8h-\src11\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src3, \src6, \src9
@@ -3172,6 +3196,13 @@ function hevc_put_hevc_epel_hv24_8_end_neon
         subs            w3, w3, #1
         st1             {v4.8h-v6.8h}, [x0], x10
 .endm
+
+function hevc_put_hevc_epel_hv24_8_end_neon
+        load_epel_filterh x5, x4
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.8h, v17.8h, v18.8h}, [sp], x10
+        ld1             {v19.8h, v20.8h, v21.8h}, [sp], x10
+        ld1             {v22.8h, v23.8h, v24.8h}, [sp], x10
 1:      calc_all12 epel_hv24_end_step
 2:      ret
 endfunc
@@ -3468,12 +3499,6 @@ endfunc
 
 epel_hv neon
 
-function hevc_put_hevc_epel_uni_hv4_8_end_neon
-        load_epel_filterh x6, x5
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.4h}, [sp], x10
-        ld1             {v17.4h}, [sp], x10
-        ld1             {v18.4h}, [sp], x10
 .macro epel_uni_hv4_end_step src0, src1, src2, src3
         ld1             {\src3\().4h}, [sp], x10
         calc_epelh      v4, \src0, \src1, \src2, \src3
@@ -3481,17 +3506,17 @@ function hevc_put_hevc_epel_uni_hv4_8_end_neon
         subs            w4, w4, #1
         st1             {v4.s}[0], [x0], x1
 .endm
+
+function hevc_put_hevc_epel_uni_hv4_8_end_neon
+        load_epel_filterh x6, x5
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.4h}, [sp], x10
+        ld1             {v17.4h}, [sp], x10
+        ld1             {v18.4h}, [sp], x10
 1:      calc_all4 epel_uni_hv4_end_step
 2:      ret
 endfunc
 
-function hevc_put_hevc_epel_uni_hv6_8_end_neon
-        load_epel_filterh x6, x5
-        sub             x1, x1, #4
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.8h}, [sp], x10
-        ld1             {v17.8h}, [sp], x10
-        ld1             {v18.8h}, [sp], x10
 .macro epel_uni_hv6_end_step src0, src1, src2, src3
         ld1             {\src3\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src1, \src2, \src3
@@ -3501,16 +3526,18 @@ function hevc_put_hevc_epel_uni_hv6_8_end_neon
         subs            w4, w4, #1
         st1             {v4.h}[2], [x0], x1
 .endm
-1:      calc_all4 epel_uni_hv6_end_step
-2:      ret
-endfunc
 
-function hevc_put_hevc_epel_uni_hv8_8_end_neon
+function hevc_put_hevc_epel_uni_hv6_8_end_neon
         load_epel_filterh x6, x5
+        sub             x1, x1, #4
         mov             x10, #(HEVC_MAX_PB_SIZE * 2)
         ld1             {v16.8h}, [sp], x10
         ld1             {v17.8h}, [sp], x10
         ld1             {v18.8h}, [sp], x10
+1:      calc_all4 epel_uni_hv6_end_step
+2:      ret
+endfunc
+
 .macro epel_uni_hv8_end_step src0, src1, src2, src3
         ld1             {\src3\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src1, \src2, \src3
@@ -3519,17 +3546,17 @@ function hevc_put_hevc_epel_uni_hv8_8_end_neon
         subs            w4, w4, #1
         st1             {v4.8b}, [x0], x1
 .endm
+
+function hevc_put_hevc_epel_uni_hv8_8_end_neon
+        load_epel_filterh x6, x5
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.8h}, [sp], x10
+        ld1             {v17.8h}, [sp], x10
+        ld1             {v18.8h}, [sp], x10
 1:      calc_all4 epel_uni_hv8_end_step
 2:      ret
 endfunc
 
-function hevc_put_hevc_epel_uni_hv12_8_end_neon
-        load_epel_filterh x6, x5
-        sub             x1, x1, #8
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.8h, v17.8h}, [sp], x10
-        ld1             {v18.8h, v19.8h}, [sp], x10
-        ld1             {v20.8h, v21.8h}, [sp], x10
 .macro epel_uni_hv12_end_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().8h, \src7\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src2, \src4, \src6
@@ -3541,16 +3568,18 @@ function hevc_put_hevc_epel_uni_hv12_8_end_neon
         st1             {v4.s}[2], [x0], x1
         subs            w4, w4, #1
 .endm
-1:      calc_all8 epel_uni_hv12_end_step
-2:      ret
-endfunc
 
-function hevc_put_hevc_epel_uni_hv16_8_end_neon
+function hevc_put_hevc_epel_uni_hv12_8_end_neon
         load_epel_filterh x6, x5
+        sub             x1, x1, #8
         mov             x10, #(HEVC_MAX_PB_SIZE * 2)
         ld1             {v16.8h, v17.8h}, [sp], x10
         ld1             {v18.8h, v19.8h}, [sp], x10
         ld1             {v20.8h, v21.8h}, [sp], x10
+1:      calc_all8 epel_uni_hv12_end_step
+2:      ret
+endfunc
+
 .macro epel_uni_hv16_end_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().8h, \src7\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src2, \src4, \src6
@@ -3562,16 +3591,17 @@ function hevc_put_hevc_epel_uni_hv16_8_end_neon
         subs            w4, w4, #1
         st1             {v4.16b}, [x0], x1
 .endm
+
+function hevc_put_hevc_epel_uni_hv16_8_end_neon
+        load_epel_filterh x6, x5
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.8h, v17.8h}, [sp], x10
+        ld1             {v18.8h, v19.8h}, [sp], x10
+        ld1             {v20.8h, v21.8h}, [sp], x10
 1:      calc_all8 epel_uni_hv16_end_step
 2:      ret
 endfunc
 
-function hevc_put_hevc_epel_uni_hv24_8_end_neon
-        load_epel_filterh x6, x5
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.8h, v17.8h, v18.8h}, [sp], x10
-        ld1             {v19.8h, v20.8h, v21.8h}, [sp], x10
-        ld1             {v22.8h, v23.8h, v24.8h}, [sp], x10
 .macro epel_uni_hv24_end_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().8h, \src10\().8h, \src11\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src3, \src6, \src9
@@ -3586,6 +3616,13 @@ function hevc_put_hevc_epel_uni_hv24_8_end_neon
         subs            w4, w4, #1
         st1             {v4.8b, v5.8b, v6.8b}, [x0], x1
 .endm
+
+function hevc_put_hevc_epel_uni_hv24_8_end_neon
+        load_epel_filterh x6, x5
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.8h, v17.8h, v18.8h}, [sp], x10
+        ld1             {v19.8h, v20.8h, v21.8h}, [sp], x10
+        ld1             {v22.8h, v23.8h, v24.8h}, [sp], x10
 1:      calc_all12 epel_uni_hv24_end_step
 2:      ret
 endfunc
@@ -4831,12 +4868,6 @@ endfunc
 epel_uni_w_hv neon
 
 
-function hevc_put_hevc_epel_bi_hv4_8_end_neon
-        load_epel_filterh x7, x6
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.4h}, [sp], x10
-        ld1             {v17.4h}, [sp], x10
-        ld1             {v18.4h}, [sp], x10
 .macro epel_bi_hv4_end_step src0, src1, src2, src3
         ld1             {\src3\().4h}, [sp], x10
         calc_epelh      v4, \src0, \src1, \src2, \src3
@@ -4846,17 +4877,17 @@ function hevc_put_hevc_epel_bi_hv4_8_end_neon
         subs            w5, w5, #1
         st1             {v4.s}[0], [x0], x1
 .endm
+
+function hevc_put_hevc_epel_bi_hv4_8_end_neon
+        load_epel_filterh x7, x6
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.4h}, [sp], x10
+        ld1             {v17.4h}, [sp], x10
+        ld1             {v18.4h}, [sp], x10
 1:      calc_all4 epel_bi_hv4_end_step
 2:      ret
 endfunc
 
-function hevc_put_hevc_epel_bi_hv6_8_end_neon
-        load_epel_filterh x7, x6
-        sub             x1, x1, #4
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.8h}, [sp], x10
-        ld1             {v17.8h}, [sp], x10
-        ld1             {v18.8h}, [sp], x10
 .macro epel_bi_hv6_end_step src0, src1, src2, src3
         ld1             {\src3\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src1, \src2, \src3
@@ -4868,16 +4899,18 @@ function hevc_put_hevc_epel_bi_hv6_8_end_neon
         subs            w5, w5, #1
         st1             {v4.h}[2], [x0], x1
 .endm
-1:      calc_all4 epel_bi_hv6_end_step
-2:      ret
-endfunc
 
-function hevc_put_hevc_epel_bi_hv8_8_end_neon
+function hevc_put_hevc_epel_bi_hv6_8_end_neon
         load_epel_filterh x7, x6
+        sub             x1, x1, #4
         mov             x10, #(HEVC_MAX_PB_SIZE * 2)
         ld1             {v16.8h}, [sp], x10
         ld1             {v17.8h}, [sp], x10
         ld1             {v18.8h}, [sp], x10
+1:      calc_all4 epel_bi_hv6_end_step
+2:      ret
+endfunc
+
 .macro epel_bi_hv8_end_step src0, src1, src2, src3
         ld1             {\src3\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src1, \src2, \src3
@@ -4888,17 +4921,17 @@ function hevc_put_hevc_epel_bi_hv8_8_end_neon
         subs            w5, w5, #1
         st1             {v4.8b}, [x0], x1
 .endm
+
+function hevc_put_hevc_epel_bi_hv8_8_end_neon
+        load_epel_filterh x7, x6
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.8h}, [sp], x10
+        ld1             {v17.8h}, [sp], x10
+        ld1             {v18.8h}, [sp], x10
 1:      calc_all4 epel_bi_hv8_end_step
 2:      ret
 endfunc
 
-function hevc_put_hevc_epel_bi_hv12_8_end_neon
-        load_epel_filterh x7, x6
-        sub             x1, x1, #8
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.8h, v17.8h}, [sp], x10
-        ld1             {v18.8h, v19.8h}, [sp], x10
-        ld1             {v20.8h, v21.8h}, [sp], x10
 .macro epel_bi_hv12_end_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().8h, \src7\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src2, \src4, \src6
@@ -4913,16 +4946,18 @@ function hevc_put_hevc_epel_bi_hv12_8_end_neon
         subs            w5, w5, #1
         st1             {v4.s}[2], [x0], x1
 .endm
-1:      calc_all8 epel_bi_hv12_end_step
-2:      ret
-endfunc
 
-function hevc_put_hevc_epel_bi_hv16_8_end_neon
+function hevc_put_hevc_epel_bi_hv12_8_end_neon
         load_epel_filterh x7, x6
+        sub             x1, x1, #8
         mov             x10, #(HEVC_MAX_PB_SIZE * 2)
         ld1             {v16.8h, v17.8h}, [sp], x10
         ld1             {v18.8h, v19.8h}, [sp], x10
         ld1             {v20.8h, v21.8h}, [sp], x10
+1:      calc_all8 epel_bi_hv12_end_step
+2:      ret
+endfunc
+
 .macro epel_bi_hv16_end_step src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\src6\().8h, \src7\().8h}, [sp], x10
         calc_epelh      v4,     \src0, \src2, \src4, \src6
@@ -4937,16 +4972,17 @@ function hevc_put_hevc_epel_bi_hv16_8_end_neon
         st1             {v4.16b}, [x0], x1
         subs            w5, w5, #1
 .endm
+
+function hevc_put_hevc_epel_bi_hv16_8_end_neon
+        load_epel_filterh x7, x6
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.8h, v17.8h}, [sp], x10
+        ld1             {v18.8h, v19.8h}, [sp], x10
+        ld1             {v20.8h, v21.8h}, [sp], x10
 1:      calc_all8 epel_bi_hv16_end_step
 2:      ret
 endfunc
 
-function hevc_put_hevc_epel_bi_hv24_8_end_neon
-        load_epel_filterh x7, x6
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.8h, v17.8h, v18.8h}, [sp], x10
-        ld1             {v19.8h, v20.8h, v21.8h}, [sp], x10
-        ld1             {v22.8h, v23.8h, v24.8h}, [sp], x10
 .macro epel_bi_hv24_end_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11
         ld1             {\src9\().8h, \src10\().8h, \src11\().8h}, [sp], x10
         calc_epelh      v1,     \src0, \src3, \src6, \src9
@@ -4965,16 +5001,17 @@ function hevc_put_hevc_epel_bi_hv24_8_end_neon
         subs            w5, w5, #1
         st1             {v1.8b, v2.8b, v3.8b}, [x0], x1
 .endm
+
+function hevc_put_hevc_epel_bi_hv24_8_end_neon
+        load_epel_filterh x7, x6
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.8h, v17.8h, v18.8h}, [sp], x10
+        ld1             {v19.8h, v20.8h, v21.8h}, [sp], x10
+        ld1             {v22.8h, v23.8h, v24.8h}, [sp], x10
 1:      calc_all12 epel_bi_hv24_end_step
 2:      ret
 endfunc
 
-function hevc_put_hevc_epel_bi_hv32_8_end_neon
-        load_epel_filterh x7, x6
-        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v16.8h, v17.8h, v18.8h, v19.8h}, [sp], x10
-        ld1             {v20.8h, v21.8h, v22.8h, v23.8h}, [sp], x10
-        ld1             {v24.8h, v25.8h, v26.8h, v27.8h}, [sp], x10
 .macro epel_bi_hv32_end_step src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\src12\().8h, \src13\().8h, \src14\().8h, \src15\().8h}, [sp], x10
         calc_epelh      v1,     \src0, \src4, \src8,  \src12
@@ -4997,6 +5034,13 @@ function hevc_put_hevc_epel_bi_hv32_8_end_neon
         st1             {v1.8b, v2.8b, v3.8b, v4.8b}, [x0], x1
         subs            w5, w5, #1
 .endm
+
+function hevc_put_hevc_epel_bi_hv32_8_end_neon
+        load_epel_filterh x7, x6
+        mov             x10, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.8h, v17.8h, v18.8h, v19.8h}, [sp], x10
+        ld1             {v20.8h, v21.8h, v22.8h, v23.8h}, [sp], x10
+        ld1             {v24.8h, v25.8h, v26.8h, v27.8h}, [sp], x10
 1:      calc_all16 epel_bi_hv32_end_step
 2:      ldr             d8, [sp], #16
         ret
diff --git a/libavcodec/aarch64/h26x/qpel_neon.S b/libavcodec/aarch64/h26x/qpel_neon.S
index f123f02751..9e38b648cc 100644
--- a/libavcodec/aarch64/h26x/qpel_neon.S
+++ b/libavcodec/aarch64/h26x/qpel_neon.S
@@ -945,6 +945,14 @@ put_hevc qpel
 put_hevc qpel_uni
 put_hevc qpel_bi
 
+.macro qpel_v4_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().s}[0], [x1], x2
+        movi            v24.8h, #0
+        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        st1             {v24.4h}, [x0], x9
+        subs            w3, w3, #1
+.endm
+
 function ff_hevc_put_hevc_qpel_v4_8_neon, export=1
         load_qpel_filterb x5, x4
         sub             x1, x1, x2, lsl #1
@@ -961,17 +969,19 @@ function ff_hevc_put_hevc_qpel_v4_8_neon, export=1
         add             x1, x1, x2, lsl #1
         ldr             s22, [x1]
         add             x1, x1, x2
-.macro qpel_v4_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().s}[0], [x1], x2
-        movi            v24.8h, #0
-        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        st1             {v24.4h}, [x0], x9
-        subs            w3, w3, #1
-.endm
 1:      calc_all qpel_v4_step
 2:      ret
 endfunc
 
+.macro qpel_v6_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().8b}, [x1], x2
+        movi            v24.8h, #0
+        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        st1             {v24.4h}, [x0], #8
+        st1             {v24.s}[2], [x0], x9
+        subs            w3, w3, #1
+.endm
+
 function ff_hevc_put_hevc_qpel_v6_8_neon, export=1
         load_qpel_filterb x5, x4
         sub             x1, x1, x2, lsl #1
@@ -988,18 +998,18 @@ function ff_hevc_put_hevc_qpel_v6_8_neon, export=1
         add             x1, x1, x2, lsl #1
         ldr             d22, [x1]
         add             x1, x1, x2
-.macro qpel_v6_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().8b}, [x1], x2
-        movi            v24.8h, #0
-        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        st1             {v24.4h}, [x0], #8
-        st1             {v24.s}[2], [x0], x9
-        subs            w3, w3, #1
-.endm
 1:      calc_all qpel_v6_step
 2:      ret
 endfunc
 
+.macro qpel_v8_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().8b}, [x1], x2
+        movi            v24.8h, #0
+        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        st1             {v24.8h}, [x0], x9
+        subs            w3, w3, #1
+.endm
+
 function ff_hevc_put_hevc_qpel_v8_8_neon, export=1
         load_qpel_filterb x5, x4
         sub             x1, x1, x2, lsl #1
@@ -1016,17 +1026,21 @@ function ff_hevc_put_hevc_qpel_v8_8_neon, export=1
         add             x1, x1, x2, lsl #1
         ldr             d22, [x1]
         add             x1, x1, x2
-.macro qpel_v8_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().8b}, [x1], x2
-        movi            v24.8h, #0
-        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        st1             {v24.8h}, [x0], x9
-        subs            w3, w3, #1
-.endm
 1:      calc_all qpel_v8_step
 2:      ret
 endfunc
 
+.macro qpel_v12_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().16b}, [x1], x2
+        movi            v24.8h, #0
+        movi            v25.8h, #0
+        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        calc_qpelb2     v25, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        st1             {v24.8h}, [x0], #16
+        subs            w3, w3, #1
+        st1             {v25.4h}, [x0], x9
+.endm
+
 function ff_hevc_put_hevc_qpel_v12_8_neon, export=1
         load_qpel_filterb x5, x4
         sub             x1, x1, x2, lsl #1
@@ -1043,19 +1057,19 @@ function ff_hevc_put_hevc_qpel_v12_8_neon, export=1
         add             x1, x1, x2, lsl #1
         ldr             q22, [x1]
         add             x1, x1, x2
-.macro qpel_v12_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+1:      calc_all qpel_v12_step
+2:      ret
+endfunc
+
+.macro qpel_v16_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().16b}, [x1], x2
         movi            v24.8h, #0
         movi            v25.8h, #0
         calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
         calc_qpelb2     v25, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        st1             {v24.8h}, [x0], #16
         subs            w3, w3, #1
-        st1             {v25.4h}, [x0], x9
+        st1             {v24.8h, v25.8h}, [x0], x9
 .endm
-1:      calc_all qpel_v12_step
-2:      ret
-endfunc
 
 function ff_hevc_put_hevc_qpel_v16_8_neon, export=1
         load_qpel_filterb x5, x4
@@ -1073,20 +1087,24 @@ function ff_hevc_put_hevc_qpel_v16_8_neon, export=1
         add             x1, x1, x2, lsl #1
         ldr             q22, [x1]
         add             x1, x1, x2
-.macro qpel_v16_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().16b}, [x1], x2
-        movi            v24.8h, #0
-        movi            v25.8h, #0
-        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        calc_qpelb2     v25, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        subs            w3, w3, #1
-        st1             {v24.8h, v25.8h}, [x0], x9
-.endm
 1:      calc_all qpel_v16_step
 2:      ret
 endfunc
 
+.macro qpel_v24_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+        ld1             {\tmp0\().16b, \tmp1\().16b}, [x1], x2
+        movi            v8.8h, #0
+        movi            v9.8h, #0
+        movi            v10.8h, #0
+        calc_qpelb      v8,  \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7
+        calc_qpelb2     v9,  \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7
+        calc_qpelb      v10, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15
+        subs            w3, w3, #1
+        st1             {v8.8h, v9.8h, v10.8h}, [x0], x9
+.endm
+
 // todo: reads #32 bytes
+
 function ff_hevc_put_hevc_qpel_v24_8_neon, export=1
         sub             sp, sp, #32
         st1             {v8.8b, v9.8b, v10.8b}, [sp]
@@ -1101,23 +1119,26 @@ function ff_hevc_put_hevc_qpel_v24_8_neon, export=1
         ld1             {v24.16b, v25.16b}, [x1], x2
         ld1             {v26.16b, v27.16b}, [x1], x2
         ld1             {v28.16b, v29.16b}, [x1], x2
-.macro qpel_v24_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
-        ld1             {\tmp0\().16b, \tmp1\().16b}, [x1], x2
-        movi            v8.8h, #0
-        movi            v9.8h, #0
-        movi            v10.8h, #0
-        calc_qpelb      v8,  \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7
-        calc_qpelb2     v9,  \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7
-        calc_qpelb      v10, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15
-        subs            w3, w3, #1
-        st1             {v8.8h, v9.8h, v10.8h}, [x0], x9
-.endm
 1:      calc_all2 qpel_v24_step
 2:      ld1             {v8.8b, v9.8b, v10.8b}, [sp]
         add             sp, sp, #32
         ret
 endfunc
 
+.macro qpel_v32_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+        ld1             {\tmp0\().16b, \tmp1\().16b}, [x1], x2
+        movi            v8.8h, #0
+        movi            v9.8h, #0
+        movi            v10.8h, #0
+        movi            v11.8h, #0
+        calc_qpelb      v8,  \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7
+        calc_qpelb2     v9,  \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7
+        calc_qpelb      v10, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15
+        calc_qpelb2     v11, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15
+        subs            w3, w3, #1
+        st1             {v8.8h-v11.8h}, [x0], x9
+.endm
+
 function ff_hevc_put_hevc_qpel_v32_8_neon, export=1
         sub             sp, sp, #32
         st1             {v8.8b-v11.8b}, [sp]
@@ -1132,19 +1153,6 @@ function ff_hevc_put_hevc_qpel_v32_8_neon, export=1
         ld1             {v24.16b, v25.16b}, [x1], x2
         ld1             {v26.16b, v27.16b}, [x1], x2
         ld1             {v28.16b, v29.16b}, [x1], x2
-.macro qpel_v32_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
-        ld1             {\tmp0\().16b, \tmp1\().16b}, [x1], x2
-        movi            v8.8h, #0
-        movi            v9.8h, #0
-        movi            v10.8h, #0
-        movi            v11.8h, #0
-        calc_qpelb      v8,  \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7
-        calc_qpelb2     v9,  \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7
-        calc_qpelb      v10, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15
-        calc_qpelb2     v11, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15
-        subs            w3, w3, #1
-        st1             {v8.8h-v11.8h}, [x0], x9
-.endm
 1:      calc_all2 qpel_v32_step
 2:      ld1             {v8.8b-v11.8b}, [sp], #32
         ret
@@ -1168,6 +1176,20 @@ function ff_hevc_put_hevc_qpel_v48_8_neon, export=1
         ret
 endfunc
 
+.macro qpel_v64_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+        ld1             {\tmp0\().16b, \tmp1\().16b}, [x8], x2
+        movi            v8.8h, #0
+        movi            v9.8h, #0
+        movi            v10.8h, #0
+        movi            v11.8h, #0
+        calc_qpelb      v8,  \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7
+        calc_qpelb2     v9,  \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7
+        calc_qpelb      v10, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15
+        calc_qpelb2     v11, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15
+        subs            x11, x11, #1
+        st1             {v8.8h-v11.8h}, [x10], x9
+.endm
+
 function ff_hevc_put_hevc_qpel_v64_8_neon, export=1
         sub             sp, sp, #32
         st1             {v8.8b-v11.8b}, [sp]
@@ -1185,19 +1207,6 @@ function ff_hevc_put_hevc_qpel_v64_8_neon, export=1
         ld1             {v24.16b, v25.16b}, [x8], x2
         ld1             {v26.16b, v27.16b}, [x8], x2
         ld1             {v28.16b, v29.16b}, [x8], x2
-.macro qpel_v64_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
-        ld1             {\tmp0\().16b, \tmp1\().16b}, [x8], x2
-        movi            v8.8h, #0
-        movi            v9.8h, #0
-        movi            v10.8h, #0
-        movi            v11.8h, #0
-        calc_qpelb      v8,  \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7
-        calc_qpelb2     v9,  \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7
-        calc_qpelb      v10, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15
-        calc_qpelb2     v11, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15
-        subs            x11, x11, #1
-        st1             {v8.8h-v11.8h}, [x10], x9
-.endm
 1:      calc_all2 qpel_v64_step
 2:      add             x0, x0, #64
         add             x1, x1, #32
@@ -1211,6 +1220,14 @@ endfunc
  * [-, +, -, +, +, -, +, -],
  * vvc doesn't meet the requirement.
  */
+.macro vvc_qpel_v4_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().s}[0], [x1], x2
+        uxtl            \tmp\().8h, \tmp\().8b
+        calc_qpelh      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqxtn
+        subs            w3, w3, #1
+        st1             {v24.4h}, [x0], x9
+.endm
+
 function ff_vvc_put_qpel_v4_8_neon, export=1
         vvc_load_qpel_filterh x5
         sub             x1, x1, x2, lsl #1
@@ -1234,19 +1251,21 @@ function ff_vvc_put_qpel_v4_8_neon, export=1
         uxtl            v20.8h, v20.8b
         uxtl            v21.8h, v21.8b
         uxtl            v22.8h, v22.8b
-.macro vvc_qpel_v4_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().s}[0], [x1], x2
-        uxtl            \tmp\().8h, \tmp\().8b
-        calc_qpelh      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqxtn
-        subs            w3, w3, #1
-        st1             {v24.4h}, [x0], x9
-.endm
 1:
         calc_all vvc_qpel_v4_step
 2:
         ret
 endfunc
 
+.macro vvc_qpel_v8_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().8b}, [x8], x2
+        uxtl            \tmp\().8h, \tmp\().8b
+        calc_qpelh      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqxtn
+        calc_qpelh2     v24, v25, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqxtn2
+        subs            w11, w11, #1
+        st1             {v24.8h}, [x10], x9
+.endm
+
 function ff_vvc_put_qpel_v8_8_neon, export=1
         vvc_load_qpel_filterh x5
         sub             x1, x1, x2, lsl #1
@@ -1274,14 +1293,6 @@ function ff_vvc_put_qpel_v8_8_neon, export=1
         uxtl            v20.8h, v20.8b
         uxtl            v21.8h, v21.8b
         uxtl            v22.8h, v22.8b
-.macro vvc_qpel_v8_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().8b}, [x8], x2
-        uxtl            \tmp\().8h, \tmp\().8b
-        calc_qpelh      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqxtn
-        calc_qpelh2     v24, v25, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqxtn2
-        subs            w11, w11, #1
-        st1             {v24.8h}, [x10], x9
-.endm
 1:
         calc_all vvc_qpel_v8_step
 2:
@@ -1292,6 +1303,17 @@ function ff_vvc_put_qpel_v8_8_neon, export=1
         ret
 endfunc
 
+.macro qpel_bi_v4_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().s}[0], [x2], x3
+        movi            v24.8h, #0
+        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        ld1             {v25.4h}, [x4], x12 // src2
+        sqadd           v24.8h, v24.8h, v25.8h
+        sqrshrun        v25.8b, v24.8h, #7
+        subs            w5, w5, #1
+        st1             {v25.s}[0], [x0], x1
+.endm
+
 function ff_hevc_put_hevc_qpel_bi_v4_8_neon, export=1
         load_qpel_filterb x7, x6
         sub             x2, x2, x3, lsl #1
@@ -1304,20 +1326,22 @@ function ff_hevc_put_hevc_qpel_bi_v4_8_neon, export=1
         ld1             {v20.s}[0], [x2], x3
         ld1             {v21.s}[0], [x2], x3
         ld1             {v22.s}[0], [x2], x3
-.macro qpel_bi_v4_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().s}[0], [x2], x3
-        movi            v24.8h, #0
-        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        ld1             {v25.4h}, [x4], x12 // src2
-        sqadd           v24.8h, v24.8h, v25.8h
-        sqrshrun        v25.8b, v24.8h, #7
-        subs            w5, w5, #1
-        st1             {v25.s}[0], [x0], x1
-.endm
 1:      calc_all qpel_bi_v4_step
 2:      ret
 endfunc
 
+.macro qpel_bi_v6_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().8b}, [x2], x3
+        movi            v24.8h, #0
+        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        ld1             {v25.8h}, [x4], x12 // src2
+        sqadd           v24.8h, v24.8h, v25.8h
+        sqrshrun        v25.8b, v24.8h, #7
+        st1             {v25.s}[0], [x0], #4
+        subs            w5, w5, #1
+        st1             {v25.h}[2], [x0], x1
+.endm
+
 function ff_hevc_put_hevc_qpel_bi_v6_8_neon, export=1
         load_qpel_filterb x7, x6
         sub             x2, x2, x3, lsl #1
@@ -1331,21 +1355,21 @@ function ff_hevc_put_hevc_qpel_bi_v6_8_neon, export=1
         ld1             {v20.8b}, [x2], x3
         ld1             {v21.8b}, [x2], x3
         ld1             {v22.8b}, [x2], x3
-.macro qpel_bi_v6_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().8b}, [x2], x3
-        movi            v24.8h, #0
-        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        ld1             {v25.8h}, [x4], x12 // src2
-        sqadd           v24.8h, v24.8h, v25.8h
-        sqrshrun        v25.8b, v24.8h, #7
-        st1             {v25.s}[0], [x0], #4
-        subs            w5, w5, #1
-        st1             {v25.h}[2], [x0], x1
-.endm
 1:      calc_all qpel_bi_v6_step
 2:      ret
 endfunc
 
+ .macro qpel_bi_v8_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().8b}, [x2], x3
+        movi            v24.8h, #0
+        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        ld1             {v25.8h}, [x4], x12   // src2
+        sqadd           v24.8h, v24.8h, v25.8h
+        sqrshrun        v25.8b, v24.8h, #7
+        subs            w5, w5, #1
+        st1             {v25.8b}, [x0], x1
+.endm
+
 function ff_hevc_put_hevc_qpel_bi_v8_8_neon, export=1
         load_qpel_filterb x7, x6
         sub             x2, x2, x3, lsl #1
@@ -1358,33 +1382,10 @@ function ff_hevc_put_hevc_qpel_bi_v8_8_neon, export=1
         ld1             {v20.8b}, [x2], x3
         ld1             {v21.8b}, [x2], x3
         ld1             {v22.8b}, [x2], x3
- .macro qpel_bi_v8_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().8b}, [x2], x3
-        movi            v24.8h, #0
-        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        ld1             {v25.8h}, [x4], x12   // src2
-        sqadd           v24.8h, v24.8h, v25.8h
-        sqrshrun        v25.8b, v24.8h, #7
-        subs            w5, w5, #1
-        st1             {v25.8b}, [x0], x1
-.endm
 1:      calc_all qpel_bi_v8_step
 2:      ret
 endfunc
 
-function ff_hevc_put_hevc_qpel_bi_v12_8_neon, export=1
-        load_qpel_filterb x7, x6
-        sub             x2, x2, x3, lsl #1
-        sub             x2, x2, x3
-        sub             x1, x1, #8
-        ld1             {v16.16b}, [x2], x3
-        mov             x12, #(HEVC_MAX_PB_SIZE * 2)
-        ld1             {v17.16b}, [x2], x3
-        ld1             {v18.16b}, [x2], x3
-        ld1             {v19.16b}, [x2], x3
-        ld1             {v20.16b}, [x2], x3
-        ld1             {v21.16b}, [x2], x3
-        ld1             {v22.16b}, [x2], x3
 .macro qpel_bi_v12_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().16b}, [x2], x3
         movi            v24.8h, #0
@@ -1400,22 +1401,24 @@ function ff_hevc_put_hevc_qpel_bi_v12_8_neon, export=1
         subs            w5, w5, #1
         st1             {v26.s}[2], [x0], x1
 .endm
-1:      calc_all qpel_bi_v12_step
-2:      ret
-endfunc
 
-function ff_hevc_put_hevc_qpel_bi_v16_8_neon, export=1
+function ff_hevc_put_hevc_qpel_bi_v12_8_neon, export=1
         load_qpel_filterb x7, x6
         sub             x2, x2, x3, lsl #1
         sub             x2, x2, x3
-        mov             x12, #(HEVC_MAX_PB_SIZE * 2)
+        sub             x1, x1, #8
         ld1             {v16.16b}, [x2], x3
+        mov             x12, #(HEVC_MAX_PB_SIZE * 2)
         ld1             {v17.16b}, [x2], x3
         ld1             {v18.16b}, [x2], x3
         ld1             {v19.16b}, [x2], x3
         ld1             {v20.16b}, [x2], x3
         ld1             {v21.16b}, [x2], x3
         ld1             {v22.16b}, [x2], x3
+1:      calc_all qpel_bi_v12_step
+2:      ret
+endfunc
+
 .macro qpel_bi_v16_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().16b}, [x2], x3
         movi            v24.8h, #0
@@ -1430,6 +1433,19 @@ function ff_hevc_put_hevc_qpel_bi_v16_8_neon, export=1
         sqrshrun2       v26.16b, v25.8h, #7
         st1             {v26.16b}, [x0], x1
 .endm
+
+function ff_hevc_put_hevc_qpel_bi_v16_8_neon, export=1
+        load_qpel_filterb x7, x6
+        sub             x2, x2, x3, lsl #1
+        sub             x2, x2, x3
+        mov             x12, #(HEVC_MAX_PB_SIZE * 2)
+        ld1             {v16.16b}, [x2], x3
+        ld1             {v17.16b}, [x2], x3
+        ld1             {v18.16b}, [x2], x3
+        ld1             {v19.16b}, [x2], x3
+        ld1             {v20.16b}, [x2], x3
+        ld1             {v21.16b}, [x2], x3
+        ld1             {v22.16b}, [x2], x3
 1:      calc_all qpel_bi_v16_step
 2:      ret
 endfunc
@@ -1455,27 +1471,6 @@ function ff_hevc_put_hevc_qpel_bi_v24_8_neon, export=1
         ret
 endfunc
 
-function ff_hevc_put_hevc_qpel_bi_v32_8_neon, export=1
-        stp             d8, d9, [sp, #-64]!
-        stp             d10, d11, [sp, #16]
-        stp             d12, d13, [sp, #32]
-        stp             d14, d15, [sp, #48]
-        sub             x2, x2, x3, lsl #1
-        sub             x2, x2, x3
-        load_qpel_filterb x7, x6
-        ldr             w6, [sp, #64]
-        mov             x12, #(HEVC_MAX_PB_SIZE * 2)
-0:      mov             x8, x2          // src
-        ld1             {v16.16b, v17.16b}, [x8], x3
-        mov             w11, w5         // height
-        ld1             {v18.16b, v19.16b}, [x8], x3
-        mov             x10, x0         // dst
-        ld1             {v20.16b, v21.16b}, [x8], x3
-        mov             x9, x4          // src2
-        ld1             {v22.16b, v23.16b}, [x8], x3
-        ld1             {v24.16b, v25.16b}, [x8], x3
-        ld1             {v26.16b, v27.16b}, [x8], x3
-        ld1             {v28.16b, v29.16b}, [x8], x3
 .macro qpel_bi_v32_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\tmp0\().8h, \tmp1\().8h}, [x8], x3
         movi            v8.8h, #0
@@ -1498,6 +1493,28 @@ function ff_hevc_put_hevc_qpel_bi_v32_8_neon, export=1
         subs            x11, x11, #1
         st1             {v12.16b, v13.16b}, [x10], x1
 .endm
+
+function ff_hevc_put_hevc_qpel_bi_v32_8_neon, export=1
+        stp             d8, d9, [sp, #-64]!
+        stp             d10, d11, [sp, #16]
+        stp             d12, d13, [sp, #32]
+        stp             d14, d15, [sp, #48]
+        sub             x2, x2, x3, lsl #1
+        sub             x2, x2, x3
+        load_qpel_filterb x7, x6
+        ldr             w6, [sp, #64]
+        mov             x12, #(HEVC_MAX_PB_SIZE * 2)
+0:      mov             x8, x2          // src
+        ld1             {v16.16b, v17.16b}, [x8], x3
+        mov             w11, w5         // height
+        ld1             {v18.16b, v19.16b}, [x8], x3
+        mov             x10, x0         // dst
+        ld1             {v20.16b, v21.16b}, [x8], x3
+        mov             x9, x4          // src2
+        ld1             {v22.16b, v23.16b}, [x8], x3
+        ld1             {v24.16b, v25.16b}, [x8], x3
+        ld1             {v26.16b, v27.16b}, [x8], x3
+        ld1             {v28.16b, v29.16b}, [x8], x3
 1:      calc_all2 qpel_bi_v32_step
 2:      add             x0, x0, #32 // dst
         add             x2, x2, #32 // src
@@ -1677,6 +1694,14 @@ function ff_vvc_put_pel_uni_pixels128_8_neon, export=1
         ret
 endfunc
 
+.macro qpel_uni_v4_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().s}[0], [x2], x3
+        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        sqrshrun        v24.8b, v24.8h, #6
+        subs            w4, w4, #1
+        st1             {v24.s}[0], [x0], x1
+.endm
+
 function ff_hevc_put_hevc_qpel_uni_v4_8_neon, export=1
         load_qpel_filterb x6, x5
         sub             x2, x2, x3, lsl #1
@@ -1692,17 +1717,19 @@ function ff_hevc_put_hevc_qpel_uni_v4_8_neon, export=1
         add             x2, x2, x3, lsl #1
         ldr             s22, [x2]
         add             x2, x2, x3
-.macro qpel_uni_v4_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().s}[0], [x2], x3
-        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        sqrshrun        v24.8b, v24.8h, #6
-        subs            w4, w4, #1
-        st1             {v24.s}[0], [x0], x1
-.endm
 1:      calc_all qpel_uni_v4_step
 2:      ret
 endfunc
 
+.macro qpel_uni_v6_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().8b}, [x2], x3
+        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        sqrshrun        v24.8b, v24.8h, #6
+        st1             {v24.s}[0], [x0], #4
+        subs            w4, w4, #1
+        st1             {v24.h}[2], [x0], x1
+.endm
+
 function ff_hevc_put_hevc_qpel_uni_v6_8_neon, export=1
         load_qpel_filterb x6, x5
         sub             x2, x2, x3, lsl #1
@@ -1719,18 +1746,18 @@ function ff_hevc_put_hevc_qpel_uni_v6_8_neon, export=1
         add             x2, x2, x3, lsl #1
         ldr             d22, [x2]
         add             x2, x2, x3
-.macro qpel_uni_v6_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().8b}, [x2], x3
-        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        sqrshrun        v24.8b, v24.8h, #6
-        st1             {v24.s}[0], [x0], #4
-        subs            w4, w4, #1
-        st1             {v24.h}[2], [x0], x1
-.endm
 1:      calc_all qpel_uni_v6_step
 2:      ret
 endfunc
 
+.macro qpel_uni_v8_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().8b}, [x2], x3
+        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        sqrshrun        v24.8b, v24.8h, #6
+        subs            w4, w4, #1
+        st1             {v24.8b}, [x0], x1
+.endm
+
 function ff_hevc_put_hevc_qpel_uni_v8_8_neon, export=1
         load_qpel_filterb x6, x5
         sub             x2, x2, x3, lsl #1
@@ -1746,17 +1773,21 @@ function ff_hevc_put_hevc_qpel_uni_v8_8_neon, export=1
         add             x2, x2, x3, lsl #1
         ldr             d22, [x2]
         add             x2, x2, x3
-.macro qpel_uni_v8_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().8b}, [x2], x3
-        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        sqrshrun        v24.8b, v24.8h, #6
-        subs            w4, w4, #1
-        st1             {v24.8b}, [x0], x1
-.endm
 1:      calc_all qpel_uni_v8_step
 2:      ret
 endfunc
 
+.macro qpel_uni_v12_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().16b}, [x8], x3
+        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        calc_qpelb2     v25, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        sqrshrun        v24.8b, v24.8h, #6
+        sqrshrun2       v24.16b, v25.8h, #6
+        st1             {v24.8b}, [x10], #8
+        subs            x11, x11, #1
+        st1             {v24.s}[2], [x10], x1
+.endm
+
 function ff_hevc_put_hevc_qpel_uni_v12_8_neon, export=1
         load_qpel_filterb x6, x5
         sub             x2, x2, x3, lsl #1
@@ -1776,16 +1807,6 @@ function ff_hevc_put_hevc_qpel_uni_v12_8_neon, export=1
         add             x8, x8, x3, lsl #1
         ldr             q22, [x8]
         add             x8, x8, x3
-.macro qpel_uni_v12_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().16b}, [x8], x3
-        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        calc_qpelb2     v25, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        sqrshrun        v24.8b, v24.8h, #6
-        sqrshrun2       v24.16b, v25.8h, #6
-        st1             {v24.8b}, [x10], #8
-        subs            x11, x11, #1
-        st1             {v24.s}[2], [x10], x1
-.endm
 1:      calc_all qpel_uni_v12_step
 2:      add             x0, x0, #12
         add             x2, x2, #12
@@ -1794,6 +1815,16 @@ function ff_hevc_put_hevc_qpel_uni_v12_8_neon, export=1
         ret
 endfunc
 
+.macro qpel_uni_v16_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().16b}, [x8], x3
+        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        calc_qpelb2     v25, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
+        sqrshrun        v24.8b, v24.8h, #6
+        sqrshrun2       v24.16b, v25.8h, #6
+        subs            x11, x11, #1
+        st1             {v24.16b}, [x10], x1
+.endm
+
 function ff_hevc_put_hevc_qpel_uni_v16_8_neon, export=1
         load_qpel_filterb x6, x5
         sub             x2, x2, x3, lsl #1
@@ -1812,15 +1843,6 @@ function ff_hevc_put_hevc_qpel_uni_v16_8_neon, export=1
         add             x8, x8, x3, lsl #1
         ldr             q22, [x8]
         add             x8, x8, x3
-.macro qpel_uni_v16_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().16b}, [x8], x3
-        calc_qpelb      v24, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        calc_qpelb2     v25, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7
-        sqrshrun        v24.8b, v24.8h, #6
-        sqrshrun2       v24.16b, v25.8h, #6
-        subs            x11, x11, #1
-        st1             {v24.16b}, [x10], x1
-.endm
 1:      calc_all qpel_uni_v16_step
 2:      add             x0, x0, #16
         add             x2, x2, #16
@@ -3113,6 +3135,14 @@ function ff_hevc_put_hevc_qpel_uni_w_v48_8_neon, export=1
         ret
 endfunc
 
+.macro qpel_uni_hv4_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().4h}, [sp], x9
+        calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn, #12
+        sqxtun          v1.8b, v1.8h
+        subs            w4, w4, #1
+        st1             {v1.s}[0], [x0], x1
+.endm
+
 function hevc_put_hevc_qpel_uni_hv4_8_end_neon
         mov             x9, #(HEVC_MAX_PB_SIZE * 2)
         load_qpel_filterh x6, x5
@@ -3127,18 +3157,21 @@ function hevc_put_hevc_qpel_uni_hv4_8_end_neon
         add             sp, sp, x9, lsl #1
         ldr             d22, [sp]
         add             sp, sp, x9
-.macro qpel_uni_hv4_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().4h}, [sp], x9
-        calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn, #12
-        sqxtun          v1.8b, v1.8h
-        subs            w4, w4, #1
-        st1             {v1.s}[0], [x0], x1
-.endm
 1:      calc_all qpel_uni_hv4_end_step
 2:      mov             sp, x14
         ret
 endfunc
 
+.macro qpel_uni_hv6_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().8h}, [sp], x9
+        calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn, #12
+        calc_qpelh2     v1, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn2, #12
+        sqxtun          v1.8b, v1.8h
+        st1             {v1.s}[0], [x0], #4
+        subs            w4, w4, #1
+        st1             {v1.h}[2], [x0], x1
+.endm
+
 function hevc_put_hevc_qpel_uni_hv6_8_end_neon
         mov             x9, #(HEVC_MAX_PB_SIZE * 2)
         load_qpel_filterh x6, x5
@@ -3154,20 +3187,20 @@ function hevc_put_hevc_qpel_uni_hv6_8_end_neon
         add             sp, sp, x9, lsl #1
         ldr             q22, [sp]
         add             sp, sp, x9
-.macro qpel_uni_hv6_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().8h}, [sp], x9
-        calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn, #12
-        calc_qpelh2     v1, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn2, #12
-        sqxtun          v1.8b, v1.8h
-        st1             {v1.s}[0], [x0], #4
-        subs            w4, w4, #1
-        st1             {v1.h}[2], [x0], x1
-.endm
 1:      calc_all qpel_uni_hv6_end_step
 2:      mov             sp, x14
         ret
 endfunc
 
+.macro qpel_uni_hv8_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().8h}, [sp], x9
+        calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn, #12
+        calc_qpelh2     v1, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn2, #12
+        sqxtun          v1.8b, v1.8h
+        subs            w4, w4, #1
+        st1             {v1.8b}, [x0], x1
+.endm
+
 function hevc_put_hevc_qpel_uni_hv8_8_end_neon
         mov             x9, #(HEVC_MAX_PB_SIZE * 2)
         load_qpel_filterh x6, x5
@@ -3182,19 +3215,23 @@ function hevc_put_hevc_qpel_uni_hv8_8_end_neon
         add             sp, sp, x9, lsl #1
         ldr             q22, [sp]
         add             sp, sp, x9
-.macro qpel_uni_hv8_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().8h}, [sp], x9
-        calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn, #12
-        calc_qpelh2     v1, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqrshrn2, #12
-        sqxtun          v1.8b, v1.8h
-        subs            w4, w4, #1
-        st1             {v1.8b}, [x0], x1
-.endm
 1:      calc_all qpel_uni_hv8_end_step
 2:      mov             sp, x14
         ret
 endfunc
 
+.macro qpel_uni_hv12_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+        ld1             {\tmp0\().8h, \tmp1\().8h}, [sp], x9
+        calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqrshrn, #12
+        calc_qpelh2     v1, v2, \src0, \src1,  \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqrshrn2, #12
+        calc_qpelh      v2,     \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqrshrn, #12
+        sqxtun          v1.8b, v1.8h
+        sqxtun2         v1.16b, v2.8h
+        st1             {v1.8b}, [x0], #8
+        subs            w4, w4, #1
+        st1             {v1.s}[2], [x0], x1
+.endm
+
 function hevc_put_hevc_qpel_uni_hv12_8_end_neon
         mov             x9, #(HEVC_MAX_PB_SIZE * 2)
         load_qpel_filterh x6, x5
@@ -3206,22 +3243,23 @@ function hevc_put_hevc_qpel_uni_hv12_8_end_neon
         ld1             {v24.8h, v25.8h}, [sp], x9
         ld1             {v26.8h, v27.8h}, [sp], x9
         ld1             {v28.8h, v29.8h}, [sp], x9
-.macro qpel_uni_hv12_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
-        ld1             {\tmp0\().8h, \tmp1\().8h}, [sp], x9
-        calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqrshrn, #12
-        calc_qpelh2     v1, v2, \src0, \src1,  \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqrshrn2, #12
-        calc_qpelh      v2,     \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqrshrn, #12
-        sqxtun          v1.8b, v1.8h
-        sqxtun2         v1.16b, v2.8h
-        st1             {v1.8b}, [x0], #8
-        subs            w4, w4, #1
-        st1             {v1.s}[2], [x0], x1
-.endm
 1:      calc_all2 qpel_uni_hv12_end_step
 2:      mov             sp, x14
         ret
 endfunc
 
+.macro qpel_uni_hv16_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+        ld1             {\tmp0\().8h, \tmp1\().8h}, [x8], x9
+        calc_qpelh      v1,     \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7,  sqrshrn,  #12
+        calc_qpelh2     v1, v2, \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7,  sqrshrn2, #12
+        calc_qpelh      v2,     \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqrshrn,  #12
+        calc_qpelh2     v2, v3, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqrshrn2, #12
+        sqxtun          v1.8b, v1.8h
+        subs            x11, x11, #1
+        sqxtun2         v1.16b, v2.8h
+        st1             {v1.16b}, [x10], x1
+.endm
+
 function hevc_put_hevc_qpel_uni_hv16_8_end_neon
         mov             x9, #(HEVC_MAX_PB_SIZE * 2)
         load_qpel_filterh x6, x5
@@ -3236,17 +3274,6 @@ function hevc_put_hevc_qpel_uni_hv16_8_end_neon
         ld1             {v24.8h, v25.8h}, [x8], x9
         ld1             {v26.8h, v27.8h}, [x8], x9
         ld1             {v28.8h, v29.8h}, [x8], x9
-.macro qpel_uni_hv16_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
-        ld1             {\tmp0\().8h, \tmp1\().8h}, [x8], x9
-        calc_qpelh      v1,     \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7,  sqrshrn,  #12
-        calc_qpelh2     v1, v2, \src0, \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7,  sqrshrn2, #12
-        calc_qpelh      v2,     \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqrshrn,  #12
-        calc_qpelh2     v2, v3, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqrshrn2, #12
-        sqxtun          v1.8b, v1.8h
-        subs            x11, x11, #1
-        sqxtun2         v1.16b, v2.8h
-        st1             {v1.16b}, [x10], x1
-.endm
 1:      calc_all2 qpel_uni_hv16_end_step
 2:      add             x0, x0, #16
         add             sp, sp, #32
@@ -4864,6 +4891,13 @@ function vvc_put_qpel_hv4_8_end_neon
         b               1f
 endfunc
 
+.macro qpel_hv4_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().4h}, [sp], x7
+        calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn
+        subs            w3, w3, #1
+        st1             {v1.4h}, [x0], x7
+.endm
+
 function hevc_put_hevc_qpel_hv4_8_end_neon
         load_qpel_filterh x5, x4
 1:
@@ -4878,17 +4912,20 @@ function hevc_put_hevc_qpel_hv4_8_end_neon
         add             sp, sp, x7, lsl #1
         ldr             d22, [sp]
         add             sp, sp, x7
-.macro qpel_hv4_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().4h}, [sp], x7
-        calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn
-        subs            w3, w3, #1
-        st1             {v1.4h}, [x0], x7
-.endm
 1:      calc_all qpel_hv4_end_step
 2:      mov             sp, x14
         ret
 endfunc
 
+.macro qpel_hv6_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().8h}, [sp], x7
+        calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn
+        calc_qpelh2     v1, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn2
+        st1             {v1.4h}, [x0], #8
+        subs            w3, w3, #1
+        st1             {v1.s}[2], [x0], x8
+.endm
+
 function hevc_put_hevc_qpel_hv6_8_end_neon
         mov             x8, #120
         load_qpel_filterh x5, x4
@@ -4903,14 +4940,6 @@ function hevc_put_hevc_qpel_hv6_8_end_neon
         add             sp, sp, x7, lsl #1
         ldr             q22, [sp]
         add             sp, sp, x7
-.macro qpel_hv6_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().8h}, [sp], x7
-        calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn
-        calc_qpelh2     v1, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn2
-        st1             {v1.4h}, [x0], #8
-        subs            w3, w3, #1
-        st1             {v1.s}[2], [x0], x8
-.endm
 1:      calc_all qpel_hv6_end_step
 2:      mov             sp, x14
         ret
@@ -4922,6 +4951,14 @@ function vvc_put_qpel_hv8_8_end_neon
         b               1f
 endfunc
 
+.macro qpel_hv8_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
+        ld1             {\tmp\().8h}, [sp], x7
+        calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn
+        calc_qpelh2     v1, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn2
+        subs            w3, w3, #1
+        st1             {v1.8h}, [x0], x7
+.endm
+
 function hevc_put_hevc_qpel_hv8_8_end_neon
         mov             x7, #128
         load_qpel_filterh x5, x4
@@ -4937,18 +4974,21 @@ function hevc_put_hevc_qpel_hv8_8_end_neon
         add             sp, sp, x7, lsl #1
         ldr             q22, [sp]
         add             sp, sp, x7
-.macro qpel_hv8_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
-        ld1             {\tmp\().8h}, [sp], x7
-        calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn
-        calc_qpelh2     v1, v2, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sqshrn2
-        subs            w3, w3, #1
-        st1             {v1.8h}, [x0], x7
-.endm
 1:      calc_all qpel_hv8_end_step
 2:      mov             sp, x14
         ret
 endfunc
 
+.macro qpel_hv12_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+        ld1             {\tmp0\().8h, \tmp1\().8h}, [sp], x7
+        calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn
+        calc_qpelh2     v1, v2, \src0, \src1,  \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn2
+        calc_qpelh      v2,     \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqshrn
+        st1             {v1.8h}, [x0], #16
+        subs            w3, w3, #1
+        st1             {v2.4h}, [x0], x8
+.endm
+
 function hevc_put_hevc_qpel_hv12_8_end_neon
         mov             x7, #128
         load_qpel_filterh x5, x4
@@ -4960,15 +5000,6 @@ function hevc_put_hevc_qpel_hv12_8_end_neon
         ld1             {v24.8h, v25.8h}, [sp], x7
         ld1             {v26.8h, v27.8h}, [sp], x7
         ld1             {v28.8h, v29.8h}, [sp], x7
-.macro qpel_hv12_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
-        ld1             {\tmp0\().8h, \tmp1\().8h}, [sp], x7
-        calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn
-        calc_qpelh2     v1, v2, \src0, \src1,  \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn2
-        calc_qpelh      v2,     \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqshrn
-        st1             {v1.8h}, [x0], #16
-        subs            w3, w3, #1
-        st1             {v2.4h}, [x0], x8
-.endm
 1:      calc_all2 qpel_hv12_end_step
 2:      mov             sp, x14
         ret
@@ -4980,6 +5011,16 @@ function vvc_put_qpel_hv16_8_end_neon
         b               1f
 endfunc
 
+.macro qpel_hv16_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+        ld1             {\tmp0\().8h, \tmp1\().8h}, [sp], x7
+        calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn
+        calc_qpelh2     v1, v2, \src0, \src1,  \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn2
+        calc_qpelh      v2,     \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqshrn
+        calc_qpelh2     v2, v3, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqshrn2
+        subs            w3, w3, #1
+        st1             {v1.8h, v2.8h}, [x0], x7
+.endm
+
 function hevc_put_hevc_qpel_hv16_8_end_neon
         mov             x7, #128
         load_qpel_filterh x5, x4
@@ -4991,15 +5032,6 @@ function hevc_put_hevc_qpel_hv16_8_end_neon
         ld1             {v24.8h, v25.8h}, [sp], x7
         ld1             {v26.8h, v27.8h}, [sp], x7
         ld1             {v28.8h, v29.8h}, [sp], x7
-.macro qpel_hv16_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
-        ld1             {\tmp0\().8h, \tmp1\().8h}, [sp], x7
-        calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn
-        calc_qpelh2     v1, v2, \src0, \src1,  \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn2
-        calc_qpelh      v2,     \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqshrn
-        calc_qpelh2     v2, v3, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqshrn2
-        subs            w3, w3, #1
-        st1             {v1.8h, v2.8h}, [x0], x7
-.endm
 1:      calc_all2 qpel_hv16_end_step
 2:      mov             sp, x14
         ret
@@ -5011,6 +5043,16 @@ function vvc_put_qpel_hv32_8_end_neon
         b               0f
 endfunc
 
+.macro qpel_hv32_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
+        ld1             {\tmp0\().8h, \tmp1\().8h}, [x8], x7
+        calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn
+        calc_qpelh2     v1, v2, \src0, \src1,  \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn2
+        calc_qpelh      v2,     \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqshrn
+        calc_qpelh2     v2, v3, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqshrn2
+        subs            x9, x9, #1
+        st1             {v1.8h, v2.8h}, [x5], x7
+.endm
+
 function hevc_put_hevc_qpel_hv32_8_end_neon
         mov             x7, #128
         load_qpel_filterh x5, x4
@@ -5024,15 +5066,6 @@ function hevc_put_hevc_qpel_hv32_8_end_neon
         ld1             {v24.8h, v25.8h}, [x8], x7
         ld1             {v26.8h, v27.8h}, [x8], x7
         ld1             {v28.8h, v29.8h}, [x8], x7
-.macro qpel_hv32_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
-        ld1             {\tmp0\().8h, \tmp1\().8h}, [x8], x7
-        calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn
-        calc_qpelh2     v1, v2, \src0, \src1,  \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sqshrn2
-        calc_qpelh      v2,     \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqshrn
-        calc_qpelh2     v2, v3, \src8, \src9, \src10, \src11, \src12, \src13, \src14, \src15, sqshrn2
-        subs            x9, x9, #1
-        st1             {v1.8h, v2.8h}, [x5], x7
-.endm
 1:      calc_all2 qpel_hv32_end_step
 2:      add             x0, x0, #32
         add             sp, sp, #32
@@ -6064,16 +6097,6 @@ endfunc
 
 qpel_uni_w_hv neon
 
-function hevc_put_hevc_qpel_bi_hv4_8_end_neon
-        mov             x9, #(HEVC_MAX_PB_SIZE * 2)
-        load_qpel_filterh x7, x6
-        ld1             {v16.4h}, [sp], x9
-        ld1             {v17.4h}, [sp], x9
-        ld1             {v18.4h}, [sp], x9
-        ld1             {v19.4h}, [sp], x9
-        ld1             {v20.4h}, [sp], x9
-        ld1             {v21.4h}, [sp], x9
-        ld1             {v22.4h}, [sp], x9
 .macro qpel_bi_hv4_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().4h}, [sp], x9
         calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sshr
@@ -6084,22 +6107,22 @@ function hevc_put_hevc_qpel_bi_hv4_8_end_neon
         subs            w5, w5, #1
         st1             {v1.s}[0], [x0], x1
 .endm
+
+function hevc_put_hevc_qpel_bi_hv4_8_end_neon
+        mov             x9, #(HEVC_MAX_PB_SIZE * 2)
+        load_qpel_filterh x7, x6
+        ld1             {v16.4h}, [sp], x9
+        ld1             {v17.4h}, [sp], x9
+        ld1             {v18.4h}, [sp], x9
+        ld1             {v19.4h}, [sp], x9
+        ld1             {v20.4h}, [sp], x9
+        ld1             {v21.4h}, [sp], x9
+        ld1             {v22.4h}, [sp], x9
 1:      calc_all qpel_bi_hv4_end_step
 2:      mov             sp, x14
         ret
 endfunc
 
-function hevc_put_hevc_qpel_bi_hv6_8_end_neon
-        mov             x9, #(HEVC_MAX_PB_SIZE * 2)
-        load_qpel_filterh x7, x6
-        sub             x1, x1, #4
-        ld1             {v16.8h}, [sp], x9
-        ld1             {v17.8h}, [sp], x9
-        ld1             {v18.8h}, [sp], x9
-        ld1             {v19.8h}, [sp], x9
-        ld1             {v20.8h}, [sp], x9
-        ld1             {v21.8h}, [sp], x9
-        ld1             {v22.8h}, [sp], x9
 .macro qpel_bi_hv6_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8h}, [sp], x9
         calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sshr
@@ -6114,14 +6137,11 @@ function hevc_put_hevc_qpel_bi_hv6_8_end_neon
         subs            w5, w5, #1
         st1             {v1.h}[2], [x0], x1
 .endm
-1:      calc_all qpel_bi_hv6_end_step
-2:      mov             sp, x14
-        ret
-endfunc
 
-function hevc_put_hevc_qpel_bi_hv8_8_end_neon
+function hevc_put_hevc_qpel_bi_hv6_8_end_neon
         mov             x9, #(HEVC_MAX_PB_SIZE * 2)
         load_qpel_filterh x7, x6
+        sub             x1, x1, #4
         ld1             {v16.8h}, [sp], x9
         ld1             {v17.8h}, [sp], x9
         ld1             {v18.8h}, [sp], x9
@@ -6129,6 +6149,11 @@ function hevc_put_hevc_qpel_bi_hv8_8_end_neon
         ld1             {v20.8h}, [sp], x9
         ld1             {v21.8h}, [sp], x9
         ld1             {v22.8h}, [sp], x9
+1:      calc_all qpel_bi_hv6_end_step
+2:      mov             sp, x14
+        ret
+endfunc
+
 .macro qpel_bi_hv8_end_step tmp, src0, src1, src2, src3, src4, src5, src6, src7
         ld1             {\tmp\().8h}, [sp], x9
         calc_qpelh      v1, \src0, \src1, \src2, \src3, \src4, \src5, \src6, \src7, sshr
@@ -6142,26 +6167,22 @@ function hevc_put_hevc_qpel_bi_hv8_8_end_neon
         subs            w5, w5, #1
         st1             {v1.8b}, [x0], x1
 .endm
+
+function hevc_put_hevc_qpel_bi_hv8_8_end_neon
+        mov             x9, #(HEVC_MAX_PB_SIZE * 2)
+        load_qpel_filterh x7, x6
+        ld1             {v16.8h}, [sp], x9
+        ld1             {v17.8h}, [sp], x9
+        ld1             {v18.8h}, [sp], x9
+        ld1             {v19.8h}, [sp], x9
+        ld1             {v20.8h}, [sp], x9
+        ld1             {v21.8h}, [sp], x9
+        ld1             {v22.8h}, [sp], x9
 1:      calc_all qpel_bi_hv8_end_step
 2:      mov             sp, x14
         ret
 endfunc
 
-function hevc_put_hevc_qpel_bi_hv16_8_end_neon
-        load_qpel_filterh x7, x8
-        mov             x9, #(HEVC_MAX_PB_SIZE * 2)
-        mov             x10, x6
-0:      mov             x8, sp          // src
-        ld1             {v16.8h, v17.8h}, [x8], x9
-        mov             w11, w5         // height
-        ld1             {v18.8h, v19.8h}, [x8], x9
-        mov             x12, x4         // src2
-        ld1             {v20.8h, v21.8h}, [x8], x9
-        mov             x7, x0          // dst
-        ld1             {v22.8h, v23.8h}, [x8], x9
-        ld1             {v24.8h, v25.8h}, [x8], x9
-        ld1             {v26.8h, v27.8h}, [x8], x9
-        ld1             {v28.8h, v29.8h}, [x8], x9
 .macro qpel_bi_hv16_end_step tmp0, tmp1, src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10, src11, src12, src13, src14, src15
         ld1             {\tmp0\().8h, \tmp1\().8h}, [x8], x9
         calc_qpelh      v1,     \src0,  \src1, \src2,  \src3,  \src4,  \src5,  \src6,  \src7, sshr
@@ -6182,6 +6203,22 @@ function hevc_put_hevc_qpel_bi_hv16_8_end_neon
         subs            x11, x11, #1
         st1             {v1.16b}, [x7], x1
 .endm
+
+function hevc_put_hevc_qpel_bi_hv16_8_end_neon
+        load_qpel_filterh x7, x8
+        mov             x9, #(HEVC_MAX_PB_SIZE * 2)
+        mov             x10, x6
+0:      mov             x8, sp          // src
+        ld1             {v16.8h, v17.8h}, [x8], x9
+        mov             w11, w5         // height
+        ld1             {v18.8h, v19.8h}, [x8], x9
+        mov             x12, x4         // src2
+        ld1             {v20.8h, v21.8h}, [x8], x9
+        mov             x7, x0          // dst
+        ld1             {v22.8h, v23.8h}, [x8], x9
+        ld1             {v24.8h, v25.8h}, [x8], x9
+        ld1             {v26.8h, v27.8h}, [x8], x9
+        ld1             {v28.8h, v29.8h}, [x8], x9
 1:      calc_all2 qpel_bi_hv16_end_step
 2:      add             x0, x0, #16
         add             sp, sp, #32
-- 
2.52.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]