<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=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:12.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@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="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">I added this change to the patch.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Same re-scheduling with ld1 still has better performance then ldp:<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">With ld1 instead of ldp+ldp+add:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[64x16]                        1.53x      100.98                  154.35<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[64x32]                        1.54x      203.14                  313.34<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[64x48]                        1.54x      304.66                  468.15<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[64x64]                        1.54x      407.16                  625.61<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">function x265_filterPixelToShort_64x\h\()_neon<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     add             x3, x3, x3<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     sub             x3, x3, #0x40<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    sub             x1, x1, #0x20<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     movi            v4.8h, #0xe0, lsl #8<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     mov             x9, #\r<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">.loop_filterP2S_64x\h:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     subs            x9, x9, #1<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">.rept 2<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    ldp             q0, q1, [x0], #0x20<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    ld1             {v0.16b-v3.16b}, [x0], x1<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     ushll           v16.8h, v0.8b, #6<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     ushll2          v17.8h, v0.16b, #6<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     ushll           v18.8h, v1.8b, #6<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">@@ -194,8 +193,6 @@ function x265_filterPixelToShort_64x\h\()_neon<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     add             v19.8h, v19.8h, v4.8h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     st1             {v16.16b-v19.16b}, [x2], #0x40<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">-    ldp             q2, q3, [x0]<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    add             x0, x0, x1<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     ushll           v20.8h, v2.8b, #6<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     ushll2          v21.8h, v2.16b, #6<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     ushll           v22.8h, v3.8b, #6<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>
<p class="MsoNormal"><span style="font-size:11.0pt">I also applied the same scheduling to the other functions:<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">Before:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[  4x4]                           1.36x      4.44      6.04<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[  4x8]                           1.79x      6.39      11.43<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[ 4x16]                          1.70x      13.99                    23.72<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[  8x4]                           2.21x      3.00      6.63<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[  8x8]                           2.26x      6.06      13.72<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[ 8x16]                          1.95x      13.31                    25.95<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[ 8x32]                          1.63x      29.09                    47.49<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>
<p class="MsoNormal"><span style="font-size:11.0pt">After:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[  4x4]                           1.39x      4.31      5.98<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[  4x8]                           1.88x      6.10      11.43<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[ 4x16]                          1.69x      14.01                    23.73<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[  8x4]                           2.27x      2.91      6.59<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[  8x8]                           2.34x      5.84      13.67<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[ 8x16]                          1.95x      13.31                    25.94<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[ 8x32]                          1.60x      29.57                    47.24<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>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="color:black">From: </span></b><span style="color:black">x265-devel <x265-devel-bounces@videolan.org> on behalf of "Pop, Sebastian" <spop@amazon.com><br>
<b>Reply-To: </b>Development for x265 <x265-devel@videolan.org><br>
<b>Date: </b>Wednesday, June 23, 2021 at 9:12 PM<br>
<b>To: </b>Development for x265 <x265-devel@videolan.org><br>
<b>Subject: </b>Re: [x265] [arm64] port filterPixelToShort<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
</div>
<p class="MsoNormal"><span style="font-size:11.0pt">I added the following change in the attached patch.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">It has better performance with ldp as it allows to re-schedule the instructions in independent ways:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">function x265_filterPixelToShort_64x\h\()_neon</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     add             x3, x3, x3</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     sub             x3, x3, #0x40</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    sub             x1, x1, #0x20</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     movi            v4.8h, #0xe0, lsl #8</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     mov             x9, #\r</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">.loop_filterP2S_64x\h:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     subs            x9, x9, #1</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">.rept 2</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    ld1             {v0.16b-v3.16b}, [x0], x1</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    ldp             q0, q1, [x0], #0x20</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     ushll           v16.8h, v0.8b, #6</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     ushll2          v17.8h, v0.16b, #6</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     ushll           v18.8h, v1.8b, #6</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     ushll2          v19.8h, v1.16b, #6</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    ushll           v20.8h, v2.8b, #6</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    ushll2          v21.8h, v2.16b, #6</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    ushll           v22.8h, v3.8b, #6</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    ushll2          v23.8h, v3.16b, #6</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     add             v16.8h, v16.8h, v4.8h</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     add             v17.8h, v17.8h, v4.8h</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     add             v18.8h, v18.8h, v4.8h</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     add             v19.8h, v19.8h, v4.8h</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    st1             {v16.16b-v19.16b}, [x2], #0x40</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    ldp             q2, q3, [x0]</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    add             x0, x0, x1</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    ushll           v20.8h, v2.8b, #6</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    ushll2          v21.8h, v2.16b, #6</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    ushll           v22.8h, v3.8b, #6</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    ushll2          v23.8h, v3.16b, #6</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     add             v20.8h, v20.8h, v4.8h</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     add             v21.8h, v21.8h, v4.8h</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     add             v22.8h, v22.8h, v4.8h</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     add             v23.8h, v23.8h, v4.8h</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    st1             {v16.16b-v19.16b}, [x2], #0x40</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     st1             {v20.16b-v23.16b}, [x2], x3</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">.endr</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     bgt             .loop_filterP2S_64x\h</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Before:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[64x16]                        1.46x      105.51                  154.37</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[64x32]                        1.47x      212.07                  312.12</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[64x48]                        1.46x      318.76                  466.80</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[64x64]                        1.47x      425.34                  623.56</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">After:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[64x16]                        1.47x      105.24                  154.46</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[64x32]                        1.50x      207.42                  312.09</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[64x48]                        1.49x      312.30                  466.27</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt">convert_p2s[64x64]                        1.50x      415.77                  623.56</span><o:p></o:p></p>
</div>
</body>
</html>