<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Aptos;
        panose-1:2 11 0 4 2 2 2 2 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:"\@DengXian";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"\@SimSun";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:10.0pt;
        font-family:"Aptos",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#467886;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#96607D;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        font-size:10.0pt;
        font-family:"Courier New";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        font-size:10.0pt;
        font-family:"Aptos",sans-serif;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:10.0pt;
        font-family:"Aptos",sans-serif;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
span.apple-converted-space
        {mso-style-name:apple-converted-space;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="#467886" vlink="#96607D" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">Hi Chen,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Thanks for the comments.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Regarding<o:p></o:p></span></p>
<pre><span style="font-size:11.0pt;color:black">+            vst1q_u16(dst + w, vreinterpretq_u16_s16(d0_lo));<o:p></o:p></span></pre>
<pre><span style="font-size:11.0pt;color:black">+            vst1q_u16(dst + w + 8, vreinterpretq_u16_s16(d0_hi));<o:p></o:p></span></pre>
<p class="MsoNormal"><span style="font-size:11.0pt">>  </span><span style="font-size:11.0pt;color:black">How about performance on vst1q_u16_x2 or vst2q_u64 ?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">I tried switch to </span><span style="font-size:11.0pt;color:black">vst1q_u16_x2 and there is not a significant difference / very small regression in general compared to
</span><span style="font-size:11.0pt">st1q_u16</span><span style="font-size:11.0pt;color:black">.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black">The current </span>
<span style="font-size:11.0pt">2 * st1q_u16 is used here so most of the compilers are likely to generate the STP instruction, which is recommended in the optimization guide for memory copying.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">For </span><span style="font-size:11.0pt;color:black">vst2q_u64 do you mean vst1q_u64 / vst1q_u64_x2? I do not see why we need an interleaved store here?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black">vst1q_u64 performs just the same as vst1q_u16, and vst1q_u64_x2 the same as vst1q_u16_x2.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Regarding<o:p></o:p></span></p>
<pre><span style="font-size:11.0pt;color:black">+            int16x8_t d0 = vrsraq_n_s16(addon, vaddq_s16(s0, s1), shiftNum);<o:p></o:p></span></pre>
<pre><span style="font-size:11.0pt;color:black">+            d0 = vminq_s16(d0, vdupq_n_s16((1 << X265_DEPTH) - 1));<o:p></o:p></span></pre>
<pre><span style="font-size:11.0pt;color:black">+            d0 = vmaxq_s16(d0, vdupq_n_s16(0));<o:p></o:p></span></pre>
<pre style="word-break:break-word!important"><span style="font-size:11.0pt;color:black">> vrsraq_n_s16 looks not single instruction, is it faster than SQRSHRUN ?<o:p></o:p></span></pre>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">We do not need to narrow as in
</span><span style="font-size:11.0pt;color:black">SQRSHRUN here?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black">Besides, vrsraq_n_s16 maps SRSRA and has the same suggested performance as SQRSHRUN on the software optimization guide.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;color:black">Li<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<div id="mail-editor-reference-message-container">
<div>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;color:black">From:
</span></b><span style="font-size:12.0pt;color:black">chen <chenm003@163.com><br>
<b>Date: </b>Thursday, 2025. June 26. at 7:41<br>
<b>To: </b>Development for x265 <x265-devel@videolan.org><br>
<b>Cc: </b>nd <nd@arm.com>, Li Zhang <Li.Zhang2@arm.com><br>
<b>Subject: </b>Re:[x265] [PATCH v2] AArch64: Optimize and clean up addAvg Neon and SVE2 functions<o:p></o:p></span></p>
</div>
<div>
<div id="spnEditorContent">
<p style="margin:0in"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black">Thank for the revised patch<o:p></o:p></span></p>
<p style="margin:0in"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black">Some comments,<o:p></o:p></span></p>
<pre style="word-break:break-word!important"><span style="color:black">+            vst1q_u16(dst + w, vreinterpretq_u16_s16(d0_lo));<o:p></o:p></span></pre>
<pre><span style="color:black">+            vst1q_u16(dst + w + 8, vreinterpretq_u16_s16(d0_hi));<o:p></o:p></span></pre>
<div>
<p class="MsoNormal"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black">How about performance on vst1q_u16_x2 or vst2q_u64 ?<o:p></o:p></span></p>
</div>
<p style="margin:0in"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black"><o:p> </o:p></span></p>
<pre style="word-break:break-word!important"><span style="color:black">+            int16x8_t d0 = vrsraq_n_s16(addon, vaddq_s16(s0, s1), shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">+            d0 = vminq_s16(d0, vdupq_n_s16((1 << X265_DEPTH) - 1));<o:p></o:p></span></pre>
<pre><span style="color:black">+            d0 = vmaxq_s16(d0, vdupq_n_s16(0));<o:p></o:p></span></pre>
<div>
<pre style="word-break:break-word!important"><span style="color:black">vrsraq_n_s16 looks not single instruction, is it faster than SQRSHRUN ?<o:p></o:p></span></pre>
</div>
</div>
<p style="margin:0in"><span style="font-size:10.5pt;font-family:"Arial",sans-serif;color:black"><o:p> </o:p></span></p>
<pre><span style="color:black"><br>At 2025-06-25 17:03:26, "Li Zhang" <li.zhang2@arm.com> wrote:<o:p></o:p></span></pre>
<pre><span style="color:black">>Extend the neon intrinsics implementation to support all block sizes and<o:p></o:p></span></pre>
<pre><span style="color:black">>optimize it to use rounding-shift-and-accumulate instead of separate<o:p></o:p></span></pre>
<pre><span style="color:black">>widening, add, and shift steps. Also unroll the loops for larger block<o:p></o:p></span></pre>
<pre><span style="color:black">>sizes to enable the compiler to emit LDP and STP instructions.<o:p></o:p></span></pre>
<pre><span style="color:black">><o:p> </o:p></span></pre>
<pre><span style="color:black">>Delete the Neon and SVE2 assembly implementations as they are 1-2x<o:p></o:p></span></pre>
<pre><span style="color:black">>slower than Neon intrinsics implementation.<o:p></o:p></span></pre>
<pre><span style="color:black">>---<o:p></o:p></span></pre>
<pre><span style="color:black">> source/common/aarch64/asm-primitives.cpp |  16 -<o:p></o:p></span></pre>
<pre><span style="color:black">> source/common/aarch64/mc-a-sve2.S        | 606 -----------------------<o:p></o:p></span></pre>
<pre><span style="color:black">> source/common/aarch64/mc-a.S             | 341 -------------<o:p></o:p></span></pre>
<pre><span style="color:black">> source/common/aarch64/mem-neon.h         |  20 +<o:p></o:p></span></pre>
<pre><span style="color:black">> source/common/aarch64/pixel-prim.cpp     | 207 +++++---<o:p></o:p></span></pre>
<pre><span style="color:black">> 5 files changed, 169 insertions(+), 1021 deletions(-)<o:p></o:p></span></pre>
<pre><span style="color:black">><o:p> </o:p></span></pre>
<pre><span style="color:black">>diff --git a/source/common/aarch64/asm-primitives.cpp b/source/common/aarch64/asm-primitives.cpp<o:p></o:p></span></pre>
<pre><span style="color:black">>index 55aaecfa7..34364ef8e 100644<o:p></o:p></span></pre>
<pre><span style="color:black">>--- a/source/common/aarch64/asm-primitives.cpp<o:p></o:p></span></pre>
<pre><span style="color:black">>+++ b/source/common/aarch64/asm-primitives.cpp<o:p></o:p></span></pre>
<pre><span style="color:black">>@@ -462,14 +462,6 @@ void setupNeonPrimitives(EncoderPrimitives &p)<o:p></o:p></span></pre>
<pre><span style="color:black">>     ALL_LUMA_PU(pixelavg_pp[NONALIGNED], pixel_avg_pp, neon);<o:p></o:p></span></pre>
<pre><span style="color:black">>     ALL_LUMA_PU(pixelavg_pp[ALIGNED], pixel_avg_pp, neon);<o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">>-    // addAvg<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ALL_LUMA_PU(addAvg[NONALIGNED], addAvg, neon);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ALL_LUMA_PU(addAvg[ALIGNED], addAvg, neon);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ALL_CHROMA_420_PU(addAvg[NONALIGNED], addAvg, neon);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ALL_CHROMA_422_PU(addAvg[NONALIGNED], addAvg, neon);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ALL_CHROMA_420_PU(addAvg[ALIGNED], addAvg, neon);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ALL_CHROMA_422_PU(addAvg[ALIGNED], addAvg, neon);<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>     // calc_Residual<o:p></o:p></span></pre>
<pre><span style="color:black">>     p.cu[BLOCK_4x4].calcresidual[NONALIGNED]   = PFX(getResidual4_neon);<o:p></o:p></span></pre>
<pre><span style="color:black">>     p.cu[BLOCK_8x8].calcresidual[NONALIGNED]   = PFX(getResidual8_neon);<o:p></o:p></span></pre>
<pre><span style="color:black">>@@ -597,14 +589,6 @@ void setupSve2Primitives(EncoderPrimitives &p)<o:p></o:p></span></pre>
<pre><span style="color:black">>     LUMA_PU_MULTIPLE_ARCHS_3(pixelavg_pp[NONALIGNED], pixel_avg_pp, sve2);<o:p></o:p></span></pre>
<pre><span style="color:black">>     LUMA_PU_MULTIPLE_ARCHS_3(pixelavg_pp[ALIGNED], pixel_avg_pp, sve2);<o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">>-    // addAvg<o:p></o:p></span></pre>
<pre><span style="color:black">>-    LUMA_PU_CAN_USE_SVE2(addAvg[NONALIGNED], addAvg);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    LUMA_PU_CAN_USE_SVE2(addAvg[ALIGNED], addAvg);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_420_PU_MULTIPLE_ARCHS(addAvg[NONALIGNED], addAvg, sve2);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_420_PU_MULTIPLE_ARCHS(addAvg[ALIGNED], addAvg, sve2);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_422_PU_CAN_USE_SVE2(addAvg[NONALIGNED], addAvg);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_422_PU_CAN_USE_SVE2(addAvg[ALIGNED], addAvg);<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>     // calc_Residual<o:p></o:p></span></pre>
<pre><span style="color:black">>     p.cu[BLOCK_16x16].calcresidual[NONALIGNED] = PFX(getResidual16_sve2);<o:p></o:p></span></pre>
<pre><span style="color:black">>     p.cu[BLOCK_32x32].calcresidual[NONALIGNED] = PFX(getResidual32_sve2);<o:p></o:p></span></pre>
<pre><span style="color:black">>diff --git a/source/common/aarch64/mc-a-sve2.S b/source/common/aarch64/mc-a-sve2.S<o:p></o:p></span></pre>
<pre><span style="color:black">>index 00fb0048f..fc0a6f3e8 100644<o:p></o:p></span></pre>
<pre><span style="color:black">>--- a/source/common/aarch64/mc-a-sve2.S<o:p></o:p></span></pre>
<pre><span style="color:black">>+++ b/source/common/aarch64/mc-a-sve2.S<o:p></o:p></span></pre>
<pre><span style="color:black">>@@ -298,609 +298,3 @@ pixel_avg_pp_64xN_sve2 16<o:p></o:p></span></pre>
<pre><span style="color:black">> pixel_avg_pp_64xN_sve2 32<o:p></o:p></span></pre>
<pre><span style="color:black">> pixel_avg_pp_64xN_sve2 48<o:p></o:p></span></pre>
<pre><span style="color:black">> pixel_avg_pp_64xN_sve2 64<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-// void addAvg(const int16_t* src0, const int16_t* src1, pixel* dst, intptr_t src0Stride, intptr_t src1Stride, intptr_t dstStride)<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_2xN_sve2 h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_2x\h\()_sve2)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.s, vl2<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p1.h, vl4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p2.h, vl2<o:p></o:p></span></pre>
<pre><span style="color:black">>-.rept \h / 2<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1rw           {z0.s}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1rw           {z1.s}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1rw           {z2.s}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1rw           {z3.s}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p1/m, z0.h, z1.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.h, p1/m, z2.h, z3.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z2.b, z2.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.b, z2.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p2, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z2.h}, p2, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endr<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_2xN_sve2 4<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_2xN_sve2 8<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_2xN_sve2 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_6xN_sve2 h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_6x\h\()_sve2)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h / 2<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl16<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p2.h, vl6<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_sve2_addavg_6x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z2.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z3.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z1.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.h, p0/m, z2.h, z3.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z2.b, z2.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.b, z2.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p2, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z2.h}, p2, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_sve2_addavg_6x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_6xN_sve2 8<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_6xN_sve2 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_8xN_sve2 h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_8x\h\()_sve2)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl16<o:p></o:p></span></pre>
<pre><span style="color:black">>-.rept \h / 2<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z2.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z3.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z1.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.h, p0/m, z2.h, z3.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z2.b, z2.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.b, z2.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z2.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endr<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_8xN1_sve2 h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_8x\h\()_sve2)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h / 2<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl16<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_sve2_addavg_8x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z2.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z3.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z1.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.h, p0/m, z2.h, z3.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z2.b, z2.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.b, z2.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z2.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_sve2_addavg_8x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN_sve2 2<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN_sve2 4<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN_sve2 6<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN_sve2 8<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN_sve2 12<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN_sve2 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN1_sve2 32<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN1_sve2 64<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_12xN_sve2 h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_12x\h\()_sve2)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    rdvl            x9, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cmp             x9, #16<o:p></o:p></span></pre>
<pre><span style="color:black">>-    bgt             .vl_gt_16_addAvg_12x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl16<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p1.b, vl8<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_sve2_addavg_12x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z2.b}, p1/z, [x0, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z3.b}, p1/z, [x1, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z1.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.h, p1/m, z2.h, z3.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z2.b, z2.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.b, z2.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z2.h}, p1, [x2, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_sve2_addavg_12x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-.vl_gt_16_addAvg_12x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             x10, #24<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             x11, #0<o:p></o:p></span></pre>
<pre><span style="color:black">>-    whilelt         p0.b, x11, x10<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_sve2_gt_16_addavg_12x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z1.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z2.b, z2.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.b, z2.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_sve2_gt_16_addavg_12x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_12xN_sve2 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_12xN_sve2 32<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_16xN_sve2 h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_16x\h\()_sve2)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    rdvl            x9, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cmp             x9, #16<o:p></o:p></span></pre>
<pre><span style="color:black">>-    bgt             .vl_gt_16_addAvg_16x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl16<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_eq_16_sve2_addavg_16x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z2.b}, p0/z, [x0, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z3.b}, p0/z, [x1, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z1.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.h, p0/m, z2.h, z3.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z2.b, z2.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.b, z2.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z2.h}, p0, [x2, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_eq_16_sve2_addavg_16x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-.vl_gt_16_addAvg_16x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl32<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_gt_16_sve2_addavg_16x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z1.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_gt_16_sve2_addavg_16x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN_sve2 4<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN_sve2 8<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN_sve2 12<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN_sve2 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN_sve2 24<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN_sve2 32<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN_sve2 64<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_24xN_sve2 h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_24x\h\()_sve2)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    rdvl            x9, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cmp             x9, #16<o:p></o:p></span></pre>
<pre><span style="color:black">>-    bgt             .vl_gt_16_addAvg_24x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_eq_16_sve2_addavg_24x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v0.16b-v2.16b}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v3.16b-v5.16b}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v0, v3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v1, v4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v2, v5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v1.8b, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v2.8b, v2.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.8b-v2.8b}, [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_eq_16_sve2_addavg_24x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-.vl_gt_16_addAvg_24x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cmp             x9, #48<o:p></o:p></span></pre>
<pre><span style="color:black">>-    bgt             .vl_gt_48_addAvg_24x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl32<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p1.b, vl16<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_gt_16_sve2_addavg_24x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p1/z, [x0, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z2.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z3.b}, p1/z, [x1, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z2.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.h, p1/m, z1.h, z3.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z1.b, z1.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.b, z1.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z1.h}, p1, [x2, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_gt_16_sve2_addavg_24x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-.vl_gt_48_addAvg_24x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             x10, #48<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             x11, #0<o:p></o:p></span></pre>
<pre><span style="color:black">>-    whilelt         p0.b, x11, x10<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_gt_48_sve2_addavg_24x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z2.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z2.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_gt_48_sve2_addavg_24x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_24xN_sve2 32<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_24xN_sve2 64<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_32xN_sve2 h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_32x\h\()_sve2)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    rdvl            x9, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cmp             x9, #16<o:p></o:p></span></pre>
<pre><span style="color:black">>-    bgt             .vl_gt_16_addAvg_32x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl16<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_eq_16_sve2_addavg_32x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p0/z, [x0, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z2.b}, p0/z, [x0, #2, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z3.b}, p0/z, [x0, #3, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z4.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z5.b}, p0/z, [x1, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z6.b}, p0/z, [x1, #2, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z7.b}, p0/z, [x1, #3, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z4.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.h, p0/m, z1.h, z5.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.h, p0/m, z2.h, z6.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z3.h, p0/m, z3.h, z7.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z1.b, z1.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.b, z1.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z2.b, z2.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.b, z2.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z3.b, z3.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z3.b, z3.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z1.h}, p0, [x2, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z2.h}, p0, [x2, #2, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z3.h}, p0, [x2, #3, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_eq_16_sve2_addavg_32x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-.vl_gt_16_addAvg_32x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cmp             x9, #48<o:p></o:p></span></pre>
<pre><span style="color:black">>-    bgt             .vl_gt_48_addAvg_32x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl32<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_gt_eq_32_sve2_addavg_32x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p0/z, [x0, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z2.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z3.b}, p0/z, [x1, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z2.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.h, p0/m, z1.h, z3.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z1.b, z1.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.b, z1.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z1.h}, p0, [x2, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_gt_eq_32_sve2_addavg_32x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-.vl_gt_48_addAvg_32x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl64<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_eq_64_sve2_addavg_32x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z1.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_eq_64_sve2_addavg_32x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_32xN_sve2 8<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_32xN_sve2 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_32xN_sve2 24<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_32xN_sve2 32<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_32xN_sve2 48<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_32xN_sve2 64<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_48x64_sve2)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    rdvl            x9, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cmp             x9, #16<o:p></o:p></span></pre>
<pre><span style="color:black">>-    bgt             .vl_gt_16_addAvg_48x64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             x3, x3, #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             x4, x4, #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_eq_16_sve2_addavg_48x64:<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v0.8h-v3.8h}, [x0], #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v4.8h-v7.8h}, [x1], #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v20.8h-v21.8h}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v22.8h-v23.8h}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v0, v4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v1, v5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v2, v6<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v3, v7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v20, v22<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v21, v23<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v0.16b, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v1.8b, v2.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v1.16b, v3.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v2.8b, v20.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v2.16b, v21.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.16b-v2.16b}, [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_eq_16_sve2_addavg_48x64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-.vl_gt_16_addAvg_48x64:<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cmp             x9, #48<o:p></o:p></span></pre>
<pre><span style="color:black">>-    bgt             .vl_gt_48_addAvg_48x64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl32<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_gt_eq_32_sve2_addavg_48x64:<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p0/z, [x0, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z2.b}, p0/z, [x0, #2, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z4.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z5.b}, p0/z, [x1, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z6.b}, p0/z, [x1, #2, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z4.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.h, p0/m, z1.h, z5.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.h, p0/m, z2.h, z6.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z1.b, z1.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.b, z1.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z2.b, z2.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.b, z2.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z1.h}, p0, [x2, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z2.h}, p0, [x2, #2, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_gt_eq_32_sve2_addavg_48x64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-.vl_gt_48_addAvg_48x64:<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cmp             x9, #112<o:p></o:p></span></pre>
<pre><span style="color:black">>-    bgt             .vl_gt_112_addAvg_48x64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p1.b, vl32<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_gt_48_sve2_addavg_48x64:<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p1/z, [x0, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z4.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z5.b}, p1/z, [x1, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z4.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.h, p1/m, z1.h, z5.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z1.b, z1.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.b, z1.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z1.h}, p1, [x2, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_gt_48_sve2_addavg_48x64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-.vl_gt_112_addAvg_48x64:<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             x10, #96<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             x11, #0<o:p></o:p></span></pre>
<pre><span style="color:black">>-    whilelt         p0.b, x11, x10<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_gt_112_sve2_addavg_48x64:<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z4.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z4.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_gt_112_sve2_addavg_48x64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_64xN_sve2 h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_64x\h\()_sve2)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    rdvl            x9, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cmp             x9, #16<o:p></o:p></span></pre>
<pre><span style="color:black">>-    bgt             .vl_gt_16_addAvg_64x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             x3, x3, #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             x4, x4, #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_eq_16_sve2_addavg_64x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v0.8h-v3.8h}, [x0], #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v4.8h-v7.8h}, [x1], #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v20.8h-v23.8h}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v24.8h-v27.8h}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v0, v4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v1, v5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v2, v6<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v3, v7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v20, v24<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v21, v25<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v22, v26<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v23, v27<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v0.16b, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v1.8b, v2.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v1.16b, v3.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v2.8b, v20.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v2.16b, v21.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v3.8b, v22.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v3.16b, v23.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.16b-v3.16b}, [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_eq_16_sve2_addavg_64x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-.vl_gt_16_addAvg_64x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cmp             x9, #48<o:p></o:p></span></pre>
<pre><span style="color:black">>-    bgt             .vl_gt_48_addAvg_64x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl32<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_gt_eq_32_sve2_addavg_64x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p0/z, [x0, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z2.b}, p0/z, [x0, #2, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z3.b}, p0/z, [x0, #3, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z4.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z5.b}, p0/z, [x1, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z6.b}, p0/z, [x1, #2, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z7.b}, p0/z, [x1, #3, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z4.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.h, p0/m, z1.h, z5.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.h, p0/m, z2.h, z6.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z3.h, p0/m, z3.h, z7.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z1.b, z1.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.b, z1.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z2.b, z2.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z2.b, z2.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z3.b, z3.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z3.b, z3.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z1.h}, p0, [x2, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z2.h}, p0, [x2, #2, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z3.h}, p0, [x2, #3, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_gt_eq_32_sve2_addavg_64x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-.vl_gt_48_addAvg_64x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cmp             x9, #112<o:p></o:p></span></pre>
<pre><span style="color:black">>-    bgt             .vl_gt_112_addAvg_64x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl64<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_gt_eq_48_sve2_addavg_64x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z1.b}, p0/z, [x0, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z4.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z5.b}, p0/z, [x1, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z4.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.h, p0/m, z1.h, z5.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z1.b, z1.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z1.b, z1.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z1.h}, p0, [x2, #1, mul vl]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_gt_eq_48_sve2_addavg_64x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-.vl_gt_112_addAvg_64x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ptrue           p0.b, vl128<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_gt_eq_128_sve2_addavg_64x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z0.b}, p0/z, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1b            {z4.b}, p0/z, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4, lsl #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.h, p0/m, z0.h, z4.h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqrshrnb        z0.b, z0.h, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             z0.b, z0.b, #0x80<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1b            {z0.h}, p0, [x2]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x2, x2, x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_gt_eq_128_sve2_addavg_64x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_64xN_sve2 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_64xN_sve2 32<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_64xN_sve2 48<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_64xN_sve2 64<o:p></o:p></span></pre>
<pre><span style="color:black">>diff --git a/source/common/aarch64/mc-a.S b/source/common/aarch64/mc-a.S<o:p></o:p></span></pre>
<pre><span style="color:black">>index 130bf1a4a..876228473 100644<o:p></o:p></span></pre>
<pre><span style="color:black">>--- a/source/common/aarch64/mc-a.S<o:p></o:p></span></pre>
<pre><span style="color:black">>+++ b/source/common/aarch64/mc-a.S<o:p></o:p></span></pre>
<pre><span style="color:black">>@@ -214,344 +214,3 @@ pixel_avg_pp_64xN_neon 16<o:p></o:p></span></pre>
<pre><span style="color:black">> pixel_avg_pp_64xN_neon 32<o:p></o:p></span></pre>
<pre><span style="color:black">> pixel_avg_pp_64xN_neon 48<o:p></o:p></span></pre>
<pre><span style="color:black">> pixel_avg_pp_64xN_neon 64<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-// void addAvg(const int16_t* src0, const int16_t* src1, pixel* dst, intptr_t src0Stride, intptr_t src1Stride, intptr_t dstStride)<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_2xN h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_2x\h\()_neon)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-.rept \h / 2<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ldr             w10, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ldr             w11, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ldr             w12, [x0]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ldr             w13, [x1]<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x0, x0, x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             x1, x1, x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    dup             v0.2s, w10<o:p></o:p></span></pre>
<pre><span style="color:black">>-    dup             v1.2s, w11<o:p></o:p></span></pre>
<pre><span style="color:black">>-    dup             v2.2s, w12<o:p></o:p></span></pre>
<pre><span style="color:black">>-    dup             v3.2s, w13<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             v0.4h, v0.4h, v1.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             v2.4h, v2.4h, v3.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl           v0.4s, v0.4h, v30.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl           v2.4s, v2.4h, v30.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn            v0.4h, v0.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn2           v0.8h, v2.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.h}[0], [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.h}[2], [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endr<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_2xN 4<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_2xN 8<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_2xN 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_4xN h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_4x\h\()_neon)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-.rept \h / 2<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v0.8b}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v1.8b}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v2.8b}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v3.8b}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             v0.4h, v0.4h, v1.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             v2.4h, v2.4h, v3.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl           v0.4s, v0.4h, v30.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl           v2.4s, v2.4h, v30.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn            v0.4h, v0.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn2           v0.8h, v2.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.s}[0], [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.s}[1], [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endr<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_4xN 2<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_4xN 4<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_4xN 8<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_4xN 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_4xN 32<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_6xN h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_6x\h\()_neon)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h / 2<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             x5, x5, #4<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_addavg_6x\h:<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v0.16b}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v1.16b}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v2.16b}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v3.16b}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             v0.8h, v0.8h, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             v2.8h, v2.8h, v3.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl           v16.4s, v0.4h, v30.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl2          v17.4s, v0.8h, v30.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl           v18.4s, v2.4h, v30.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl2          v19.4s, v2.8h, v30.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn            v0.4h, v16.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn2           v0.8h, v17.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn            v1.4h, v18.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn2           v1.8h, v19.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v1.8b, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    str             s0, [x2], #4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.h}[2], [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    str             s1, [x2], #4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v1.h}[2], [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_addavg_6x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_6xN 8<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_6xN 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_8xN h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_8x\h\()_neon)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-.rept \h / 2<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v0.16b}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v1.16b}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v2.16b}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v3.16b}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             v0.8h, v0.8h, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             v2.8h, v2.8h, v3.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl           v16.4s, v0.4h, v30.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl2          v17.4s, v0.8h, v30.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl           v18.4s, v2.4h, v30.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl2          v19.4s, v2.8h, v30.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn            v0.4h, v16.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn2           v0.8h, v17.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn            v1.4h, v18.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn2           v1.8h, v19.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v1.8b, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.8b}, [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v1.8b}, [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endr<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_8xN1 h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_8x\h\()_neon)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h / 2<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_addavg_8x\h:<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v0.16b}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v1.16b}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v2.16b}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v3.16b}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             v0.8h, v0.8h, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             v2.8h, v2.8h, v3.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl           v16.4s, v0.4h, v30.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl2          v17.4s, v0.8h, v30.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl           v18.4s, v2.4h, v30.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl2          v19.4s, v2.8h, v30.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn            v0.4h, v16.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn2           v0.8h, v17.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn            v1.4h, v18.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn2           v1.8h, v19.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v1.8b, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.8b}, [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v1.8b}, [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_addavg_8x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN 2<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN 4<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN 6<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN 8<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN 12<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN1 32<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_8xN1 64<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_12xN h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_12x\h\()_neon)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             x3, x3, #16<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             x4, x4, #16<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             x5, x5, #8<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_addAvg_12X\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v0.16b}, [x0], #16<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v1.16b}, [x1], #16<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v2.8b}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v3.8b}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             v0.8h, v0.8h, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    add             v2.4h, v2.4h, v3.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl           v16.4s, v0.4h, v30.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl2          v17.4s, v0.8h, v30.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    saddl           v18.4s, v2.4h, v30.4h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn            v0.4h, v16.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn2           v0.8h, v17.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    shrn            v1.4h, v18.4s, #7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v1.8b, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.8b}, [x2], #8<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v1.s}[0], [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_addAvg_12X\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_12xN 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_12xN 32<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_16xN h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_16x\h\()_neon)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_addavg_16x\h:<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v0.8h-v1.8h}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v2.8h-v3.8h}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v0, v2<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v1, v3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v0.16b, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.16b}, [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_addavg_16x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN 4<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN 8<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN 12<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN 24<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN 32<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_16xN 64<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_24xN h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_24x\h\()_neon)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_addavg_24x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v0.16b-v2.16b}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v3.16b-v5.16b}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v0, v3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v1, v4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v2, v5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v1.8b, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v2.8b, v2.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.8b-v2.8b}, [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_addavg_24x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_24xN 32<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_24xN 64<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_32xN h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_32x\h\()_neon)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_addavg_32x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v0.8h-v3.8h}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v4.8h-v7.8h}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v0, v4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v1, v5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v2, v6<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v3, v7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v1.8b, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v2.8b, v2.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v3.8b, v3.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.8b-v3.8b}, [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_addavg_32x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_32xN 8<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_32xN 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_32xN 24<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_32xN 32<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_32xN 48<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_32xN 64<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_48x64_neon)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             x3, x3, #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             x4, x4, #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_addavg_48x64:<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v0.8h-v3.8h}, [x0], #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v4.8h-v7.8h}, [x1], #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v20.8h-v21.8h}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v22.8h-v23.8h}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v0, v4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v1, v5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v2, v6<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v3, v7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v20, v22<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v21, v23<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v0.16b, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v1.8b, v2.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v1.16b, v3.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v2.8b, v20.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v2.16b, v21.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.16b-v2.16b}, [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_addavg_48x64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-.macro addAvg_64xN h<o:p></o:p></span></pre>
<pre><span style="color:black">>-function PFX(addAvg_64x\h\()_neon)<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addAvg_start<o:p></o:p></span></pre>
<pre><span style="color:black">>-    mov             w12, #\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             x3, x3, #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             x4, x4, #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-.Loop_addavg_64x\h\():<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sub             w12, w12, #1<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v0.8h-v3.8h}, [x0], #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v4.8h-v7.8h}, [x1], #64<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v20.8h-v23.8h}, [x0], x3<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ld1             {v24.8h-v27.8h}, [x1], x4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v0, v4<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v1, v5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v2, v6<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v3, v7<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v20, v24<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v21, v25<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v22, v26<o:p></o:p></span></pre>
<pre><span style="color:black">>-    addavg_1        v23, v27<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v0.8b, v0.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v0.16b, v1.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v1.8b, v2.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v1.16b, v3.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v2.8b, v20.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v2.16b, v21.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun          v3.8b, v22.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    sqxtun2         v3.16b, v23.8h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    st1             {v0.16b-v3.16b}, [x2], x5<o:p></o:p></span></pre>
<pre><span style="color:black">>-    cbnz            w12, .Loop_addavg_64x\h<o:p></o:p></span></pre>
<pre><span style="color:black">>-    ret<o:p></o:p></span></pre>
<pre><span style="color:black">>-endfunc<o:p></o:p></span></pre>
<pre><span style="color:black">>-.endm<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_64xN 16<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_64xN 32<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_64xN 48<o:p></o:p></span></pre>
<pre><span style="color:black">>-addAvg_64xN 64<o:p></o:p></span></pre>
<pre><span style="color:black">>diff --git a/source/common/aarch64/mem-neon.h b/source/common/aarch64/mem-neon.h<o:p></o:p></span></pre>
<pre><span style="color:black">>index 8bd5fbee9..27d72b70c 100644<o:p></o:p></span></pre>
<pre><span style="color:black">>--- a/source/common/aarch64/mem-neon.h<o:p></o:p></span></pre>
<pre><span style="color:black">>+++ b/source/common/aarch64/mem-neon.h<o:p></o:p></span></pre>
<pre><span style="color:black">>@@ -74,6 +74,26 @@ static void inline store_u8x4x1(uint8_t *d, const uint8x8_t s)<o:p></o:p></span></pre>
<pre><span style="color:black">>     vst1_lane_u32((uint32_t *)d, vreinterpret_u32_u8(s), 0);<o:p></o:p></span></pre>
<pre><span style="color:black">> }<o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">>+// Store 2 bytes from the low half of a uint8x8_t.<o:p></o:p></span></pre>
<pre><span style="color:black">>+static void inline store_u8x2x1(uint8_t *d, const uint8x8_t s)<o:p></o:p></span></pre>
<pre><span style="color:black">>+{<o:p></o:p></span></pre>
<pre><span style="color:black">>+    vst1_lane_u16((uint16_t *)d, vreinterpret_u16_u8(s), 0);<o:p></o:p></span></pre>
<pre><span style="color:black">>+}<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+// Load 2 int16_t into a int16x8_t.<o:p></o:p></span></pre>
<pre><span style="color:black">>+static inline int16x8_t load_s16x2x1(const int16_t *p)<o:p></o:p></span></pre>
<pre><span style="color:black">>+{<o:p></o:p></span></pre>
<pre><span style="color:black">>+    int32x4_t ret = vld1q_lane_s32((const int32_t *)p, vdupq_n_s32(0), 0);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+    return vreinterpretq_s16_s32(ret);<o:p></o:p></span></pre>
<pre><span style="color:black">>+}<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+// Store 2 uint16_t from the low half of a uint16x8_t.<o:p></o:p></span></pre>
<pre><span style="color:black">>+static inline void store_u16x2x1(const uint16_t *d, const uint16x8_t s)<o:p></o:p></span></pre>
<pre><span style="color:black">>+{<o:p></o:p></span></pre>
<pre><span style="color:black">>+    vst1q_lane_u32((uint32_t *)d, vreinterpretq_u32_u16(s), 0);<o:p></o:p></span></pre>
<pre><span style="color:black">>+}<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">> // Store N blocks of 32-bits from (N / 2) D-Registers.<o:p></o:p></span></pre>
<pre><span style="color:black">> template<int N><o:p></o:p></span></pre>
<pre><span style="color:black">> static void inline store_u8x4_strided_xN(uint8_t *d, intptr_t stride,<o:p></o:p></span></pre>
<pre><span style="color:black">>diff --git a/source/common/aarch64/pixel-prim.cpp b/source/common/aarch64/pixel-prim.cpp<o:p></o:p></span></pre>
<pre><span style="color:black">>index d565c7f0b..50df51ca1 100644<o:p></o:p></span></pre>
<pre><span style="color:black">>--- a/source/common/aarch64/pixel-prim.cpp<o:p></o:p></span></pre>
<pre><span style="color:black">>+++ b/source/common/aarch64/pixel-prim.cpp<o:p></o:p></span></pre>
<pre><span style="color:black">>@@ -1196,49 +1196,138 @@ void pixel_add_ps_neon(pixel *dst, intptr_t dstride, const pixel *src0,<o:p></o:p></span></pre>
<pre><span style="color:black">>     }<o:p></o:p></span></pre>
<pre><span style="color:black">> }<o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">>-template<int bx, int by><o:p></o:p></span></pre>
<pre><span style="color:black">>-void addAvg_neon(const int16_t *src0, const int16_t *src1, pixel *dst, intptr_t src0Stride, intptr_t src1Stride,<o:p></o:p></span></pre>
<pre><span style="color:black">>-                 intptr_t dstStride)<o:p></o:p></span></pre>
<pre><span style="color:black">>+template<int width, int height><o:p></o:p></span></pre>
<pre><span style="color:black">>+void addAvg_neon(const int16_t *src0, const int16_t *src1, pixel *dst,<o:p></o:p></span></pre>
<pre><span style="color:black">>+                 intptr_t src0Stride, intptr_t src1Stride, intptr_t dstStride)<o:p></o:p></span></pre>
<pre><span style="color:black">> {<o:p></o:p></span></pre>
<pre><span style="color:black">>-<o:p></o:p></span></pre>
<pre><span style="color:black">>     const int shiftNum = IF_INTERNAL_PREC + 1 - X265_DEPTH;<o:p></o:p></span></pre>
<pre><span style="color:black">>-    const int offset = (1 << (shiftNum - 1)) + 2 * IF_INTERNAL_OFFS;<o:p></o:p></span></pre>
<pre><span style="color:black">>+    const int offset = 2 * IF_INTERNAL_OFFS;<o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">>-    const int32x4_t addon = vdupq_n_s32(offset);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    for (int y = 0; y < by; y++)<o:p></o:p></span></pre>
<pre><span style="color:black">>+#if HIGH_BIT_DEPTH<o:p></o:p></span></pre>
<pre><span style="color:black">>+    const int16x8_t addon = vdupq_n_s16(offset >> shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+    for (int h = 0; h < height; h++)<o:p></o:p></span></pre>
<pre><span style="color:black">>     {<o:p></o:p></span></pre>
<pre><span style="color:black">>-        int x = 0;<o:p></o:p></span></pre>
<pre><span style="color:black">>+        int w = 0;<o:p></o:p></span></pre>
<pre><span style="color:black">>+        for (; w + 16 <= width; w += 16)<o:p></o:p></span></pre>
<pre><span style="color:black">>+        {<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t s0[2], s1[2];<o:p></o:p></span></pre>
<pre><span style="color:black">>+            load_s16x8xn<2>(src0 + w, 8, s0);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            load_s16x8xn<2>(src1 + w, 8, s1);<o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">>-        for (; (x + 8) <= bx; x += 8)<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t d0_lo = vrsraq_n_s16(addon, vaddq_s16(s0[0], s1[0]), shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t d0_hi = vrsraq_n_s16(addon, vaddq_s16(s0[1], s1[1]), shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            d0_lo = vminq_s16(d0_lo, vdupq_n_s16((1 << X265_DEPTH) - 1));<o:p></o:p></span></pre>
<pre><span style="color:black">>+            d0_lo = vmaxq_s16(d0_lo, vdupq_n_s16(0));<o:p></o:p></span></pre>
<pre><span style="color:black">>+            d0_hi = vminq_s16(d0_hi, vdupq_n_s16((1 << X265_DEPTH) - 1));<o:p></o:p></span></pre>
<pre><span style="color:black">>+            d0_hi = vmaxq_s16(d0_hi, vdupq_n_s16(0));<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            vst1q_u16(dst + w, vreinterpretq_u16_s16(d0_lo));<o:p></o:p></span></pre>
<pre><span style="color:black">>+            vst1q_u16(dst + w + 8, vreinterpretq_u16_s16(d0_hi));<o:p></o:p></span></pre>
<pre><span style="color:black">>+        }<o:p></o:p></span></pre>
<pre><span style="color:black">>+        if (width & 8)<o:p></o:p></span></pre>
<pre><span style="color:black">>         {<o:p></o:p></span></pre>
<pre><span style="color:black">>-            int16x8_t in0 = vld1q_s16(src0 + x);<o:p></o:p></span></pre>
<pre><span style="color:black">>-            int16x8_t in1 = vld1q_s16(src1 + x);<o:p></o:p></span></pre>
<pre><span style="color:black">>-            int32x4_t t1 = vaddl_s16(vget_low_s16(in0), vget_low_s16(in1));<o:p></o:p></span></pre>
<pre><span style="color:black">>-            int32x4_t t2 = vaddl_high_s16(in0, in1);<o:p></o:p></span></pre>
<pre><span style="color:black">>-            t1 = vaddq_s32(t1, addon);<o:p></o:p></span></pre>
<pre><span style="color:black">>-            t2 = vaddq_s32(t2, addon);<o:p></o:p></span></pre>
<pre><span style="color:black">>-            t1 = vshrq_n_s32(t1, shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>-            t2 = vshrq_n_s32(t2, shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>-            int16x8_t t = vuzp1q_s16(vreinterpretq_s16_s32(t1),<o:p></o:p></span></pre>
<pre><span style="color:black">>-                                     vreinterpretq_s16_s32(t2));<o:p></o:p></span></pre>
<pre><span style="color:black">>-#if HIGH_BIT_DEPTH<o:p></o:p></span></pre>
<pre><span style="color:black">>-            t = vminq_s16(t, vdupq_n_s16((1 << X265_DEPTH) - 1));<o:p></o:p></span></pre>
<pre><span style="color:black">>-            t = vmaxq_s16(t, vdupq_n_s16(0));<o:p></o:p></span></pre>
<pre><span style="color:black">>-            vst1q_u16(dst + x, vreinterpretq_u16_s16(t));<o:p></o:p></span></pre>
<pre><span style="color:black">>-#else<o:p></o:p></span></pre>
<pre><span style="color:black">>-            vst1_u8(dst + x, vqmovun_s16(t));<o:p></o:p></span></pre>
<pre><span style="color:black">>-#endif<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t s0 = vld1q_s16(src0 + w);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t s1 = vld1q_s16(src1 + w);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t d0 = vrsraq_n_s16(addon, vaddq_s16(s0, s1), shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            d0 = vminq_s16(d0, vdupq_n_s16((1 << X265_DEPTH) - 1));<o:p></o:p></span></pre>
<pre><span style="color:black">>+            d0 = vmaxq_s16(d0, vdupq_n_s16(0));<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            vst1q_u16(dst + w, vreinterpretq_u16_s16(d0));<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            w += 8;<o:p></o:p></span></pre>
<pre><span style="color:black">>+        }<o:p></o:p></span></pre>
<pre><span style="color:black">>+        if (width & 4)<o:p></o:p></span></pre>
<pre><span style="color:black">>+        {<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x4_t s0 = vld1_s16(src0 + w);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x4_t s1 = vld1_s16(src1 + w);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x4_t d0 = vrsra_n_s16(vget_low_s16(addon), vadd_s16(s0, s1), shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            d0 = vmin_s16(d0, vdup_n_s16((1 << X265_DEPTH) - 1));<o:p></o:p></span></pre>
<pre><span style="color:black">>+            d0 = vmax_s16(d0, vdup_n_s16(0));<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            vst1_u16(dst + w, vreinterpret_u16_s16(d0));<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            w += 4;<o:p></o:p></span></pre>
<pre><span style="color:black">>+        }<o:p></o:p></span></pre>
<pre><span style="color:black">>+        if (width & 2)<o:p></o:p></span></pre>
<pre><span style="color:black">>+        {<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t s0 = load_s16x2x1(src0 + w);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t s1 = load_s16x2x1(src1 + w);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t d0 = vrsraq_n_s16(addon, vaddq_s16(s0, s1), shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            d0 = vminq_s16(d0, vdupq_n_s16((1 << X265_DEPTH) - 1));<o:p></o:p></span></pre>
<pre><span style="color:black">>+            d0 = vmaxq_s16(d0, vdupq_n_s16(0));<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            store_u16x2x1(dst + w, vreinterpretq_u16_s16(d0));<o:p></o:p></span></pre>
<pre><span style="color:black">>+        }<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+        src0 += src0Stride;<o:p></o:p></span></pre>
<pre><span style="color:black">>+        src1 += src1Stride;<o:p></o:p></span></pre>
<pre><span style="color:black">>+        dst  += dstStride;<o:p></o:p></span></pre>
<pre><span style="color:black">>+    }<o:p></o:p></span></pre>
<pre><span style="color:black">>+#else // !HIGH_BIT_DEPTH<o:p></o:p></span></pre>
<pre><span style="color:black">>+    const uint8x8_t addon = vdup_n_u8(offset >> shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+    for (int h = 0; h < height; h++)<o:p></o:p></span></pre>
<pre><span style="color:black">>+    {<o:p></o:p></span></pre>
<pre><span style="color:black">>+        int w = 0;<o:p></o:p></span></pre>
<pre><span style="color:black">>+        for (; w + 16 <= width; w += 16)<o:p></o:p></span></pre>
<pre><span style="color:black">>+        {<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t s0[2], s1[2];<o:p></o:p></span></pre>
<pre><span style="color:black">>+            load_s16x8xn<2>(src0 + w, 8, s0);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            load_s16x8xn<2>(src1 + w, 8, s1);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int8x8_t sum01_s8_lo = vqrshrn_n_s16(vaddq_s16(s0[0], s1[0]), shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int8x8_t sum01_s8_hi = vqrshrn_n_s16(vaddq_s16(s0[1], s1[1]), shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            uint8x8_t d0_lo = vadd_u8(vreinterpret_u8_s8(sum01_s8_lo), addon);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            uint8x8_t d0_hi = vadd_u8(vreinterpret_u8_s8(sum01_s8_hi), addon);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            vst1_u8(dst + w, d0_lo);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            vst1_u8(dst + w + 8, d0_hi);<o:p></o:p></span></pre>
<pre><span style="color:black">>+        }<o:p></o:p></span></pre>
<pre><span style="color:black">>+        if (width & 8)<o:p></o:p></span></pre>
<pre><span style="color:black">>+        {<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t s0 = vld1q_s16(src0 + w);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t s1 = vld1q_s16(src1 + w);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int8x8_t sum01_s8 = vqrshrn_n_s16(vaddq_s16(s0, s1), shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            uint8x8_t d0 = vadd_u8(vreinterpret_u8_s8(sum01_s8), addon);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            vst1_u8(dst + w, d0);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            w += 8;<o:p></o:p></span></pre>
<pre><span style="color:black">>         }<o:p></o:p></span></pre>
<pre><span style="color:black">>-        for (; x < bx; x += 2)<o:p></o:p></span></pre>
<pre><span style="color:black">>+        if (width & 4)<o:p></o:p></span></pre>
<pre><span style="color:black">>         {<o:p></o:p></span></pre>
<pre><span style="color:black">>-            dst[x + 0] = x265_clip((src0[x + 0] + src1[x + 0] + offset) >> shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>-            dst[x + 1] = x265_clip((src0[x + 1] + src1[x + 1] + offset) >> shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t s0 = vcombine_s16(vld1_s16(src0 + w), vdup_n_s16(0));<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t s1 = vcombine_s16(vld1_s16(src1 + w), vdup_n_s16(0));<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int8x8_t sum01_s8 = vqrshrn_n_s16(vaddq_s16(s0, s1), shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            uint8x8_t d0 = vadd_u8(vreinterpret_u8_s8(sum01_s8), addon);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            store_u8x4x1(dst + w, d0);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            w += 4;<o:p></o:p></span></pre>
<pre><span style="color:black">>+        }<o:p></o:p></span></pre>
<pre><span style="color:black">>+        if (width & 2)<o:p></o:p></span></pre>
<pre><span style="color:black">>+        {<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t s0 = load_s16x2x1(src0 + w);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int16x8_t s1 = load_s16x2x1(src1 + w);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            int8x8_t sum01_s8 = vqrshrn_n_s16(vaddq_s16(s0, s1), shiftNum);<o:p></o:p></span></pre>
<pre><span style="color:black">>+            uint8x8_t d0 = vadd_u8(vreinterpret_u8_s8(sum01_s8), addon);<o:p></o:p></span></pre>
<pre><span style="color:black">>+<o:p></o:p></span></pre>
<pre><span style="color:black">>+            store_u8x2x1(dst + w, d0);<o:p></o:p></span></pre>
<pre><span style="color:black">>         }<o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">>         src0 += src0Stride;<o:p></o:p></span></pre>
<pre><span style="color:black">>         src1 += src1Stride;<o:p></o:p></span></pre>
<pre><span style="color:black">>         dst  += dstStride;<o:p></o:p></span></pre>
<pre><span style="color:black">>     }<o:p></o:p></span></pre>
<pre><span style="color:black">>+#endif<o:p></o:p></span></pre>
<pre><span style="color:black">> }<o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">> void planecopy_cp_neon(const uint8_t *src, intptr_t srcStride, pixel *dst,<o:p></o:p></span></pre>
<pre><span style="color:black">>@@ -2249,29 +2338,30 @@ void setupPixelPrimitives_neon(EncoderPrimitives &p)<o:p></o:p></span></pre>
<pre><span style="color:black">>     p.chroma[X265_CSP_I420].pu[CHROMA_420_ ## W ## x ## H].copy_pp = blockcopy_pp_neon<W, H>; \<o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(4, 4);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(8, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(16, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(32, 32);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(2, 4);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(2, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_420(4, 2);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(8, 4);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(4, 4);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_420(4, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(8, 6);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_420(6, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(4, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_420(8, 2);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(2, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(16, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(8,  16);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(16, 12);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(8, 4);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(8, 6);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(8, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(8, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(8, 32);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_420(12, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_420(16, 4);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(4,  16);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(32, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(16, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(16, 12);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(16, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_420(16, 32);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(32, 24);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_420(24, 32);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_420(32, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_420(8,  32);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(32, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(32, 24);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_420(32, 32);<o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">>@@ -2353,30 +2443,31 @@ void setupPixelPrimitives_neon(EncoderPrimitives &p)<o:p></o:p></span></pre>
<pre><span style="color:black">>     p.chroma[X265_CSP_I422].pu[CHROMA_422_ ## W ## x ## H].copy_pp = blockcopy_pp_neon<W, H>; \<o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(4, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(8, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(16, 32);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(32, 64);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(4, 4);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(2, 4);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_422(2, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(8, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(2, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(4, 4);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(4, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_422(4, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(8, 12);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(6, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(4, 32);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_422(8, 4);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(2, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(16, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(8, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(8, 12);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(8, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_422(8, 32);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(16, 24);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(8, 64);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(6, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_422(12, 32);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_422(16, 8);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(4,  32);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(32, 32);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(16, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(16, 24);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(16, 32);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_422(16, 64);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(32, 48);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_422(24, 64);<o:p></o:p></span></pre>
<pre><span style="color:black">>     CHROMA_PU_422(32, 16);<o:p></o:p></span></pre>
<pre><span style="color:black">>-    CHROMA_PU_422(8,  64);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(32, 32);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(32, 48);<o:p></o:p></span></pre>
<pre><span style="color:black">>+    CHROMA_PU_422(32, 64);<o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">> <o:p></o:p></span></pre>
<pre><span style="color:black">>     p.chroma[X265_CSP_I422].pu[CHROMA_422_2x4].satd   = NULL;<o:p></o:p></span></pre>
<pre><span style="color:black">>-- <o:p></o:p></span></pre>
<pre><span style="color:black">>2.39.5 (Apple Git-154)<o:p></o:p></span></pre>
<pre><span style="color:black">><o:p> </o:p></span></pre>
</div>
</div>
</div>
</div>
</div>
</body>
</html>