<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.EmailStyle21
        {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">Hi,<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">> +    fmov            w12, s4<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">> +    neg             w12, w12<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">> +    add             w0, w12, #16<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">> (-w12) + 16 equal to 16-w12, load #16 into w0 may execution parallelism with FMOV.<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 see a small improvement with this change.  Please see attached a patch.<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">> +    clz             v2.4h, v0.4h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">> +    clz             v3.4h, v1.4h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">> +    ushr            v2.4h, v2.4h, #4<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">> +    ushr            v3.4h, v3.4h, #4<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">> +    add             v2.4h, v2.4h, v3.4h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">> clz+ushr+add is slower than cmeq+add in either exection throughput or cycles.<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 do not see any improvement with this change applied to x265_copy_cnt_{4,8,16,32}:<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">@@ -508,14 +508,14 @@ function x265_copy_cnt_4_neon<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">     ld1             {v0.8b}, [x1], x2<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     ld1             {v1.8b}, [x1], x2<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    clz             v2.4h, v0.4h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    clz             v3.4h, v1.4h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    ushr            v2.4h, v2.4h, #4<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    ushr            v3.4h, v3.4h, #4<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    add             v2.4h, v2.4h, v3.4h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">-    add             v4.4h, v4.4h, v2.4h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     st1             {v0.8b}, [x0], #8<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     st1             {v1.8b}, [x0], #8<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    cmeq            v0.4h, v0.4h, #0<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    cmeq            v1.4h, v1.4h, #0<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    ushr            v0.4h, v0.4h, #15<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    ushr            v1.4h, v1.4h, #15<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    add             v4.4h, v4.4h, v0.4h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">+    add             v4.4h, v4.4h, v1.4h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">.endr<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     uaddlv          s4, v4.4h<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">     fmov            w12, s4<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 this change, the time is slightly better:<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">         copy_cnt[4x4]  13.84x   7.53            104.19<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">         copy_cnt[8x8]  31.37x   12.44           390.16<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">       copy_cnt[16x16]  43.34x   35.83           1553.07<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">       copy_cnt[32x32]  47.40x   129.28          6127.89<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">than after the change:<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">         copy_cnt[4x4]  13.91x   7.50            104.25<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">         copy_cnt[8x8]  31.09x   12.57           390.92<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">       copy_cnt[16x16]  43.12x   36.04           1554.11<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">       copy_cnt[32x32]  47.38x   129.34          6128.81<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">Neoverse-N1 SWOG says:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">https://documentation-service.arm.com/static/5f05e93dcafe527e86f61acd<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">CLZ  latency 2, throughput 2<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">CMEQ latency 2, throughput 1<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">Changing CLZ to CMEQ has less parallelism with a lower throughput.<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">> The copy_s* looks good, my only comment is the instruction TBL faster than XTN/XTN2<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">Neoverse-N1 SWOG says TBL is as fast as XTN:<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">TBL (with 1 or 2 table regs) latency 2 throughput 2<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">XTN latency 2 throughput 2<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,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Sebastian<o:p></o:p></span></p>
</div>
</body>
</html>