<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Assembly on Tom's Lab Notes</title><link>https://vtbl.dev/tags/assembly/</link><description>Recent content in Assembly on Tom's Lab Notes</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 01 Sep 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://vtbl.dev/tags/assembly/index.xml" rel="self" type="application/rss+xml"/><item><title>What Compilers Really Do: A SIMD Case Study</title><link>https://vtbl.dev/posts/what-compilers-really-do/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate><guid>https://vtbl.dev/posts/what-compilers-really-do/</guid><description>&lt;p>In a &lt;a class="link" href="https://vtbl.dev/posts/simd-algorithm-design/" >different post&lt;/a>, I looked at optimizing a particular algorithm
using Arm Neon SIMD. If you are interested in how to use SIMD to convert RGB888 to RGB565, definitely take
a look at that post.&lt;/p>
&lt;p>While trying different things and figuring out how to reduce the execution time as much as possible,
I did a deep dive into the generated assembly code for different implementations of that algorithm
as well as the code that the compiler generates when optimizing (and vectorizing) the scalar version.&lt;/p>
&lt;p>This post focuses on what I learned about compilers and how to make them do what you want.&lt;/p>
&lt;h1 id="1-compilers-are-really-smart">1. Compilers are really smart
&lt;/h1>&lt;p>Modern compilers are pretty good at optimizing algorithms, at least trivial ones.
They make use of architecture specific instructions to get the most performance out of the target machine.&lt;/p>
&lt;p>When optimizing this simple algorithm for example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 1&lt;/span>&lt;span>&lt;span style="color:#fabd2f">void&lt;/span> &lt;span style="color:#fabd2f">rgb888_to_rgb565_scalar&lt;/span>(Image &lt;span style="color:#fe8019">*&lt;/span>src, Image &lt;span style="color:#fe8019">*&lt;/span>dst) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 2&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 3&lt;/span>&lt;span> &lt;span style="color:#fe8019">for&lt;/span> (&lt;span style="color:#fabd2f">int&lt;/span> i &lt;span style="color:#fe8019">=&lt;/span> &lt;span style="color:#d3869b">0&lt;/span>; i &lt;span style="color:#fe8019">&amp;lt;&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_width &lt;span style="color:#fe8019">*&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_height; i&lt;span style="color:#fe8019">++&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 4&lt;/span>&lt;span> &lt;span style="color:#fabd2f">uint8_t&lt;/span> r &lt;span style="color:#fe8019">=&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>buffer[i &lt;span style="color:#fe8019">*&lt;/span> &lt;span style="color:#d3869b">3&lt;/span> &lt;span style="color:#fe8019">+&lt;/span> &lt;span style="color:#d3869b">0&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 5&lt;/span>&lt;span> &lt;span style="color:#fabd2f">uint8_t&lt;/span> g &lt;span style="color:#fe8019">=&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>buffer[i &lt;span style="color:#fe8019">*&lt;/span> &lt;span style="color:#d3869b">3&lt;/span> &lt;span style="color:#fe8019">+&lt;/span> &lt;span style="color:#d3869b">1&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 6&lt;/span>&lt;span> &lt;span style="color:#fabd2f">uint8_t&lt;/span> b &lt;span style="color:#fe8019">=&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>buffer[i &lt;span style="color:#fe8019">*&lt;/span> &lt;span style="color:#d3869b">3&lt;/span> &lt;span style="color:#fe8019">+&lt;/span> &lt;span style="color:#d3869b">2&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 7&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 8&lt;/span>&lt;span> &lt;span style="color:#928374;font-style:italic">// Add half the lost precision before truncating
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 9&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span> &lt;span style="color:#fabd2f">uint16_t&lt;/span> r5 &lt;span style="color:#fe8019">=&lt;/span> (r &lt;span style="color:#fe8019">+&lt;/span> &lt;span style="color:#d3869b">4&lt;/span>) &lt;span style="color:#fe8019">&amp;gt;&amp;gt;&lt;/span> &lt;span style="color:#d3869b">3&lt;/span>; &lt;span style="color:#928374;font-style:italic">// +4 is half of 8 (2^3)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">10&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span> &lt;span style="color:#fabd2f">uint16_t&lt;/span> g6 &lt;span style="color:#fe8019">=&lt;/span> (g &lt;span style="color:#fe8019">+&lt;/span> &lt;span style="color:#d3869b">2&lt;/span>) &lt;span style="color:#fe8019">&amp;gt;&amp;gt;&lt;/span> &lt;span style="color:#d3869b">2&lt;/span>; &lt;span style="color:#928374;font-style:italic">// +2 is half of 4 (2^2)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">11&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span> &lt;span style="color:#fabd2f">uint16_t&lt;/span> b5 &lt;span style="color:#fe8019">=&lt;/span> (b &lt;span style="color:#fe8019">+&lt;/span> &lt;span style="color:#d3869b">4&lt;/span>) &lt;span style="color:#fe8019">&amp;gt;&amp;gt;&lt;/span> &lt;span style="color:#d3869b">3&lt;/span>; &lt;span style="color:#928374;font-style:italic">// +4 is half of 8 (2^3)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">12&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">13&lt;/span>&lt;span> &lt;span style="color:#928374;font-style:italic">// Clamp to prevent overflow
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">14&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span> &lt;span style="color:#fe8019">if&lt;/span> (r5 &lt;span style="color:#fe8019">&amp;gt;&lt;/span> &lt;span style="color:#d3869b">31&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">15&lt;/span>&lt;span> r5 &lt;span style="color:#fe8019">=&lt;/span> &lt;span style="color:#d3869b">31&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">16&lt;/span>&lt;span> &lt;span style="color:#fe8019">if&lt;/span> (g6 &lt;span style="color:#fe8019">&amp;gt;&lt;/span> &lt;span style="color:#d3869b">63&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">17&lt;/span>&lt;span> g6 &lt;span style="color:#fe8019">=&lt;/span> &lt;span style="color:#d3869b">63&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">18&lt;/span>&lt;span> &lt;span style="color:#fe8019">if&lt;/span> (b5 &lt;span style="color:#fe8019">&amp;gt;&lt;/span> &lt;span style="color:#d3869b">31&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">19&lt;/span>&lt;span> b5 &lt;span style="color:#fe8019">=&lt;/span> &lt;span style="color:#d3869b">31&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">20&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">21&lt;/span>&lt;span> &lt;span style="color:#fabd2f">uint16_t&lt;/span> value &lt;span style="color:#fe8019">=&lt;/span> (&lt;span style="color:#fabd2f">uint16_t&lt;/span>)((r5 &lt;span style="color:#fe8019">&amp;lt;&amp;lt;&lt;/span> &lt;span style="color:#d3869b">11&lt;/span>) &lt;span style="color:#fe8019">|&lt;/span> (g6 &lt;span style="color:#fe8019">&amp;lt;&amp;lt;&lt;/span> &lt;span style="color:#d3869b">5&lt;/span>) &lt;span style="color:#fe8019">|&lt;/span> b5);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">22&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">23&lt;/span>&lt;span> ((&lt;span style="color:#fabd2f">uint16_t&lt;/span> &lt;span style="color:#fe8019">*&lt;/span>)dst&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>buffer)[i] &lt;span style="color:#fe8019">=&lt;/span> value;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">24&lt;/span>&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">25&lt;/span>&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The compiler essentially generates 3 functions. Or execution paths.
One truly scalar version, one processing 8 pixels per iteration and one processing 16 pixels per iteration.
Since Arm Neon registers are 128 bits wide, 16 8 bit values are the most that can fit into one register.
The whole assembly is in the &lt;a class="link" href="#scalar-algorithm-auto-vectorized" >Appendix&lt;/a>, I just want to draw your attention to
a few small excerpts.&lt;/p>
&lt;p>The following snippet shows the start of the function, and it contains the logic to decide which one of the aforementioned paths it should take.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-asm" data-lang="asm">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 1&lt;/span>&lt;span>0000000100001554 &amp;lt;&lt;span style="color:#fabd2f">_rgb888_to_rgb565_scalar&lt;/span>&amp;gt;:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 2&lt;/span>&lt;span>100001554: &lt;span style="color:#fabd2f">a9412408&lt;/span> &lt;span style="color:#d3869b">ldp&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>, [&lt;span style="color:#d3869b">x0&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 3&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001558: 9&lt;span style="color:#fabd2f">b087d28&lt;/span> &lt;span style="color:#d3869b">mul&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 4&lt;/span>&lt;span>10000155&lt;span style="color:#fb4934">c:&lt;/span> &lt;span style="color:#fabd2f">b4000988&lt;/span> &lt;span style="color:#d3869b">cbz&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">0x10000168c&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0x138&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 5&lt;/span>&lt;span>100001560: &lt;span style="color:#fabd2f">f9400009&lt;/span> &lt;span style="color:#d3869b">ldr&lt;/span> &lt;span style="color:#d3869b">x9&lt;/span>, [&lt;span style="color:#d3869b">x0&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 6&lt;/span>&lt;span>100001564: &lt;span style="color:#fabd2f">f940002a&lt;/span> &lt;span style="color:#d3869b">ldr&lt;/span> &lt;span style="color:#d3869b">x10&lt;/span>, [&lt;span style="color:#d3869b">x1&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 7&lt;/span>&lt;span>100001568: &lt;span style="color:#fabd2f">f100211f&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x8
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 8&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>10000156&lt;span style="color:#fb4934">c:&lt;/span> 54000543 &lt;span style="color:#fabd2f">b.lo&lt;/span> &lt;span style="color:#d3869b">0x100001614&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0xc0&lt;/span>&amp;gt; &lt;span style="color:#928374;font-style:italic">; if num pixel &amp;lt; 8, jump to scalar
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 9&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001570: &lt;span style="color:#fabd2f">d37ff90b&lt;/span> &lt;span style="color:#d3869b">lsl&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">10&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001574: 8&lt;span style="color:#fabd2f">b0b014c&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">11&lt;/span>&lt;span>100001578: 8&lt;span style="color:#fabd2f">b08012d&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x13&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">12&lt;/span>&lt;span>10000157&lt;span style="color:#fb4934">c:&lt;/span> 8&lt;span style="color:#fabd2f">b0b01ab&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x13&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">13&lt;/span>&lt;span>100001580: &lt;span style="color:#fabd2f">eb0b015f&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">14&lt;/span>&lt;span>100001584: &lt;span style="color:#fabd2f">fa4c3122&lt;/span> &lt;span style="color:#d3869b">ccmp&lt;/span> &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x2, lo
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">15&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001588: 54000463 &lt;span style="color:#fabd2f">b.lo&lt;/span> &lt;span style="color:#d3869b">0x100001614&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0xc0&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">16&lt;/span>&lt;span>10000158&lt;span style="color:#fb4934">c:&lt;/span> &lt;span style="color:#fabd2f">f100411f&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">17&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001590: 54000802 &lt;span style="color:#fabd2f">b.hs&lt;/span> &lt;span style="color:#d3869b">0x100001690&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0x13c&lt;/span>&amp;gt; &lt;span style="color:#928374;font-style:italic">; if num pixel &amp;gt;= jump to 16 pixel at a time
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">18&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">// ... continue processing 8 pixels at a time
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="making-the-compiler-do-what-you-want-it-to-do">Making the compiler do what you want it to do
&lt;/h1>&lt;p>If you read my post on using SIMD to solve this problem efficiently, then you know that I have implemented different versions.
Among them one that processes 8 pixels per iteration and one that processes 16 pixels per iteration by loading 3x16 values
and then processing the higher 8 values and lower 8 values separately for each color channel, since it was not possible to keep the algorithm
the same and truly process 16 values with each arithmetic instruction, since the values would overflow.
There is a way to achieve this if you change the algorithm implementation a little, but more on that in
&lt;a class="link" href="https://vtbl.dev/posts/simd-algorithm-design/" >SIMD Algorithm Design: Beyond Basic Vectorization&lt;/a>.&lt;/p>
&lt;p>And the compiler essentially did the same.
In this post, we will only look at the 16 pixel version and ignore the 8 pixel one, since the former is more interesting in my opinion.&lt;/p>
&lt;p>&lt;strong>Before the rest of this post, a short section about terminology:&lt;/strong>&lt;/p>
&lt;p>For the rest of this post I will refer to my &amp;lsquo;16 pixels per iteration&amp;rsquo; implementation as &lt;code>16P&lt;/code> (short for &amp;lsquo;16 pixels version&amp;rsquo;), and
I will refer to the code that the compiler generated when optimizing and vectorizing the scalar version as &lt;code>CGV&lt;/code>, &amp;rsquo;the compiler generated version&amp;rsquo;.&lt;/p>
&lt;p>So when I talk about &amp;rsquo;the assembly generated for 16P&amp;rsquo; or &amp;rsquo;the 16P assembly&amp;rsquo;, then I mean the assembly that the compiler generated when compiling
my handwritten &amp;lsquo;16 pixels per iteration&amp;rsquo; version.
And when I mention &amp;rsquo;the CGV&amp;rsquo;, I refer to the &amp;lsquo;16 pixels at a time&amp;rsquo; part of the compiler generated version,
and &amp;rsquo;the CGV assembly&amp;rsquo; refers to the specific instructions the compiler has generated for CGV.&lt;/p>
&lt;h2 id="comparing-cgv-and-16p">Comparing CGV and 16P
&lt;/h2>&lt;p>So when comparing the 16P assembly and the CGV assembly,
it is clear that the SIMD instructions are exactly the same.
However, benchmarks reveal that CGV is a little bit faster overall.&lt;/p>
&lt;p>So it is worthwhile to look at the loop code generated by the compiler (&lt;a class="link" href="#loop-hand-optimized" >loop of 16P&lt;/a>, &lt;a class="link" href="#loop-auto-vectorized" >loop of CGV&lt;/a>).&lt;/p>
&lt;p>What immediately becomes apparent is that number of instructions for 16P is higher than the number for CGV.
Particularly at the beginning and at the end of the loop.&lt;/p>
&lt;h3 id="beginning-of-the-loop">Beginning of the loop
&lt;/h3>&lt;p>The first ones are right at the beginning of the loop:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-asm" data-lang="asm">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f28:&lt;/span> &lt;span style="color:#fabd2f">f940000b&lt;/span> &lt;span style="color:#d3869b">ldr&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, [&lt;span style="color:#d3869b">x0&lt;/span>] &lt;span style="color:#928374;font-style:italic">; load base address (src-&amp;gt;buffer) from memory
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">f2c:&lt;/span> 8&lt;span style="color:#fabd2f">b08016b&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span> &lt;span style="color:#928374;font-style:italic">; add offset: i * 3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">f30:&lt;/span> 4&lt;span style="color:#fabd2f">c404164&lt;/span> &lt;span style="color:#d3869b">ld3.16b&lt;/span> { &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span> }, [&lt;span style="color:#d3869b">x11&lt;/span>] &lt;span style="color:#928374;font-style:italic">; load 3 times 16 1 byte values from the source address into the registers v4-v6.
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>So for some reason the compiler loads something from memory (source address can be found in &lt;code>x0&lt;/code>) into the register &lt;code>x11&lt;/code>
and adds the content from &lt;code>x8&lt;/code> to it.
The next instruction makes it painfully obvious what this is.
It represents the interleaved load of 16 pixels (3 color channels times 16 1 byte values).&lt;/p>
&lt;p>These 3 lines represent this line from the C code:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>v_rgb888 &lt;span style="color:#fe8019">=&lt;/span> &lt;span style="color:#fabd2f">vld3q_u8&lt;/span>(src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>buffer &lt;span style="color:#fe8019">+&lt;/span> (i &lt;span style="color:#fe8019">*&lt;/span> &lt;span style="color:#d3869b">3&lt;/span>));
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>x8&lt;/code> contains &lt;code>i * 3&lt;/code> (is set to 0 before the loop code and is later increased by &lt;code>0x30&lt;/code>, which is &lt;code>3 * 16&lt;/code> in hexadecimal,
and &lt;code>i&lt;/code> increases by 16 at each iteration), and the &lt;code>ldr&lt;/code> instruction loads the buffer start address from the &lt;code>src&lt;/code> struct,
which is located in memory.&lt;/p>
&lt;p>This has to be done at each iteration because the compiler doesn&amp;rsquo;t know that the value of &lt;code>buffer&lt;/code> does not change.&lt;/p>
&lt;p>An easy way to avoid this 2 instruction overhead is to save the value of &lt;code>buffer&lt;/code> in a local variable that is placed outside of the loop:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>&lt;span style="color:#fe8019">const&lt;/span> &lt;span style="color:#fabd2f">uint8_t&lt;/span> &lt;span style="color:#fe8019">*&lt;/span>src_ptr &lt;span style="color:#fe8019">=&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>buffer;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3&lt;/span>&lt;span>&lt;span style="color:#fe8019">for&lt;/span> (&lt;span style="color:#fabd2f">int&lt;/span> i &lt;span style="color:#fe8019">=&lt;/span> &lt;span style="color:#d3869b">0&lt;/span>; i &lt;span style="color:#fe8019">&amp;lt;&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_width &lt;span style="color:#fe8019">*&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_height; i &lt;span style="color:#fe8019">+=&lt;/span> &lt;span style="color:#d3869b">16&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">4&lt;/span>&lt;span> &lt;span style="color:#928374;font-style:italic">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">5&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The next couple of instructions are the same. The order is different, and it is possible that this improves pipelining.
However, this does not cause any measurable performance difference, so it might just be a coincidence.
Furthermore, it is difficult to reason about this without knowing the details of the underlying hardware, which Apple has not made public.
The next difference is at the end of the loop after all the Neon instructions.&lt;/p>
&lt;h3 id="end-of-the-loop">End of the loop
&lt;/h3>&lt;p>The CGV ends with these 3 instructions:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-asm" data-lang="asm">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>10000171&lt;span style="color:#fb4934">c:&lt;/span> &lt;span style="color:#fabd2f">ac8115a4&lt;/span> &lt;span style="color:#d3869b">stp&lt;/span> &lt;span style="color:#d3869b">q4&lt;/span>, &lt;span style="color:#d3869b">q5&lt;/span>, [&lt;span style="color:#d3869b">x13&lt;/span>], &lt;span style="color:#928374;font-style:italic">#0x20 ; save result to dst-&amp;gt;buffer
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001720: &lt;span style="color:#fabd2f">f100418c&lt;/span> &lt;span style="color:#d3869b">subs&lt;/span> &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10 ; decrement x12 by 0x10 (16 in decimal)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001724: 54&lt;span style="color:#fabd2f">fffc61&lt;/span> &lt;span style="color:#d3869b">b.ne&lt;/span> &lt;span style="color:#d3869b">0x1000016b0&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0x15c&lt;/span>&amp;gt; &lt;span style="color:#928374;font-style:italic">; branch
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The first instruction saves the computation result back to memory using one instruction to save both buffers to their particular offsets.
The values to be saved are in &lt;code>q4&lt;/code> and &lt;code>q5&lt;/code>, they are saved to the location in &lt;code>x13&lt;/code> and said location is incremented by 32.&lt;/p>
&lt;p>The next 2 instructions decrement the value in &lt;code>x12&lt;/code> by 16 and branch to the start of the loop if that value is not equal to 0.
So what the compiler actually did is convert the for loop to a while loop:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 1&lt;/span>&lt;span>&lt;span style="color:#fe8019">for&lt;/span> (&lt;span style="color:#fabd2f">int&lt;/span> i &lt;span style="color:#fe8019">=&lt;/span> &lt;span style="color:#d3869b">0&lt;/span>; i &lt;span style="color:#fe8019">&amp;lt;&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_width &lt;span style="color:#fe8019">*&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_height; i&lt;span style="color:#fe8019">++&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 2&lt;/span>&lt;span> &lt;span style="color:#928374;font-style:italic">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 3&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 4&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 5&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">// to
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 6&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 7&lt;/span>&lt;span>&lt;span style="color:#fabd2f">int&lt;/span> remaining_pixels &lt;span style="color:#fe8019">=&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_width &lt;span style="color:#fe8019">*&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_height;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 8&lt;/span>&lt;span>&lt;span style="color:#fe8019">while&lt;/span> (remaining_pixels &lt;span style="color:#fe8019">&amp;gt;&lt;/span> &lt;span style="color:#d3869b">0&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 9&lt;/span>&lt;span> &lt;span style="color:#928374;font-style:italic">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">10&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span> remaining_pixels &lt;span style="color:#fe8019">-=&lt;/span> &lt;span style="color:#d3869b">16&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">11&lt;/span>&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Meanwhile, the compiler generated the following instructions for 16P:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-asm" data-lang="asm">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 1&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f98:&lt;/span> &lt;span style="color:#fabd2f">f940002b&lt;/span> &lt;span style="color:#d3869b">ldr&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, [&lt;span style="color:#d3869b">x1&lt;/span>] &lt;span style="color:#928374;font-style:italic">; load a value from memory (location in x1 aka dst-&amp;gt;buffer) to x11
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 2&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">; ... omitted one neon function that has not yet been exectued, probably due to pipelining
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 3&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fa0:&lt;/span> 3&lt;span style="color:#fabd2f">ca96964&lt;/span> &lt;span style="color:#d3869b">str&lt;/span> &lt;span style="color:#d3869b">q4&lt;/span>, [&lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>] &lt;span style="color:#928374;font-style:italic">; store q4 (half of the 16 values) to base address + (2 * i)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 4&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fa4:&lt;/span> &lt;span style="color:#fabd2f">f940002b&lt;/span> &lt;span style="color:#d3869b">ldr&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, [&lt;span style="color:#d3869b">x1&lt;/span>] &lt;span style="color:#928374;font-style:italic">; load a value from memory (location in x1 aka dst-&amp;gt;buffer) to x11
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 5&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fa8:&lt;/span> 8&lt;span style="color:#fabd2f">b09016b&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span> &lt;span style="color:#928374;font-style:italic">; x11 = dst-&amp;gt;buffer + (2 * i)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 6&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fac:&lt;/span> 3&lt;span style="color:#fabd2f">d800565&lt;/span> &lt;span style="color:#d3869b">str&lt;/span> &lt;span style="color:#d3869b">q5&lt;/span>, [&lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10] ; store q5 into dst-&amp;gt;buffer + (2 * i) + 16
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 7&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fb0:&lt;/span> 9100414&lt;span style="color:#fabd2f">a&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10 ; add 16 to x10 (i+=16)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 8&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fb4:&lt;/span> &lt;span style="color:#fabd2f">a941300b&lt;/span> &lt;span style="color:#d3869b">ldp&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, [&lt;span style="color:#d3869b">x0&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10] ; load x0 into x11 and x0 + 16 into x12 (img width and height)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 9&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fb8:&lt;/span> 9&lt;span style="color:#fabd2f">b0b7d8b&lt;/span> &lt;span style="color:#d3869b">mul&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span> &lt;span style="color:#928374;font-style:italic">; multiply x11 with x12 (num pixels = img-&amp;gt;width * img-&amp;gt;height)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">10&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fbc:&lt;/span> 91008129 &lt;span style="color:#fabd2f">add&lt;/span> &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x20 ; x9 += 32 (16 values * 2 bytes)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">11&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fc0:&lt;/span> 9100&lt;span style="color:#fabd2f">c108&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x30 ; x8 += 48
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">12&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fc4:&lt;/span> &lt;span style="color:#fabd2f">eb0a017f&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span> &lt;span style="color:#928374;font-style:italic">; compare x11 and x10
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">13&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fc8:&lt;/span> 54&lt;span style="color:#fabd2f">fffb08&lt;/span> &lt;span style="color:#d3869b">b.hi&lt;/span> &lt;span style="color:#d3869b">0x100001f28&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_neon_16_vals&lt;/span>+&lt;span style="color:#d3869b">0x54&lt;/span>&amp;gt; &lt;span style="color:#928374;font-style:italic">; branch if num_pixels &amp;gt; i
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>What becomes immediately apparent is that there is not &amp;lsquo;store pair&amp;rsquo; (&lt;code>stp&lt;/code>) instruction, but there are 2 &amp;lsquo;store&amp;rsquo; (&lt;code>str&lt;/code>)
instructions instead.
This &lt;code>stp&lt;/code> instruction accepts two SIMD registers as inputs, which makes vectorizing the memory access possible as well.
The addressing to figure out where to store the results is also more complicated, and so is the branching logic.&lt;/p>
&lt;p>Starting with the store operations, here is the corresponding C code:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>&lt;span style="color:#fabd2f">vst1q_u16&lt;/span>((&lt;span style="color:#fabd2f">uint16_t&lt;/span> &lt;span style="color:#fe8019">*&lt;/span>)dst&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>buffer &lt;span style="color:#fe8019">+&lt;/span> i &lt;span style="color:#fe8019">+&lt;/span> &lt;span style="color:#d3869b">8&lt;/span>, v_rgb565_high);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2&lt;/span>&lt;span>&lt;span style="color:#fabd2f">vst1q_u16&lt;/span>((&lt;span style="color:#fabd2f">uint16_t&lt;/span> &lt;span style="color:#fe8019">*&lt;/span>)dst&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>buffer &lt;span style="color:#fe8019">+&lt;/span> i, v_rgb565_low);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>ldr&lt;/code> pattern should seem familiar, since we encountered the exact same issue at the beginning of the loop,
and the reason as well as the solution is the same here. &lt;code>x1&lt;/code> contains the location of the destination buffer, &lt;code>x9&lt;/code> is
&lt;code>2 * i&lt;/code> (due to 16-bit integer addressing).
The compiler reloads the destination address before every store, which also prevents it to replace those two individual
&lt;code>str&lt;/code> instructions with a more efficient &lt;code>stp&lt;/code> instruction.&lt;/p>
&lt;p>One way to get this &amp;lsquo;store pair&amp;rsquo; instruction is by making the compiler understand that the address does not change:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>&lt;span style="color:#fabd2f">uint16_t&lt;/span> &lt;span style="color:#fe8019">*&lt;/span>dst_ptr &lt;span style="color:#fe8019">=&lt;/span> (&lt;span style="color:#fabd2f">uint16_t&lt;/span> &lt;span style="color:#fe8019">*&lt;/span>)dst&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>buffer &lt;span style="color:#fe8019">+&lt;/span> i;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2&lt;/span>&lt;span>&lt;span style="color:#fabd2f">vst1q_u16&lt;/span>(dst_ptr, v_rgb565_low);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3&lt;/span>&lt;span>&lt;span style="color:#fabd2f">vst1q_u16&lt;/span>(dst_ptr &lt;span style="color:#fe8019">+&lt;/span> &lt;span style="color:#d3869b">8&lt;/span>, v_rgb565_high);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This yields the following assembly, and as you can see we now have a single store (&lt;code>stp&lt;/code>) instead of two stores (2x &lt;code>str&lt;/code>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-asm" data-lang="asm">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 1&lt;/span>&lt;span>1000020&lt;span style="color:#fb4934">ac:&lt;/span> &lt;span style="color:#fabd2f">f940002b&lt;/span> &lt;span style="color:#d3869b">ldr&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, [&lt;span style="color:#d3869b">x1&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 2&lt;/span>&lt;span>1000020&lt;span style="color:#fb4934">b0:&lt;/span> 8&lt;span style="color:#fabd2f">b09016b&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 3&lt;/span>&lt;span>1000020&lt;span style="color:#fb4934">b4:&lt;/span> &lt;span style="color:#fabd2f">ad001564&lt;/span> &lt;span style="color:#d3869b">stp&lt;/span> &lt;span style="color:#d3869b">q4&lt;/span>, &lt;span style="color:#d3869b">q5&lt;/span>, [&lt;span style="color:#d3869b">x11&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 4&lt;/span>&lt;span>1000020&lt;span style="color:#fb4934">b8:&lt;/span> 9100414&lt;span style="color:#fabd2f">a&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 5&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000020&lt;span style="color:#fb4934">bc:&lt;/span> &lt;span style="color:#fabd2f">a941300b&lt;/span> &lt;span style="color:#d3869b">ldp&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, [&lt;span style="color:#d3869b">x0&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 6&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000020&lt;span style="color:#fb4934">c0:&lt;/span> 9&lt;span style="color:#fabd2f">b0b7d8b&lt;/span> &lt;span style="color:#d3869b">mul&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 7&lt;/span>&lt;span>1000020&lt;span style="color:#fb4934">c4:&lt;/span> 91008129 &lt;span style="color:#fabd2f">add&lt;/span> &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x20
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 8&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000020&lt;span style="color:#fb4934">c8:&lt;/span> 9100&lt;span style="color:#fabd2f">c108&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x30
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 9&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000020&lt;span style="color:#fb4934">cc:&lt;/span> &lt;span style="color:#fabd2f">eb0a017f&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">10&lt;/span>&lt;span>1000020&lt;span style="color:#fb4934">d0:&lt;/span> 54&lt;span style="color:#fabd2f">fffb48&lt;/span> &lt;span style="color:#d3869b">b.hi&lt;/span> &lt;span style="color:#d3869b">0x100002038&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_neon_16_vals_sp&lt;/span>+&lt;span style="color:#d3869b">0x54&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>However, the compiler still does not know that the value of &lt;code>dst-&amp;gt;buffer&lt;/code> does not change in between iterations,
so it has to load it in every loop and add the offset.
This is now exactly the same as in the beginning of the loop, and the solution is also the same:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>&lt;span style="color:#fabd2f">uint16_t&lt;/span> &lt;span style="color:#fe8019">*&lt;/span>dst_ptr &lt;span style="color:#fe8019">=&lt;/span> (&lt;span style="color:#fabd2f">uint16_t&lt;/span> &lt;span style="color:#fe8019">*&lt;/span>)dst&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>buffer;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2&lt;/span>&lt;span>&lt;span style="color:#fe8019">const&lt;/span> &lt;span style="color:#fabd2f">uint8_t&lt;/span> &lt;span style="color:#fe8019">*&lt;/span>src_ptr &lt;span style="color:#fe8019">=&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>buffer;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">4&lt;/span>&lt;span>&lt;span style="color:#fe8019">for&lt;/span> (&lt;span style="color:#fabd2f">int&lt;/span> i &lt;span style="color:#fe8019">=&lt;/span> &lt;span style="color:#d3869b">0&lt;/span>; i &lt;span style="color:#fe8019">&amp;lt;&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_width &lt;span style="color:#fe8019">*&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_height; i &lt;span style="color:#fe8019">+=&lt;/span> &lt;span style="color:#d3869b">16&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">5&lt;/span>&lt;span> &lt;span style="color:#928374;font-style:italic">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">6&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This reduces the instructions at the end of the loop from 12 to 7:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-asm" data-lang="asm">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>1000021&lt;span style="color:#fb4934">b0:&lt;/span> &lt;span style="color:#fabd2f">ad3f9544&lt;/span> &lt;span style="color:#d3869b">stp&lt;/span> &lt;span style="color:#d3869b">q4&lt;/span>, &lt;span style="color:#d3869b">q5&lt;/span>, [&lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#928374;font-style:italic">#-0x10] ; store to dst-&amp;gt;buffer
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000021&lt;span style="color:#fb4934">b4:&lt;/span> 91004108 &lt;span style="color:#fabd2f">add&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10 ; i+=16
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000021&lt;span style="color:#fb4934">b8:&lt;/span> &lt;span style="color:#fabd2f">a941300b&lt;/span> &lt;span style="color:#d3869b">ldp&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, [&lt;span style="color:#d3869b">x0&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10] ; load image dimensions
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">4&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000021&lt;span style="color:#fb4934">bc:&lt;/span> 9&lt;span style="color:#fabd2f">b0b7d8b&lt;/span> &lt;span style="color:#d3869b">mul&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span> &lt;span style="color:#928374;font-style:italic">; calculate number of pixels in image
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">5&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000021&lt;span style="color:#fb4934">c0:&lt;/span> 9100814&lt;span style="color:#fabd2f">a&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x20 ; calculate offset for dst-&amp;gt;buffer for the next iteration
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">6&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000021&lt;span style="color:#fb4934">c4:&lt;/span> &lt;span style="color:#fabd2f">eb08017f&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span> &lt;span style="color:#928374;font-style:italic">; if number pixels &amp;gt; i:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">7&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000021&lt;span style="color:#fb4934">c8:&lt;/span> 54&lt;span style="color:#fabd2f">fffbe8&lt;/span> &lt;span style="color:#d3869b">b.hi&lt;/span> &lt;span style="color:#d3869b">0x100002144&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_neon_16_vals_sp_restrict&lt;/span>+&lt;span style="color:#d3869b">0x58&lt;/span>&amp;gt; &lt;span style="color:#928374;font-style:italic">; branch
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This is still 4 more than the CGV assembly, and to explain that discrepancy we have to examine the looping
behavior.
I already mentioned that the compiler converted the for loop into essentially a while loop, which costs 2 instructions,
while the for loop costs 5.
Part of that is that the inline calculation of the number of pixels could not be optimized by the compiler, so
it loads the image dimensions in every loop.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>&lt;span style="color:#fe8019">const&lt;/span> &lt;span style="color:#fabd2f">int&lt;/span> num_pixels &lt;span style="color:#fe8019">=&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_width &lt;span style="color:#fe8019">*&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_height;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2&lt;/span>&lt;span>&lt;span style="color:#fe8019">for&lt;/span> (&lt;span style="color:#fabd2f">int&lt;/span> i &lt;span style="color:#fe8019">=&lt;/span> &lt;span style="color:#d3869b">0&lt;/span>; i &lt;span style="color:#fe8019">&amp;lt;&lt;/span> num_pixels; i &lt;span style="color:#fe8019">+=&lt;/span> &lt;span style="color:#d3869b">16&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3&lt;/span>&lt;span> &lt;span style="color:#928374;font-style:italic">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">4&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Moving that calculation out of the loop gets rid of the extra load instruction and the multiplication, as these are moved
out of the loop, but it keeps the &lt;code>cmp&lt;/code> and adds a &lt;code>lsr&lt;/code> instruction, which shifts the value in &lt;code>x10&lt;/code> (&lt;code>i&lt;/code>) by 4.
The comparison changed as well:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-asm" data-lang="asm">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">c84:&lt;/span> &lt;span style="color:#fabd2f">ad3fc526&lt;/span> &lt;span style="color:#d3869b">stp&lt;/span> &lt;span style="color:#d3869b">q6&lt;/span>, &lt;span style="color:#d3869b">q17&lt;/span>, [&lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#928374;font-style:italic">#-0x10] ; store to dst-&amp;gt;buffer
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">c88:&lt;/span> 9100414&lt;span style="color:#fabd2f">a&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10 ; i+=16
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">c8c:&lt;/span> 91008129 &lt;span style="color:#fabd2f">add&lt;/span> &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x20 ; calculate offset for dst-&amp;gt;buffer for the next iteration
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">4&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">c90:&lt;/span> &lt;span style="color:#fabd2f">d344fd4b&lt;/span> &lt;span style="color:#d3869b">lsr&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#928374;font-style:italic">#4 ; i &amp;gt;&amp;gt; 4
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">5&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">c94:&lt;/span> &lt;span style="color:#fabd2f">f1270d7f&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x9c3 ; (i &amp;gt;&amp;gt; 4) &amp;lt; 2499?
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">6&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">c98:&lt;/span> 54&lt;span style="color:#fabd2f">fffc43&lt;/span> &lt;span style="color:#d3869b">b.lo&lt;/span> &lt;span style="color:#d3869b">0x100001c20&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_neon_sp&lt;/span>+&lt;span style="color:#d3869b">0x60&lt;/span>&amp;gt; &lt;span style="color:#928374;font-style:italic">; branch if (i &amp;gt;&amp;gt; 4) &amp;lt; 2499
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>So the compiler still cannot convert it to a while loop like it can in the compiler optimized version.
The reason for that is that the compiler doesn&amp;rsquo;t know that/if the image dimensions are divisible by 16,
but we know that they are in this case (200x200 pixels = 40 000 pixels, divided by 16 = 2 500 iterations).&lt;/p>
&lt;p>However, we can tell the compiler that by changing the comparison from &lt;code>i &amp;lt; num_pixels&lt;/code> to &lt;code>i != num_pixels&lt;/code>.
This lets the compiler know that &lt;code>i&lt;/code> does not surpass the number of pixels.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>&lt;span style="color:#fe8019">const&lt;/span> &lt;span style="color:#fabd2f">int&lt;/span> num_pixels &lt;span style="color:#fe8019">=&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_width &lt;span style="color:#fe8019">*&lt;/span> src&lt;span style="color:#fe8019">-&amp;gt;&lt;/span>img_height;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2&lt;/span>&lt;span>&lt;span style="color:#fe8019">for&lt;/span> (&lt;span style="color:#fabd2f">int&lt;/span> i &lt;span style="color:#fe8019">=&lt;/span> &lt;span style="color:#d3869b">0&lt;/span>; i &lt;span style="color:#fe8019">!=&lt;/span> num_pixels; i &lt;span style="color:#fe8019">+=&lt;/span> &lt;span style="color:#d3869b">16&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3&lt;/span>&lt;span> &lt;span style="color:#928374;font-style:italic">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">4&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After that the generated instructions are almost equal to CGV:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-asm" data-lang="asm">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">c84:&lt;/span> &lt;span style="color:#fabd2f">ad3fc526&lt;/span> &lt;span style="color:#d3869b">stp&lt;/span> &lt;span style="color:#d3869b">q6&lt;/span>, &lt;span style="color:#d3869b">q17&lt;/span>, [&lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#928374;font-style:italic">#-0x10]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">c88:&lt;/span> 91008129 &lt;span style="color:#fabd2f">add&lt;/span> &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x20
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">c8c:&lt;/span> &lt;span style="color:#fabd2f">f100414a&lt;/span> &lt;span style="color:#d3869b">subs&lt;/span> &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">4&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">c90:&lt;/span> 54&lt;span style="color:#fabd2f">fffc81&lt;/span> &lt;span style="color:#d3869b">b.ne&lt;/span> &lt;span style="color:#d3869b">0x100001c20&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_neon_sp&lt;/span>+&lt;span style="color:#d3869b">0x60&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The only difference is that there is an extra add instruction to compute the next offset that the program should write to.
In CGV that is done as part of the &lt;code>stp&lt;/code> instruction.&lt;/p>
&lt;p>Here is a side by side comparison&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>opcode&lt;/th>
&lt;th>source 1&lt;/th>
&lt;th>source 2&lt;/th>
&lt;th>destination&lt;/th>
&lt;th>offset&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>stp&lt;/code>&lt;/td>
&lt;td>&lt;code>q4&lt;/code>&lt;/td>
&lt;td>&lt;code>q5&lt;/code>&lt;/td>
&lt;td>&lt;code>[x13]&lt;/code>&lt;/td>
&lt;td>+32 (post-index)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>stp&lt;/code>&lt;/td>
&lt;td>&lt;code>q6&lt;/code>&lt;/td>
&lt;td>&lt;code>q17&lt;/code>&lt;/td>
&lt;td>&lt;code>x9&lt;/code>&lt;/td>
&lt;td>-16 (pre-index)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>So the difference is that in the CGV version both register contents are stored to the address at &lt;code>[x13]&lt;/code>
and then the offset is incremented by 32. So an extra &lt;code>add&lt;/code> instruction is not necessary.&lt;/p>
&lt;p>But for some reason the compiler didn&amp;rsquo;t do this for the 16P version.
In the assembly for 16P the destination address is stored in &lt;code>x9&lt;/code>, the register contents are saved at &lt;code>x9-16&lt;/code> and then the
destination address is incremented by 32 (&lt;code>add x9, x9, #0x20&lt;/code>).&lt;/p>
&lt;p>It is not entirely clear to me why the compiler does it that way.
But one way to get it to generate the same instructions is to change the addressing like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">// from
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>&lt;span style="color:#fabd2f">vst1q_u16&lt;/span>(dst_ptr &lt;span style="color:#fe8019">+&lt;/span> i, v_rgb565_low);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3&lt;/span>&lt;span>&lt;span style="color:#fabd2f">vst1q_u16&lt;/span>(dst_ptr &lt;span style="color:#fe8019">+&lt;/span> i &lt;span style="color:#fe8019">+&lt;/span> &lt;span style="color:#d3869b">8&lt;/span>, v_rgb565_high);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">4&lt;/span>&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">5&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">// to
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">6&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>&lt;span style="color:#fabd2f">vst1q_u16&lt;/span>(dst_ptr, v_rgb565_low);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">7&lt;/span>&lt;span>dst_ptr &lt;span style="color:#fe8019">+=&lt;/span> &lt;span style="color:#d3869b">8&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">8&lt;/span>&lt;span>&lt;span style="color:#fabd2f">vst1q_u16&lt;/span>(dst_ptr, v_rgb565_high);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">9&lt;/span>&lt;span>dst_ptr &lt;span style="color:#fe8019">+=&lt;/span> &lt;span style="color:#d3869b">8&lt;/span>;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That way the compiler generates the same instructions for both 16P and CGV.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-asm" data-lang="asm">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">1&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">c80:&lt;/span> &lt;span style="color:#fabd2f">ac814506&lt;/span> &lt;span style="color:#d3869b">stp&lt;/span> &lt;span style="color:#d3869b">q6&lt;/span>, &lt;span style="color:#d3869b">q17&lt;/span>, [&lt;span style="color:#d3869b">x8&lt;/span>], &lt;span style="color:#928374;font-style:italic">#0x20
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">2&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">c84:&lt;/span> &lt;span style="color:#fabd2f">f100414a&lt;/span> &lt;span style="color:#d3869b">subs&lt;/span> &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">3&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">c88:&lt;/span> 54&lt;span style="color:#fabd2f">fffca1&lt;/span> &lt;span style="color:#d3869b">b.ne&lt;/span> &lt;span style="color:#d3869b">0x100001c1c&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_neon_sp&lt;/span>+&lt;span style="color:#d3869b">0x5c&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="conclusion">Conclusion
&lt;/h1>&lt;p>To conclude, we have a looked at a rather simple algorithm that has both been vectorized by hand by the compiler.
During the comparisons there have been several observations made that lead to the following conclusions:&lt;/p>
&lt;ol>
&lt;li>Compilers are really smart&lt;/li>
&lt;/ol>
&lt;p>They might optimize your problem just as well, if not better than you do, at least for trivial problems.
Also doing manual optimizations might end up confusing the compiler, so it can&amp;rsquo;t do its best work.&lt;/p>
&lt;ol start="2">
&lt;li>Be aware what the compiler knows and what it doesn&amp;rsquo;t&lt;/li>
&lt;/ol>
&lt;p>Many of these changes in assembly were because the compiler could not know about the influence of other code on data
and therefore had to play it safe, which resulted in extra instructions and an observable performance penalty.&lt;/p>
&lt;ol start="3">
&lt;li>Pre-calculate what you can&lt;/li>
&lt;/ol>
&lt;p>The compiler does not necessarily move calculations out of a loop, even though the result does not change across iterations.
Moving calculations out of a hot-loop and caching the results can be worth it.
Especially when the calculations are expensive.&lt;/p>
&lt;ol start="4">
&lt;li>Be as expressive as you can be&lt;/li>
&lt;/ol>
&lt;p>Some things that might be obvious to you are not clear to the compiler, and generally the more expressive your code
is, the better the compiler performs when generating the code that eventually runs on the CPU.
However, one or two add instructions might be a worthwhile cost for less verbose/more concise and thereby more readable code.
But if you want to make sure the compiler does the best it can, being more expressive is usually the way to achieve that.&lt;/p>
&lt;hr>
&lt;details id="appendix" >
&lt;summary>Appendix&lt;/summary>
&lt;h3 id="scalar-algorithm-auto-vectorized">Scalar Algorithm (auto vectorized)
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-asm" data-lang="asm">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 1&lt;/span>&lt;span>0000000100001554 &amp;lt;&lt;span style="color:#fabd2f">_rgb888_to_rgb565_scalar&lt;/span>&amp;gt;:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 2&lt;/span>&lt;span>100001554: &lt;span style="color:#fabd2f">a9412408&lt;/span> &lt;span style="color:#d3869b">ldp&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>, [&lt;span style="color:#d3869b">x0&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 3&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001558: 9&lt;span style="color:#fabd2f">b087d28&lt;/span> &lt;span style="color:#d3869b">mul&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 4&lt;/span>&lt;span>10000155&lt;span style="color:#fb4934">c:&lt;/span> &lt;span style="color:#fabd2f">b4000988&lt;/span> &lt;span style="color:#d3869b">cbz&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">0x10000168c&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0x138&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 5&lt;/span>&lt;span>100001560: &lt;span style="color:#fabd2f">f9400009&lt;/span> &lt;span style="color:#d3869b">ldr&lt;/span> &lt;span style="color:#d3869b">x9&lt;/span>, [&lt;span style="color:#d3869b">x0&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 6&lt;/span>&lt;span>100001564: &lt;span style="color:#fabd2f">f940002a&lt;/span> &lt;span style="color:#d3869b">ldr&lt;/span> &lt;span style="color:#d3869b">x10&lt;/span>, [&lt;span style="color:#d3869b">x1&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 7&lt;/span>&lt;span>100001568: &lt;span style="color:#fabd2f">f100211f&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x8
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 8&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>10000156&lt;span style="color:#fb4934">c:&lt;/span> 54000543 &lt;span style="color:#fabd2f">b.lo&lt;/span> &lt;span style="color:#d3869b">0x100001614&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0xc0&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 9&lt;/span>&lt;span>100001570: &lt;span style="color:#fabd2f">d37ff90b&lt;/span> &lt;span style="color:#d3869b">lsl&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 10&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001574: 8&lt;span style="color:#fabd2f">b0b014c&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 11&lt;/span>&lt;span>100001578: 8&lt;span style="color:#fabd2f">b08012d&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x13&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 12&lt;/span>&lt;span>10000157&lt;span style="color:#fb4934">c:&lt;/span> 8&lt;span style="color:#fabd2f">b0b01ab&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x13&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 13&lt;/span>&lt;span>100001580: &lt;span style="color:#fabd2f">eb0b015f&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 14&lt;/span>&lt;span>100001584: &lt;span style="color:#fabd2f">fa4c3122&lt;/span> &lt;span style="color:#d3869b">ccmp&lt;/span> &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x2, lo
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 15&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001588: 54000463 &lt;span style="color:#fabd2f">b.lo&lt;/span> &lt;span style="color:#d3869b">0x100001614&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0xc0&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 16&lt;/span>&lt;span>10000158&lt;span style="color:#fb4934">c:&lt;/span> &lt;span style="color:#fabd2f">f100411f&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 17&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001590: 54000802 &lt;span style="color:#fabd2f">b.hs&lt;/span> &lt;span style="color:#d3869b">0x100001690&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0x13c&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 18&lt;/span>&lt;span>100001594: &lt;span style="color:#fabd2f">d280000b&lt;/span> &lt;span style="color:#d3869b">mov&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x0 ; =0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 19&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001598: &lt;span style="color:#fabd2f">aa0b03ee&lt;/span> &lt;span style="color:#d3869b">mov&lt;/span> &lt;span style="color:#d3869b">x14&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 20&lt;/span>&lt;span>10000159&lt;span style="color:#fb4934">c:&lt;/span> 927&lt;span style="color:#fabd2f">df10b&lt;/span> &lt;span style="color:#d3869b">and&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0xfffffffffffffff8
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 21&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000015&lt;span style="color:#fb4934">a0:&lt;/span> &lt;span style="color:#fabd2f">d37ff9cd&lt;/span> &lt;span style="color:#d3869b">lsl&lt;/span> &lt;span style="color:#d3869b">x13&lt;/span>, &lt;span style="color:#d3869b">x14&lt;/span>, &lt;span style="color:#928374;font-style:italic">#1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 22&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000015&lt;span style="color:#fb4934">a4:&lt;/span> 8&lt;span style="color:#fabd2f">b0e01ac&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x13&lt;/span>, &lt;span style="color:#d3869b">x14&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 23&lt;/span>&lt;span>1000015&lt;span style="color:#fb4934">a8:&lt;/span> 8&lt;span style="color:#fabd2f">b0c012c&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 24&lt;/span>&lt;span>1000015&lt;span style="color:#fb4934">ac:&lt;/span> 8&lt;span style="color:#fabd2f">b0d014d&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x13&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x13&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 25&lt;/span>&lt;span>1000015&lt;span style="color:#fb4934">b0:&lt;/span> &lt;span style="color:#fabd2f">cb0b01ce&lt;/span> &lt;span style="color:#d3869b">sub&lt;/span> &lt;span style="color:#d3869b">x14&lt;/span>, &lt;span style="color:#d3869b">x14&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 26&lt;/span>&lt;span>1000015&lt;span style="color:#fb4934">b4:&lt;/span> 4&lt;span style="color:#fabd2f">f008480&lt;/span> &lt;span style="color:#d3869b">movi.8h&lt;/span> &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x4
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 27&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000015&lt;span style="color:#fb4934">b8:&lt;/span> 4&lt;span style="color:#fabd2f">f008441&lt;/span> &lt;span style="color:#d3869b">movi.8h&lt;/span> &lt;span style="color:#d3869b">v1&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 28&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000015&lt;span style="color:#fb4934">bc:&lt;/span> 4&lt;span style="color:#fabd2f">f0087e2&lt;/span> &lt;span style="color:#d3869b">movi.8h&lt;/span> &lt;span style="color:#d3869b">v2&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x1f
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 29&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000015&lt;span style="color:#fb4934">c0:&lt;/span> 4&lt;span style="color:#fabd2f">f0187e3&lt;/span> &lt;span style="color:#d3869b">movi.8h&lt;/span> &lt;span style="color:#d3869b">v3&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3f
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 30&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000015&lt;span style="color:#fb4934">c4:&lt;/span> 0&lt;span style="color:#fabd2f">cdf4184&lt;/span> &lt;span style="color:#d3869b">ld3.8b&lt;/span> { &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span> }, [&lt;span style="color:#d3869b">x12&lt;/span>], &lt;span style="color:#928374;font-style:italic">#24
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 31&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000015&lt;span style="color:#fb4934">c8:&lt;/span> 2&lt;span style="color:#fabd2f">e241007&lt;/span> &lt;span style="color:#d3869b">uaddw.8h&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 32&lt;/span>&lt;span>1000015&lt;span style="color:#fb4934">cc:&lt;/span> 6&lt;span style="color:#fabd2f">f1d04e7&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 33&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000015&lt;span style="color:#fb4934">d0:&lt;/span> 2&lt;span style="color:#fabd2f">e251030&lt;/span> &lt;span style="color:#d3869b">uaddw.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v1&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 34&lt;/span>&lt;span>1000015&lt;span style="color:#fb4934">d4:&lt;/span> 6&lt;span style="color:#fabd2f">f1e0610&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 35&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000015&lt;span style="color:#fb4934">d8:&lt;/span> 2&lt;span style="color:#fabd2f">e261004&lt;/span> &lt;span style="color:#d3869b">uaddw.8h&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 36&lt;/span>&lt;span>1000015&lt;span style="color:#fb4934">dc:&lt;/span> 6&lt;span style="color:#fabd2f">f1d0484&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 37&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000015&lt;span style="color:#fb4934">e0:&lt;/span> 6&lt;span style="color:#fabd2f">e626ce5&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 38&lt;/span>&lt;span>1000015&lt;span style="color:#fb4934">e4:&lt;/span> 6&lt;span style="color:#fabd2f">e636e06&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 39&lt;/span>&lt;span>1000015&lt;span style="color:#fb4934">e8:&lt;/span> 6&lt;span style="color:#fabd2f">e626c84&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 40&lt;/span>&lt;span>1000015&lt;span style="color:#fb4934">ec:&lt;/span> 4&lt;span style="color:#fabd2f">f1b54a5&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0xb
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 41&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000015&lt;span style="color:#fb4934">f0:&lt;/span> 4&lt;span style="color:#fabd2f">f1554c6&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 42&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000015&lt;span style="color:#fb4934">f4:&lt;/span> 4&lt;span style="color:#fabd2f">ea51cc5&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 43&lt;/span>&lt;span>1000015&lt;span style="color:#fb4934">f8:&lt;/span> 4&lt;span style="color:#fabd2f">ea41ca4&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 44&lt;/span>&lt;span>1000015&lt;span style="color:#fb4934">fc:&lt;/span> 3&lt;span style="color:#fabd2f">c8105a4&lt;/span> &lt;span style="color:#d3869b">str&lt;/span> &lt;span style="color:#d3869b">q4&lt;/span>, [&lt;span style="color:#d3869b">x13&lt;/span>], &lt;span style="color:#928374;font-style:italic">#0x10
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 45&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001600: &lt;span style="color:#fabd2f">b10021ce&lt;/span> &lt;span style="color:#d3869b">adds&lt;/span> &lt;span style="color:#d3869b">x14&lt;/span>, &lt;span style="color:#d3869b">x14&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x8
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 46&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001604: 54&lt;span style="color:#fabd2f">fffe01&lt;/span> &lt;span style="color:#d3869b">b.ne&lt;/span> &lt;span style="color:#d3869b">0x1000015c4&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0x70&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 47&lt;/span>&lt;span>100001608: &lt;span style="color:#fabd2f">eb0b011f&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 48&lt;/span>&lt;span>10000160&lt;span style="color:#fb4934">c:&lt;/span> 54000061 &lt;span style="color:#fabd2f">b.ne&lt;/span> &lt;span style="color:#d3869b">0x100001618&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0xc4&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 49&lt;/span>&lt;span>100001610: 1400001&lt;span style="color:#fabd2f">f&lt;/span> &lt;span style="color:#d3869b">b&lt;/span> &lt;span style="color:#d3869b">0x10000168c&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0x138&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 50&lt;/span>&lt;span>100001614: &lt;span style="color:#fabd2f">d280000b&lt;/span> &lt;span style="color:#d3869b">mov&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x0 ; =0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 51&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001618: &lt;span style="color:#fabd2f">d37ff96c&lt;/span> &lt;span style="color:#d3869b">lsl&lt;/span> &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#928374;font-style:italic">#1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 52&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>10000161&lt;span style="color:#fb4934">c:&lt;/span> 8&lt;span style="color:#fabd2f">b0c014a&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 53&lt;/span>&lt;span>100001620: 8&lt;span style="color:#fabd2f">b0b018c&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 54&lt;/span>&lt;span>100001624: 8&lt;span style="color:#fabd2f">b090189&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 55&lt;/span>&lt;span>100001628: 91000929 &lt;span style="color:#fabd2f">add&lt;/span> &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 56&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>10000162&lt;span style="color:#fb4934">c:&lt;/span> &lt;span style="color:#fabd2f">cb0b0108&lt;/span> &lt;span style="color:#d3869b">sub&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 57&lt;/span>&lt;span>100001630: 528003&lt;span style="color:#fabd2f">eb&lt;/span> &lt;span style="color:#d3869b">mov&lt;/span> &lt;span style="color:#d3869b">w11&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x1f ; =31
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 58&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001634: 528007&lt;span style="color:#fabd2f">ec&lt;/span> &lt;span style="color:#d3869b">mov&lt;/span> &lt;span style="color:#d3869b">w12&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3f ; =63
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 59&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001638: 385&lt;span style="color:#fabd2f">fe12d&lt;/span> &lt;span style="color:#d3869b">ldurb&lt;/span> &lt;span style="color:#d3869b">w13&lt;/span>, [&lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#928374;font-style:italic">#-0x2]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 60&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>10000163&lt;span style="color:#fb4934">c:&lt;/span> 385&lt;span style="color:#fabd2f">ff12e&lt;/span> &lt;span style="color:#d3869b">ldurb&lt;/span> &lt;span style="color:#d3869b">w14&lt;/span>, [&lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#928374;font-style:italic">#-0x1]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 61&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001640: 3840352&lt;span style="color:#fabd2f">f&lt;/span> &lt;span style="color:#d3869b">ldrb&lt;/span> &lt;span style="color:#d3869b">w15&lt;/span>, [&lt;span style="color:#d3869b">x9&lt;/span>], &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 62&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001644: 110011&lt;span style="color:#fabd2f">ad&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">w13&lt;/span>, &lt;span style="color:#d3869b">w13&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x4
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 63&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001648: 53037&lt;span style="color:#fabd2f">dad&lt;/span> &lt;span style="color:#d3869b">lsr&lt;/span> &lt;span style="color:#d3869b">w13&lt;/span>, &lt;span style="color:#d3869b">w13&lt;/span>, &lt;span style="color:#928374;font-style:italic">#3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 64&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>10000164&lt;span style="color:#fb4934">c:&lt;/span> 110009&lt;span style="color:#fabd2f">ce&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">w14&lt;/span>, &lt;span style="color:#d3869b">w14&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 65&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001650: 53027&lt;span style="color:#fabd2f">dce&lt;/span> &lt;span style="color:#d3869b">lsr&lt;/span> &lt;span style="color:#d3869b">w14&lt;/span>, &lt;span style="color:#d3869b">w14&lt;/span>, &lt;span style="color:#928374;font-style:italic">#2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 66&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001654: 110011&lt;span style="color:#fabd2f">ef&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">w15&lt;/span>, &lt;span style="color:#d3869b">w15&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x4
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 67&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001658: 53037&lt;span style="color:#fabd2f">def&lt;/span> &lt;span style="color:#d3869b">lsr&lt;/span> &lt;span style="color:#d3869b">w15&lt;/span>, &lt;span style="color:#d3869b">w15&lt;/span>, &lt;span style="color:#928374;font-style:italic">#3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 68&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>10000165&lt;span style="color:#fb4934">c:&lt;/span> 71007&lt;span style="color:#fabd2f">dbf&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">w13&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x1f
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 69&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001660: 1&lt;span style="color:#fabd2f">a8b31ad&lt;/span> &lt;span style="color:#d3869b">csel&lt;/span> &lt;span style="color:#d3869b">w13&lt;/span>, &lt;span style="color:#d3869b">w13&lt;/span>, &lt;span style="color:#d3869b">w11&lt;/span>, &lt;span style="color:#d3869b">lo&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 70&lt;/span>&lt;span>100001664: 7100&lt;span style="color:#fabd2f">fddf&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">w14&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3f
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 71&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001668: 1&lt;span style="color:#fabd2f">a8c31ce&lt;/span> &lt;span style="color:#d3869b">csel&lt;/span> &lt;span style="color:#d3869b">w14&lt;/span>, &lt;span style="color:#d3869b">w14&lt;/span>, &lt;span style="color:#d3869b">w12&lt;/span>, &lt;span style="color:#d3869b">lo&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 72&lt;/span>&lt;span>10000166&lt;span style="color:#fb4934">c:&lt;/span> 71007&lt;span style="color:#fabd2f">dff&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">w15&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x1f
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 73&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001670: 1&lt;span style="color:#fabd2f">a8b31ef&lt;/span> &lt;span style="color:#d3869b">csel&lt;/span> &lt;span style="color:#d3869b">w15&lt;/span>, &lt;span style="color:#d3869b">w15&lt;/span>, &lt;span style="color:#d3869b">w11&lt;/span>, &lt;span style="color:#d3869b">lo&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 74&lt;/span>&lt;span>100001674: 531&lt;span style="color:#fabd2f">b69ce&lt;/span> &lt;span style="color:#d3869b">lsl&lt;/span> &lt;span style="color:#d3869b">w14&lt;/span>, &lt;span style="color:#d3869b">w14&lt;/span>, &lt;span style="color:#928374;font-style:italic">#5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 75&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001678: 2&lt;span style="color:#fabd2f">a0d2dcd&lt;/span> &lt;span style="color:#d3869b">orr&lt;/span> &lt;span style="color:#d3869b">w13&lt;/span>, &lt;span style="color:#d3869b">w14&lt;/span>, &lt;span style="color:#d3869b">w13&lt;/span>, &lt;span style="color:#d3869b">lsl&lt;/span> &lt;span style="color:#928374;font-style:italic">#11
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 76&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>10000167&lt;span style="color:#fb4934">c:&lt;/span> 2&lt;span style="color:#fabd2f">a0f01ad&lt;/span> &lt;span style="color:#d3869b">orr&lt;/span> &lt;span style="color:#d3869b">w13&lt;/span>, &lt;span style="color:#d3869b">w13&lt;/span>, &lt;span style="color:#d3869b">w15&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 77&lt;/span>&lt;span>100001680: 7800254&lt;span style="color:#fabd2f">d&lt;/span> &lt;span style="color:#d3869b">strh&lt;/span> &lt;span style="color:#d3869b">w13&lt;/span>, [&lt;span style="color:#d3869b">x10&lt;/span>], &lt;span style="color:#928374;font-style:italic">#0x2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 78&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001684: &lt;span style="color:#fabd2f">f1000508&lt;/span> &lt;span style="color:#d3869b">subs&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 79&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001688: 54&lt;span style="color:#fabd2f">fffd81&lt;/span> &lt;span style="color:#d3869b">b.ne&lt;/span> &lt;span style="color:#d3869b">0x100001638&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0xe4&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 80&lt;/span>&lt;span>10000168&lt;span style="color:#fb4934">c:&lt;/span> &lt;span style="color:#fabd2f">d65f03c0&lt;/span> &lt;span style="color:#d3869b">ret&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 81&lt;/span>&lt;span>100001690: 927&lt;span style="color:#fabd2f">ced0b&lt;/span> &lt;span style="color:#d3869b">and&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0xfffffffffffffff0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 82&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001694: 4&lt;span style="color:#fabd2f">f008480&lt;/span> &lt;span style="color:#d3869b">movi.8h&lt;/span> &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x4
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 83&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001698: 4&lt;span style="color:#fabd2f">f008441&lt;/span> &lt;span style="color:#d3869b">movi.8h&lt;/span> &lt;span style="color:#d3869b">v1&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 84&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>10000169&lt;span style="color:#fb4934">c:&lt;/span> 4&lt;span style="color:#fabd2f">f0087e2&lt;/span> &lt;span style="color:#d3869b">movi.8h&lt;/span> &lt;span style="color:#d3869b">v2&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x1f
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 85&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">a0:&lt;/span> 4&lt;span style="color:#fabd2f">f0187e3&lt;/span> &lt;span style="color:#d3869b">movi.8h&lt;/span> &lt;span style="color:#d3869b">v3&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3f
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 86&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">a4:&lt;/span> &lt;span style="color:#fabd2f">aa0b03ec&lt;/span> &lt;span style="color:#d3869b">mov&lt;/span> &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 87&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">a8:&lt;/span> &lt;span style="color:#fabd2f">aa0a03ed&lt;/span> &lt;span style="color:#d3869b">mov&lt;/span> &lt;span style="color:#d3869b">x13&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 88&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">ac:&lt;/span> &lt;span style="color:#fabd2f">aa0903ee&lt;/span> &lt;span style="color:#d3869b">mov&lt;/span> &lt;span style="color:#d3869b">x14&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 89&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">b0:&lt;/span> 4&lt;span style="color:#fabd2f">cdf41c4&lt;/span> &lt;span style="color:#d3869b">ld3.16b&lt;/span> { &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span> }, [&lt;span style="color:#d3869b">x14&lt;/span>], &lt;span style="color:#928374;font-style:italic">#48
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 90&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">b4:&lt;/span> 6&lt;span style="color:#fabd2f">e241007&lt;/span> &lt;span style="color:#d3869b">uaddw2.8h&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 91&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">b8:&lt;/span> 2&lt;span style="color:#fabd2f">e241010&lt;/span> &lt;span style="color:#d3869b">uaddw.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 92&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">bc:&lt;/span> 6&lt;span style="color:#fabd2f">f1d0610&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 93&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">c0:&lt;/span> 6&lt;span style="color:#fabd2f">f1d04e7&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 94&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">c4:&lt;/span> 6&lt;span style="color:#fabd2f">e251031&lt;/span> &lt;span style="color:#d3869b">uaddw2.8h&lt;/span> &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v1&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 95&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">c8:&lt;/span> 2&lt;span style="color:#fabd2f">e251032&lt;/span> &lt;span style="color:#d3869b">uaddw.8h&lt;/span> &lt;span style="color:#d3869b">v18&lt;/span>, &lt;span style="color:#d3869b">v1&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 96&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">cc:&lt;/span> 6&lt;span style="color:#fabd2f">f1e0652&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v18&lt;/span>, &lt;span style="color:#d3869b">v18&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 97&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">d0:&lt;/span> 6&lt;span style="color:#fabd2f">f1e0631&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 98&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">d4:&lt;/span> 6&lt;span style="color:#fabd2f">e261013&lt;/span> &lt;span style="color:#d3869b">uaddw2.8h&lt;/span> &lt;span style="color:#d3869b">v19&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 99&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">d8:&lt;/span> 2&lt;span style="color:#fabd2f">e261004&lt;/span> &lt;span style="color:#d3869b">uaddw.8h&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">100&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">dc:&lt;/span> 6&lt;span style="color:#fabd2f">f1d0484&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">101&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">e0:&lt;/span> 6&lt;span style="color:#fabd2f">f1d0665&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v19&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">102&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">e4:&lt;/span> 6&lt;span style="color:#fabd2f">e626ce6&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">103&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">e8:&lt;/span> 6&lt;span style="color:#fabd2f">e626e07&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">104&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">ec:&lt;/span> 6&lt;span style="color:#fabd2f">e636e30&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">105&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">f0:&lt;/span> 6&lt;span style="color:#fabd2f">e636e51&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v18&lt;/span>, &lt;span style="color:#d3869b">v3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">106&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">f4:&lt;/span> 6&lt;span style="color:#fabd2f">e626ca5&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">107&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">f8:&lt;/span> 6&lt;span style="color:#fabd2f">e626c84&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">108&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">fc:&lt;/span> 4&lt;span style="color:#fabd2f">f1b54e7&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0xb
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">109&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001700: 4&lt;span style="color:#fabd2f">f1b54c6&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0xb
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">110&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001704: 4&lt;span style="color:#fabd2f">f155631&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">111&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001708: 4&lt;span style="color:#fabd2f">f155610&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">112&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>10000170&lt;span style="color:#fb4934">c:&lt;/span> 4&lt;span style="color:#fabd2f">ea61e06&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">113&lt;/span>&lt;span>100001710: 4&lt;span style="color:#fabd2f">ea71e27&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">114&lt;/span>&lt;span>100001714: 4&lt;span style="color:#fabd2f">ea41ce4&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">115&lt;/span>&lt;span>100001718: 4&lt;span style="color:#fabd2f">ea51cc5&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">116&lt;/span>&lt;span>10000171&lt;span style="color:#fb4934">c:&lt;/span> &lt;span style="color:#fabd2f">ac8115a4&lt;/span> &lt;span style="color:#d3869b">stp&lt;/span> &lt;span style="color:#d3869b">q4&lt;/span>, &lt;span style="color:#d3869b">q5&lt;/span>, [&lt;span style="color:#d3869b">x13&lt;/span>], &lt;span style="color:#928374;font-style:italic">#0x20
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">117&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001720: &lt;span style="color:#fabd2f">f100418c&lt;/span> &lt;span style="color:#d3869b">subs&lt;/span> &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">118&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001724: 54&lt;span style="color:#fabd2f">fffc61&lt;/span> &lt;span style="color:#d3869b">b.ne&lt;/span> &lt;span style="color:#d3869b">0x1000016b0&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0x15c&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">119&lt;/span>&lt;span>100001728: &lt;span style="color:#fabd2f">eb0b011f&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">120&lt;/span>&lt;span>10000172&lt;span style="color:#fb4934">c:&lt;/span> 54&lt;span style="color:#fabd2f">fffb00&lt;/span> &lt;span style="color:#d3869b">b.eq&lt;/span> &lt;span style="color:#d3869b">0x10000168c&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0x138&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">121&lt;/span>&lt;span>100001730: 371&lt;span style="color:#fabd2f">ff348&lt;/span> &lt;span style="color:#d3869b">tbnz&lt;/span> &lt;span style="color:#d3869b">w8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3, 0x100001598 &amp;lt;_rgb888_to_rgb565_scalar+0x44&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">122&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001734: 17&lt;span style="color:#fabd2f">ffffb9&lt;/span> &lt;span style="color:#d3869b">b&lt;/span> &lt;span style="color:#d3869b">0x100001618&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0xc4&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="loop-auto-vectorized">Loop (auto vectorized)
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-asm" data-lang="asm">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 1&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">b0:&lt;/span> 4&lt;span style="color:#fabd2f">cdf41c4&lt;/span> &lt;span style="color:#d3869b">ld3.16b&lt;/span> { &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span> }, [&lt;span style="color:#d3869b">x14&lt;/span>], &lt;span style="color:#928374;font-style:italic">#48
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 2&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">b4:&lt;/span> 6&lt;span style="color:#fabd2f">e241007&lt;/span> &lt;span style="color:#d3869b">uaddw2.8h&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 3&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">b8:&lt;/span> 2&lt;span style="color:#fabd2f">e241010&lt;/span> &lt;span style="color:#d3869b">uaddw.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 4&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">bc:&lt;/span> 6&lt;span style="color:#fabd2f">f1d0610&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 5&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">c0:&lt;/span> 6&lt;span style="color:#fabd2f">f1d04e7&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 6&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">c4:&lt;/span> 6&lt;span style="color:#fabd2f">e251031&lt;/span> &lt;span style="color:#d3869b">uaddw2.8h&lt;/span> &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v1&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 7&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">c8:&lt;/span> 2&lt;span style="color:#fabd2f">e251032&lt;/span> &lt;span style="color:#d3869b">uaddw.8h&lt;/span> &lt;span style="color:#d3869b">v18&lt;/span>, &lt;span style="color:#d3869b">v1&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 8&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">cc:&lt;/span> 6&lt;span style="color:#fabd2f">f1e0652&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v18&lt;/span>, &lt;span style="color:#d3869b">v18&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 9&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">d0:&lt;/span> 6&lt;span style="color:#fabd2f">f1e0631&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">10&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">d4:&lt;/span> 6&lt;span style="color:#fabd2f">e261013&lt;/span> &lt;span style="color:#d3869b">uaddw2.8h&lt;/span> &lt;span style="color:#d3869b">v19&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">11&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">d8:&lt;/span> 2&lt;span style="color:#fabd2f">e261004&lt;/span> &lt;span style="color:#d3869b">uaddw.8h&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">12&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">dc:&lt;/span> 6&lt;span style="color:#fabd2f">f1d0484&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">13&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">e0:&lt;/span> 6&lt;span style="color:#fabd2f">f1d0665&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v19&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">14&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>1000016&lt;span style="color:#fb4934">e4:&lt;/span> 6&lt;span style="color:#fabd2f">e626ce6&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">15&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">e8:&lt;/span> 6&lt;span style="color:#fabd2f">e626e07&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">16&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">ec:&lt;/span> 6&lt;span style="color:#fabd2f">e636e30&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">17&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">f0:&lt;/span> 6&lt;span style="color:#fabd2f">e636e51&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v18&lt;/span>, &lt;span style="color:#d3869b">v3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">18&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">f4:&lt;/span> 6&lt;span style="color:#fabd2f">e626ca5&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">19&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">f8:&lt;/span> 6&lt;span style="color:#fabd2f">e626c84&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">20&lt;/span>&lt;span>1000016&lt;span style="color:#fb4934">fc:&lt;/span> 4&lt;span style="color:#fabd2f">f1b54e7&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0xb
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">21&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001700: 4&lt;span style="color:#fabd2f">f1b54c6&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0xb
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">22&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001704: 4&lt;span style="color:#fabd2f">f155631&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">23&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001708: 4&lt;span style="color:#fabd2f">f155610&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">24&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>10000170&lt;span style="color:#fb4934">c:&lt;/span> 4&lt;span style="color:#fabd2f">ea61e06&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">25&lt;/span>&lt;span>100001710: 4&lt;span style="color:#fabd2f">ea71e27&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">26&lt;/span>&lt;span>100001714: 4&lt;span style="color:#fabd2f">ea41ce4&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">27&lt;/span>&lt;span>100001718: 4&lt;span style="color:#fabd2f">ea51cc5&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">28&lt;/span>&lt;span>10000171&lt;span style="color:#fb4934">c:&lt;/span> &lt;span style="color:#fabd2f">ac8115a4&lt;/span> &lt;span style="color:#d3869b">stp&lt;/span> &lt;span style="color:#d3869b">q4&lt;/span>, &lt;span style="color:#d3869b">q5&lt;/span>, [&lt;span style="color:#d3869b">x13&lt;/span>], &lt;span style="color:#928374;font-style:italic">#0x20
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">29&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001720: &lt;span style="color:#fabd2f">f100418c&lt;/span> &lt;span style="color:#d3869b">subs&lt;/span> &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">30&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001724: 54&lt;span style="color:#fabd2f">fffc61&lt;/span> &lt;span style="color:#d3869b">b.ne&lt;/span> &lt;span style="color:#d3869b">0x1000016b0&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_scalar&lt;/span>+&lt;span style="color:#d3869b">0x15c&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="loop-hand-optimized">Loop (hand optimized)
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-asm" data-lang="asm">&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 1&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f28:&lt;/span> &lt;span style="color:#fabd2f">f940000b&lt;/span> &lt;span style="color:#d3869b">ldr&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, [&lt;span style="color:#d3869b">x0&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 2&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f2c:&lt;/span> 8&lt;span style="color:#fabd2f">b08016b&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 3&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f30:&lt;/span> 4&lt;span style="color:#fabd2f">c404164&lt;/span> &lt;span style="color:#d3869b">ld3.16b&lt;/span> { &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span> }, [&lt;span style="color:#d3869b">x11&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 4&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f34:&lt;/span> 6&lt;span style="color:#fabd2f">e241007&lt;/span> &lt;span style="color:#d3869b">uaddw2.8h&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 5&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f38:&lt;/span> 6&lt;span style="color:#fabd2f">e251030&lt;/span> &lt;span style="color:#d3869b">uaddw2.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v1&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 6&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f3c:&lt;/span> 6&lt;span style="color:#fabd2f">e261011&lt;/span> &lt;span style="color:#d3869b">uaddw2.8h&lt;/span> &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 7&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f40:&lt;/span> 2&lt;span style="color:#fabd2f">e241012&lt;/span> &lt;span style="color:#d3869b">uaddw.8h&lt;/span> &lt;span style="color:#d3869b">v18&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 8&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f44:&lt;/span> 2&lt;span style="color:#fabd2f">e251033&lt;/span> &lt;span style="color:#d3869b">uaddw.8h&lt;/span> &lt;span style="color:#d3869b">v19&lt;/span>, &lt;span style="color:#d3869b">v1&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59"> 9&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f48:&lt;/span> 2&lt;span style="color:#fabd2f">e261004&lt;/span> &lt;span style="color:#d3869b">uaddw.8h&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v0&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">10&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f4c:&lt;/span> 6&lt;span style="color:#fabd2f">f1d04e5&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">11&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">f50:&lt;/span> 6&lt;span style="color:#fabd2f">f1e0606&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">12&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">f54:&lt;/span> 6&lt;span style="color:#fabd2f">f1d0627&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">13&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">f58:&lt;/span> 6&lt;span style="color:#fabd2f">f1d0650&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v18&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">14&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">f5c:&lt;/span> 6&lt;span style="color:#fabd2f">f1e0671&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v19&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x2
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">15&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">f60:&lt;/span> 6&lt;span style="color:#fabd2f">f1d0484&lt;/span> &lt;span style="color:#d3869b">ushr.8h&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x3
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">16&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">f64:&lt;/span> 6&lt;span style="color:#fabd2f">e626ca5&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">17&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f68:&lt;/span> 6&lt;span style="color:#fabd2f">e636cc6&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">18&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f6c:&lt;/span> 6&lt;span style="color:#fabd2f">e626ce7&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">19&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f70:&lt;/span> 6&lt;span style="color:#fabd2f">e626e10&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">20&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f74:&lt;/span> 6&lt;span style="color:#fabd2f">e636e31&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">21&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f78:&lt;/span> 6&lt;span style="color:#fabd2f">e626c84&lt;/span> &lt;span style="color:#d3869b">umin.8h&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">22&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f7c:&lt;/span> 4&lt;span style="color:#fabd2f">f1b54a5&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0xb
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">23&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">f80:&lt;/span> 4&lt;span style="color:#fabd2f">f1554c6&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">24&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">f84:&lt;/span> 4&lt;span style="color:#fabd2f">f1b5610&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0xb
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">25&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">f88:&lt;/span> 4&lt;span style="color:#fabd2f">f155631&lt;/span> &lt;span style="color:#d3869b">shl.8h&lt;/span> &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x5
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">26&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">f8c:&lt;/span> 4&lt;span style="color:#fabd2f">ea51cc5&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">27&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f90:&lt;/span> 4&lt;span style="color:#fabd2f">eb01e26&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v17&lt;/span>, &lt;span style="color:#d3869b">v16&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">28&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f94:&lt;/span> 4&lt;span style="color:#fabd2f">ea41cc4&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v4&lt;/span>, &lt;span style="color:#d3869b">v6&lt;/span>, &lt;span style="color:#d3869b">v4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">29&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f98:&lt;/span> &lt;span style="color:#fabd2f">f940002b&lt;/span> &lt;span style="color:#d3869b">ldr&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, [&lt;span style="color:#d3869b">x1&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">30&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">f9c:&lt;/span> 4&lt;span style="color:#fabd2f">ea71ca5&lt;/span> &lt;span style="color:#d3869b">orr.16b&lt;/span> &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v5&lt;/span>, &lt;span style="color:#d3869b">v7&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">31&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">fa0:&lt;/span> 3&lt;span style="color:#fabd2f">ca96964&lt;/span> &lt;span style="color:#d3869b">str&lt;/span> &lt;span style="color:#d3869b">q4&lt;/span>, [&lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">32&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">fa4:&lt;/span> &lt;span style="color:#fabd2f">f940002b&lt;/span> &lt;span style="color:#d3869b">ldr&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, [&lt;span style="color:#d3869b">x1&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">33&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">fa8:&lt;/span> 8&lt;span style="color:#fabd2f">b09016b&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">34&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">fac:&lt;/span> 3&lt;span style="color:#fabd2f">d800565&lt;/span> &lt;span style="color:#d3869b">str&lt;/span> &lt;span style="color:#d3869b">q5&lt;/span>, [&lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">35&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fb0:&lt;/span> 9100414&lt;span style="color:#fabd2f">a&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">36&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fb4:&lt;/span> &lt;span style="color:#fabd2f">a941300b&lt;/span> &lt;span style="color:#d3869b">ldp&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, [&lt;span style="color:#d3869b">x0&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x10]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">37&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fb8:&lt;/span> 9&lt;span style="color:#fabd2f">b0b7d8b&lt;/span> &lt;span style="color:#d3869b">mul&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x12&lt;/span>, &lt;span style="color:#d3869b">x11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">38&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">fbc:&lt;/span> 91008129 &lt;span style="color:#fabd2f">add&lt;/span> &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#d3869b">x9&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x20
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">39&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fc0:&lt;/span> 9100&lt;span style="color:#fabd2f">c108&lt;/span> &lt;span style="color:#d3869b">add&lt;/span> &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#d3869b">x8&lt;/span>, &lt;span style="color:#928374;font-style:italic">#0x30
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">40&lt;/span>&lt;span>&lt;span style="color:#928374;font-style:italic">&lt;/span>100001&lt;span style="color:#fb4934">fc4:&lt;/span> &lt;span style="color:#fabd2f">eb0a017f&lt;/span> &lt;span style="color:#d3869b">cmp&lt;/span> &lt;span style="color:#d3869b">x11&lt;/span>, &lt;span style="color:#d3869b">x10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#756d59">41&lt;/span>&lt;span>100001&lt;span style="color:#fb4934">fc8:&lt;/span> 54&lt;span style="color:#fabd2f">fffb08&lt;/span> &lt;span style="color:#d3869b">b.hi&lt;/span> &lt;span style="color:#d3869b">0x100001f28&lt;/span> &amp;lt;&lt;span style="color:#d3869b">_rgb888_to_rgb565_neon_16_vals&lt;/span>+&lt;span style="color:#d3869b">0x54&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/details>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>&lt;a class="link" href="https://developer.arm.com/documentation/dui0801/f/A64-Data-Transfer-Instructions/STP--SIMD-and-FP-" target="_blank" rel="noopener"
>STP Documentation&lt;/a>&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item></channel></rss>