text:
Alternative UTF-8 to UTF-16 transcoder (draft)

This is a draft version of a C/C++ port of Robert's transcoder (UTF-8 to UTF-16) with an additional fast path for 1,2,3 bytes. It is not better across the board currently, but there are some nice wins (10% to 20% faster in some cases). This is a first draft and there might be various code generation issues to examine.
Let us start with the regressions... (where the new code is worse)
For each file, the first numbers are for the new transcoder, and the second one is the existing transcoder.

../unicode_lipsum/wikipedia_mars/chinese.utf8.txt
   3.758 GB/s (0.8 %)    2.844 Gc/s     1.32 byte/char
   4.045 GB/s (0.8 %)    3.061 Gc/s     1.32 byte/char
../unicode_lipsum/wikipedia_mars/czech.utf8.txt
   3.698 GB/s (0.8 %)    3.482 Gc/s     1.06 byte/char
   3.923 GB/s (1.0 %)    3.695 Gc/s     1.06 byte/char
../unicode_lipsum/wikipedia_mars/french.utf8.txt
   4.298 GB/s (2.5 %)    4.182 Gc/s     1.03 byte/char
   4.403 GB/s (1.5 %)    4.285 Gc/s     1.03 byte/char
../unicode_lipsum/wikipedia_mars/esperanto.utf8.txt
   5.670 GB/s (1.4 %)    5.485 Gc/s     1.03 byte/char
   5.962 GB/s (1.1 %)    5.768 Gc/s     1.03 byte/char
../unicode_lipsum/wikipedia_mars/german.utf8.txt
   5.890 GB/s (1.1 %)    5.760 Gc/s     1.02 byte/char
   6.070 GB/s (0.9 %)    5.936 Gc/s     1.02 byte/char
../unicode_lipsum/wikipedia_mars/korean.utf8.txt
   3.754 GB/s (0.9 %)    2.797 Gc/s     1.34 byte/char
   3.945 GB/s (0.8 %)    2.939 Gc/s     1.34 byte/char
../unicode_lipsum/wikipedia_mars/turkish.utf8.txt
   4.441 GB/s (0.9 %)    4.222 Gc/s     1.05 byte/char
   4.673 GB/s (1.2 %)    4.442 Gc/s     1.05 byte/char
../unicode_lipsum/wikipedia_mars/vietnamese.utf8.txt
   3.459 GB/s (0.8 %)    3.062 Gc/s     1.13 byte/char
   3.867 GB/s (0.7 %)    3.423 Gc/s     1.13 byte/char

So for a number of cases, we are down 10%.
Let us look at the wins..
For each file, the first numbers are for the new transcoder, and the second one is the existing transcoder.
../unicode_lipsum/wikipedia_mars/arabic.utf8.txt
   4.873 GB/s (1.4 %)    3.878 Gc/s     1.26 byte/char
   4.157 GB/s (1.3 %)    3.308 Gc/s     1.26 byte/char
../unicode_lipsum/wikipedia_mars/greek.utf8.txt
   4.745 GB/s (1.1 %)    3.741 Gc/s     1.27 byte/char
   4.154 GB/s (0.9 %)    3.276 Gc/s     1.27 byte/char
../unicode_lipsum/wikipedia_mars/hebrew.utf8.txt
   4.002 GB/s (0.8 %)    3.081 Gc/s     1.30 byte/char
   3.679 GB/s (0.9 %)    2.832 Gc/s     1.30 byte/char
../unicode_lipsum/wikipedia_mars/hindi.utf8.txt
   4.830 GB/s (1.1 %)    3.336 Gc/s     1.45 byte/char
   4.618 GB/s (0.9 %)    3.190 Gc/s     1.45 byte/char
../unicode_lipsum/wikipedia_mars/persan.utf8.txt
   4.289 GB/s (0.8 %)    3.424 Gc/s     1.25 byte/char
   3.944 GB/s (1.0 %)    3.148 Gc/s     1.25 byte/char
../unicode_lipsum/wikipedia_mars/portuguese.utf8.txt
   4.784 GB/s (1.3 %)    4.664 Gc/s     1.03 byte/char
   4.683 GB/s (1.0 %)    4.565 Gc/s     1.03 byte/char
../unicode_lipsum/wikipedia_mars/russian.utf8.txt
   4.486 GB/s (1.0 %)    3.438 Gc/s     1.30 byte/char
   3.833 GB/s (1.0 %)    2.938 Gc/s     1.30 byte/char
../unicode_lipsum/wikipedia_mars/thai.utf8.txt
   5.205 GB/s (1.5 %)    3.549 Gc/s     1.47 byte/char
   4.725 GB/s (1.3 %)    3.222 Gc/s     1.47 byte/char
../unicode_lipsum/lipsum/Arabic-Lipsum.utf8.txt
   4.682 GB/s (0.7 %)    2.623 Gc/s     1.78 byte/char
   3.350 GB/s (1.0 %)    1.877 Gc/s     1.78 byte/char
../unicode_lipsum/lipsum/Chinese-Lipsum.utf8.txt
   5.264 GB/s (0.7 %)    1.768 Gc/s     2.98 byte/char
   3.974 GB/s (0.7 %)    1.335 Gc/s     2.98 byte/char
../unicode_lipsum/lipsum/Emoji-Lipsum.utf8.txt
   3.427 GB/s (0.9 %)    0.857 Gc/s     4.00 byte/char
   2.973 GB/s (0.9 %)    0.743 Gc/s     4.00 byte/char
../unicode_lipsum/lipsum/Hebrew-Lipsum.utf8.txt
   4.637 GB/s (0.7 %)    2.601 Gc/s     1.78 byte/char
   3.317 GB/s (0.9 %)    1.861 Gc/s     1.78 byte/char
../unicode_lipsum/lipsum/Hindi-Lipsum.utf8.txt
   4.934 GB/s (10.9 %)    1.837 Gc/s     2.69 byte/char
   3.966 GB/s (0.8 %)    1.477 Gc/s     2.69 byte/char
../unicode_lipsum/lipsum/Japanese-Lipsum.utf8.txt
   4.950 GB/s (0.7 %)    1.706 Gc/s     2.90 byte/char
   3.964 GB/s (0.9 %)    1.366 Gc/s     2.90 byte/char
../unicode_lipsum/lipsum/Korean-Lipsum.utf8.txt
   4.523 GB/s (0.6 %)    1.843 Gc/s     2.45 byte/char
   3.920 GB/s (0.9 %)    1.598 Gc/s     2.45 byte/char
../unicode_lipsum/lipsum/Russian-Lipsum.utf8.txt
   4.699 GB/s (0.6 %)    2.600 Gc/s     1.81 byte/char
   3.290 GB/s (0.8 %)    1.820 Gc/s     1.81 byte/char

Many of the wins are larger than 10%.
Another way to look at the issue is that, in the worst case, we achieve ~3.5 GB/s (with emojis, Vietnamese). This is significantly better than with the haswell kernel (AVX2) where our worst case was about half that (~1.5 GB/s), and better than the previous AVX-512 which could go as low as 3.5 GB/s.
The numbers without the new fast path are less favorable with many cases where we get worse results (with speeds significantly below 4 GB/s):
For each file, the first numbers are for the new transcoder, and the second one is the existing transcoder.

../unicode_lipsum/wikipedia_mars/chinese.utf8.txt
   3.014 GB/s (0.9 %)    2.281 Gc/s     1.32 byte/char
   3.993 GB/s (1.0 %)    3.022 Gc/s     1.32 byte/char
../unicode_lipsum/wikipedia_mars/czech.utf8.txt
   3.430 GB/s (0.9 %)    3.231 Gc/s     1.06 byte/char
   3.905 GB/s (0.8 %)    3.677 Gc/s     1.06 byte/char
../unicode_lipsum/wikipedia_mars/english.utf8.txt
  12.308 GB/s (2.3 %)   12.218 Gc/s     1.01 byte/char
  13.470 GB/s (2.4 %)   13.371 Gc/s     1.01 byte/char
../unicode_lipsum/wikipedia_mars/esperanto.utf8.txt
   5.074 GB/s (1.3 %)    4.908 Gc/s     1.03 byte/char
   5.876 GB/s (1.3 %)    5.685 Gc/s     1.03 byte/char
../unicode_lipsum/wikipedia_mars/french.utf8.txt
   4.064 GB/s (3.0 %)    3.955 Gc/s     1.03 byte/char
   4.396 GB/s (1.2 %)    4.278 Gc/s     1.03 byte/char
../unicode_lipsum/wikipedia_mars/german.utf8.txt
   5.307 GB/s (1.1 %)    5.190 Gc/s     1.02 byte/char
   6.068 GB/s (0.9 %)    5.934 Gc/s     1.02 byte/char
../unicode_lipsum/wikipedia_mars/hindi.utf8.txt
   3.899 GB/s (1.1 %)    2.693 Gc/s     1.45 byte/char
   4.665 GB/s (1.0 %)    3.223 Gc/s     1.45 byte/char
../unicode_lipsum/wikipedia_mars/japanese.utf8.txt
   3.177 GB/s (0.9 %)    2.298 Gc/s     1.38 byte/char
   4.108 GB/s (0.9 %)    2.972 Gc/s     1.38 byte/char
../unicode_lipsum/wikipedia_mars/korean.utf8.txt
   3.006 GB/s (1.1 %)    2.240 Gc/s     1.34 byte/char
   3.949 GB/s (0.9 %)    2.943 Gc/s     1.34 byte/char
../unicode_lipsum/wikipedia_mars/persan.utf8.txt
   3.833 GB/s (0.9 %)    3.060 Gc/s     1.25 byte/char
   3.947 GB/s (0.9 %)    3.151 Gc/s     1.25 byte/char
../unicode_lipsum/wikipedia_mars/portuguese.utf8.txt
   4.476 GB/s (1.0 %)    4.363 Gc/s     1.03 byte/char
   4.733 GB/s (1.3 %)    4.614 Gc/s     1.03 byte/char
../unicode_lipsum/wikipedia_mars/thai.utf8.txt
   4.208 GB/s (1.6 %)    2.869 Gc/s     1.47 byte/char
   4.718 GB/s (1.4 %)    3.217 Gc/s     1.47 byte/char
../unicode_lipsum/wikipedia_mars/turkish.utf8.txt
   4.162 GB/s (0.9 %)    3.957 Gc/s     1.05 byte/char
   4.667 GB/s (0.8 %)    4.437 Gc/s     1.05 byte/char
../unicode_lipsum/wikipedia_mars/vietnamese.utf8.txt
   2.790 GB/s (0.9 %)    2.469 Gc/s     1.13 byte/char
   3.890 GB/s (0.9 %)    3.444 Gc/s     1.13 byte/char
../unicode_lipsum/lipsum/Hindi-Lipsum.utf8.txt
   3.588 GB/s (1.4 %)    1.336 Gc/s     2.69 byte/char
   3.963 GB/s (0.8 %)    1.476 Gc/s     2.69 byte/char
../unicode_lipsum/lipsum/Japanese-Lipsum.utf8.txt
   3.865 GB/s (0.9 %)    1.332 Gc/s     2.90 byte/char
   3.974 GB/s (0.8 %)    1.370 Gc/s     2.90 byte/char
../unicode_lipsum/lipsum/Korean-Lipsum.utf8.txt
   3.568 GB/s (0.8 %)    1.454 Gc/s     2.45 byte/char
   3.953 GB/s (0.9 %)    1.611 Gc/s     2.45 byte/char

This is with validation (throughout).

Under Linux, we rely on GCC by default but, as a library, we do not control the compiler so we should seek to assess as many as we can.

I got the above results using GCC 11. I will try with LLVM.

LLVM clang 14 does a better job all around with this code compared to GCC 11. For each file, the first line is LLVM 14, and the second line is GCC 11.
../unicode_lipsum/wikipedia_mars/arabic.utf8.txt
   5.146 GB/s (1.2 %)    4.096 Gc/s     1.26 byte/char
   4.828 GB/s (1.4 %)    3.842 Gc/s     1.26 byte/char
../unicode_lipsum/wikipedia_mars/chinese.utf8.txt
   3.900 GB/s (0.7 %)    2.951 Gc/s     1.32 byte/char
   3.756 GB/s (0.8 %)    2.842 Gc/s     1.32 byte/char
../unicode_lipsum/wikipedia_mars/czech.utf8.txt
   3.874 GB/s (0.7 %)    3.649 Gc/s     1.06 byte/char
   3.702 GB/s (0.8 %)    3.486 Gc/s     1.06 byte/char
../unicode_lipsum/wikipedia_mars/english.utf8.txt
  14.135 GB/s (2.3 %)   14.031 Gc/s     1.01 byte/char
  13.988 GB/s (2.4 %)   13.886 Gc/s     1.01 byte/char
../unicode_lipsum/wikipedia_mars/esperanto.utf8.txt
   5.974 GB/s (1.1 %)    5.779 Gc/s     1.03 byte/char
   5.667 GB/s (1.4 %)    5.482 Gc/s     1.03 byte/char
../unicode_lipsum/wikipedia_mars/french.utf8.txt
   4.689 GB/s (2.4 %)    4.563 Gc/s     1.03 byte/char
   4.247 GB/s (2.8 %)    4.133 Gc/s     1.03 byte/char
../unicode_lipsum/wikipedia_mars/german.utf8.txt
   6.246 GB/s (0.9 %)    6.107 Gc/s     1.02 byte/char
   5.871 GB/s (1.0 %)    5.741 Gc/s     1.02 byte/char
../unicode_lipsum/wikipedia_mars/greek.utf8.txt
   4.990 GB/s (4.5 %)    3.935 Gc/s     1.27 byte/char
   4.567 GB/s (2.4 %)    3.601 Gc/s     1.27 byte/char
../unicode_lipsum/wikipedia_mars/hebrew.utf8.txt
   4.174 GB/s (0.6 %)    3.213 Gc/s     1.30 byte/char
   4.001 GB/s (0.8 %)    3.080 Gc/s     1.30 byte/char
../unicode_lipsum/wikipedia_mars/hindi.utf8.txt
   5.009 GB/s (1.2 %)    3.460 Gc/s     1.45 byte/char
   4.828 GB/s (1.5 %)    3.335 Gc/s     1.45 byte/char
../unicode_lipsum/wikipedia_mars/japanese.utf8.txt
   4.117 GB/s (0.8 %)    2.978 Gc/s     1.38 byte/char
   3.971 GB/s (0.9 %)    2.873 Gc/s     1.38 byte/char
../unicode_lipsum/wikipedia_mars/korean.utf8.txt
   3.879 GB/s (0.8 %)    2.891 Gc/s     1.34 byte/char
   3.748 GB/s (0.9 %)    2.793 Gc/s     1.34 byte/char
../unicode_lipsum/wikipedia_mars/persan.utf8.txt
   4.500 GB/s (0.7 %)    3.592 Gc/s     1.25 byte/char
   4.288 GB/s (1.3 %)    3.423 Gc/s     1.25 byte/char
../unicode_lipsum/wikipedia_mars/portuguese.utf8.txt
   5.065 GB/s (0.7 %)    4.938 Gc/s     1.03 byte/char
   4.785 GB/s (1.0 %)    4.665 Gc/s     1.03 byte/char
../unicode_lipsum/wikipedia_mars/russian.utf8.txt
   4.711 GB/s (0.9 %)    3.611 Gc/s     1.30 byte/char
   4.493 GB/s (1.0 %)    3.444 Gc/s     1.30 byte/char
../unicode_lipsum/wikipedia_mars/thai.utf8.txt
   5.430 GB/s (1.2 %)    3.703 Gc/s     1.47 byte/char
   5.202 GB/s (1.6 %)    3.547 Gc/s     1.47 byte/char
../unicode_lipsum/wikipedia_mars/turkish.utf8.txt
   4.673 GB/s (0.7 %)    4.442 Gc/s     1.05 byte/char
   4.442 GB/s (0.8 %)    4.223 Gc/s     1.05 byte/char
../unicode_lipsum/wikipedia_mars/vietnamese.utf8.txt
   3.580 GB/s (1.0 %)    3.169 Gc/s     1.13 byte/char
   3.466 GB/s (0.7 %)    3.068 Gc/s     1.13 byte/char
../unicode_lipsum/lipsum/Arabic-Lipsum.utf8.txt
   4.842 GB/s (0.7 %)    2.713 Gc/s     1.78 byte/char
   4.681 GB/s (0.6 %)    2.622 Gc/s     1.78 byte/char
../unicode_lipsum/lipsum/Chinese-Lipsum.utf8.txt
   5.576 GB/s (1.8 %)    1.873 Gc/s     2.98 byte/char
   5.266 GB/s (0.9 %)    1.769 Gc/s     2.98 byte/char
../unicode_lipsum/lipsum/Emoji-Lipsum.utf8.txt
   4.594 GB/s (1.1 %)    1.148 Gc/s     4.00 byte/char
   3.427 GB/s (0.9 %)    0.857 Gc/s     4.00 byte/char
../unicode_lipsum/lipsum/Hebrew-Lipsum.utf8.txt
   4.792 GB/s (0.6 %)    2.688 Gc/s     1.78 byte/char
   4.640 GB/s (1.1 %)    2.603 Gc/s     1.78 byte/char
../unicode_lipsum/lipsum/Hindi-Lipsum.utf8.txt
   4.736 GB/s (0.8 %)    1.763 Gc/s     2.69 byte/char
   4.556 GB/s (0.7 %)    1.696 Gc/s     2.69 byte/char
../unicode_lipsum/lipsum/Japanese-Lipsum.utf8.txt
   5.187 GB/s (1.0 %)    1.788 Gc/s     2.90 byte/char
   4.946 GB/s (0.6 %)    1.705 Gc/s     2.90 byte/char
../unicode_lipsum/lipsum/Korean-Lipsum.utf8.txt
   4.695 GB/s (0.9 %)    1.913 Gc/s     2.45 byte/char
   4.523 GB/s (0.7 %)    1.843 Gc/s     2.45 byte/char
../unicode_lipsum/lipsum/Latin-Lipsum.utf8.txt
  20.889 GB/s (3.2 %)   20.889 Gc/s     1.00 byte/char
  20.874 GB/s (4.3 %)   20.874 Gc/s     1.00 byte/char
../unicode_lipsum/lipsum/Russian-Lipsum.utf8.txt
   4.854 GB/s (0.7 %)    2.686 Gc/s     1.81 byte/char
   4.694 GB/s (0.6 %)    2.598 Gc/s     1.81 byte/char

Looks a lot better!  Do you have a comparison with the assembly code?

ASM code...
LLVM...
Dump of assembler code for function simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const:
   0x0000000000036c20 <+0>:     movq   $0x1,0x60(%rsp)
   0x0000000000036c29 <+9>:     mov    0x58(%rsp),%r14
   0x0000000000036c2e <+14>:    movb   $0x0,0x68(%rsp)
   0x0000000000036c33 <+19>:    movb   $0x1,0x54(%rsp)
   0x0000000000036c38 <+24>:    movq   $0x1,0x20(%rsp)
   0x0000000000036c41 <+33>:    jmp    0x36991 <simdutf::icelake::implementation::validate_utf8(char const*, unsigned long) const+545>
   0x0000000000036c46 <+38>:    cs nopw 0x0(%rax,%rax,1)
   0x0000000000036c50 <+48>:    movb   $0x0,(%rbx)
   0x0000000000036c53 <+51>:    mov    %rbp,%rdi
   0x0000000000036c56 <+54>:    mov    %r13,%rsi
   0x0000000000036c59 <+57>:    call   0x7900 <simdutf::benchmarks::BenchmarkBase::run(simdutf::benchmarks::input::Testcase const&)+832>
   0x0000000000036c5e <+62>:    mov    %r13,%rdi
   0x0000000000036c61 <+65>:    call   0x7870 <simdutf::benchmarks::BenchmarkBase::run(simdutf::benchmarks::input::Testcase const&)+688>
   0x0000000000036c66 <+70>:    mov    0xc8(%rsp),%rax
   0x0000000000036c6e <+78>:    sub    %fs:0x28,%rax
   0x0000000000036c77 <+87>:    jne    0x36d97 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+375>
   0x0000000000036c7d <+93>:    add    $0xd8,%rsp
   0x0000000000036c84 <+100>:   mov    %rbp,%rax
   0x0000000000036c87 <+103>:   pop    %rbx
   0x0000000000036c88 <+104>:   pop    %rbp
   0x0000000000036c89 <+105>:   pop    %r12
   0x0000000000036c8b <+107>:   pop    %r13
   0x0000000000036c8d <+109>:   pop    %r14
   0x0000000000036c8f <+111>:   pop    %r15
   0x0000000000036c91 <+113>:   ret
   0x0000000000036c92 <+114>:   mov    0x58(%rsp),%r14
   0x0000000000036c97 <+119>:   mov    0x40(%rsp),%r15
   0x0000000000036c9c <+124>:   movb   $0x0,0x68(%rsp)
   0x0000000000036ca1 <+129>:   sub    %r14,%r15
   0x0000000000036ca4 <+132>:   mov    %r15,0x60(%rsp)
   0x0000000000036ca9 <+137>:   jmp    0x36a8e
   0x0000000000036cae <+142>:   mov    %r14,%rsi
   0x0000000000036cb1 <+145>:   mov    %rbx,%rdi
   0x0000000000036cb4 <+148>:   mov    %r15,%rdx
   0x0000000000036cb7 <+151>:   add    %r15,%rbx
   0x0000000000036cba <+154>:   call   0x7c50 <simdutf::benchmarks::BenchmarkBase::run(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, simdutf::benchmarks::input::Testcase const&)+64>
   0x0000000000036cbf <+159>:   mov    %r15,0x60(%rsp)
   0x0000000000036cc4 <+164>:   mov    0x58(%rsp),%r14
   0x0000000000036cc9 <+169>:   mov    %r15,%rax
   0x0000000000036ccc <+172>:   jmp    0x369c0 <simdutf::icelake::implementation::validate_utf8(char const*, unsigned long) const+592>
   0x0000000000036cd1 <+177>:   movzbl (%r14),%eax
   0x0000000000036cd5 <+181>:   mov    0x58(%rsp),%r14
   0x0000000000036cda <+186>:   movq   $0x1,0x60(%rsp)
   0x0000000000036ce3 <+195>:   mov    %eax,0x6c(%rsp)
   0x0000000000036ce7 <+199>:   jmp    0x36a73 <simdutf::icelake::implementation::validate_ascii(char const*, unsigned long) const+163>
   0x0000000000036cec <+204>:   mov    0x38(%rsp),%edi
   0x0000000000036cf0 <+208>:   xor    %ebp,%ebp
   0x0000000000036cf2 <+210>:   call   0x7b20 <simdutf::benchmarks::BenchmarkBase::prepare_input(simdutf::benchmarks::input::Testcase const&)+96>
   0x0000000000036cf7 <+215>:   lea    0x1c(%rsp),%rdi
   0x0000000000036cfc <+220>:   call   0x7f70 <simdutf::benchmarks::BenchmarkBase::print_summary(event_aggregate const&, double, double) const+240>
   0x0000000000036d01 <+225>:   jmp    0x36c66 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+70>
   0x0000000000036d06 <+230>:   xor    %ebp,%ebp
   0x0000000000036d08 <+232>:   jmp    0x36c66 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+70>
   0x0000000000036d0d <+237>:   mov    %rbp,%rdi
   0x0000000000036d10 <+240>:   xor    %ebp,%ebp
   0x0000000000036d12 <+242>:   call   0x7870 <simdutf::benchmarks::BenchmarkBase::run(simdutf::benchmarks::input::Testcase const&)+688>
   0x0000000000036d17 <+247>:   jmp    0x36c66 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+70>
   0x0000000000036d1c <+252>:   mov    %r12d,%edi
   0x0000000000036d1f <+255>:   call   0x7b20 <simdutf::benchmarks::BenchmarkBase::prepare_input(simdutf::benchmarks::input::Testcase const&)+96>
   0x0000000000036d24 <+260>:   lea    0x1c(%rsp),%rdi
   0x0000000000036d29 <+265>:   call   0x7f70 <simdutf::benchmarks::BenchmarkBase::print_summary(event_aggregate const&, double, double) const+240>
   0x0000000000036d2e <+270>:   jmp    0x36c66 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+70>
   0x0000000000036d33 <+275>:   mov    %rbp,%rdi
   0x0000000000036d36 <+278>:   xor    %ebp,%ebp
   0x0000000000036d38 <+280>:   call   0x7870 <simdutf::benchmarks::BenchmarkBase::run(simdutf::benchmarks::input::Testcase const&)+688>
   0x0000000000036d3d <+285>:   mov    %r12d,%edi
   0x0000000000036d40 <+288>:   call   0x7b20 <simdutf::benchmarks::BenchmarkBase::prepare_input(simdutf::benchmarks::input::Testcase const&)+96>
   0x0000000000036d45 <+293>:   lea    0x1c(%rsp),%rdi
   0x0000000000036d4a <+298>:   call   0x7f70 <simdutf::benchmarks::BenchmarkBase::print_summary(event_aggregate const&, double, double) const+240>
   0x0000000000036d4f <+303>:   jmp    0x36c66 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+70>
   0x0000000000036d54 <+308>:   call   0x2d470 <(anonymous namespace)::DecoderLutTable<true>::ComputeRec(int*, int, int)+752>
   0x0000000000036d59 <+313>:   lea    0x3940(%rip),%rcx        # 0x3a6a0 <simdutf::icelake::implementation::utf16_length_from_utf32(char32_t const*, unsigned long) const+16>
   0x0000000000036d60 <+320>:   mov    $0xa2,%edx
   0x0000000000036d65 <+325>:   lea    0x32a8(%rip),%rsi        # 0x3a014 <simdutf::icelake::implementation::utf8_length_from_utf16(char16_t const*, unsigned long) const+708>
   0x0000000000036d6c <+332>:   lea    0x32c1(%rip),%rdi        # 0x3a034 <simdutf::icelake::implementation::utf8_length_from_utf16(char16_t const*, unsigned long) const+740>
   0x0000000000036d73 <+339>:   call   0x7ad0 <simdutf::benchmarks::BenchmarkBase::prepare_input(simdutf::benchmarks::input::Testcase const&)+16>
   0x0000000000036d78 <+344>:   lea    0x3921(%rip),%rcx        # 0x3a6a0 <simdutf::icelake::implementation::utf16_length_from_utf32(char32_t const*, unsigned long) const+16>
   0x0000000000036d7f <+351>:   mov    $0xa3,%edx
   0x0000000000036d84 <+356>:   lea    0x3289(%rip),%rsi        # 0x3a014 <simdutf::icelake::implementation::utf8_length_from_utf16(char16_t const*, unsigned long) const+708>
   0x0000000000036d8b <+363>:   lea    0x32b9(%rip),%rdi        # 0x3a04b
   0x0000000000036d92 <+370>:   call   0x7ad0 <simdutf::benchmarks::BenchmarkBase::prepare_input(simdutf::benchmarks::input::Testcase const&)+16>
   0x0000000000036d97 <+375>:   call   0x7a30 <simdutf::benchmarks::BenchmarkBase::run(simdutf::benchmarks::input::Testcase const&)+1136>
   0x0000000000036d9c <+380>:   lea    0x38fd(%rip),%rcx        # 0x3a6a0 <simdutf::icelake::implementation::utf16_length_from_utf32(char32_t const*, unsigned long) const+16>
   0x0000000000036da3 <+387>:   mov    $0x87,%edx
   0x0000000000036da8 <+392>:   lea    0x3265(%rip),%rsi        # 0x3a014 <simdutf::icelake::implementation::utf8_length_from_utf16(char16_t const*, unsigned long) const+708>
   0x0000000000036daf <+399>:   lea    0x3267(%rip),%rdi        # 0x3a01d <simdutf::icelake::implementation::utf8_length_from_utf16(char16_t const*, unsigned long) const+717>
   0x0000000000036db6 <+406>:   call   0x7ad0 <simdutf::benchmarks::BenchmarkBase::prepare_input(simdutf::benchmarks::input::Testcase const&)+16>
   0x0000000000036dbb <+411>:   nopl   0x0(%rax,%rax,1)
   0x0000000000036dc0 <+416>:   push   %r15
   0x0000000000036dc2 <+418>:   mov    %rsi,%r15
   0x0000000000036dc5 <+421>:   push   %r14
   0x0000000000036dc7 <+423>:   push   %r13
   0x0000000000036dc9 <+425>:   push   %r12
   0x0000000000036dcb <+427>:   push   %rbp
   0x0000000000036dcc <+428>:   mov    %rsi,%rbp
   0x0000000000036dcf <+431>:   push   %rbx
   0x0000000000036dd0 <+432>:   mov    %rdi,%rbx
   0x0000000000036dd3 <+435>:   sub    $0x58,%rsp
   0x0000000000036dd7 <+439>:   mov    %fs:0x28,%rax
   0x0000000000036de0 <+448>:   mov    %rax,0x48(%rsp)
   0x0000000000036de5 <+453>:   mov    0x28(%rdi),%rax
   0x0000000000036de9 <+457>:   sub    %rax,%rbp
   0x0000000000036dec <+460>:   cmp    %rsi,%rax
   0x0000000000036def <+463>:   jle    0x36e48 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+552>
   0x0000000000036df1 <+465>:   cmpl   $0x1,0x90(%rdi)
   0x0000000000036df8 <+472>:   jle    0x36e02 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+482>
   0x0000000000036dfa <+474>:   movq   $0x0,0x20(%rdi)
   0x0000000000036e02 <+482>:   mov    0x50(%rbx),%rax
   0x0000000000036e06 <+486>:   cmpb   $0x0,0x8b(%rbx)
   0x0000000000036e0d <+493>:   movq   $0x0,0x30(%rbx)
   0x0000000000036e15 <+501>:   mov    %r15,%rbp
   0x0000000000036e18 <+504>:   movq   $0x0,0x28(%rbx)
   0x0000000000036e20 <+512>:   mov    %rax,0x58(%rbx)
   0x0000000000036e24 <+516>:   mov    0x60(%rbx),%rax
   0x0000000000036e28 <+520>:   movq   $0x0,0x38(%rbx)
   0x0000000000036e30 <+528>:   mov    %rax,0x68(%rbx)
   0x0000000000036e34 <+532>:   movb   $0x0,0x8c(%rbx)
   0x0000000000036e3b <+539>:   movl   $0x4,0x70(%rbx)
   0x0000000000036e42 <+546>:   je     0x36f10 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+752>
   0x0000000000036e48 <+552>:   test   %rbp,%rbp
   0x0000000000036e4b <+555>:   je     0x36eac <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+652>
   0x0000000000036e4d <+557>:   mov    0x38(%rbx),%rax
   0x0000000000036e51 <+561>:   movzbl 0x8c(%rbx),%edx
   0x0000000000036e58 <+568>:   cmp    %rax,%rbp
   0x0000000000036e5b <+571>:   jge    0x36f70 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+848>
   0x0000000000036e61 <+577>:   test   %dl,%dl
   0x0000000000036e63 <+579>:   jne    0x37078 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1112>
   0x0000000000036e69 <+585>:   lea    -0x1(%rbp),%rsi
   0x0000000000036e6d <+589>:   mov    $0x1,%edx
   0x0000000000036e72 <+594>:   mov    %rbx,%rdi
   0x0000000000036e75 <+597>:   call   0x2df70 <(anonymous namespace)::ProcessorSelector<0, 1>::WithOptions<1, 3, 1>::Create(int*)+48>
   0x0000000000036e7a <+602>:   cmpl   $0x1,0x90(%rbx)
   0x0000000000036e81 <+609>:   mov    %eax,0x70(%rbx)
   0x0000000000036e84 <+612>:   jg     0x36f20 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+768>
   0x0000000000036e8a <+618>:   cmpb   $0x0,0x8b(%rbx)
   0x0000000000036e91 <+625>:   jne    0x370c8 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1192>
   0x0000000000036e97 <+631>:   sub    %rbp,0x30(%rbx)
   0x0000000000036e9b <+635>:   sub    %rbp,0x38(%rbx)
   0x0000000000036e9f <+639>:   cmpb   $0x0,0x8b(%rbx)
   0x0000000000036ea6 <+646>:   jne    0x36eac <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+652>
   0x0000000000036ea8 <+648>:   add    %rbp,0x8(%rbx)
   0x0000000000036eac <+652>:   mov    0x58(%rbx),%rax
   0x0000000000036eb0 <+656>:   sub    %rbp,0x68(%rbx)
   0x0000000000036eb4 <+660>:   mov    %r15,0x28(%rbx)
   0x0000000000036eb8 <+664>:   sub    %rbp,%rax
   0x0000000000036ebb <+667>:   cmpl   $0x1,0x90(%rbx)
   0x0000000000036ec2 <+674>:   mov    %rax,0x58(%rbx)
   0x0000000000036ec6 <+678>:   jle    0x36f50 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+816>
   0x0000000000036ecc <+684>:   cmpb   $0x0,0x88(%rbx)
   0x0000000000036ed3 <+691>:   mov    %rbx,%rdi
   0x0000000000036ed6 <+694>:   je     0x36f40 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+800>
   0x0000000000036ed8 <+696>:   call   0x2d850 <(anonymous namespace)::DecoderLutTable<true>::ComputeRec(int*, int, int)+1744>
   0x0000000000036edd <+701>:   test   %eax,%eax
   0x0000000000036edf <+703>:   jne    0x36eeb <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+715>
   0x0000000000036ee1 <+705>:   movq   $0x0,0x48(%rbx)
   0x0000000000036ee9 <+713>:   xor    %eax,%eax
   0x0000000000036eeb <+715>:   mov    0x48(%rsp),%rdx
   0x0000000000036ef0 <+720>:   sub    %fs:0x28,%rdx
   0x0000000000036ef9 <+729>:   jne    0x375c1 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2465>
   0x0000000000036eff <+735>:   add    $0x58,%rsp
   0x0000000000036f03 <+739>:   pop    %rbx
   0x0000000000036f04 <+740>:   pop    %rbp
   0x0000000000036f05 <+741>:   pop    %r12
   0x0000000000036f07 <+743>:   pop    %r13
   0x0000000000036f09 <+745>:   pop    %r14
   0x0000000000036f0b <+747>:   pop    %r15
   0x0000000000036f0d <+749>:   ret
   0x0000000000036f0e <+750>:   xchg   %ax,%ax
   0x0000000000036f10 <+752>:   mov    (%rbx),%rax
   0x0000000000036f13 <+755>:   mov    %rax,0x8(%rbx)
   0x0000000000036f17 <+759>:   jmp    0x36e48 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+552>
   0x0000000000036f1c <+764>:   nopl   0x0(%rax)
   0x0000000000036f20 <+768>:   mov    0x30(%rbx),%rdx
   0x0000000000036f24 <+772>:   mov    0x10(%rbx),%rdi
   0x0000000000036f28 <+776>:   sub    %rbp,%rdx
   0x0000000000036f2b <+779>:   lea    (%rdi,%rbp,4),%rsi
   0x0000000000036f2f <+783>:   shl    $0x2,%rdx
   0x0000000000036f33 <+787>:   call   0x7de0 <simdutf::benchmarks::BenchmarkBase::load_file(std::filesystem::__cxx11::path const&)+192>
   0x0000000000036f38 <+792>:   jmp    0x36e8a <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+618>
   0x0000000000036f3d <+797>:   nopl   (%rax)
   0x0000000000036f40 <+800>:   call   0x2d650 <(anonymous namespace)::DecoderLutTable<true>::ComputeRec(int*, int, int)+1232>
   0x0000000000036f45 <+805>:   jmp    0x36ee1 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+705>
   0x0000000000036f47 <+807>:   nopw   0x0(%rax,%rax,1)
   0x0000000000036f50 <+816>:   cmpb   $0x0,0x8b(%rbx)
   0x0000000000036f57 <+823>:   jne    0x37330 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1808>
   0x0000000000036f5d <+829>:   mov    %rax,0x30(%rbx)
   0x0000000000036f61 <+833>:   jmp    0x36ee1 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+705>
   0x0000000000036f66 <+838>:   cs nopw 0x0(%rax,%rax,1)
   0x0000000000036f70 <+848>:   mov    0x30(%rbx),%rcx
   0x0000000000036f74 <+852>:   mov    %rcx,0x8(%rsp)
   0x0000000000036f79 <+857>:   test   %dl,%dl
   0x0000000000036f7b <+859>:   jne    0x374e0 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2240>
   0x0000000000036f81 <+865>:   movslq 0x90(%rbx),%rdx
   0x0000000000036f88 <+872>:   mov    0x28(%rbx),%rsi
   0x0000000000036f8c <+876>:   movq   $0x0,0x30(%rbx)
   0x0000000000036f94 <+884>:   cmp    $0x1,%edx
   0x0000000000036f97 <+887>:   jle    0x373a0 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1920>
   0x0000000000036f9d <+893>:   cmpb   $0x0,0x89(%rbx)
   0x0000000000036fa4 <+900>:   jne    0x37240 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1568>
   0x0000000000036faa <+906>:   lea    (%rax,%rsi,1),%r12
   0x0000000000036fae <+910>:   cmp    %r12,%r15
   0x0000000000036fb1 <+913>:   jle    0x374b7 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2199>
   0x0000000000036fb7 <+919>:   lea    0x20(%rbx),%rax
   0x0000000000036fbb <+923>:   mov    %rax,0x10(%rsp)
   0x0000000000036fc0 <+928>:   lea    0x34(%rsp),%rax
   0x0000000000036fc5 <+933>:   mov    %rax,0x18(%rsp)
   0x0000000000036fca <+938>:   jmp    0x3702c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1036>
   0x0000000000036fcc <+940>:   nopl   0x0(%rax)
   0x0000000000036fd0 <+944>:   test   %r14,%r14
   0x0000000000036fd3 <+947>:   je     0x37064 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1092>
   0x0000000000036fd9 <+953>:   mov    %rax,0x28(%rsp)
   0x0000000000036fde <+958>:   call   0x36690 <simdutf::fallback::implementation::utf32_length_from_utf8(char const*, unsigned long) const+192>
   0x0000000000036fe3 <+963>:   mov    0x28(%rsp),%rdx
   0x0000000000036fe8 <+968>:   test   %al,%al
   0x0000000000036fea <+970>:   je     0x3743d <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2077>
   0x0000000000036ff0 <+976>:   test   %rdx,%rdx
   0x0000000000036ff3 <+979>:   je     0x374d9 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2233>
   0x0000000000036ff9 <+985>:   test   %r14,%r14
   0x0000000000036ffc <+988>:   je     0x374d9 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2233>
   0x0000000000037002 <+994>:   mov    (%rbx),%rax
   0x0000000000037005 <+997>:   movzbl (%rax,%r12,1),%ecx
   0x000000000003700a <+1002>:  mov    0x20(%rsp),%rax
   0x000000000003700f <+1007>:  mov    $0x1,%edx
   0x0000000000037014 <+1012>:  mov    %rax,0x20(%rbx)
   0x0000000000037018 <+1016>:  nopl   0x0(%rax,%rax,1)
   0x0000000000037020 <+1024>:  add    %rdx,%r12
   0x0000000000037023 <+1027>:  cmp    %r12,%r15
   0x0000000000037026 <+1030>:  jle    0x3744c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2092>
   0x000000000003702c <+1036>:  mov    0x50(%rbx),%r14
   0x0000000000037030 <+1040>:  mov    (%rbx),%r13
   0x0000000000037033 <+1043>:  mov    0x20(%rbx),%rax
   0x0000000000037037 <+1047>:  mov    0x10(%rsp),%rcx
   0x000000000003703c <+1052>:  mov    0x18(%rsp),%rdi
   0x0000000000037041 <+1057>:  sub    %r12,%r14
   0x0000000000037044 <+1060>:  add    %r12,%r13
   0x0000000000037047 <+1063>:  mov    %r14,%rdx
   0x000000000003704a <+1066>:  mov    %r13,%rsi
   0x000000000003704d <+1069>:  mov    %rax,0x20(%rsp)
   0x0000000000037052 <+1074>:  call   0x7a70 <simdutf::benchmarks::BenchmarkBase::run(simdutf::benchmarks::input::Testcase const&)+1200>
   0x0000000000037057 <+1079>:  mov    %rax,%rdx
   0x000000000003705a <+1082>:  cmp    $0xfffffffffffffffd,%rax
   0x000000000003705e <+1086>:  ja     0x36fd0 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+944>
   0x0000000000037064 <+1092>:  lea    -0x1(%rdx),%rax
   0x0000000000037068 <+1096>:  cmp    $0xfffffffffffffffc,%rax
   0x000000000003706c <+1100>:  ja     0x36ff0 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+976>
   0x000000000003706e <+1102>:  mov    0x34(%rsp),%ecx
   0x0000000000037072 <+1106>:  jmp    0x37020 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1024>
   0x0000000000037074 <+1108>:  nopl   0x0(%rax)
   0x0000000000037078 <+1112>:  mov    0x30(%rbx),%r14
   0x000000000003707c <+1116>:  mov    0x18(%rbx),%r13
   0x0000000000037080 <+1120>:  xor    %esi,%esi
   0x0000000000037082 <+1122>:  mov    %r14,%rcx
   0x0000000000037085 <+1125>:  jmp    0x3709f <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1151>
   0x0000000000037087 <+1127>:  nopw   0x0(%rax,%rax,1)
   0x0000000000037090 <+1136>:  jle    0x37400 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2016>
   0x0000000000037096 <+1142>:  lea    0x1(%rax),%rsi
   0x000000000003709a <+1146>:  cmp    %rcx,%rsi
   0x000000000003709d <+1149>:  jge    0x370e8 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1224>
   0x000000000003709f <+1151>:  lea    (%rsi,%rcx,1),%rdx
   0x00000000000370a3 <+1155>:  mov    %rdx,%rax
   0x00000000000370a6 <+1158>:  shr    $0x3f,%rax
   0x00000000000370aa <+1162>:  add    %rdx,%rax
   0x00000000000370ad <+1165>:  sar    %rax
   0x00000000000370b0 <+1168>:  mov    0x0(%r13,%rax,8),%rdx
   0x00000000000370b5 <+1173>:  mov    %rax,%r9
   0x00000000000370b8 <+1176>:  cmp    %rdx,%rbp
   0x00000000000370bb <+1179>:  jge    0x37090 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1136>
   0x00000000000370bd <+1181>:  mov    %rax,%rcx
   0x00000000000370c0 <+1184>:  jmp    0x3709a <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1146>
   0x00000000000370c2 <+1186>:  nopw   0x0(%rax,%rax,1)
   0x00000000000370c8 <+1192>:  mov    0x8(%rbx),%rdi
   0x00000000000370cc <+1196>:  mov    0x30(%rbx),%rdx
   0x00000000000370d0 <+1200>:  lea    (%rdi,%rbp,1),%rsi
   0x00000000000370d4 <+1204>:  sub    %rbp,%rdx
   0x00000000000370d7 <+1207>:  call   0x7de0 <simdutf::benchmarks::BenchmarkBase::load_file(std::filesystem::__cxx11::path const&)+192>
   0x00000000000370dc <+1212>:  jmp    0x36e97 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+631>
   0x00000000000370e1 <+1217>:  nopl   0x0(%rax)
   0x00000000000370e8 <+1224>:  lea    0x1(%rax),%r12
   0x00000000000370ec <+1228>:  cmp    %rdx,%rbp
   0x00000000000370ef <+1231>:  jle    0x37320 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1792>
   0x00000000000370f5 <+1237>:  mov    $0x1,%edx
   0x00000000000370fa <+1242>:  mov    %r9,%rsi
   0x00000000000370fd <+1245>:  mov    %rbx,%rdi
   0x0000000000037100 <+1248>:  call   0x2df70 <(anonymous namespace)::ProcessorSelector<0, 1>::WithOptions<1, 3, 1>::Create(int*)+48>
   0x0000000000037105 <+1253>:  mov    %eax,0x70(%rbx)
   0x0000000000037108 <+1256>:  cmp    %r12,%rbp
   0x000000000003710b <+1259>:  jne    0x37190 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1392>
   0x0000000000037111 <+1265>:  cmp    %r14,%rbp
   0x0000000000037114 <+1268>:  jge    0x37190 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1392>
   0x0000000000037116 <+1270>:  cmp    0x0(%r13,%r12,8),%rbp
   0x000000000003711b <+1275>:  jne    0x37190 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1392>
   0x000000000003711d <+1277>:  mov    0x10(%rbx),%rdi
   0x0000000000037121 <+1281>:  sub    %rbp,%r14
   0x0000000000037124 <+1284>:  lea    0x0(,%r14,4),%rdx
   0x000000000003712c <+1292>:  lea    (%rdi,%rbp,4),%rsi
   0x0000000000037130 <+1296>:  call   0x7de0 <simdutf::benchmarks::BenchmarkBase::load_file(std::filesystem::__cxx11::path const&)+192>
   0x0000000000037135 <+1301>:  mov    0x8(%rbx),%rdi
   0x0000000000037139 <+1305>:  mov    0x30(%rbx),%rdx
   0x000000000003713d <+1309>:  lea    (%rdi,%rbp,1),%rsi
   0x0000000000037141 <+1313>:  sub    %rbp,%rdx
   0x0000000000037144 <+1316>:  call   0x7de0 <simdutf::benchmarks::BenchmarkBase::load_file(std::filesystem::__cxx11::path const&)+192>
   0x0000000000037149 <+1321>:  mov    0x30(%rbx),%rax
   0x000000000003714d <+1325>:  sub    %rbp,0x38(%rbx)
   0x0000000000037151 <+1329>:  sub    %rbp,%rax
   0x0000000000037154 <+1332>:  mov    %rax,0x30(%rbx)
   0x0000000000037158 <+1336>:  test   %rax,%rax
   0x000000000003715b <+1339>:  jle    0x36e9f <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+639>
   0x0000000000037161 <+1345>:  mov    0x18(%rbx),%rcx
   0x0000000000037165 <+1349>:  xor    %eax,%eax
   0x0000000000037167 <+1351>:  lea    (%rcx,%rbp,8),%rsi
   0x000000000003716b <+1355>:  nopl   0x0(%rax,%rax,1)
   0x0000000000037170 <+1360>:  mov    (%rsi,%rax,8),%rdx
   0x0000000000037174 <+1364>:  sub    %rbp,%rdx
   0x0000000000037177 <+1367>:  mov    %rdx,(%rcx,%rax,8)
   0x000000000003717b <+1371>:  add    $0x1,%rax
   0x000000000003717f <+1375>:  cmp    0x30(%rbx),%rax
   0x0000000000037183 <+1379>:  jl     0x37170 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1360>
   0x0000000000037185 <+1381>:  jmp    0x36e9f <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+639>
   0x000000000003718a <+1386>:  nopw   0x0(%rax,%rax,1)
   0x0000000000037190 <+1392>:  mov    0x50(%rbx),%rax
   0x0000000000037194 <+1396>:  movb   $0x0,0x8c(%rbx)
   0x000000000003719b <+1403>:  add    %rbp,%rax
   0x000000000003719e <+1406>:  sub    %r15,%rax
   0x00000000000371a1 <+1409>:  mov    %rax,0x58(%rbx)
   0x00000000000371a5 <+1413>:  mov    0x60(%rbx),%rax
   0x00000000000371a9 <+1417>:  add    %rbp,%rax
   0x00000000000371ac <+1420>:  sub    %r15,%rax
   0x00000000000371af <+1423>:  mov    %rax,0x68(%rbx)
   0x00000000000371b3 <+1427>:  test   %r12,%r12
   0x00000000000371b6 <+1430>:  jg     0x371c6 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1446>
   0x00000000000371b8 <+1432>:  jmp    0x371cd <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1453>
   0x00000000000371ba <+1434>:  nopw   0x0(%rax,%rax,1)
   0x00000000000371c0 <+1440>:  sub    $0x1,%r12
   0x00000000000371c4 <+1444>:  je     0x371cd <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1453>
   0x00000000000371c6 <+1446>:  cmp    -0x8(%r13,%r12,8),%rbp
   0x00000000000371cb <+1451>:  je     0x371c0 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1440>
   0x00000000000371cd <+1453>:  cmp    %r12,%r14
   0x00000000000371d0 <+1456>:  jle    0x3740c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2028>
   0x00000000000371d6 <+1462>:  mov    0x10(%rbx),%rax
   0x00000000000371da <+1466>:  jmp    0x371ed <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1485>
   0x00000000000371dc <+1468>:  nopl   0x0(%rax)
   0x00000000000371e0 <+1472>:  add    $0x1,%r12
   0x00000000000371e4 <+1476>:  cmp    %r12,%r14
   0x00000000000371e7 <+1479>:  je     0x37418 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2040>
   0x00000000000371ed <+1485>:  cmpl   $0xffffffff,(%rax,%r12,4)
   0x00000000000371f2 <+1490>:  je     0x371e0 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1472>
   0x00000000000371f4 <+1492>:  mov    0x0(%r13,%r12,8),%r12
   0x00000000000371f9 <+1497>:  sub    %rbp,%r12
   0x00000000000371fc <+1500>:  mov    %r12,0x30(%rbx)
   0x0000000000037200 <+1504>:  test   %r12,%r12
   0x0000000000037203 <+1507>:  je     0x37232 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1554>
   0x0000000000037205 <+1509>:  jle    0x3721d <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1533>
   0x0000000000037207 <+1511>:  mov    0x10(%rbx),%rdi
   0x000000000003720b <+1515>:  lea    0x0(,%r12,4),%rdx
   0x0000000000037213 <+1523>:  mov    $0xff,%esi
   0x0000000000037218 <+1528>:  call   0x7ae0 <simdutf::benchmarks::BenchmarkBase::prepare_input(simdutf::benchmarks::input::Testcase const&)+32>
   0x000000000003721d <+1533>:  mov    0x8(%rbx),%rdi
   0x0000000000037221 <+1537>:  mov    %r12,%rdx
   0x0000000000037224 <+1540>:  mov    $0xff,%esi
   0x0000000000037229 <+1545>:  call   0x7ae0 <simdutf::benchmarks::BenchmarkBase::prepare_input(simdutf::benchmarks::input::Testcase const&)+32>
   0x000000000003722e <+1550>:  mov    0x30(%rbx),%r12
   0x0000000000037232 <+1554>:  mov    %r12,0x38(%rbx)
   0x0000000000037236 <+1558>:  jmp    0x36e9f <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+639>
   0x000000000003723b <+1563>:  nopl   0x0(%rax,%rax,1)
   0x0000000000037240 <+1568>:  mov    (%rbx),%rcx
   0x0000000000037243 <+1571>:  mov    %rbp,%rdi
   0x0000000000037246 <+1574>:  sub    %rdx,%rdi
   0x0000000000037249 <+1577>:  lea    (%rcx,%rsi,1),%r8
   0x000000000003724d <+1581>:  lea    (%r8,%rdi,1),%rdx
   0x0000000000037251 <+1585>:  lea    -0x1(%r8,%rbp,1),%r14
   0x0000000000037256 <+1590>:  cmp    %rdx,%rcx
   0x0000000000037259 <+1593>:  cmovb  %rdx,%rcx
   0x000000000003725d <+1597>:  cmp    %r14,%rcx
   0x0000000000037260 <+1600>:  jbe    0x3727d <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1629>
   0x0000000000037262 <+1602>:  jmp    0x36faa <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+906>
   0x0000000000037267 <+1607>:  nopw   0x0(%rax,%rax,1)
   0x0000000000037270 <+1616>:  sub    $0x1,%r14
   0x0000000000037274 <+1620>:  cmp    %r14,%rcx
   0x0000000000037277 <+1623>:  ja     0x36faa <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+906>
   0x000000000003727d <+1629>:  movzbl (%r14),%edx
   0x0000000000037281 <+1633>:  and    $0xffffffc0,%edx
   0x0000000000037284 <+1636>:  cmp    $0x80,%dl
   0x0000000000037287 <+1639>:  je     0x37270 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1616>
   0x0000000000037289 <+1641>:  mov    0x58(%rbx),%rdx
   0x000000000003728d <+1645>:  mov    0x78(%rbx),%rcx
   0x0000000000037291 <+1649>:  mov    %r14,%r12
   0x0000000000037294 <+1652>:  add    %r8,%rdx
   0x0000000000037297 <+1655>:  sub    %r14,%rdx
   0x000000000003729a <+1658>:  test   %rcx,%rcx
   0x000000000003729d <+1661>:  jne    0x37589 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2409>
   0x00000000000372a3 <+1667>:  lea    0x38(%rsp),%rcx
   0x00000000000372a8 <+1672>:  lea    0x34(%rsp),%rdi
   0x00000000000372ad <+1677>:  mov    %r12,%rsi
   0x00000000000372b0 <+1680>:  mov    %r8,0x10(%rsp)
   0x00000000000372b5 <+1685>:  movq   $0x0,0x38(%rsp)
   0x00000000000372be <+1694>:  mov    %rdx,0x18(%rsp)
   0x00000000000372c3 <+1699>:  call   0x7a70 <simdutf::benchmarks::BenchmarkBase::run(simdutf::benchmarks::input::Testcase const&)+1200>
   0x00000000000372c8 <+1704>:  mov    0x10(%rsp),%r8
   0x00000000000372cd <+1709>:  mov    %rax,%r13
   0x00000000000372d0 <+1712>:  lea    (%r8,%rbp,1),%rax
   0x00000000000372d4 <+1716>:  sub    %r14,%rax
   0x00000000000372d7 <+1719>:  mov    %rax,%rcx
   0x00000000000372da <+1722>:  cmp    $0xfffffffffffffffd,%r13
   0x00000000000372de <+1726>:  jbe    0x37508 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2280>
   0x00000000000372e4 <+1732>:  mov    0x18(%rsp),%rdx
   0x00000000000372e9 <+1737>:  test   %rdx,%rdx
   0x00000000000372ec <+1740>:  je     0x37508 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2280>
   0x00000000000372f2 <+1746>:  mov    %rax,0x10(%rsp)
   0x00000000000372f7 <+1751>:  call   0x36690 <simdutf::fallback::implementation::utf32_length_from_utf8(char const*, unsigned long) const+192>
   0x00000000000372fc <+1756>:  mov    0x10(%rsp),%rcx
   0x0000000000037301 <+1761>:  test   %al,%al
   0x0000000000037303 <+1763>:  je     0x3756e <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2382>
   0x0000000000037309 <+1769>:  mov    0x28(%rbx),%rsi
   0x000000000003730d <+1773>:  mov    0x38(%rbx),%rax
   0x0000000000037311 <+1777>:  jmp    0x36faa <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+906>
   0x0000000000037316 <+1782>:  cs nopw 0x0(%rax,%rax,1)
   0x0000000000037320 <+1792>:  mov    %rax,%r12
   0x0000000000037323 <+1795>:  lea    -0x1(%rax),%r9
   0x0000000000037327 <+1799>:  jmp    0x370f5 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1237>
   0x000000000003732c <+1804>:  nopl   0x0(%rax)
   0x0000000000037330 <+1808>:  cmpb   $0x0,0x88(%rbx)
   0x0000000000037337 <+1815>:  jne    0x37430 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2064>
   0x000000000003733d <+1821>:  mov    0x78(%rbx),%rcx
   0x0000000000037341 <+1825>:  test   %rcx,%rcx
   0x0000000000037344 <+1828>:  je     0x36ee1 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+705>
   0x000000000003734a <+1834>:  mov    0x40(%rbx),%rdx
   0x000000000003734e <+1838>:  cmp    %rdx,%rax
   0x0000000000037351 <+1841>:  cmovg  %rdx,%rax
   0x0000000000037355 <+1845>:  mov    0x30(%rbx),%rdx
   0x0000000000037359 <+1849>:  cmp    %rdx,%rax
   0x000000000003735c <+1852>:  jg     0x37370 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1872>
   0x000000000003735e <+1854>:  jmp    0x37566 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2374>
   0x0000000000037363 <+1859>:  nopl   0x0(%rax,%rax,1)
   0x0000000000037368 <+1864>:  mov    0x28(%rbx),%r15
   0x000000000003736c <+1868>:  mov    0x78(%rbx),%rcx
   0x0000000000037370 <+1872>:  mov    (%rbx),%rsi
   0x0000000000037373 <+1875>:  add    %rdx,%rsi
   0x0000000000037376 <+1878>:  movzbl (%rsi,%r15,1),%esi
   0x000000000003737b <+1883>:  movzbl (%rcx,%rsi,1),%esi
   0x000000000003737f <+1887>:  mov    0x8(%rbx),%rcx
   0x0000000000037383 <+1891>:  mov    %sil,(%rcx,%rdx,1)
   0x0000000000037387 <+1895>:  add    $0x1,%rdx
   0x000000000003738b <+1899>:  cmp    %rdx,%rax
   0x000000000003738e <+1902>:  jne    0x37368 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1864>
   0x0000000000037390 <+1904>:  mov    %rax,0x30(%rbx)
   0x0000000000037394 <+1908>:  mov    %rax,0x38(%rbx)
   0x0000000000037398 <+1912>:  jmp    0x36ee1 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+705>
   0x000000000003739d <+1917>:  nopl   (%rax)
   0x00000000000373a0 <+1920>:  mov    (%rbx),%rax
   0x00000000000373a3 <+1923>:  add    %rbp,%rax
   0x00000000000373a6 <+1926>:  movzbl -0x1(%rsi,%rax,1),%ecx
   0x00000000000373ab <+1931>:  mov    0x78(%rbx),%rax
   0x00000000000373af <+1935>:  movq   $0x0,0x38(%rbx)
   0x00000000000373b7 <+1943>:  test   %rax,%rax
   0x00000000000373ba <+1946>:  je     0x373c0 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1952>
   0x00000000000373bc <+1948>:  movzbl (%rax,%rcx,1),%ecx
   0x00000000000373c0 <+1952>:  mov    0x80(%rbx),%rdx
   0x00000000000373c7 <+1959>:  movzbl %cl,%eax
   0x00000000000373ca <+1962>:  sar    $0x6,%rax
   0x00000000000373ce <+1966>:  mov    (%rdx,%rax,8),%rax
   0x00000000000373d2 <+1970>:  mov    $0x1,%edx
   0x00000000000373d7 <+1975>:  shr    %cl,%rax
   0x00000000000373da <+1978>:  test   $0x1,%al
   0x00000000000373dc <+1980>:  jne    0x373f8 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2008>
   0x00000000000373de <+1982>:  xor    %edx,%edx
   0x00000000000373e0 <+1984>:  cmp    $0xa,%cl
   0x00000000000373e3 <+1987>:  jne    0x373f8 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2008>
   0x00000000000373e5 <+1989>:  xor    %edx,%edx
   0x00000000000373e7 <+1991>:  cmpb   $0x0,0x8d(%rbx)
   0x00000000000373ee <+1998>:  setne  %dl
   0x00000000000373f1 <+2001>:  add    %edx,%edx
   0x00000000000373f3 <+2003>:  nopl   0x0(%rax,%rax,1)
   0x00000000000373f8 <+2008>:  mov    %edx,0x70(%rbx)
   0x00000000000373fb <+2011>:  jmp    0x36e9f <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+639>
   0x0000000000037400 <+2016>:  mov    %rax,%r12
   0x0000000000037403 <+2019>:  sub    $0x1,%r9
   0x0000000000037407 <+2023>:  jmp    0x370f5 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1237>
   0x000000000003740c <+2028>:  jne    0x371f4 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1492>
   0x0000000000037412 <+2034>:  nopw   0x0(%rax,%rax,1)
   0x0000000000037418 <+2040>:  movq   $0x0,0x30(%rbx)
   0x0000000000037420 <+2048>:  xor    %r12d,%r12d
   0x0000000000037423 <+2051>:  jmp    0x37232 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1554>
   0x0000000000037428 <+2056>:  nopl   0x0(%rax,%rax,1)
   0x0000000000037430 <+2064>:  mov    %rbx,%rdi
   0x0000000000037433 <+2067>:  call   0x2dee0 <(anonymous namespace)::BufferDecoder<3, 4, 2, 1>::_Process()+736>
   0x0000000000037438 <+2072>:  jmp    0x36ee1 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+705>
   0x000000000003743d <+2077>:  movzbl 0x0(%r13),%ecx
   0x0000000000037442 <+2082>:  mov    $0x1,%edx
   0x0000000000037447 <+2087>:  jmp    0x37020 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1024>
   0x000000000003744c <+2092>:  mov    %r12,%rax
   0x000000000003744f <+2095>:  sub    %r15,%rax
   0x0000000000037452 <+2098>:  mov    %rax,0x30(%rbx)
   0x0000000000037456 <+2102>:  cmp    $0xffffffff,%ecx
   0x0000000000037459 <+2105>:  je     0x374c1 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2209>
   0x000000000003745b <+2107>:  cmpb   $0x0,0x8e(%rbx)
   0x0000000000037462 <+2114>:  jne    0x37540 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2336>
   0x0000000000037468 <+2120>:  xor    %eax,%eax
   0x000000000003746a <+2122>:  cmp    $0xa,%ecx
   0x000000000003746d <+2125>:  jne    0x3747d <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2141>
   0x000000000003746f <+2127>:  xor    %eax,%eax
   0x0000000000037471 <+2129>:  cmpb   $0x0,0x8d(%rbx)
   0x0000000000037478 <+2136>:  setne  %al
   0x000000000003747b <+2139>:  add    %eax,%eax
   0x000000000003747d <+2141>:  mov    0x30(%rbx),%r12
   0x0000000000037481 <+2145>:  mov    %eax,0x70(%rbx)
   0x0000000000037484 <+2148>:  test   %r12,%r12
   0x0000000000037487 <+2151>:  je     0x37232 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1554>
   0x000000000003748d <+2157>:  jle    0x374a5 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2181>
   0x000000000003748f <+2159>:  mov    0x10(%rbx),%rdi
   0x0000000000037493 <+2163>:  lea    0x0(,%r12,4),%rdx
   0x000000000003749b <+2171>:  mov    $0xff,%esi
   0x00000000000374a0 <+2176>:  call   0x7ae0 <simdutf::benchmarks::BenchmarkBase::prepare_input(simdutf::benchmarks::input::Testcase const&)+32>
   0x00000000000374a5 <+2181>:  cmpb   $0x0,0x8b(%rbx)
   0x00000000000374ac <+2188>:  je     0x37232 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1554>
   0x00000000000374b2 <+2194>:  jmp    0x3721d <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1533>
   0x00000000000374b7 <+2199>:  mov    %r12,%rax
   0x00000000000374ba <+2202>:  sub    %r15,%rax
   0x00000000000374bd <+2205>:  mov    %rax,0x30(%rbx)
   0x00000000000374c1 <+2209>:  mov    0x8(%rsp),%rsi
   0x00000000000374c6 <+2214>:  mov    $0x1,%edx
   0x00000000000374cb <+2219>:  mov    %rbx,%rdi
   0x00000000000374ce <+2222>:  sub    $0x1,%rsi
   0x00000000000374d2 <+2226>:  call   0x2df70 <(anonymous namespace)::ProcessorSelector<0, 1>::WithOptions<1, 3, 1>::Create(int*)+48>
   0x00000000000374d7 <+2231>:  jmp    0x3747d <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2141>
   0x00000000000374d9 <+2233>:  xor    %ecx,%ecx
   0x00000000000374db <+2235>:  jmp    0x3700a <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1002>
   0x00000000000374e0 <+2240>:  mov    0x50(%rbx),%rdx
   0x00000000000374e4 <+2244>:  movb   $0x0,0x8c(%rbx)
   0x00000000000374eb <+2251>:  add    %rbp,%rdx
   0x00000000000374ee <+2254>:  sub    %r15,%rdx
   0x00000000000374f1 <+2257>:  mov    %rdx,0x58(%rbx)
   0x00000000000374f5 <+2261>:  mov    0x60(%rbx),%rdx
   0x00000000000374f9 <+2265>:  add    %rbp,%rdx
   0x00000000000374fc <+2268>:  sub    %r15,%rdx
   0x00000000000374ff <+2271>:  mov    %rdx,0x68(%rbx)
   0x0000000000037503 <+2275>:  jmp    0x36f81 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+865>
   0x0000000000037508 <+2280>:  cmp    %rcx,%r13
   0x000000000003750b <+2283>:  jb     0x37309 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1769>
   0x0000000000037511 <+2289>:  cmp    $0xfffffffffffffffd,%r13
   0x0000000000037515 <+2293>:  ja     0x37309 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1769>
   0x000000000003751b <+2299>:  sub    %rcx,%r13
   0x000000000003751e <+2302>:  mov    0x34(%rsp),%ecx
   0x0000000000037522 <+2306>:  movq   $0x0,0x20(%rbx)
   0x000000000003752a <+2314>:  mov    %r13,0x30(%rbx)
   0x000000000003752e <+2318>:  cmp    $0xffffffff,%ecx
   0x0000000000037531 <+2321>:  jne    0x3745b <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2107>
   0x0000000000037537 <+2327>:  jmp    0x37309 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1769>
   0x000000000003753c <+2332>:  nopl   0x0(%rax)
   0x0000000000037540 <+2336>:  mov    %ecx,%edi
   0x0000000000037542 <+2338>:  mov    %ecx,0x8(%rsp)
   0x0000000000037546 <+2342>:  call   0x7cb0 <simdutf::benchmarks::BenchmarkBase::run(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, simdutf::benchmarks::input::Testcase const&)+160>
   0x000000000003754b <+2347>:  test   %eax,%eax
   0x000000000003754d <+2349>:  jne    0x3755c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2364>
   0x000000000003754f <+2351>:  mov    0x8(%rsp),%ecx
   0x0000000000037553 <+2355>:  cmp    $0x5f,%ecx
   0x0000000000037556 <+2358>:  jne    0x37468 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2120>
   0x000000000003755c <+2364>:  mov    $0x1,%eax
   0x0000000000037561 <+2369>:  jmp    0x3747d <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2141>
   0x0000000000037566 <+2374>:  mov    %rdx,%rax
   0x0000000000037569 <+2377>:  jmp    0x37390 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1904>
   0x000000000003756e <+2382>:  movzbl (%r12),%eax
   0x0000000000037573 <+2387>:  mov    %eax,0x34(%rsp)
   0x0000000000037577 <+2391>:  cmp    $0x1,%rcx
   0x000000000003757b <+2395>:  ja     0x37309 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1769>
   0x0000000000037581 <+2401>:  mov    $0x1,%r13d
   0x0000000000037587 <+2407>:  jmp    0x3751b <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2299>
   0x0000000000037589 <+2409>:  mov    $0x6,%eax
   0x000000000003758e <+2414>:  lea    0x42(%rsp),%rsi
   0x0000000000037593 <+2419>:  cmp    %rax,%rdx
   0x0000000000037596 <+2422>:  cmovle %rdx,%rax
   0x000000000003759a <+2426>:  lea    -0x1(%rax),%edi
   0x000000000003759d <+2429>:  movslq %edi,%rax
   0x00000000000375a0 <+2432>:  test   %edi,%edi
   0x00000000000375a2 <+2434>:  js     0x375b9 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2457>
   0x00000000000375a4 <+2436>:  movzbl (%r14,%rax,1),%edi
   0x00000000000375a9 <+2441>:  movzbl (%rcx,%rdi,1),%edi
   0x00000000000375ad <+2445>:  mov    %dil,(%rsi,%rax,1)
   0x00000000000375b1 <+2449>:  sub    $0x1,%rax
   0x00000000000375b5 <+2453>:  test   %eax,%eax
   0x00000000000375b7 <+2455>:  jns    0x375a4 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2436>
   0x00000000000375b9 <+2457>:  mov    %rsi,%r12
   0x00000000000375bc <+2460>:  jmp    0x372a3 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1667>
   0x00000000000375c1 <+2465>:  call   0x7a30 <simdutf::benchmarks::BenchmarkBase::run(simdutf::benchmarks::input::Testcase const&)+1136>
   0x00000000000375c6 <+2470>:  cs nopw 0x0(%rax,%rax,1)
   0x00000000000375d0 <+2480>:  endbr64
   0x00000000000375d4 <+2484>:  push   %r15
   0x00000000000375d6 <+2486>:  push   %r14
   0x00000000000375d8 <+2488>:  push   %r13
   0x00000000000375da <+2490>:  mov    %r9,%r13
   0x00000000000375dd <+2493>:  push   %r12

Here is the GCC 11 dump...
Dump of assembler code for function simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const:
   0x00000000000346c0 <+0>:     endbr64
   0x00000000000346c4 <+4>:     push   %rbp
   0x00000000000346c5 <+5>:     lea    (%rsi,%rdx,1),%rdi
   0x00000000000346c9 <+9>:     lea    0x40(%rsi),%r9
   0x00000000000346cd <+13>:    mov    %rcx,%r8
   0x00000000000346d0 <+16>:    mov    %rcx,%rax
   0x00000000000346d3 <+19>:    mov    %rsp,%rbp
   0x00000000000346d6 <+22>:    push   %r15
   0x00000000000346d8 <+24>:    push   %r14
   0x00000000000346da <+26>:    push   %r13
   0x00000000000346dc <+28>:    push   %r12
   0x00000000000346de <+30>:    push   %rbx
   0x00000000000346df <+31>:    cmp    %r9,%rdi
   0x00000000000346e2 <+34>:    jb     0x348c4 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+516>
   0x00000000000346e8 <+40>:    movabs $0x5555555555555555,%rbx
   0x00000000000346f2 <+50>:    mov    $0xffffffff,%r12d
   0x00000000000346f8 <+56>:    vpbroadcastb 0x7ebfe(%rip),%zmm2        # 0xb3300
   0x0000000000034702 <+66>:    vpbroadcastb 0x7f334(%rip),%zmm1        # 0xb3a40
   0x000000000003470c <+76>:    vpbroadcastb 0x7f74a(%rip),%zmm3        # 0xb3e60
   0x0000000000034716 <+86>:    vpternlogd $0xff,%zmm11,%zmm11,%zmm11
   0x000000000003471d <+93>:    vpbroadcastb 0x7f5f9(%rip),%zmm5        # 0xb3d20
   0x0000000000034727 <+103>:   movabs $0x3fffffffffffffff,%r11
   0x0000000000034731 <+113>:   vpbroadcastb 0x7ec85(%rip),%zmm7        # 0xb33c0
   0x000000000003473b <+123>:   kmovq  %rbx,%k4
   0x0000000000034740 <+128>:   vmovdqa64 0x7ecb6(%rip),%zmm12        # 0xb3400
   0x000000000003474a <+138>:   vpbroadcastw 0x7f70e(%rip),%zmm10        # 0xb3e62
   0x0000000000034754 <+148>:   vpbroadcastw 0x7ec22(%rip),%zmm15        # 0xb3380
   0x000000000003475e <+158>:   vpbroadcastw 0x7f6fc(%rip),%zmm14        # 0xb3e64
   0x0000000000034768 <+168>:   vpbroadcastw 0x7f6f4(%rip),%zmm8        # 0xb3e66
   0x0000000000034772 <+178>:   vpbroadcastw 0x7f6ec(%rip),%zmm9        # 0xb3e68
   0x000000000003477c <+188>:   vpbroadcastw 0x7f6e4(%rip),%zmm13        # 0xb3e6a
   0x0000000000034786 <+198>:   jmp    0x347af <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+239>
   0x0000000000034788 <+200>:   nopl   0x0(%rax,%rax,1)
   0x0000000000034790 <+208>:   xor    %ecx,%ecx
   0x0000000000034792 <+210>:   kmovq  %k1,%rbx
   0x0000000000034797 <+215>:   tzcnt  %rbx,%rcx
   0x000000000003479c <+220>:   cmp    $0xffffffffffffffff,%rcx
   0x00000000000347a0 <+224>:   jne    0x3487d <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+445>
   0x00000000000347a6 <+230>:   cmp    %r9,%rdi
   0x00000000000347a9 <+233>:   jb     0x348c4 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+516>
   0x00000000000347af <+239>:   vmovdqu8 (%rsi),%zmm0
   0x00000000000347b5 <+245>:   kxorq  %k6,%k6,%k6
   0x00000000000347ba <+250>:   vpcmpltub %zmm2,%zmm0,%k0
   0x00000000000347c1 <+257>:   kortestq %k0,%k6
   0x00000000000347c6 <+262>:   jb     0x34890 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+464>
   0x00000000000347cc <+268>:   vpcmpleub %zmm0,%zmm1,%k2
   0x00000000000347d3 <+275>:   vpcmpltub %zmm3,%zmm0,%k1{%k2}
   0x00000000000347da <+282>:   ktestq %k1,%k1
   0x00000000000347df <+287>:   jne    0x34790 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+208>
   0x00000000000347e1 <+289>:   vpcmpleub %zmm0,%zmm5,%k1
   0x00000000000347e8 <+296>:   kmovq  %k2,%rbx
   0x00000000000347ed <+301>:   lea    (%rbx,%rbx,1),%rdx
   0x00000000000347f1 <+305>:   ktestq %k1,%k1
   0x00000000000347f6 <+310>:   sete   %cl
   0x00000000000347f9 <+313>:   test   %cl,%cl
   0x00000000000347fb <+315>:   jne    0x34a80 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+960>
   0x0000000000034801 <+321>:   vpcmpnltub %zmm7,%zmm0,%k3
   0x0000000000034808 <+328>:   kmovq  %k1,%rbx
   0x000000000003480d <+333>:   shl    $0x2,%rbx
   0x0000000000034811 <+337>:   korq   %k2,%k0,%k7
   0x0000000000034816 <+342>:   or     %rbx,%rdx
   0x0000000000034819 <+345>:   kmovq  %k7,%rcx
   0x000000000003481e <+350>:   knotq  %k0,%k5
   0x0000000000034823 <+355>:   not    %rcx
   0x0000000000034826 <+358>:   kmovq  %k7,%r10
   0x000000000003482b <+363>:   kortestq %k3,%k3
   0x0000000000034830 <+368>:   jne    0x34ad0 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1040>
   0x0000000000034836 <+374>:   cmp    %rdx,%rcx
   0x0000000000034839 <+377>:   je     0x34da0 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1760>
   0x000000000003483f <+383>:   kmovq  %k7,%rcx
   0x0000000000034844 <+388>:   xor    %rdx,%rcx
   0x0000000000034847 <+391>:   or     %rdx,%r10
   0x000000000003484a <+394>:   not    %rcx
   0x000000000003484d <+397>:   tzcnt  %rcx,%rcx
   0x0000000000034852 <+402>:   cmp    $0xffffffffffffffff,%r10
   0x0000000000034856 <+406>:   jne    0x3479c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+220>
   0x000000000003485c <+412>:   kmovq  %k2,%rbx
   0x0000000000034861 <+417>:   bzhi   %rcx,%rbx,%rdx
   0x0000000000034866 <+422>:   mov    $0x3f,%ecx
   0x000000000003486b <+427>:   lzcnt  %rdx,%rdx
   0x0000000000034870 <+432>:   sub    %rdx,%rcx
   0x0000000000034873 <+435>:   cmp    $0xffffffffffffffff,%rcx
   0x0000000000034877 <+439>:   je     0x347a6 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+230>
   0x000000000003487d <+445>:   xor    %eax,%eax
   0x000000000003487f <+447>:   vzeroupper
   0x0000000000034882 <+450>:   pop    %rbx
   0x0000000000034883 <+451>:   pop    %r12
   0x0000000000034885 <+453>:   pop    %r13
   0x0000000000034887 <+455>:   pop    %r14
   0x0000000000034889 <+457>:   pop    %r15
   0x000000000003488b <+459>:   pop    %rbp
   0x000000000003488c <+460>:   ret
   0x000000000003488d <+461>:   nopl   (%rax)
   0x0000000000034890 <+464>:   vpmovzxbw %ymm0,%zmm4
   0x0000000000034896 <+470>:   vextracti64x4 $0x1,%zmm0,%ymm0
   0x000000000003489d <+477>:   mov    %r9,%rsi
   0x00000000000348a0 <+480>:   add    $0x40,%r9
   0x00000000000348a4 <+484>:   vpmovzxbw %ymm0,%zmm0
   0x00000000000348aa <+490>:   vmovdqu64 %zmm4,(%rax)
   0x00000000000348b0 <+496>:   sub    $0xffffffffffffff80,%rax
   0x00000000000348b4 <+500>:   vmovdqu64 %zmm0,-0x40(%rax)
   0x00000000000348bb <+507>:   cmp    %r9,%rdi
   0x00000000000348be <+510>:   jae    0x347af <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+239>
   0x00000000000348c4 <+516>:   cmp    %rsi,%rdi
   0x00000000000348c7 <+519>:   jbe    0x34b25 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1125>
   0x00000000000348cd <+525>:   movabs $0x5555555555555555,%rbx
   0x00000000000348d7 <+535>:   mov    $0xffffffff,%r13d
   0x00000000000348dd <+541>:   vpbroadcastb 0x7ea19(%rip),%zmm2        # 0xb3300
   0x00000000000348e7 <+551>:   vpbroadcastb 0x7f14f(%rip),%zmm3        # 0xb3a40
   0x00000000000348f1 <+561>:   vpbroadcastb 0x7f565(%rip),%zmm4        # 0xb3e60
   0x00000000000348fb <+571>:   mov    %rbx,%r15
   0x00000000000348fe <+574>:   vpbroadcastb 0x7f418(%rip),%zmm5        # 0xb3d20
   0x0000000000034908 <+584>:   vpternlogd $0xff,%zmm10,%zmm10,%zmm10
   0x000000000003490f <+591>:   vpbroadcastb 0x7eaa7(%rip),%zmm6        # 0xb33c0
   0x0000000000034919 <+601>:   vmovdqa64 0x7eadd(%rip),%zmm11        # 0xb3400
   0x0000000000034923 <+611>:   movabs $0x3fffffffffffffff,%r11
   0x000000000003492d <+621>:   vpbroadcastw 0x7f52b(%rip),%zmm9        # 0xb3e62
   0x0000000000034937 <+631>:   vpbroadcastw 0x7ea3f(%rip),%zmm14        # 0xb3380
   0x0000000000034941 <+641>:   vpbroadcastw 0x7f519(%rip),%zmm13        # 0xb3e64
   0x000000000003494b <+651>:   vpbroadcastw 0x7f511(%rip),%zmm7        # 0xb3e66
   0x0000000000034955 <+661>:   vpbroadcastw 0x7f509(%rip),%zmm8        # 0xb3e68
   0x000000000003495f <+671>:   vpbroadcastw 0x7f501(%rip),%zmm12        # 0xb3e6a
   0x0000000000034969 <+681>:   jmp    0x3498f <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+719>
   0x000000000003496b <+683>:   nopl   0x0(%rax,%rax,1)
   0x0000000000034970 <+688>:   xor    %edx,%edx
   0x0000000000034972 <+690>:   kmovq  %k0,%rbx
   0x0000000000034977 <+695>:   tzcnt  %rbx,%rdx
   0x000000000003497c <+700>:   cmp    $0xffffffffffffffff,%rdx
   0x0000000000034980 <+704>:   jne    0x3487d <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+445>
   0x0000000000034986 <+710>:   cmp    %rsi,%rdi
   0x0000000000034989 <+713>:   jbe    0x34b25 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1125>
   0x000000000003498f <+719>:   mov    %rdi,%r9
   0x0000000000034992 <+722>:   mov    $0x1,%ecx
   0x0000000000034997 <+727>:   sub    %rsi,%r9
   0x000000000003499a <+730>:   shlx   %r9,%rcx,%rdx
   0x000000000003499f <+735>:   lea    -0x1(%rdx),%r10
   0x00000000000349a3 <+739>:   mov    %r9d,%ebx
   0x00000000000349a6 <+742>:   kmovq  %r10,%k2
   0x00000000000349ab <+747>:   vmovdqu8 (%rsi),%zmm0{%k2}{z}
   0x00000000000349b1 <+753>:   mov    %rdx,%r10
   0x00000000000349b4 <+756>:   neg    %r10
   0x00000000000349b7 <+759>:   vpcmpltub %zmm2,%zmm0,%k1{%k2}
   0x00000000000349be <+766>:   kmovq  %r10,%k7
   0x00000000000349c3 <+771>:   kortestq %k1,%k7
   0x00000000000349c8 <+776>:   jb     0x34b08 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1096>
   0x00000000000349ce <+782>:   vpcmpleub %zmm0,%zmm3,%k3
   0x00000000000349d5 <+789>:   vpcmpltub %zmm4,%zmm0,%k0{%k3}
   0x00000000000349dc <+796>:   ktestq %k0,%k0
   0x00000000000349e1 <+801>:   jne    0x34970 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+688>
   0x00000000000349e3 <+803>:   vpcmpleub %zmm0,%zmm5,%k0
   0x00000000000349ea <+810>:   kmovq  %k3,%rbx
   0x00000000000349ef <+815>:   lea    (%rbx,%rbx,1),%r10
   0x00000000000349f3 <+819>:   ktestq %k0,%k0
   0x00000000000349f8 <+824>:   sete   %dl
   0x00000000000349fb <+827>:   test   %dl,%dl
   0x00000000000349fd <+829>:   jne    0x34b48 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1160>
   0x0000000000034a03 <+835>:   vpcmpnltub %zmm6,%zmm0,%k5
   0x0000000000034a0a <+842>:   kmovq  %k0,%rbx
   0x0000000000034a0f <+847>:   knotq  %k1,%k6
   0x0000000000034a14 <+852>:   korq   %k3,%k1,%k7
   0x0000000000034a19 <+857>:   lea    0x0(,%rbx,4),%rdx
   0x0000000000034a21 <+865>:   kxorq  %k7,%k2,%k4
   0x0000000000034a26 <+870>:   kandq  %k2,%k6,%k6
   0x0000000000034a2b <+875>:   kmovq  %k4,%r12
   0x0000000000034a30 <+880>:   or     %rdx,%r10
   0x0000000000034a33 <+883>:   kortestq %k5,%k5
   0x0000000000034a38 <+888>:   jne    0x34bc8 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1288>
   0x0000000000034a3e <+894>:   cmp    %r10,%r12
   0x0000000000034a41 <+897>:   je     0x34ed8 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2072>
   0x0000000000034a47 <+903>:   kmovq  %k4,%rdx
   0x0000000000034a4c <+908>:   xor    %r10,%rdx
   0x0000000000034a4f <+911>:   tzcnt  %rdx,%rdx
   0x0000000000034a54 <+916>:   andn   %r12,%r10,%r12
   0x0000000000034a59 <+921>:   jne    0x3497c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+700>
   0x0000000000034a5f <+927>:   xor    %ecx,%ecx
   0x0000000000034a61 <+929>:   kmovq  %k3,%rbx
   0x0000000000034a66 <+934>:   bzhi   %rdx,%rbx,%rdx
   0x0000000000034a6b <+939>:   lzcnt  %rdx,%rcx
   0x0000000000034a70 <+944>:   mov    $0x3f,%edx
   0x0000000000034a75 <+949>:   sub    %rcx,%rdx
   0x0000000000034a78 <+952>:   jmp    0x3497c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+700>
   0x0000000000034a7d <+957>:   nopl   (%rax)
   0x0000000000034a80 <+960>:   korq   %k2,%k0,%k0
   0x0000000000034a85 <+965>:   kxnorq %k5,%k5,%k5
   0x0000000000034a8a <+970>:   kandq  %k5,%k0,%k1
   0x0000000000034a8f <+975>:   kmovq  %k1,%rcx
   0x0000000000034a94 <+980>:   not    %rcx
   0x0000000000034a97 <+983>:   cmp    %rdx,%rcx
   0x0000000000034a9a <+986>:   je     0x34c00 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1344>
   0x0000000000034aa0 <+992>:   kmovq  %k1,%rcx
   0x0000000000034aa5 <+997>:   xor    %rdx,%rcx
   0x0000000000034aa8 <+1000>:  kmovq  %k1,%rbx
   0x0000000000034aad <+1005>:  or     %rdx,%rbx
   0x0000000000034ab0 <+1008>:  not    %rcx
   0x0000000000034ab3 <+1011>:  tzcnt  %rcx,%rcx
   0x0000000000034ab8 <+1016>:  cmp    $0xffffffffffffffff,%rbx
   0x0000000000034abc <+1020>:  jne    0x3479c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+220>
   0x0000000000034ac2 <+1026>:  jmp    0x3485c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+412>
   0x0000000000034ac7 <+1031>:  nopw   0x0(%rax,%rax,1)
   0x0000000000034ad0 <+1040>:  kmovq  %k3,%rbx
   0x0000000000034ad5 <+1045>:  shl    $0x3,%rbx
   0x0000000000034ad9 <+1049>:  or     %rbx,%rdx
   0x0000000000034adc <+1052>:  cmp    %rcx,%rdx
   0x0000000000034adf <+1055>:  je     0x34c60 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1440>
   0x0000000000034ae5 <+1061>:  mov    %rdx,%rcx
   0x0000000000034ae8 <+1064>:  or     %r10,%rdx
   0x0000000000034aeb <+1067>:  xor    %r10,%rcx
   0x0000000000034aee <+1070>:  not    %rcx
   0x0000000000034af1 <+1073>:  tzcnt  %rcx,%rcx
   0x0000000000034af6 <+1078>:  cmp    $0xffffffffffffffff,%rdx
   0x0000000000034afa <+1082>:  jne    0x3479c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+220>
   0x0000000000034b00 <+1088>:  jmp    0x3485c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+412>
   0x0000000000034b05 <+1093>:  nopl   (%rax)
   0x0000000000034b08 <+1096>:  cmp    $0x20,%r9
   0x0000000000034b0c <+1100>:  ja     0x34b88 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1224>
   0x0000000000034b0e <+1102>:  vpmovzxbw %ymm0,%zmm0
   0x0000000000034b14 <+1108>:  sub    $0x1,%edx
   0x0000000000034b17 <+1111>:  kmovd  %edx,%k7
   0x0000000000034b1b <+1115>:  vmovdqu16 %zmm0,(%rax){%k7}
   0x0000000000034b21 <+1121>:  lea    (%rax,%r9,2),%rax
   0x0000000000034b25 <+1125>:  test   %rax,%rax
   0x0000000000034b28 <+1128>:  je     0x3487d <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+445>
   0x0000000000034b2e <+1134>:  sub    %r8,%rax
   0x0000000000034b31 <+1137>:  sar    %rax
   0x0000000000034b34 <+1140>:  vzeroupper
   0x0000000000034b37 <+1143>:  pop    %rbx
   0x0000000000034b38 <+1144>:  pop    %r12
   0x0000000000034b3a <+1146>:  pop    %r13
   0x0000000000034b3c <+1148>:  pop    %r14
   0x0000000000034b3e <+1150>:  pop    %r15
   0x0000000000034b40 <+1152>:  pop    %rbp
   0x0000000000034b41 <+1153>:  ret
   0x0000000000034b42 <+1154>:  nopw   0x0(%rax,%rax,1)
   0x0000000000034b48 <+1160>:  korq   %k3,%k1,%k1
   0x0000000000034b4d <+1165>:  kandq  %k2,%k1,%k1
   0x0000000000034b52 <+1170>:  kxorq  %k1,%k2,%k4
   0x0000000000034b57 <+1175>:  kmovq  %k4,%r9
   0x0000000000034b5c <+1180>:  cmp    %r10,%r9
   0x0000000000034b5f <+1183>:  je     0x34e60 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1952>
   0x0000000000034b65 <+1189>:  kmovq  %k4,%rdx
   0x0000000000034b6a <+1194>:  xor    %r10,%rdx
   0x0000000000034b6d <+1197>:  tzcnt  %rdx,%rdx
   0x0000000000034b72 <+1202>:  andn   %r9,%r10,%r9
   0x0000000000034b77 <+1207>:  je     0x34a5f <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+927>
   0x0000000000034b7d <+1213>:  jmp    0x3497c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+700>
   0x0000000000034b82 <+1218>:  nopw   0x0(%rax,%rax,1)
   0x0000000000034b88 <+1224>:  vpmovzxbw %ymm0,%zmm1
   0x0000000000034b8e <+1230>:  sub    $0x20,%ebx
   0x0000000000034b91 <+1233>:  vextracti64x4 $0x1,%zmm0,%ymm0
   0x0000000000034b98 <+1240>:  mov    $0x1,%edx
   0x0000000000034b9d <+1245>:  vpmovzxbw %ymm0,%zmm0
   0x0000000000034ba3 <+1251>:  shlx   %ebx,%edx,%edx
   0x0000000000034ba8 <+1256>:  sub    $0x1,%edx
   0x0000000000034bab <+1259>:  vmovdqu64 %zmm1,(%rax)
   0x0000000000034bb1 <+1265>:  kmovd  %edx,%k7
   0x0000000000034bb5 <+1269>:  vmovdqu16 %zmm0,0x40(%rax){%k7}
   0x0000000000034bbc <+1276>:  jmp    0x34b21 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+1121>
   0x0000000000034bc1 <+1281>:  nopl   0x0(%rax)
   0x0000000000034bc8 <+1288>:  kmovq  %k5,%rbx
   0x0000000000034bcd <+1293>:  shl    $0x3,%rbx
   0x0000000000034bd1 <+1297>:  or     %rbx,%r10
   0x0000000000034bd4 <+1300>:  cmp    %r12,%r10
   0x0000000000034bd7 <+1303>:  je     0x34fd0 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2320>
   0x0000000000034bdd <+1309>:  mov    %r10,%rdx
   0x0000000000034be0 <+1312>:  xor    %r12,%rdx
   0x0000000000034be3 <+1315>:  tzcnt  %rdx,%rdx
   0x0000000000034be8 <+1320>:  andn   %r12,%r10,%r12
   0x0000000000034bed <+1325>:  je     0x34a5f <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+927>
   0x0000000000034bf3 <+1331>:  jmp    0x3497c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+700>
   0x0000000000034bf8 <+1336>:  nopl   0x0(%rax,%rax,1)
   0x0000000000034c00 <+1344>:  vpsubb %zmm3,%zmm0,%zmm6{%k2}{z}
   0x0000000000034c06 <+1350>:  knotq  %k2,%k3
   0x0000000000034c0b <+1355>:  kmovq  %k3,%rbx
   0x0000000000034c10 <+1360>:  pdep   %rbx,%r12,%rdx
   0x0000000000034c15 <+1365>:  vpcompressb %zmm6,%zmm4{%k1}{z}
   0x0000000000034c1b <+1371>:  lzcnt  %rdx,%rdx
   0x0000000000034c20 <+1376>:  sub    %rdx,%rsi
   0x0000000000034c23 <+1379>:  add    $0x40,%rax
   0x0000000000034c27 <+1383>:  vpmovzxbw %ymm4,%zmm6
   0x0000000000034c2d <+1389>:  vpcompressb %zmm0,%zmm4{%k3}{z}
   0x0000000000034c33 <+1395>:  mov    %rsi,%rcx
   0x0000000000034c36 <+1398>:  vpmovzxbw %ymm4,%zmm0
   0x0000000000034c3c <+1404>:  vpsllw $0x6,%zmm6,%zmm4
   0x0000000000034c43 <+1411>:  lea    0x40(%rsi),%rsi
   0x0000000000034c47 <+1415>:  vpaddw %zmm4,%zmm0,%zmm0
   0x0000000000034c4d <+1421>:  lea    0x80(%rcx),%r9
   0x0000000000034c54 <+1428>:  vmovdqu16 %zmm0,-0x40(%rax)
   0x0000000000034c5b <+1435>:  jmp    0x347a6 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+230>
   0x0000000000034c60 <+1440>:  kmovq  %r10,%k6
   0x0000000000034c65 <+1445>:  kmovq  %rbx,%k7
   0x0000000000034c6a <+1450>:  korq   %k6,%k7,%k7
   0x0000000000034c6f <+1455>:  kmovq  %k7,%r13
   0x0000000000034c74 <+1460>:  shr    %r13
   0x0000000000034c77 <+1463>:  kmovq  %rbx,%k6
   0x0000000000034c7c <+1468>:  kmovq  %k7,%rcx
   0x0000000000034c81 <+1473>:  korq   %k2,%k0,%k0
   0x0000000000034c86 <+1478>:  vmovdqu8 %zmm1,%zmm6{%k5}{z}
   0x0000000000034c8c <+1484>:  kmovq  %r13,%k7
   0x0000000000034c91 <+1489>:  korq   %k6,%k7,%k7
   0x0000000000034c96 <+1494>:  vpcompressb %zmm12,%zmm4{%k7}{z}
   0x0000000000034c9c <+1500>:  vpandnd %zmm0,%zmm6,%zmm6
   0x0000000000034ca2 <+1506>:  vpmovzxbw %ymm4,%zmm4
   0x0000000000034ca8 <+1512>:  kshiftrq $0x1,%k5,%k5
   0x0000000000034cae <+1518>:  kmovq  %k7,%r13
   0x0000000000034cb3 <+1523>:  vmovdqu8 %zmm6,%zmm17{%k5}{z}
   0x0000000000034cb9 <+1529>:  vpaddw %zmm11,%zmm4,%zmm18
   0x0000000000034cbf <+1535>:  vpermb %zmm6,%zmm4,%zmm16{%k4}{z}
   0x0000000000034cc5 <+1541>:  kmovq  %r11,%k5
   0x0000000000034cca <+1546>:  vpermb %zmm17,%zmm18,%zmm0{%k4}{z}
   0x0000000000034cd0 <+1552>:  kandq  %k5,%k1,%k2
   0x0000000000034cd5 <+1557>:  vpaddw %zmm10,%zmm4,%zmm4
   0x0000000000034cdb <+1563>:  vmovdqu8 %zmm6,%zmm17{%k2}{z}
   0x0000000000034ce1 <+1569>:  vpermb %zmm17,%zmm4,%zmm6{%k4}{z}
   0x0000000000034ce7 <+1575>:  vpsllw $0x6,%zmm0,%zmm0
   0x0000000000034cee <+1582>:  pext   %r13,%rbx,%rdx
   0x0000000000034cf3 <+1587>:  mov    %rdx,%r14
   0x0000000000034cf6 <+1590>:  vpsllw $0xc,%zmm6,%zmm4
   0x0000000000034cfd <+1597>:  vpaddw %zmm16,%zmm0,%zmm0
   0x0000000000034d03 <+1603>:  kmovd  %edx,%k6
   0x0000000000034d07 <+1607>:  shr    %r14
   0x0000000000034d0a <+1610>:  vpaddw %zmm4,%zmm0,%zmm0
   0x0000000000034d10 <+1616>:  vmovdqu16 %zmm15,%zmm6{%k6}{z}
   0x0000000000034d16 <+1622>:  kmovq  %r14,%k2
   0x0000000000034d1b <+1627>:  kmovq  %k3,%rdx
   0x0000000000034d20 <+1632>:  vpsrlw $0x4,%zmm0,%zmm4
   0x0000000000034d27 <+1639>:  vpord  %zmm6,%zmm0,%zmm0
   0x0000000000034d2d <+1645>:  kmovq  %k1,%r14
   0x0000000000034d32 <+1650>:  andn   %r14,%rdx,%rdx
   0x0000000000034d37 <+1655>:  vpaddw %zmm14,%zmm4,%zmm0{%k2}
   0x0000000000034d3d <+1661>:  shl    $0x2,%rdx
   0x0000000000034d41 <+1665>:  vpaddw %zmm9,%zmm0,%zmm4
   0x0000000000034d47 <+1671>:  pext   %r13,%rdx,%rdx
   0x0000000000034d4c <+1676>:  kmovq  %rdx,%k1
   0x0000000000034d51 <+1681>:  vpcmpltuw %zmm8,%zmm0,%k3{%k1}
   0x0000000000034d58 <+1688>:  vpcmpnltuw %zmm13,%zmm4,%k0{%k2}
   0x0000000000034d5f <+1695>:  vpcmpltuw %zmm8,%zmm4,%k1{%k1}
   0x0000000000034d66 <+1702>:  kord   %k1,%k3,%k1
   0x0000000000034d6b <+1707>:  kortestd %k1,%k0
   0x0000000000034d70 <+1712>:  je     0x3516f <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2735>
   0x0000000000034d76 <+1718>:  kord   %k1,%k0,%k5
   0x0000000000034d7b <+1723>:  kmovq  %rbx,%k3
   0x0000000000034d80 <+1728>:  kmovd  %k5,%edx
   0x0000000000034d84 <+1732>:  kmovq  %r10,%k5
   0x0000000000034d89 <+1737>:  pdep   %rdx,%rcx,%rcx
   0x0000000000034d8e <+1742>:  korq   %k3,%k5,%k0
   0x0000000000034d93 <+1747>:  tzcnt  %rcx,%rcx
   0x0000000000034d98 <+1752>:  jmp    0x3479c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+220>
   0x0000000000034d9d <+1757>:  nopl   (%rax)
   0x0000000000034da0 <+1760>:  kmovq  %k7,%rdx
   0x0000000000034da5 <+1765>:  shr    %rdx
   0x0000000000034da8 <+1768>:  vmovdqu8 %zmm1,%zmm6{%k5}{z}
   0x0000000000034dae <+1774>:  kshiftrq $0x1,%k5,%k5
   0x0000000000034db4 <+1780>:  kmovq  %rdx,%k6
   0x0000000000034db9 <+1785>:  vpcompressb %zmm12,%zmm4{%k6}{z}
   0x0000000000034dbf <+1791>:  vpandnd %zmm0,%zmm6,%zmm6
   0x0000000000034dc5 <+1797>:  korq   %k2,%k0,%k0
   0x0000000000034dca <+1802>:  vpmovzxbw %ymm4,%zmm4
   0x0000000000034dd0 <+1808>:  vmovdqu8 %zmm6,%zmm17{%k5}{z}
   0x0000000000034dd6 <+1814>:  kmovq  %r11,%k5
   0x0000000000034ddb <+1819>:  kandq  %k5,%k1,%k1
   0x0000000000034de0 <+1824>:  vpaddw %zmm11,%zmm4,%zmm18
   0x0000000000034de6 <+1830>:  vpermb %zmm6,%zmm4,%zmm16{%k4}{z}
   0x0000000000034dec <+1836>:  pext   %rdx,%rbx,%rbx
   0x0000000000034df1 <+1841>:  vpaddw %zmm10,%zmm4,%zmm4
   0x0000000000034df7 <+1847>:  vpermb %zmm17,%zmm18,%zmm0{%k4}{z}
   0x0000000000034dfd <+1853>:  vmovdqu8 %zmm6,%zmm17{%k1}{z}
   0x0000000000034e03 <+1859>:  kmovq  %rbx,%k1
   0x0000000000034e08 <+1864>:  vpsllw $0x6,%zmm0,%zmm0
   0x0000000000034e0f <+1871>:  vpermb %zmm17,%zmm4,%zmm6{%k4}{z}
   0x0000000000034e15 <+1877>:  vpsllw $0xc,%zmm6,%zmm4
   0x0000000000034e1c <+1884>:  vpaddw %zmm16,%zmm0,%zmm0
   0x0000000000034e22 <+1890>:  vpaddw %zmm4,%zmm0,%zmm0
   0x0000000000034e28 <+1896>:  vpaddw %zmm9,%zmm0,%zmm4
   0x0000000000034e2e <+1902>:  vpcmpltuw %zmm8,%zmm0,%k0{%k1}
   0x0000000000034e35 <+1909>:  vpcmpltuw %zmm8,%zmm4,%k1{%k1}
   0x0000000000034e3c <+1916>:  kord   %k1,%k0,%k0
   0x0000000000034e41 <+1921>:  kortestd %k0,%k0
   0x0000000000034e46 <+1926>:  je     0x3512c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2668>
   0x0000000000034e4c <+1932>:  kmovd  %k0,%ecx
   0x0000000000034e50 <+1936>:  pdep   %rcx,%r10,%rcx
   0x0000000000034e55 <+1941>:  tzcnt  %rcx,%rcx
   0x0000000000034e5a <+1946>:  jmp    0x3479c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+220>
   0x0000000000034e5f <+1951>:  nop
   0x0000000000034e60 <+1952>:  vpsubb %zmm4,%zmm0,%zmm15{%k3}{z}
   0x0000000000034e66 <+1958>:  knotq  %k3,%k0
   0x0000000000034e6b <+1963>:  kandq  %k2,%k0,%k2
   0x0000000000034e70 <+1968>:  kmovq  %k1,%rbx
   0x0000000000034e75 <+1973>:  vpcompressb %zmm15,%zmm1{%k1}{z}
   0x0000000000034e7b <+1979>:  pdep   %rbx,%r13,%rdx
   0x0000000000034e80 <+1984>:  kmovq  %k2,%rbx
   0x0000000000034e85 <+1989>:  popcnt %rdx,%rdx
   0x0000000000034e8a <+1994>:  vpmovzxbw %ymm1,%zmm15
   0x0000000000034e90 <+2000>:  vpcompressb %zmm0,%zmm1{%k2}{z}
   0x0000000000034e96 <+2006>:  pdep   %rbx,%r13,%r9
   0x0000000000034e9b <+2011>:  shlx   %rdx,%rcx,%rcx
   0x0000000000034ea0 <+2016>:  vpmovzxbw %ymm1,%zmm0
   0x0000000000034ea6 <+2022>:  vpsllw $0x6,%zmm15,%zmm1
   0x0000000000034ead <+2029>:  sub    $0x1,%ecx
   0x0000000000034eb0 <+2032>:  lzcnt  %r9,%r9
   0x0000000000034eb5 <+2037>:  vpaddw %zmm1,%zmm0,%zmm0
   0x0000000000034ebb <+2043>:  sub    %r9,%rsi
   0x0000000000034ebe <+2046>:  kmovd  %ecx,%k7
   0x0000000000034ec2 <+2050>:  add    $0x40,%rsi
   0x0000000000034ec6 <+2054>:  vmovdqu16 %zmm0,(%rax){%k7}
   0x0000000000034ecc <+2060>:  lea    (%rax,%rdx,2),%rax
   0x0000000000034ed0 <+2064>:  jmp    0x34986 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+710>
   0x0000000000034ed5 <+2069>:  nopl   (%rax)
   0x0000000000034ed8 <+2072>:  sub    $0x1,%r9d
   0x0000000000034edc <+2076>:  kmovq  %k7,%rbx
   0x0000000000034ee1 <+2081>:  shr    %rbx
   0x0000000000034ee4 <+2084>:  korq   %k3,%k1,%k1
   0x0000000000034ee9 <+2089>:  vmovdqu8 %zmm3,%zmm1{%k6}{z}
   0x0000000000034eef <+2095>:  kmovq  %rbx,%k3
   0x0000000000034ef4 <+2100>:  shlx   %r9,%rcx,%r9
   0x0000000000034ef9 <+2105>:  kmovq  %r9,%k4
   0x0000000000034efe <+2110>:  korq   %k4,%k3,%k3
   0x0000000000034f03 <+2115>:  vpandnd %zmm0,%zmm1,%zmm0
   0x0000000000034f09 <+2121>:  kshiftrq $0x1,%k6,%k6
   0x0000000000034f0f <+2127>:  kmovq  %r15,%k4
   0x0000000000034f14 <+2132>:  vpcompressb %zmm11,%zmm15{%k3}{z}
   0x0000000000034f1a <+2138>:  vmovdqu8 %zmm0,%zmm17{%k6}{z}
   0x0000000000034f20 <+2144>:  kmovq  %k3,%rbx
   0x0000000000034f25 <+2149>:  vpmovzxbw %ymm15,%zmm15
   0x0000000000034f2b <+2155>:  vpaddw %zmm10,%zmm15,%zmm18
   0x0000000000034f31 <+2161>:  vpermb %zmm0,%zmm15,%zmm16{%k4}{z}
   0x0000000000034f37 <+2167>:  vpaddw %zmm9,%zmm15,%zmm15
   0x0000000000034f3d <+2173>:  vpermb %zmm17,%zmm18,%zmm1{%k4}{z}
   0x0000000000034f43 <+2179>:  kmovq  %r11,%k4
   0x0000000000034f48 <+2184>:  kandq  %k4,%k0,%k1
   0x0000000000034f4d <+2189>:  vmovdqu8 %zmm0,%zmm17{%k1}{z}
   0x0000000000034f53 <+2195>:  vpsllw $0x6,%zmm1,%zmm1
   0x0000000000034f5a <+2202>:  kmovq  %r15,%k4
   0x0000000000034f5f <+2207>:  kandq  %k0,%k2,%k0
   0x0000000000034f64 <+2212>:  vpermb %zmm17,%zmm15,%zmm0{%k4}{z}
   0x0000000000034f6a <+2218>:  vpsllw $0xc,%zmm0,%zmm15
   0x0000000000034f71 <+2225>:  vpaddw %zmm16,%zmm1,%zmm0
   0x0000000000034f77 <+2231>:  kmovq  %k0,%rdx
   0x0000000000034f7c <+2236>:  shl    $0x2,%rdx
   0x0000000000034f80 <+2240>:  vpaddw %zmm15,%zmm0,%zmm0
   0x0000000000034f86 <+2246>:  pext   %rbx,%rdx,%rbx
   0x0000000000034f8b <+2251>:  kmovq  %rbx,%k1
   0x0000000000034f90 <+2256>:  vpaddw %zmm8,%zmm0,%zmm1
   0x0000000000034f96 <+2262>:  vpcmpltuw %zmm7,%zmm0,%k0{%k1}
   0x0000000000034f9d <+2269>:  vpcmpltuw %zmm7,%zmm1,%k1{%k1}
   0x0000000000034fa4 <+2276>:  kord   %k1,%k0,%k0
   0x0000000000034fa9 <+2281>:  kortestd %k0,%k0
   0x0000000000034fae <+2286>:  je     0x35182 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2754>
   0x0000000000034fb4 <+2292>:  kmovd  %k0,%edx
   0x0000000000034fb8 <+2296>:  kmovq  %k7,%rbx
   0x0000000000034fbd <+2301>:  pdep   %rdx,%rbx,%rdx
   0x0000000000034fc2 <+2306>:  tzcnt  %rdx,%rdx
   0x0000000000034fc7 <+2311>:  jmp    0x3497c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+700>
   0x0000000000034fcc <+2316>:  nopl   0x0(%rax)
   0x0000000000034fd0 <+2320>:  sub    $0x1,%r9d
   0x0000000000034fd4 <+2324>:  kmovq  %rbx,%k4
   0x0000000000034fd9 <+2329>:  korq   %k7,%k4,%k4
   0x0000000000034fde <+2334>:  kmovq  %k4,%r14
   0x0000000000034fe3 <+2339>:  shr    %r14
   0x0000000000034fe6 <+2342>:  vmovdqu8 %zmm3,%zmm1{%k6}{z}
   0x0000000000034fec <+2348>:  korq   %k3,%k1,%k1
   0x0000000000034ff1 <+2353>:  shlx   %r9,%rcx,%r9
   0x0000000000034ff6 <+2358>:  kmovq  %r14,%k1
   0x0000000000034ffb <+2363>:  kmovq  %k4,%rdx
   0x0000000000035000 <+2368>:  kmovq  %rbx,%k4
   0x0000000000035005 <+2373>:  korq   %k4,%k1,%k1
   0x000000000003500a <+2378>:  kmovq  %r9,%k4
   0x000000000003500f <+2383>:  korq   %k4,%k1,%k1
   0x0000000000035014 <+2388>:  vpandnd %zmm0,%zmm1,%zmm0
   0x000000000003501a <+2394>:  kshiftrq $0x1,%k6,%k6
   0x0000000000035020 <+2400>:  vpcompressb %zmm11,%zmm15{%k1}{z}
   0x0000000000035026 <+2406>:  vmovdqu8 %zmm0,%zmm17{%k6}{z}
   0x000000000003502c <+2412>:  kmovq  %r15,%k4
   0x0000000000035031 <+2417>:  kmovq  %k1,%r14
   0x0000000000035036 <+2422>:  vpmovzxbw %ymm15,%zmm15
   0x000000000003503c <+2428>:  pext   %r14,%rbx,%r9
   0x0000000000035041 <+2433>:  mov    %r9,%r14
   0x0000000000035044 <+2436>:  kmovd  %r9d,%k6
   0x0000000000035049 <+2441>:  vpaddw %zmm10,%zmm15,%zmm18
   0x000000000003504f <+2447>:  vpermb %zmm0,%zmm15,%zmm16{%k4}{z}
   0x0000000000035055 <+2453>:  shr    %r14
   0x0000000000035058 <+2456>:  kmovq  %k5,%r9
   0x000000000003505d <+2461>:  vpermb %zmm17,%zmm18,%zmm1{%k4}{z}
   0x0000000000035063 <+2467>:  vpaddw %zmm9,%zmm15,%zmm15
   0x0000000000035069 <+2473>:  kmovq  %r11,%k4
   0x000000000003506e <+2478>:  kandq  %k4,%k0,%k3
   0x0000000000035073 <+2483>:  vmovdqu8 %zmm0,%zmm17{%k3}{z}
   0x0000000000035079 <+2489>:  vpsllw $0x6,%zmm1,%zmm1
   0x0000000000035080 <+2496>:  kmovq  %r15,%k4
   0x0000000000035085 <+2501>:  kmovq  %r14,%k3
   0x000000000003508a <+2506>:  vpermb %zmm17,%zmm15,%zmm0{%k4}{z}
   0x0000000000035090 <+2512>:  kmovq  %k2,%r14
   0x0000000000035095 <+2517>:  xor    %r14,%r9
   0x0000000000035098 <+2520>:  kmovq  %k0,%r14
   0x000000000003509d <+2525>:  vpsllw $0xc,%zmm0,%zmm15
   0x00000000000350a4 <+2532>:  vpaddw %zmm16,%zmm1,%zmm0
   0x00000000000350aa <+2538>:  and    %r14,%r9
   0x00000000000350ad <+2541>:  kmovq  %k1,%r14
   0x00000000000350b2 <+2546>:  vpaddw %zmm15,%zmm0,%zmm0
   0x00000000000350b8 <+2552>:  vmovdqu16 %zmm14,%zmm15{%k6}{z}
   0x00000000000350be <+2558>:  shl    $0x2,%r9
   0x00000000000350c2 <+2562>:  vpsrlw $0x4,%zmm0,%zmm1
   0x00000000000350c9 <+2569>:  vpord  %zmm15,%zmm0,%zmm0
   0x00000000000350cf <+2575>:  pext   %r14,%r9,%r14
   0x00000000000350d4 <+2580>:  kmovq  %r14,%k5
   0x00000000000350d9 <+2585>:  vpaddw %zmm13,%zmm1,%zmm0{%k3}
   0x00000000000350df <+2591>:  vpaddw %zmm8,%zmm0,%zmm1
   0x00000000000350e5 <+2597>:  vpcmpltuw %zmm7,%zmm0,%k6{%k5}
   0x00000000000350ec <+2604>:  vpcmpnltuw %zmm12,%zmm1,%k0{%k3}
   0x00000000000350f3 <+2611>:  vpcmpltuw %zmm7,%zmm1,%k5{%k5}
   0x00000000000350fa <+2618>:  kord   %k5,%k6,%k5
   0x00000000000350ff <+2623>:  kortestd %k5,%k0
   0x0000000000035104 <+2628>:  je     0x351c0 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2816>
   0x000000000003510a <+2634>:  kord   %k5,%k0,%k4
   0x000000000003510f <+2639>:  kmovd  %k4,%ecx
   0x0000000000035113 <+2643>:  kmovq  %rbx,%k4
   0x0000000000035118 <+2648>:  pdep   %rcx,%rdx,%rdx
   0x000000000003511d <+2653>:  korq   %k4,%k7,%k7
   0x0000000000035122 <+2658>:  tzcnt  %rdx,%rdx
   0x0000000000035127 <+2663>:  jmp    0x3497c <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+700>
   0x000000000003512c <+2668>:  pdep   %rdx,%r12,%rdx
   0x0000000000035131 <+2673>:  xor    %r9d,%r9d
   0x0000000000035134 <+2676>:  mov    $0x1,%ecx
   0x0000000000035139 <+2681>:  popcnt %rdx,%r9
   0x000000000003513e <+2686>:  lzcnt  %rdx,%rdx
   0x0000000000035143 <+2691>:  shlx   %r9,%rcx,%rcx
   0x0000000000035148 <+2696>:  sub    %rdx,%rsi
   0x000000000003514b <+2699>:  sub    $0x1,%ecx
   0x000000000003514e <+2702>:  kmovd  %ecx,%k7
   0x0000000000035152 <+2706>:  mov    %rsi,%rcx
   0x0000000000035155 <+2709>:  vmovdqu16 %zmm0,(%rax){%k7}
   0x000000000003515b <+2715>:  lea    0x40(%rsi),%rsi
   0x000000000003515f <+2719>:  lea    (%rax,%r9,2),%rax
   0x0000000000035163 <+2723>:  lea    0x80(%rcx),%r9
   0x000000000003516a <+2730>:  jmp    0x347a6 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+230>
   0x000000000003516f <+2735>:  kmovd  %k2,%edx
   0x0000000000035173 <+2739>:  and    $0x80000000,%edx
   0x0000000000035179 <+2745>:  not    %edx
   0x000000000003517b <+2747>:  pdep   %r13,%rdx,%rdx
   0x0000000000035180 <+2752>:  jmp    0x35131 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2673>
   0x0000000000035182 <+2754>:  kandq  %k2,%k3,%k4
   0x0000000000035187 <+2759>:  kmovq  %k4,%rdx
   0x000000000003518c <+2764>:  pdep   %rdx,%r13,%rdx
   0x0000000000035191 <+2769>:  xor    %r9d,%r9d
   0x0000000000035194 <+2772>:  popcnt %rdx,%r9
   0x0000000000035199 <+2777>:  lzcnt  %rdx,%rdx
   0x000000000003519e <+2782>:  shlx   %r9,%rcx,%rcx
   0x00000000000351a3 <+2787>:  sub    %rdx,%rsi
   0x00000000000351a6 <+2790>:  sub    $0x1,%ecx
   0x00000000000351a9 <+2793>:  add    $0x40,%rsi
   0x00000000000351ad <+2797>:  kmovd  %ecx,%k7
   0x00000000000351b1 <+2801>:  vmovdqu16 %zmm0,(%rax){%k7}
   0x00000000000351b7 <+2807>:  lea    (%rax,%r9,2),%rax
   0x00000000000351bb <+2811>:  jmp    0x34986 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+710>
   0x00000000000351c0 <+2816>:  kmovd  %k3,%edx
   0x00000000000351c4 <+2820>:  and    $0x80000000,%edx
   0x00000000000351ca <+2826>:  kandq  %k2,%k1,%k1
   0x00000000000351cf <+2831>:  kmovq  %k1,%rbx
   0x00000000000351d4 <+2836>:  not    %edx
   0x00000000000351d6 <+2838>:  pdep   %rbx,%rdx,%rdx
   0x00000000000351db <+2843>:  jmp    0x35191 <simdutf::icelake::implementation::convert_utf8_to_utf16(char const*, unsigned long, char16_t*) const+2769>
End of assembler dump.

There is a hell of a lot of noise in this ASM dumps. I will try to get something cleaner.

Here is the GCC asm dump directly from the static library :

0000000000001620 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs>:
    1620:	f3 0f 1e fa          	endbr64
    1624:	55                   	push   %rbp
    1625:	48 8d 3c 16          	lea    (%rsi,%rdx,1),%rdi
    1629:	4c 8d 4e 40          	lea    0x40(%rsi),%r9
    162d:	49 89 c8             	mov    %rcx,%r8
    1630:	48 89 c8             	mov    %rcx,%rax
    1633:	48 89 e5             	mov    %rsp,%rbp
    1636:	41 57                	push   %r15
    1638:	41 56                	push   %r14
    163a:	41 55                	push   %r13
    163c:	41 54                	push   %r12
    163e:	53                   	push   %rbx
    163f:	4c 39 cf             	cmp    %r9,%rdi
    1642:	0f 82 dc 01 00 00    	jb     1824 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x204>
    1648:	48 bb 55 55 55 55 55 	movabs $0x5555555555555555,%rbx
    164f:	55 55 55
    1652:	41 bc ff ff ff ff    	mov    $0xffffffff,%r12d
    1658:	62 f2 7d 48 78 15 00 	vpbroadcastb 0x0(%rip),%zmm2        # 1662 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x42>
    165f:	00 00 00
			165e: R_X86_64_PC32	.rodata+0x4f7c
    1662:	62 f2 7d 48 78 0d 00 	vpbroadcastb 0x0(%rip),%zmm1        # 166c <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4c>
    1669:	00 00 00
			1668: R_X86_64_PC32	.LC42-0x4
    166c:	62 f2 7d 48 78 1d 00 	vpbroadcastb 0x0(%rip),%zmm3        # 1676 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x56>
    1673:	00 00 00
			1672: R_X86_64_PC32	.LC43-0x4
    1676:	62 53 25 48 25 db ff 	vpternlogd $0xff,%zmm11,%zmm11,%zmm11
    167d:	62 f2 7d 48 78 2d 00 	vpbroadcastb 0x0(%rip),%zmm5        # 1687 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x67>
    1684:	00 00 00
			1683: R_X86_64_PC32	.LC44-0x4
    1687:	49 bb ff ff ff ff ff 	movabs $0x3fffffffffffffff,%r11
    168e:	ff ff 3f
    1691:	62 f2 7d 48 78 3d 00 	vpbroadcastb 0x0(%rip),%zmm7        # 169b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x7b>
    1698:	00 00 00
			1697: R_X86_64_PC32	.rodata+0x503c
    169b:	c4 e1 fb 92 e3       	kmovq  %rbx,%k4
    16a0:	62 71 fd 48 6f 25 00 	vmovdqa64 0x0(%rip),%zmm12        # 16aa <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x8a>
    16a7:	00 00 00
			16a6: R_X86_64_PC32	.rodata+0x507c
    16aa:	62 72 7d 48 79 15 00 	vpbroadcastw 0x0(%rip),%zmm10        # 16b4 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x94>
    16b1:	00 00 00
			16b0: R_X86_64_PC32	.LC46-0x4
    16b4:	62 72 7d 48 79 3d 00 	vpbroadcastw 0x0(%rip),%zmm15        # 16be <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x9e>
    16bb:	00 00 00
			16ba: R_X86_64_PC32	.rodata+0x4ffc
    16be:	62 72 7d 48 79 35 00 	vpbroadcastw 0x0(%rip),%zmm14        # 16c8 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xa8>
    16c5:	00 00 00
			16c4: R_X86_64_PC32	.LC47-0x4
    16c8:	62 72 7d 48 79 05 00 	vpbroadcastw 0x0(%rip),%zmm8        # 16d2 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xb2>
    16cf:	00 00 00
			16ce: R_X86_64_PC32	.LC48-0x4
    16d2:	62 72 7d 48 79 0d 00 	vpbroadcastw 0x0(%rip),%zmm9        # 16dc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xbc>
    16d9:	00 00 00
			16d8: R_X86_64_PC32	.LC49-0x4
    16dc:	62 72 7d 48 79 2d 00 	vpbroadcastw 0x0(%rip),%zmm13        # 16e6 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xc6>
    16e3:	00 00 00
			16e2: R_X86_64_PC32	.LC50-0x4
    16e6:	eb 27                	jmp    170f <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xef>
    16e8:	0f 1f 84 00 00 00 00 	nopl   0x0(%rax,%rax,1)
    16ef:	00
    16f0:	31 c9                	xor    %ecx,%ecx
    16f2:	c4 e1 fb 93 d9       	kmovq  %k1,%rbx
    16f7:	f3 48 0f bc cb       	tzcnt  %rbx,%rcx
    16fc:	48 83 f9 ff          	cmp    $0xffffffffffffffff,%rcx
    1700:	0f 85 d7 00 00 00    	jne    17dd <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x1bd>
    1706:	4c 39 cf             	cmp    %r9,%rdi
    1709:	0f 82 15 01 00 00    	jb     1824 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x204>
    170f:	62 f1 7f 48 6f 06    	vmovdqu8 (%rsi),%zmm0
    1715:	c4 e1 cc 47 f6       	kxorq  %k6,%k6,%k6
    171a:	62 f3 7d 48 3e c2 01 	vpcmpltub %zmm2,%zmm0,%k0
    1721:	c4 e1 f8 98 f0       	kortestq %k0,%k6
    1726:	0f 82 c4 00 00 00    	jb     17f0 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x1d0>
    172c:	62 f3 75 48 3e d0 02 	vpcmpleub %zmm0,%zmm1,%k2
    1733:	62 f3 7d 4a 3e cb 01 	vpcmpltub %zmm3,%zmm0,%k1{%k2}
    173a:	c4 e1 f8 99 c9       	ktestq %k1,%k1
    173f:	75 af                	jne    16f0 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xd0>
    1741:	62 f3 55 48 3e c8 02 	vpcmpleub %zmm0,%zmm5,%k1
    1748:	c4 e1 fb 93 da       	kmovq  %k2,%rbx
    174d:	48 8d 14 1b          	lea    (%rbx,%rbx,1),%rdx
    1751:	c4 e1 f8 99 c9       	ktestq %k1,%k1
    1756:	0f 94 c1             	sete   %cl
    1759:	84 c9                	test   %cl,%cl
    175b:	0f 85 7f 02 00 00    	jne    19e0 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x3c0>
    1761:	62 f3 7d 48 3e df 05 	vpcmpnltub %zmm7,%zmm0,%k3
    1768:	c4 e1 fb 93 d9       	kmovq  %k1,%rbx
    176d:	48 c1 e3 02          	shl    $0x2,%rbx
    1771:	c4 e1 fc 45 fa       	korq   %k2,%k0,%k7
    1776:	48 09 da             	or     %rbx,%rdx
    1779:	c4 e1 fb 93 cf       	kmovq  %k7,%rcx
    177e:	c4 e1 f8 44 e8       	knotq  %k0,%k5
    1783:	48 f7 d1             	not    %rcx
    1786:	c4 61 fb 93 d7       	kmovq  %k7,%r10
    178b:	c4 e1 f8 98 db       	kortestq %k3,%k3
    1790:	0f 85 9a 02 00 00    	jne    1a30 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x410>
    1796:	48 39 d1             	cmp    %rdx,%rcx
    1799:	0f 84 61 05 00 00    	je     1d00 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x6e0>
    179f:	c4 e1 fb 93 cf       	kmovq  %k7,%rcx
    17a4:	48 31 d1             	xor    %rdx,%rcx
    17a7:	49 09 d2             	or     %rdx,%r10
    17aa:	48 f7 d1             	not    %rcx
    17ad:	f3 48 0f bc c9       	tzcnt  %rcx,%rcx
    17b2:	49 83 fa ff          	cmp    $0xffffffffffffffff,%r10
    17b6:	0f 85 40 ff ff ff    	jne    16fc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xdc>
    17bc:	c4 e1 fb 93 da       	kmovq  %k2,%rbx
    17c1:	c4 e2 f0 f5 d3       	bzhi   %rcx,%rbx,%rdx
    17c6:	b9 3f 00 00 00       	mov    $0x3f,%ecx
    17cb:	f3 48 0f bd d2       	lzcnt  %rdx,%rdx
    17d0:	48 29 d1             	sub    %rdx,%rcx
    17d3:	48 83 f9 ff          	cmp    $0xffffffffffffffff,%rcx
    17d7:	0f 84 29 ff ff ff    	je     1706 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xe6>
    17dd:	31 c0                	xor    %eax,%eax
    17df:	c5 f8 77             	vzeroupper
    17e2:	5b                   	pop    %rbx
    17e3:	41 5c                	pop    %r12
    17e5:	41 5d                	pop    %r13
    17e7:	41 5e                	pop    %r14
    17e9:	41 5f                	pop    %r15
    17eb:	5d                   	pop    %rbp
    17ec:	c3                   	ret
    17ed:	0f 1f 00             	nopl   (%rax)
    17f0:	62 f2 7d 48 30 e0    	vpmovzxbw %ymm0,%zmm4
    17f6:	62 f3 fd 48 3b c0 01 	vextracti64x4 $0x1,%zmm0,%ymm0
    17fd:	4c 89 ce             	mov    %r9,%rsi
    1800:	49 83 c1 40          	add    $0x40,%r9
    1804:	62 f2 7d 48 30 c0    	vpmovzxbw %ymm0,%zmm0
    180a:	62 f1 fe 48 7f 20    	vmovdqu64 %zmm4,(%rax)
    1810:	48 83 e8 80          	sub    $0xffffffffffffff80,%rax
    1814:	62 f1 fe 48 7f 40 ff 	vmovdqu64 %zmm0,-0x40(%rax)
    181b:	4c 39 cf             	cmp    %r9,%rdi
    181e:	0f 83 eb fe ff ff    	jae    170f <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xef>
    1824:	48 39 f7             	cmp    %rsi,%rdi
    1827:	0f 86 58 02 00 00    	jbe    1a85 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x465>
    182d:	48 bb 55 55 55 55 55 	movabs $0x5555555555555555,%rbx
    1834:	55 55 55
    1837:	41 bd ff ff ff ff    	mov    $0xffffffff,%r13d
    183d:	62 f2 7d 48 78 15 00 	vpbroadcastb 0x0(%rip),%zmm2        # 1847 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x227>
    1844:	00 00 00
			1843: R_X86_64_PC32	.rodata+0x4f7c
    1847:	62 f2 7d 48 78 1d 00 	vpbroadcastb 0x0(%rip),%zmm3        # 1851 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x231>
    184e:	00 00 00
			184d: R_X86_64_PC32	.LC42-0x4
    1851:	62 f2 7d 48 78 25 00 	vpbroadcastb 0x0(%rip),%zmm4        # 185b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x23b>
    1858:	00 00 00
			1857: R_X86_64_PC32	.LC43-0x4
    185b:	49 89 df             	mov    %rbx,%r15
    185e:	62 f2 7d 48 78 2d 00 	vpbroadcastb 0x0(%rip),%zmm5        # 1868 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x248>
    1865:	00 00 00
			1864: R_X86_64_PC32	.LC44-0x4
    1868:	62 53 2d 48 25 d2 ff 	vpternlogd $0xff,%zmm10,%zmm10,%zmm10
    186f:	62 f2 7d 48 78 35 00 	vpbroadcastb 0x0(%rip),%zmm6        # 1879 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x259>
    1876:	00 00 00
			1875: R_X86_64_PC32	.rodata+0x503c
    1879:	62 71 fd 48 6f 1d 00 	vmovdqa64 0x0(%rip),%zmm11        # 1883 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x263>
    1880:	00 00 00
			187f: R_X86_64_PC32	.rodata+0x507c
    1883:	49 bb ff ff ff ff ff 	movabs $0x3fffffffffffffff,%r11
    188a:	ff ff 3f
    188d:	62 72 7d 48 79 0d 00 	vpbroadcastw 0x0(%rip),%zmm9        # 1897 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x277>
    1894:	00 00 00
			1893: R_X86_64_PC32	.LC46-0x4
    1897:	62 72 7d 48 79 35 00 	vpbroadcastw 0x0(%rip),%zmm14        # 18a1 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x281>
    189e:	00 00 00
			189d: R_X86_64_PC32	.rodata+0x4ffc
    18a1:	62 72 7d 48 79 2d 00 	vpbroadcastw 0x0(%rip),%zmm13        # 18ab <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x28b>
    18a8:	00 00 00
			18a7: R_X86_64_PC32	.LC47-0x4
    18ab:	62 f2 7d 48 79 3d 00 	vpbroadcastw 0x0(%rip),%zmm7        # 18b5 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x295>
    18b2:	00 00 00
			18b1: R_X86_64_PC32	.LC48-0x4
    18b5:	62 72 7d 48 79 05 00 	vpbroadcastw 0x0(%rip),%zmm8        # 18bf <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x29f>
    18bc:	00 00 00
			18bb: R_X86_64_PC32	.LC49-0x4
    18bf:	62 72 7d 48 79 25 00 	vpbroadcastw 0x0(%rip),%zmm12        # 18c9 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x2a9>
    18c6:	00 00 00
			18c5: R_X86_64_PC32	.LC50-0x4
    18c9:	eb 24                	jmp    18ef <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x2cf>
    18cb:	0f 1f 44 00 00       	nopl   0x0(%rax,%rax,1)
    18d0:	31 d2                	xor    %edx,%edx
    18d2:	c4 e1 fb 93 d8       	kmovq  %k0,%rbx
    18d7:	f3 48 0f bc d3       	tzcnt  %rbx,%rdx
    18dc:	48 83 fa ff          	cmp    $0xffffffffffffffff,%rdx
    18e0:	0f 85 f7 fe ff ff    	jne    17dd <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x1bd>
    18e6:	48 39 f7             	cmp    %rsi,%rdi
    18e9:	0f 86 96 01 00 00    	jbe    1a85 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x465>
    18ef:	49 89 f9             	mov    %rdi,%r9
    18f2:	b9 01 00 00 00       	mov    $0x1,%ecx
    18f7:	49 29 f1             	sub    %rsi,%r9
    18fa:	c4 e2 b1 f7 d1       	shlx   %r9,%rcx,%rdx
    18ff:	4c 8d 52 ff          	lea    -0x1(%rdx),%r10
    1903:	44 89 cb             	mov    %r9d,%ebx
    1906:	c4 c1 fb 92 d2       	kmovq  %r10,%k2
    190b:	62 f1 7f ca 6f 06    	vmovdqu8 (%rsi),%zmm0{%k2}{z}
    1911:	49 89 d2             	mov    %rdx,%r10
    1914:	49 f7 da             	neg    %r10
    1917:	62 f3 7d 4a 3e ca 01 	vpcmpltub %zmm2,%zmm0,%k1{%k2}
    191e:	c4 c1 fb 92 fa       	kmovq  %r10,%k7
    1923:	c4 e1 f8 98 f9       	kortestq %k1,%k7
    1928:	0f 82 3a 01 00 00    	jb     1a68 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x448>
    192e:	62 f3 65 48 3e d8 02 	vpcmpleub %zmm0,%zmm3,%k3
    1935:	62 f3 7d 4b 3e c4 01 	vpcmpltub %zmm4,%zmm0,%k0{%k3}
    193c:	c4 e1 f8 99 c0       	ktestq %k0,%k0
    1941:	75 8d                	jne    18d0 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x2b0>
    1943:	62 f3 55 48 3e c0 02 	vpcmpleub %zmm0,%zmm5,%k0
    194a:	c4 e1 fb 93 db       	kmovq  %k3,%rbx
    194f:	4c 8d 14 1b          	lea    (%rbx,%rbx,1),%r10
    1953:	c4 e1 f8 99 c0       	ktestq %k0,%k0
    1958:	0f 94 c2             	sete   %dl
    195b:	84 d2                	test   %dl,%dl
    195d:	0f 85 45 01 00 00    	jne    1aa8 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x488>
    1963:	62 f3 7d 48 3e ee 05 	vpcmpnltub %zmm6,%zmm0,%k5
    196a:	c4 e1 fb 93 d8       	kmovq  %k0,%rbx
    196f:	c4 e1 f8 44 f1       	knotq  %k1,%k6
    1974:	c4 e1 f4 45 fb       	korq   %k3,%k1,%k7
    1979:	48 8d 14 9d 00 00 00 	lea    0x0(,%rbx,4),%rdx
    1980:	00
    1981:	c4 e1 ec 47 e7       	kxorq  %k7,%k2,%k4
    1986:	c4 e1 cc 41 f2       	kandq  %k2,%k6,%k6
    198b:	c4 61 fb 93 e4       	kmovq  %k4,%r12
    1990:	49 09 d2             	or     %rdx,%r10
    1993:	c4 e1 f8 98 ed       	kortestq %k5,%k5
    1998:	0f 85 8a 01 00 00    	jne    1b28 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x508>
    199e:	4d 39 d4             	cmp    %r10,%r12
    19a1:	0f 84 91 04 00 00    	je     1e38 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x818>
    19a7:	c4 e1 fb 93 d4       	kmovq  %k4,%rdx
    19ac:	4c 31 d2             	xor    %r10,%rdx
    19af:	f3 48 0f bc d2       	tzcnt  %rdx,%rdx
    19b4:	c4 42 a8 f2 e4       	andn   %r12,%r10,%r12
    19b9:	0f 85 1d ff ff ff    	jne    18dc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x2bc>
    19bf:	31 c9                	xor    %ecx,%ecx
    19c1:	c4 e1 fb 93 db       	kmovq  %k3,%rbx
    19c6:	c4 e2 e8 f5 d3       	bzhi   %rdx,%rbx,%rdx
    19cb:	f3 48 0f bd ca       	lzcnt  %rdx,%rcx
    19d0:	ba 3f 00 00 00       	mov    $0x3f,%edx
    19d5:	48 29 ca             	sub    %rcx,%rdx
    19d8:	e9 ff fe ff ff       	jmp    18dc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x2bc>
    19dd:	0f 1f 00             	nopl   (%rax)
    19e0:	c4 e1 fc 45 c2       	korq   %k2,%k0,%k0
    19e5:	c4 e1 d4 46 ed       	kxnorq %k5,%k5,%k5
    19ea:	c4 e1 fc 41 cd       	kandq  %k5,%k0,%k1
    19ef:	c4 e1 fb 93 c9       	kmovq  %k1,%rcx
    19f4:	48 f7 d1             	not    %rcx
    19f7:	48 39 d1             	cmp    %rdx,%rcx
    19fa:	0f 84 60 01 00 00    	je     1b60 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x540>
    1a00:	c4 e1 fb 93 c9       	kmovq  %k1,%rcx
    1a05:	48 31 d1             	xor    %rdx,%rcx
    1a08:	c4 e1 fb 93 d9       	kmovq  %k1,%rbx
    1a0d:	48 09 d3             	or     %rdx,%rbx
    1a10:	48 f7 d1             	not    %rcx
    1a13:	f3 48 0f bc c9       	tzcnt  %rcx,%rcx
    1a18:	48 83 fb ff          	cmp    $0xffffffffffffffff,%rbx
    1a1c:	0f 85 da fc ff ff    	jne    16fc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xdc>
    1a22:	e9 95 fd ff ff       	jmp    17bc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x19c>
    1a27:	66 0f 1f 84 00 00 00 	nopw   0x0(%rax,%rax,1)
    1a2e:	00 00
    1a30:	c4 e1 fb 93 db       	kmovq  %k3,%rbx
    1a35:	48 c1 e3 03          	shl    $0x3,%rbx
    1a39:	48 09 da             	or     %rbx,%rdx
    1a3c:	48 39 ca             	cmp    %rcx,%rdx
    1a3f:	0f 84 7b 01 00 00    	je     1bc0 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x5a0>
    1a45:	48 89 d1             	mov    %rdx,%rcx
    1a48:	4c 09 d2             	or     %r10,%rdx
    1a4b:	4c 31 d1             	xor    %r10,%rcx
    1a4e:	48 f7 d1             	not    %rcx
    1a51:	f3 48 0f bc c9       	tzcnt  %rcx,%rcx
    1a56:	48 83 fa ff          	cmp    $0xffffffffffffffff,%rdx
    1a5a:	0f 85 9c fc ff ff    	jne    16fc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xdc>
    1a60:	e9 57 fd ff ff       	jmp    17bc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x19c>
    1a65:	0f 1f 00             	nopl   (%rax)
    1a68:	49 83 f9 20          	cmp    $0x20,%r9
    1a6c:	77 7a                	ja     1ae8 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4c8>
    1a6e:	62 f2 7d 48 30 c0    	vpmovzxbw %ymm0,%zmm0
    1a74:	83 ea 01             	sub    $0x1,%edx
    1a77:	c5 fb 92 fa          	kmovd  %edx,%k7
    1a7b:	62 f1 ff 4f 7f 00    	vmovdqu16 %zmm0,(%rax){%k7}
    1a81:	4a 8d 04 48          	lea    (%rax,%r9,2),%rax
    1a85:	48 85 c0             	test   %rax,%rax
    1a88:	0f 84 4f fd ff ff    	je     17dd <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x1bd>
    1a8e:	4c 29 c0             	sub    %r8,%rax
    1a91:	48 d1 f8             	sar    %rax
    1a94:	c5 f8 77             	vzeroupper
    1a97:	5b                   	pop    %rbx
    1a98:	41 5c                	pop    %r12
    1a9a:	41 5d                	pop    %r13
    1a9c:	41 5e                	pop    %r14
    1a9e:	41 5f                	pop    %r15
    1aa0:	5d                   	pop    %rbp
    1aa1:	c3                   	ret
    1aa2:	66 0f 1f 44 00 00    	nopw   0x0(%rax,%rax,1)
    1aa8:	c4 e1 f4 45 cb       	korq   %k3,%k1,%k1
    1aad:	c4 e1 f4 41 ca       	kandq  %k2,%k1,%k1
    1ab2:	c4 e1 ec 47 e1       	kxorq  %k1,%k2,%k4
    1ab7:	c4 61 fb 93 cc       	kmovq  %k4,%r9
    1abc:	4d 39 d1             	cmp    %r10,%r9
    1abf:	0f 84 fb 02 00 00    	je     1dc0 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x7a0>
    1ac5:	c4 e1 fb 93 d4       	kmovq  %k4,%rdx
    1aca:	4c 31 d2             	xor    %r10,%rdx
    1acd:	f3 48 0f bc d2       	tzcnt  %rdx,%rdx
    1ad2:	c4 42 a8 f2 c9       	andn   %r9,%r10,%r9
    1ad7:	0f 84 e2 fe ff ff    	je     19bf <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x39f>
    1add:	e9 fa fd ff ff       	jmp    18dc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x2bc>
    1ae2:	66 0f 1f 44 00 00    	nopw   0x0(%rax,%rax,1)
    1ae8:	62 f2 7d 48 30 c8    	vpmovzxbw %ymm0,%zmm1
    1aee:	83 eb 20             	sub    $0x20,%ebx
    1af1:	62 f3 fd 48 3b c0 01 	vextracti64x4 $0x1,%zmm0,%ymm0
    1af8:	ba 01 00 00 00       	mov    $0x1,%edx
    1afd:	62 f2 7d 48 30 c0    	vpmovzxbw %ymm0,%zmm0
    1b03:	c4 e2 61 f7 d2       	shlx   %ebx,%edx,%edx
    1b08:	83 ea 01             	sub    $0x1,%edx
    1b0b:	62 f1 fe 48 7f 08    	vmovdqu64 %zmm1,(%rax)
    1b11:	c5 fb 92 fa          	kmovd  %edx,%k7
    1b15:	62 f1 ff 4f 7f 40 01 	vmovdqu16 %zmm0,0x40(%rax){%k7}
    1b1c:	e9 60 ff ff ff       	jmp    1a81 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x461>
    1b21:	0f 1f 80 00 00 00 00 	nopl   0x0(%rax)
    1b28:	c4 e1 fb 93 dd       	kmovq  %k5,%rbx
    1b2d:	48 c1 e3 03          	shl    $0x3,%rbx
    1b31:	49 09 da             	or     %rbx,%r10
    1b34:	4d 39 e2             	cmp    %r12,%r10
    1b37:	0f 84 f3 03 00 00    	je     1f30 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x910>
    1b3d:	4c 89 d2             	mov    %r10,%rdx
    1b40:	4c 31 e2             	xor    %r12,%rdx
    1b43:	f3 48 0f bc d2       	tzcnt  %rdx,%rdx
    1b48:	c4 42 a8 f2 e4       	andn   %r12,%r10,%r12
    1b4d:	0f 84 6c fe ff ff    	je     19bf <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x39f>
    1b53:	e9 84 fd ff ff       	jmp    18dc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x2bc>
    1b58:	0f 1f 84 00 00 00 00 	nopl   0x0(%rax,%rax,1)
    1b5f:	00
    1b60:	62 f1 7d ca f8 f3    	vpsubb %zmm3,%zmm0,%zmm6{%k2}{z}
    1b66:	c4 e1 f8 44 da       	knotq  %k2,%k3
    1b6b:	c4 e1 fb 93 db       	kmovq  %k3,%rbx
    1b70:	c4 e2 9b f5 d3       	pdep   %rbx,%r12,%rdx
    1b75:	62 f2 7d c9 63 f4    	vpcompressb %zmm6,%zmm4{%k1}{z}
    1b7b:	f3 48 0f bd d2       	lzcnt  %rdx,%rdx
    1b80:	48 29 d6             	sub    %rdx,%rsi
    1b83:	48 83 c0 40          	add    $0x40,%rax
    1b87:	62 f2 7d 48 30 f4    	vpmovzxbw %ymm4,%zmm6
    1b8d:	62 f2 7d cb 63 c4    	vpcompressb %zmm0,%zmm4{%k3}{z}
    1b93:	48 89 f1             	mov    %rsi,%rcx
    1b96:	62 f2 7d 48 30 c4    	vpmovzxbw %ymm4,%zmm0
    1b9c:	62 f1 5d 48 71 f6 06 	vpsllw $0x6,%zmm6,%zmm4
    1ba3:	48 8d 76 40          	lea    0x40(%rsi),%rsi
    1ba7:	62 f1 7d 48 fd c4    	vpaddw %zmm4,%zmm0,%zmm0
    1bad:	4c 8d 89 80 00 00 00 	lea    0x80(%rcx),%r9
    1bb4:	62 f1 ff 48 7f 40 ff 	vmovdqu16 %zmm0,-0x40(%rax)
    1bbb:	e9 46 fb ff ff       	jmp    1706 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xe6>
    1bc0:	c4 c1 fb 92 f2       	kmovq  %r10,%k6
    1bc5:	c4 e1 fb 92 fb       	kmovq  %rbx,%k7
    1bca:	c4 e1 c4 45 fe       	korq   %k6,%k7,%k7
    1bcf:	c4 61 fb 93 ef       	kmovq  %k7,%r13
    1bd4:	49 d1 ed             	shr    %r13
    1bd7:	c4 e1 fb 92 f3       	kmovq  %rbx,%k6
    1bdc:	c4 e1 fb 93 cf       	kmovq  %k7,%rcx
    1be1:	c4 e1 fc 45 c2       	korq   %k2,%k0,%k0
    1be6:	62 f1 7f cd 6f f1    	vmovdqu8 %zmm1,%zmm6{%k5}{z}
    1bec:	c4 c1 fb 92 fd       	kmovq  %r13,%k7
    1bf1:	c4 e1 c4 45 fe       	korq   %k6,%k7,%k7
    1bf6:	62 72 7d cf 63 e4    	vpcompressb %zmm12,%zmm4{%k7}{z}
    1bfc:	62 f1 4d 48 df f0    	vpandnd %zmm0,%zmm6,%zmm6
    1c02:	62 f2 7d 48 30 e4    	vpmovzxbw %ymm4,%zmm4
    1c08:	c4 e3 f9 31 ed 01    	kshiftrq $0x1,%k5,%k5
    1c0e:	c4 61 fb 93 ef       	kmovq  %k7,%r13
    1c13:	62 e1 7f cd 6f ce    	vmovdqu8 %zmm6,%zmm17{%k5}{z}
    1c19:	62 c1 5d 48 fd d3    	vpaddw %zmm11,%zmm4,%zmm18
    1c1f:	62 e2 5d cc 8d c6    	vpermb %zmm6,%zmm4,%zmm16{%k4}{z}
    1c25:	c4 c1 fb 92 eb       	kmovq  %r11,%k5
    1c2a:	62 b2 6d c4 8d c1    	vpermb %zmm17,%zmm18,%zmm0{%k4}{z}
    1c30:	c4 e1 f4 41 d5       	kandq  %k5,%k1,%k2
    1c35:	62 d1 5d 48 fd e2    	vpaddw %zmm10,%zmm4,%zmm4
    1c3b:	62 e1 7f ca 6f ce    	vmovdqu8 %zmm6,%zmm17{%k2}{z}
    1c41:	62 b2 5d cc 8d f1    	vpermb %zmm17,%zmm4,%zmm6{%k4}{z}
    1c47:	62 f1 7d 48 71 f0 06 	vpsllw $0x6,%zmm0,%zmm0
    1c4e:	c4 c2 e2 f5 d5       	pext   %r13,%rbx,%rdx
    1c53:	49 89 d6             	mov    %rdx,%r14
    1c56:	62 f1 5d 48 71 f6 0c 	vpsllw $0xc,%zmm6,%zmm4
    1c5d:	62 b1 7d 48 fd c0    	vpaddw %zmm16,%zmm0,%zmm0
    1c63:	c5 fb 92 f2          	kmovd  %edx,%k6
    1c67:	49 d1 ee             	shr    %r14
    1c6a:	62 f1 7d 48 fd c4    	vpaddw %zmm4,%zmm0,%zmm0
    1c70:	62 d1 ff ce 6f f7    	vmovdqu16 %zmm15,%zmm6{%k6}{z}
    1c76:	c4 c1 fb 92 d6       	kmovq  %r14,%k2
    1c7b:	c4 e1 fb 93 d3       	kmovq  %k3,%rdx
    1c80:	62 f1 5d 48 71 d0 04 	vpsrlw $0x4,%zmm0,%zmm4
    1c87:	62 f1 7d 48 eb c6    	vpord  %zmm6,%zmm0,%zmm0
    1c8d:	c4 61 fb 93 f1       	kmovq  %k1,%r14
    1c92:	c4 c2 e8 f2 d6       	andn   %r14,%rdx,%rdx
    1c97:	62 d1 5d 4a fd c6    	vpaddw %zmm14,%zmm4,%zmm0{%k2}
    1c9d:	48 c1 e2 02          	shl    $0x2,%rdx
    1ca1:	62 d1 7d 48 fd e1    	vpaddw %zmm9,%zmm0,%zmm4
    1ca7:	c4 c2 ea f5 d5       	pext   %r13,%rdx,%rdx
    1cac:	c4 e1 fb 92 ca       	kmovq  %rdx,%k1
    1cb1:	62 d3 fd 49 3e d8 01 	vpcmpltuw %zmm8,%zmm0,%k3{%k1}
    1cb8:	62 d3 dd 4a 3e c5 05 	vpcmpnltuw %zmm13,%zmm4,%k0{%k2}
    1cbf:	62 d3 dd 49 3e c8 01 	vpcmpltuw %zmm8,%zmm4,%k1{%k1}
    1cc6:	c4 e1 e5 45 c9       	kord   %k1,%k3,%k1
    1ccb:	c4 e1 f9 98 c1       	kortestd %k1,%k0
    1cd0:	0f 84 f9 03 00 00    	je     20cf <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xaaf>
    1cd6:	c4 e1 fd 45 e9       	kord   %k1,%k0,%k5
    1cdb:	c4 e1 fb 92 db       	kmovq  %rbx,%k3
    1ce0:	c5 fb 93 d5          	kmovd  %k5,%edx
    1ce4:	c4 c1 fb 92 ea       	kmovq  %r10,%k5
    1ce9:	c4 e2 f3 f5 ca       	pdep   %rdx,%rcx,%rcx
    1cee:	c4 e1 d4 45 c3       	korq   %k3,%k5,%k0
    1cf3:	f3 48 0f bc c9       	tzcnt  %rcx,%rcx
    1cf8:	e9 ff f9 ff ff       	jmp    16fc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xdc>
    1cfd:	0f 1f 00             	nopl   (%rax)
    1d00:	c4 e1 fb 93 d7       	kmovq  %k7,%rdx
    1d05:	48 d1 ea             	shr    %rdx
    1d08:	62 f1 7f cd 6f f1    	vmovdqu8 %zmm1,%zmm6{%k5}{z}
    1d0e:	c4 e3 f9 31 ed 01    	kshiftrq $0x1,%k5,%k5
    1d14:	c4 e1 fb 92 f2       	kmovq  %rdx,%k6
    1d19:	62 72 7d ce 63 e4    	vpcompressb %zmm12,%zmm4{%k6}{z}
    1d1f:	62 f1 4d 48 df f0    	vpandnd %zmm0,%zmm6,%zmm6
    1d25:	c4 e1 fc 45 c2       	korq   %k2,%k0,%k0
    1d2a:	62 f2 7d 48 30 e4    	vpmovzxbw %ymm4,%zmm4
    1d30:	62 e1 7f cd 6f ce    	vmovdqu8 %zmm6,%zmm17{%k5}{z}
    1d36:	c4 c1 fb 92 eb       	kmovq  %r11,%k5
    1d3b:	c4 e1 f4 41 cd       	kandq  %k5,%k1,%k1
    1d40:	62 c1 5d 48 fd d3    	vpaddw %zmm11,%zmm4,%zmm18
    1d46:	62 e2 5d cc 8d c6    	vpermb %zmm6,%zmm4,%zmm16{%k4}{z}
    1d4c:	c4 e2 e2 f5 da       	pext   %rdx,%rbx,%rbx
    1d51:	62 d1 5d 48 fd e2    	vpaddw %zmm10,%zmm4,%zmm4
    1d57:	62 b2 6d c4 8d c1    	vpermb %zmm17,%zmm18,%zmm0{%k4}{z}
    1d5d:	62 e1 7f c9 6f ce    	vmovdqu8 %zmm6,%zmm17{%k1}{z}
    1d63:	c4 e1 fb 92 cb       	kmovq  %rbx,%k1
    1d68:	62 f1 7d 48 71 f0 06 	vpsllw $0x6,%zmm0,%zmm0
    1d6f:	62 b2 5d cc 8d f1    	vpermb %zmm17,%zmm4,%zmm6{%k4}{z}
    1d75:	62 f1 5d 48 71 f6 0c 	vpsllw $0xc,%zmm6,%zmm4
    1d7c:	62 b1 7d 48 fd c0    	vpaddw %zmm16,%zmm0,%zmm0
    1d82:	62 f1 7d 48 fd c4    	vpaddw %zmm4,%zmm0,%zmm0
    1d88:	62 d1 7d 48 fd e1    	vpaddw %zmm9,%zmm0,%zmm4
    1d8e:	62 d3 fd 49 3e c0 01 	vpcmpltuw %zmm8,%zmm0,%k0{%k1}
    1d95:	62 d3 dd 49 3e c8 01 	vpcmpltuw %zmm8,%zmm4,%k1{%k1}
    1d9c:	c4 e1 fd 45 c1       	kord   %k1,%k0,%k0
    1da1:	c4 e1 f9 98 c0       	kortestd %k0,%k0
    1da6:	0f 84 e0 02 00 00    	je     208c <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xa6c>
    1dac:	c5 fb 93 c8          	kmovd  %k0,%ecx
    1db0:	c4 e2 ab f5 c9       	pdep   %rcx,%r10,%rcx
    1db5:	f3 48 0f bc c9       	tzcnt  %rcx,%rcx
    1dba:	e9 3d f9 ff ff       	jmp    16fc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xdc>
    1dbf:	90                   	nop
    1dc0:	62 71 7d cb f8 fc    	vpsubb %zmm4,%zmm0,%zmm15{%k3}{z}
    1dc6:	c4 e1 f8 44 c3       	knotq  %k3,%k0
    1dcb:	c4 e1 fc 41 d2       	kandq  %k2,%k0,%k2
    1dd0:	c4 e1 fb 93 d9       	kmovq  %k1,%rbx
    1dd5:	62 72 7d c9 63 f9    	vpcompressb %zmm15,%zmm1{%k1}{z}
    1ddb:	c4 e2 93 f5 d3       	pdep   %rbx,%r13,%rdx
    1de0:	c4 e1 fb 93 da       	kmovq  %k2,%rbx
    1de5:	f3 48 0f b8 d2       	popcnt %rdx,%rdx
    1dea:	62 72 7d 48 30 f9    	vpmovzxbw %ymm1,%zmm15
    1df0:	62 f2 7d ca 63 c1    	vpcompressb %zmm0,%zmm1{%k2}{z}
    1df6:	c4 62 93 f5 cb       	pdep   %rbx,%r13,%r9
    1dfb:	c4 e2 e9 f7 c9       	shlx   %rdx,%rcx,%rcx
    1e00:	62 f2 7d 48 30 c1    	vpmovzxbw %ymm1,%zmm0
    1e06:	62 d1 75 48 71 f7 06 	vpsllw $0x6,%zmm15,%zmm1
    1e0d:	83 e9 01             	sub    $0x1,%ecx
    1e10:	f3 4d 0f bd c9       	lzcnt  %r9,%r9
    1e15:	62 f1 7d 48 fd c1    	vpaddw %zmm1,%zmm0,%zmm0
    1e1b:	4c 29 ce             	sub    %r9,%rsi
    1e1e:	c5 fb 92 f9          	kmovd  %ecx,%k7
    1e22:	48 83 c6 40          	add    $0x40,%rsi
    1e26:	62 f1 ff 4f 7f 00    	vmovdqu16 %zmm0,(%rax){%k7}
    1e2c:	48 8d 04 50          	lea    (%rax,%rdx,2),%rax
    1e30:	e9 b1 fa ff ff       	jmp    18e6 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x2c6>
    1e35:	0f 1f 00             	nopl   (%rax)
    1e38:	41 83 e9 01          	sub    $0x1,%r9d
    1e3c:	c4 e1 fb 93 df       	kmovq  %k7,%rbx
    1e41:	48 d1 eb             	shr    %rbx
    1e44:	c4 e1 f4 45 cb       	korq   %k3,%k1,%k1
    1e49:	62 f1 7f ce 6f cb    	vmovdqu8 %zmm3,%zmm1{%k6}{z}
    1e4f:	c4 e1 fb 92 db       	kmovq  %rbx,%k3
    1e54:	c4 62 b1 f7 c9       	shlx   %r9,%rcx,%r9
    1e59:	c4 c1 fb 92 e1       	kmovq  %r9,%k4
    1e5e:	c4 e1 e4 45 dc       	korq   %k4,%k3,%k3
    1e63:	62 f1 75 48 df c0    	vpandnd %zmm0,%zmm1,%zmm0
    1e69:	c4 e3 f9 31 f6 01    	kshiftrq $0x1,%k6,%k6
    1e6f:	c4 c1 fb 92 e7       	kmovq  %r15,%k4
    1e74:	62 52 7d cb 63 df    	vpcompressb %zmm11,%zmm15{%k3}{z}
    1e7a:	62 e1 7f ce 6f c8    	vmovdqu8 %zmm0,%zmm17{%k6}{z}
    1e80:	c4 e1 fb 93 db       	kmovq  %k3,%rbx
    1e85:	62 52 7d 48 30 ff    	vpmovzxbw %ymm15,%zmm15
    1e8b:	62 c1 05 48 fd d2    	vpaddw %zmm10,%zmm15,%zmm18
    1e91:	62 e2 05 cc 8d c0    	vpermb %zmm0,%zmm15,%zmm16{%k4}{z}
    1e97:	62 51 05 48 fd f9    	vpaddw %zmm9,%zmm15,%zmm15
    1e9d:	62 b2 6d c4 8d c9    	vpermb %zmm17,%zmm18,%zmm1{%k4}{z}
    1ea3:	c4 c1 fb 92 e3       	kmovq  %r11,%k4
    1ea8:	c4 e1 fc 41 cc       	kandq  %k4,%k0,%k1
    1ead:	62 e1 7f c9 6f c8    	vmovdqu8 %zmm0,%zmm17{%k1}{z}
    1eb3:	62 f1 75 48 71 f1 06 	vpsllw $0x6,%zmm1,%zmm1
    1eba:	c4 c1 fb 92 e7       	kmovq  %r15,%k4
    1ebf:	c4 e1 ec 41 c0       	kandq  %k0,%k2,%k0
    1ec4:	62 b2 05 cc 8d c1    	vpermb %zmm17,%zmm15,%zmm0{%k4}{z}
    1eca:	62 f1 05 48 71 f0 0c 	vpsllw $0xc,%zmm0,%zmm15
    1ed1:	62 b1 75 48 fd c0    	vpaddw %zmm16,%zmm1,%zmm0
    1ed7:	c4 e1 fb 93 d0       	kmovq  %k0,%rdx
    1edc:	48 c1 e2 02          	shl    $0x2,%rdx
    1ee0:	62 d1 7d 48 fd c7    	vpaddw %zmm15,%zmm0,%zmm0
    1ee6:	c4 e2 ea f5 db       	pext   %rbx,%rdx,%rbx
    1eeb:	c4 e1 fb 92 cb       	kmovq  %rbx,%k1
    1ef0:	62 d1 7d 48 fd c8    	vpaddw %zmm8,%zmm0,%zmm1
    1ef6:	62 f3 fd 49 3e c7 01 	vpcmpltuw %zmm7,%zmm0,%k0{%k1}
    1efd:	62 f3 f5 49 3e cf 01 	vpcmpltuw %zmm7,%zmm1,%k1{%k1}
    1f04:	c4 e1 fd 45 c1       	kord   %k1,%k0,%k0
    1f09:	c4 e1 f9 98 c0       	kortestd %k0,%k0
    1f0e:	0f 84 ce 01 00 00    	je     20e2 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xac2>
    1f14:	c5 fb 93 d0          	kmovd  %k0,%edx
    1f18:	c4 e1 fb 93 df       	kmovq  %k7,%rbx
    1f1d:	c4 e2 e3 f5 d2       	pdep   %rdx,%rbx,%rdx
    1f22:	f3 48 0f bc d2       	tzcnt  %rdx,%rdx
    1f27:	e9 b0 f9 ff ff       	jmp    18dc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x2bc>
    1f2c:	0f 1f 40 00          	nopl   0x0(%rax)
    1f30:	41 83 e9 01          	sub    $0x1,%r9d
    1f34:	c4 e1 fb 92 e3       	kmovq  %rbx,%k4
    1f39:	c4 e1 dc 45 e7       	korq   %k7,%k4,%k4
    1f3e:	c4 61 fb 93 f4       	kmovq  %k4,%r14
    1f43:	49 d1 ee             	shr    %r14
    1f46:	62 f1 7f ce 6f cb    	vmovdqu8 %zmm3,%zmm1{%k6}{z}
    1f4c:	c4 e1 f4 45 cb       	korq   %k3,%k1,%k1
    1f51:	c4 62 b1 f7 c9       	shlx   %r9,%rcx,%r9
    1f56:	c4 c1 fb 92 ce       	kmovq  %r14,%k1
    1f5b:	c4 e1 fb 93 d4       	kmovq  %k4,%rdx
    1f60:	c4 e1 fb 92 e3       	kmovq  %rbx,%k4
    1f65:	c4 e1 f4 45 cc       	korq   %k4,%k1,%k1
    1f6a:	c4 c1 fb 92 e1       	kmovq  %r9,%k4
    1f6f:	c4 e1 f4 45 cc       	korq   %k4,%k1,%k1
    1f74:	62 f1 75 48 df c0    	vpandnd %zmm0,%zmm1,%zmm0
    1f7a:	c4 e3 f9 31 f6 01    	kshiftrq $0x1,%k6,%k6
    1f80:	62 52 7d c9 63 df    	vpcompressb %zmm11,%zmm15{%k1}{z}
    1f86:	62 e1 7f ce 6f c8    	vmovdqu8 %zmm0,%zmm17{%k6}{z}
    1f8c:	c4 c1 fb 92 e7       	kmovq  %r15,%k4
    1f91:	c4 61 fb 93 f1       	kmovq  %k1,%r14
    1f96:	62 52 7d 48 30 ff    	vpmovzxbw %ymm15,%zmm15
    1f9c:	c4 42 e2 f5 ce       	pext   %r14,%rbx,%r9
    1fa1:	4d 89 ce             	mov    %r9,%r14
    1fa4:	c4 c1 7b 92 f1       	kmovd  %r9d,%k6
    1fa9:	62 c1 05 48 fd d2    	vpaddw %zmm10,%zmm15,%zmm18
    1faf:	62 e2 05 cc 8d c0    	vpermb %zmm0,%zmm15,%zmm16{%k4}{z}
    1fb5:	49 d1 ee             	shr    %r14
    1fb8:	c4 61 fb 93 cd       	kmovq  %k5,%r9
    1fbd:	62 b2 6d c4 8d c9    	vpermb %zmm17,%zmm18,%zmm1{%k4}{z}
    1fc3:	62 51 05 48 fd f9    	vpaddw %zmm9,%zmm15,%zmm15
    1fc9:	c4 c1 fb 92 e3       	kmovq  %r11,%k4
    1fce:	c4 e1 fc 41 dc       	kandq  %k4,%k0,%k3
    1fd3:	62 e1 7f cb 6f c8    	vmovdqu8 %zmm0,%zmm17{%k3}{z}
    1fd9:	62 f1 75 48 71 f1 06 	vpsllw $0x6,%zmm1,%zmm1
    1fe0:	c4 c1 fb 92 e7       	kmovq  %r15,%k4
    1fe5:	c4 c1 fb 92 de       	kmovq  %r14,%k3
    1fea:	62 b2 05 cc 8d c1    	vpermb %zmm17,%zmm15,%zmm0{%k4}{z}
    1ff0:	c4 61 fb 93 f2       	kmovq  %k2,%r14
    1ff5:	4d 31 f1             	xor    %r14,%r9
    1ff8:	c4 61 fb 93 f0       	kmovq  %k0,%r14
    1ffd:	62 f1 05 48 71 f0 0c 	vpsllw $0xc,%zmm0,%zmm15
    2004:	62 b1 75 48 fd c0    	vpaddw %zmm16,%zmm1,%zmm0
    200a:	4d 21 f1             	and    %r14,%r9
    200d:	c4 61 fb 93 f1       	kmovq  %k1,%r14
    2012:	62 d1 7d 48 fd c7    	vpaddw %zmm15,%zmm0,%zmm0
    2018:	62 51 ff ce 6f fe    	vmovdqu16 %zmm14,%zmm15{%k6}{z}
    201e:	49 c1 e1 02          	shl    $0x2,%r9
    2022:	62 f1 75 48 71 d0 04 	vpsrlw $0x4,%zmm0,%zmm1
    2029:	62 d1 7d 48 eb c7    	vpord  %zmm15,%zmm0,%zmm0
    202f:	c4 42 b2 f5 f6       	pext   %r14,%r9,%r14
    2034:	c4 c1 fb 92 ee       	kmovq  %r14,%k5
    2039:	62 d1 75 4b fd c5    	vpaddw %zmm13,%zmm1,%zmm0{%k3}
    203f:	62 d1 7d 48 fd c8    	vpaddw %zmm8,%zmm0,%zmm1
    2045:	62 f3 fd 4d 3e f7 01 	vpcmpltuw %zmm7,%zmm0,%k6{%k5}
    204c:	62 d3 f5 4b 3e c4 05 	vpcmpnltuw %zmm12,%zmm1,%k0{%k3}
    2053:	62 f3 f5 4d 3e ef 01 	vpcmpltuw %zmm7,%zmm1,%k5{%k5}
    205a:	c4 e1 cd 45 ed       	kord   %k5,%k6,%k5
    205f:	c4 e1 f9 98 c5       	kortestd %k5,%k0
    2064:	0f 84 b6 00 00 00    	je     2120 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xb00>
    206a:	c4 e1 fd 45 e5       	kord   %k5,%k0,%k4
    206f:	c5 fb 93 cc          	kmovd  %k4,%ecx
    2073:	c4 e1 fb 92 e3       	kmovq  %rbx,%k4
    2078:	c4 e2 eb f5 d1       	pdep   %rcx,%rdx,%rdx
    207d:	c4 e1 c4 45 fc       	korq   %k4,%k7,%k7
    2082:	f3 48 0f bc d2       	tzcnt  %rdx,%rdx
    2087:	e9 50 f8 ff ff       	jmp    18dc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x2bc>
    208c:	c4 e2 9b f5 d2       	pdep   %rdx,%r12,%rdx
    2091:	45 31 c9             	xor    %r9d,%r9d
    2094:	b9 01 00 00 00       	mov    $0x1,%ecx
    2099:	f3 4c 0f b8 ca       	popcnt %rdx,%r9
    209e:	f3 48 0f bd d2       	lzcnt  %rdx,%rdx
    20a3:	c4 e2 b1 f7 c9       	shlx   %r9,%rcx,%rcx
    20a8:	48 29 d6             	sub    %rdx,%rsi
    20ab:	83 e9 01             	sub    $0x1,%ecx
    20ae:	c5 fb 92 f9          	kmovd  %ecx,%k7
    20b2:	48 89 f1             	mov    %rsi,%rcx
    20b5:	62 f1 ff 4f 7f 00    	vmovdqu16 %zmm0,(%rax){%k7}
    20bb:	48 8d 76 40          	lea    0x40(%rsi),%rsi
    20bf:	4a 8d 04 48          	lea    (%rax,%r9,2),%rax
    20c3:	4c 8d 89 80 00 00 00 	lea    0x80(%rcx),%r9
    20ca:	e9 37 f6 ff ff       	jmp    1706 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xe6>
    20cf:	c5 fb 93 d2          	kmovd  %k2,%edx
    20d3:	81 e2 00 00 00 80    	and    $0x80000000,%edx
    20d9:	f7 d2                	not    %edx
    20db:	c4 c2 eb f5 d5       	pdep   %r13,%rdx,%rdx
    20e0:	eb af                	jmp    2091 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xa71>
    20e2:	c4 e1 e4 41 e2       	kandq  %k2,%k3,%k4
    20e7:	c4 e1 fb 93 d4       	kmovq  %k4,%rdx
    20ec:	c4 e2 93 f5 d2       	pdep   %rdx,%r13,%rdx
    20f1:	45 31 c9             	xor    %r9d,%r9d
    20f4:	f3 4c 0f b8 ca       	popcnt %rdx,%r9
    20f9:	f3 48 0f bd d2       	lzcnt  %rdx,%rdx
    20fe:	c4 e2 b1 f7 c9       	shlx   %r9,%rcx,%rcx
    2103:	48 29 d6             	sub    %rdx,%rsi
    2106:	83 e9 01             	sub    $0x1,%ecx
    2109:	48 83 c6 40          	add    $0x40,%rsi
    210d:	c5 fb 92 f9          	kmovd  %ecx,%k7
    2111:	62 f1 ff 4f 7f 00    	vmovdqu16 %zmm0,(%rax){%k7}
    2117:	4a 8d 04 48          	lea    (%rax,%r9,2),%rax
    211b:	e9 c6 f7 ff ff       	jmp    18e6 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x2c6>
    2120:	c5 fb 93 d3          	kmovd  %k3,%edx
    2124:	81 e2 00 00 00 80    	and    $0x80000000,%edx
    212a:	c4 e1 f4 41 ca       	kandq  %k2,%k1,%k1
    212f:	c4 e1 fb 93 d9       	kmovq  %k1,%rbx
    2134:	f7 d2                	not    %edx
    2136:	c4 e2 eb f5 d3       	pdep   %rbx,%rdx,%rdx
    213b:	eb b4                	jmp    20f1 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xad1>
    213d:	90                   	nop
    213e:	66 90                	xchg   %ax,%ax

Here is the LLVM 14 version. Again, straight from the static library:

0000000000002ff0 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs>:
    2ff0:	55                   	push   %rbp
    2ff1:	41 57                	push   %r15
    2ff3:	41 56                	push   %r14
    2ff5:	41 55                	push   %r13
    2ff7:	41 54                	push   %r12
    2ff9:	53                   	push   %rbx
    2ffa:	49 89 cd             	mov    %rcx,%r13
    2ffd:	49 b8 ff ff ff ff ff 	movabs $0x3fffffffffffffff,%r8
    3004:	ff ff 3f
    3007:	48 01 f2             	add    %rsi,%rdx
    300a:	62 a3 75 40 25 c9 ff 	vpternlogd $0xff,%zmm17,%zmm17,%zmm17
    3011:	62 f1 fd 48 6f 05 00 	vmovdqa64 0x0(%rip),%zmm0        # 301b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x2b>
    3018:	00 00 00
			3017: R_X86_64_PC32	.rodata+0x2bc
    301b:	62 f1 fd 48 6f 0d 00 	vmovdqa64 0x0(%rip),%zmm1        # 3025 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x35>
    3022:	00 00 00
			3021: R_X86_64_PC32	.rodata+0x2fc
    3025:	62 f1 fd 48 6f 15 00 	vmovdqa64 0x0(%rip),%zmm2        # 302f <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x3f>
    302c:	00 00 00
			302b: R_X86_64_PC32	.rodata+0x33c
    302f:	62 f1 fd 48 6f 1d 00 	vmovdqa64 0x0(%rip),%zmm3        # 3039 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x49>
    3036:	00 00 00
			3035: R_X86_64_PC32	.rodata+0x37c
    3039:	62 f1 fd 48 6f 25 00 	vmovdqa64 0x0(%rip),%zmm4        # 3043 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x53>
    3040:	00 00 00
			303f: R_X86_64_PC32	.rodata+0x3fc
    3043:	62 f2 7d 48 79 2d 00 	vpbroadcastw 0x0(%rip),%zmm5        # 304d <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x5d>
    304a:	00 00 00
			3049: R_X86_64_PC32	.rodata+0x47c
    304d:	62 f1 fd 48 6f 35 00 	vmovdqa64 0x0(%rip),%zmm6        # 3057 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x67>
    3054:	00 00 00
			3053: R_X86_64_PC32	.rodata+0x43c
    3057:	62 f1 fd 48 6f 3d 00 	vmovdqa64 0x0(%rip),%zmm7        # 3061 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x71>
    305e:	00 00 00
			305d: R_X86_64_PC32	.rodata+0x4bc
    3061:	41 b9 ff ff ff ff    	mov    $0xffffffff,%r9d
    3067:	62 71 fd 48 6f 05 00 	vmovdqa64 0x0(%rip),%zmm8        # 3071 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x81>
    306e:	00 00 00
			306d: R_X86_64_PC32	.rodata+0x57c
    3071:	62 71 fd 48 6f 0d 00 	vmovdqa64 0x0(%rip),%zmm9        # 307b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x8b>
    3078:	00 00 00
			3077: R_X86_64_PC32	.rodata+0x63c
    307b:	62 71 fd 48 6f 15 00 	vmovdqa64 0x0(%rip),%zmm10        # 3085 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x95>
    3082:	00 00 00
			3081: R_X86_64_PC32	.rodata+0x67c
    3085:	62 71 fd 48 6f 1d 00 	vmovdqa64 0x0(%rip),%zmm11        # 308f <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x9f>
    308c:	00 00 00
			308b: R_X86_64_PC32	.rodata+0x53c
    308f:	62 71 fd 48 6f 25 00 	vmovdqa64 0x0(%rip),%zmm12        # 3099 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xa9>
    3096:	00 00 00
			3095: R_X86_64_PC32	.rodata+0x57c
    3099:	62 71 fd 48 6f 2d 00 	vmovdqa64 0x0(%rip),%zmm13        # 30a3 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xb3>
    30a0:	00 00 00
			309f: R_X86_64_PC32	.rodata+0x5bc
    30a3:	62 71 fd 48 6f 35 00 	vmovdqa64 0x0(%rip),%zmm14        # 30ad <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xbd>
    30aa:	00 00 00
			30a9: R_X86_64_PC32	.rodata+0x5fc
    30ad:	62 71 fd 48 6f 3d 00 	vmovdqa64 0x0(%rip),%zmm15        # 30b7 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xc7>
    30b4:	00 00 00
			30b3: R_X86_64_PC32	.rodata+0x2bc
    30b7:	62 e1 fd 48 6f 05 00 	vmovdqa64 0x0(%rip),%zmm16        # 30c1 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xd1>
    30be:	00 00 00
			30bd: R_X86_64_PC32	.rodata+0x3bc
    30c1:	49 89 cc             	mov    %rcx,%r12
    30c4:	eb 44                	jmp    310a <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x11a>
    30c6:	66 2e 0f 1f 84 00 00 	cs nopw 0x0(%rax,%rax,1)
    30cd:	00 00 00
    30d0:	62 a2 7d 48 30 da    	vpmovzxbw %ymm18,%zmm19
    30d6:	62 c1 fe 48 7f 1c 24 	vmovdqu64 %zmm19,(%r12)
    30dd:	62 a3 fd 48 3b d2 01 	vextracti64x4 $0x1,%zmm18,%ymm18
    30e4:	62 a2 7d 48 30 d2    	vpmovzxbw %ymm18,%zmm18
    30ea:	62 c1 fe 48 7f 54 24 	vmovdqu64 %zmm18,0x40(%r12)
    30f1:	01
    30f2:	49 83 ec 80          	sub    $0xffffffffffffff80,%r12
    30f6:	48 c7 c0 ff ff ff ff 	mov    $0xffffffffffffffff,%rax
    30fd:	48 89 fe             	mov    %rdi,%rsi
    3100:	48 83 f8 ff          	cmp    $0xffffffffffffffff,%rax
    3104:	0f 85 91 03 00 00    	jne    349b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ab>
    310a:	48 8d 7e 40          	lea    0x40(%rsi),%rdi
    310e:	48 39 d7             	cmp    %rdx,%rdi
    3111:	0f 87 a5 03 00 00    	ja     34bc <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4cc>
    3117:	62 e1 fe 48 6f 16    	vmovdqu64 (%rsi),%zmm18
    311d:	62 b1 6d 40 64 c1    	vpcmpgtb %zmm17,%zmm18,%k0
    3123:	c4 e1 f8 98 c0       	kortestq %k0,%k0
    3128:	72 a6                	jb     30d0 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xe0>
    312a:	62 e1 ed 40 db da    	vpandq %zmm2,%zmm18,%zmm19
    3130:	62 f1 65 40 74 c3    	vpcmpeqb %zmm3,%zmm19,%k0
    3136:	c4 e1 f8 99 c0       	ktestq %k0,%k0
    313b:	0f 85 5a 03 00 00    	jne    349b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ab>
    3141:	62 f3 6d 40 3e c0 06 	vpcmpnleub %zmm0,%zmm18,%k0
    3148:	c4 e1 fb 93 c0       	kmovq  %k0,%rax
    314d:	62 f3 6d 40 3e c1 06 	vpcmpnleub %zmm1,%zmm18,%k0
    3154:	c4 e1 f8 99 c0       	ktestq %k0,%k0
    3159:	0f 85 91 00 00 00    	jne    31f0 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x200>
    315f:	62 d1 6d 40 64 cf    	vpcmpgtb %zmm15,%zmm18,%k1
    3165:	48 8d 3c 00          	lea    (%rax,%rax,1),%rdi
    3169:	c4 e1 f8 44 c1       	knotq  %k1,%k0
    316e:	c4 e1 fb 93 c8       	kmovq  %k0,%rcx
    3173:	48 39 cf             	cmp    %rcx,%rdi
    3176:	0f 85 da 01 00 00    	jne    3356 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x366>
    317c:	62 d3 6d 40 3e d7 02 	vpcmpleub %zmm15,%zmm18,%k2
    3183:	62 d3 6d 40 3e df 06 	vpcmpnleub %zmm15,%zmm18,%k3
    318a:	62 a2 7d ca 63 d3    	vpcompressb %zmm18,%zmm19{%k2}{z}
    3190:	c4 e1 fb 93 c2       	kmovq  %k2,%rax
    3195:	62 a1 6d c3 fc d0    	vpaddb %zmm16,%zmm18,%zmm18{%k3}{z}
    319b:	62 a2 7d c9 63 d2    	vpcompressb %zmm18,%zmm18{%k1}{z}
    31a1:	62 a2 7d 48 30 d2    	vpmovzxbw %ymm18,%zmm18
    31a7:	62 a2 7d 48 30 db    	vpmovzxbw %ymm19,%zmm19
    31ad:	62 b1 6d 40 71 f2 06 	vpsllw $0x6,%zmm18,%zmm18
    31b4:	62 a1 6d 40 fd d3    	vpaddw %zmm19,%zmm18,%zmm18
    31ba:	62 c1 fe 48 7f 14 24 	vmovdqu64 %zmm18,(%r12)
    31c1:	c4 e2 b3 f5 c0       	pdep   %rax,%r9,%rax
    31c6:	f3 48 0f bd c0       	lzcnt  %rax,%rax
    31cb:	49 83 c4 40          	add    $0x40,%r12
    31cf:	48 29 c6             	sub    %rax,%rsi
    31d2:	48 83 c6 40          	add    $0x40,%rsi
    31d6:	48 c7 c0 ff ff ff ff 	mov    $0xffffffffffffffff,%rax
    31dd:	e9 a9 02 00 00       	jmp    348b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x49b>
    31e2:	66 2e 0f 1f 84 00 00 	cs nopw 0x0(%rax,%rax,1)
    31e9:	00 00 00
    31ec:	0f 1f 40 00          	nopl   0x0(%rax)
    31f0:	c4 61 fb 93 d8       	kmovq  %k0,%r11
    31f5:	62 b3 6d 40 3f c1 02 	vpcmpleb %zmm17,%zmm18,%k0
    31fc:	62 f3 6d 40 3e cc 06 	vpcmpnleub %zmm4,%zmm18,%k1
    3203:	48 8d 1c 00          	lea    (%rax,%rax,1),%rbx
    3207:	4a 8d 3c 9d 00 00 00 	lea    0x0(,%r11,4),%rdi
    320e:	00
    320f:	c4 e1 f8 98 c9       	kortestq %k1,%k1
    3214:	0f 84 54 01 00 00    	je     336e <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x37e>
    321a:	c4 61 fb 93 d1       	kmovq  %k1,%r10
    321f:	4a 8d 2c d5 00 00 00 	lea    0x0(,%r10,8),%rbp
    3226:	00
    3227:	48 09 fb             	or     %rdi,%rbx
    322a:	48 09 eb             	or     %rbp,%rbx
    322d:	62 f1 6d 40 64 c8    	vpcmpgtb %zmm0,%zmm18,%k1
    3233:	c4 e1 fb 93 f9       	kmovq  %k1,%rdi
    3238:	48 89 f9             	mov    %rdi,%rcx
    323b:	48 f7 d1             	not    %rcx
    323e:	48 39 cb             	cmp    %rcx,%rbx
    3241:	0f 85 23 02 00 00    	jne    346a <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x47a>
    3247:	48 09 ef             	or     %rbp,%rdi
    324a:	48 d1 ef             	shr    %rdi
    324d:	48 09 ef             	or     %rbp,%rdi
    3250:	c4 e1 fb 92 cf       	kmovq  %rdi,%k1
    3255:	62 b2 7d c9 63 f3    	vpcompressb %zmm6,%zmm19{%k1}{z}
    325b:	62 a2 7d 48 30 db    	vpmovzxbw %ymm19,%zmm19
    3261:	62 b2 7e 48 29 ca    	vpmovb2m %zmm18,%k1
    3267:	62 e2 7e 48 28 e1    	vpmovm2b %k1,%zmm20
    326d:	62 e3 ed 40 25 e3 4c 	vpternlogq $0x4c,%zmm3,%zmm18,%zmm20
    3274:	62 a2 65 40 8d d4    	vpermb %zmm20,%zmm19,%zmm18
    327a:	62 e1 ed 40 db d5    	vpandq %zmm5,%zmm18,%zmm18
    3280:	c4 e3 f9 31 c8 01    	kshiftrq $0x1,%k0,%k1
    3286:	62 a1 65 40 fd e9    	vpaddw %zmm17,%zmm19,%zmm21
    328c:	62 a1 7f c9 6f f4    	vmovdqu8 %zmm20,%zmm22{%k1}{z}
    3292:	62 a2 55 40 8d ee    	vpermb %zmm22,%zmm21,%zmm21
    3298:	62 e1 d5 40 db ed    	vpandq %zmm5,%zmm21,%zmm21
    329e:	62 b1 55 40 71 f5 06 	vpsllw $0x6,%zmm21,%zmm21
    32a5:	62 a1 55 40 fd d2    	vpaddw %zmm18,%zmm21,%zmm18
    32ab:	4c 89 d8             	mov    %r11,%rax
    32ae:	4c 21 c0             	and    %r8,%rax
    32b1:	62 e1 65 40 fd df    	vpaddw %zmm7,%zmm19,%zmm19
    32b7:	c4 e1 fb 92 c8       	kmovq  %rax,%k1
    32bc:	62 a1 7f c9 6f e4    	vmovdqu8 %zmm20,%zmm20{%k1}{z}
    32c2:	62 a2 65 40 8d dc    	vpermb %zmm20,%zmm19,%zmm19
    32c8:	62 b1 65 40 71 f3 0c 	vpsllw $0xc,%zmm19,%zmm19
    32cf:	62 a1 6d 40 fd d3    	vpaddw %zmm19,%zmm18,%zmm18
    32d5:	c4 e2 d2 f5 c7       	pext   %rdi,%rbp,%rax
    32da:	c5 fb 92 c8          	kmovd  %eax,%k1
    32de:	48 d1 e8             	shr    %rax
    32e1:	62 e1 ff c9 6f 1d 00 	vmovdqu16 0x0(%rip),%zmm19{%k1}{z}        # 32eb <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x2fb>
    32e8:	00 00 00
			32e7: R_X86_64_PC32	.rodata+0x4fc
    32eb:	62 b1 5d 40 71 d2 04 	vpsrlw $0x4,%zmm18,%zmm20
    32f2:	62 a1 e5 40 eb d2    	vporq  %zmm18,%zmm19,%zmm18
    32f8:	c5 fb 92 c8          	kmovd  %eax,%k1
    32fc:	62 c1 5d 41 fd d3    	vpaddw %zmm11,%zmm20,%zmm18{%k1}
    3302:	c4 c2 a8 f2 cb       	andn   %r11,%r10,%rcx
    3307:	48 c1 e1 02          	shl    $0x2,%rcx
    330b:	c4 e2 f2 f5 cf       	pext   %rdi,%rcx,%rcx
    3310:	62 d3 ed 40 3e c4 01 	vpcmpltuw %zmm12,%zmm18,%k0
    3317:	c5 fb 92 d1          	kmovd  %ecx,%k2
    331b:	62 c1 6d 40 fd dd    	vpaddw %zmm13,%zmm18,%zmm19
    3321:	62 d3 e5 40 3e dc 01 	vpcmpltuw %zmm12,%zmm19,%k3
    3328:	c4 e1 e5 45 c0       	kord   %k0,%k3,%k0
    332d:	62 d3 e5 41 3e ce 06 	vpcmpnleuw %zmm14,%zmm19,%k1{%k1}
    3334:	c4 e1 fd 41 c2       	kandd  %k2,%k0,%k0
    3339:	c4 e1 f9 98 c1       	kortestd %k1,%k0
    333e:	0f 85 57 01 00 00    	jne    349b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ab>
    3344:	25 00 00 00 80       	and    $0x80000000,%eax
    3349:	4c 31 c8             	xor    %r9,%rax
    334c:	c4 e2 fb f5 c7       	pdep   %rdi,%rax,%rax
    3351:	e9 e4 00 00 00       	jmp    343a <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x44a>
    3356:	c4 e2 c0 f2 e9       	andn   %rcx,%rdi,%rbp
    335b:	0f 85 3a 01 00 00    	jne    349b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ab>
    3361:	48 31 cf             	xor    %rcx,%rdi
    3364:	f3 48 0f bc cf       	tzcnt  %rdi,%rcx
    3369:	e9 0b 01 00 00       	jmp    3479 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x489>
    336e:	48 09 fb             	or     %rdi,%rbx
    3371:	62 f1 6d 40 64 c8    	vpcmpgtb %zmm0,%zmm18,%k1
    3377:	c4 e1 fb 93 e9       	kmovq  %k1,%rbp
    337c:	48 89 e9             	mov    %rbp,%rcx
    337f:	48 f7 d1             	not    %rcx
    3382:	48 39 cb             	cmp    %rcx,%rbx
    3385:	0f 85 df 00 00 00    	jne    346a <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x47a>
    338b:	48 d1 ed             	shr    %rbp
    338e:	c4 e1 fb 92 cd       	kmovq  %rbp,%k1
    3393:	62 b2 7d c9 63 f3    	vpcompressb %zmm6,%zmm19{%k1}{z}
    3399:	62 a2 7d 48 30 db    	vpmovzxbw %ymm19,%zmm19
    339f:	62 b2 7e 48 29 ca    	vpmovb2m %zmm18,%k1
    33a5:	62 e2 7e 48 28 e1    	vpmovm2b %k1,%zmm20
    33ab:	62 e3 ed 40 25 e3 4c 	vpternlogq $0x4c,%zmm3,%zmm18,%zmm20
    33b2:	62 a2 65 40 8d d4    	vpermb %zmm20,%zmm19,%zmm18
    33b8:	62 e1 ed 40 db d5    	vpandq %zmm5,%zmm18,%zmm18
    33be:	c4 e3 f9 31 c8 01    	kshiftrq $0x1,%k0,%k1
    33c4:	62 a1 65 40 fd e9    	vpaddw %zmm17,%zmm19,%zmm21
    33ca:	62 a1 7f c9 6f f4    	vmovdqu8 %zmm20,%zmm22{%k1}{z}
    33d0:	62 a2 55 40 8d ee    	vpermb %zmm22,%zmm21,%zmm21
    33d6:	62 e1 d5 40 db ed    	vpandq %zmm5,%zmm21,%zmm21
    33dc:	62 b1 55 40 71 f5 06 	vpsllw $0x6,%zmm21,%zmm21
    33e3:	4d 21 c3             	and    %r8,%r11
    33e6:	62 e1 65 40 fd df    	vpaddw %zmm7,%zmm19,%zmm19
    33ec:	c4 c1 fb 92 cb       	kmovq  %r11,%k1
    33f1:	62 a1 7f c9 6f e4    	vmovdqu8 %zmm20,%zmm20{%k1}{z}
    33f7:	62 a2 65 40 8d dc    	vpermb %zmm20,%zmm19,%zmm19
    33fd:	62 b1 65 40 71 f3 0c 	vpsllw $0xc,%zmm19,%zmm19
    3404:	62 a1 6d 40 fd d3    	vpaddw %zmm19,%zmm18,%zmm18
    340a:	62 a1 55 40 fd d2    	vpaddw %zmm18,%zmm21,%zmm18
    3410:	c4 e2 c2 f5 c5       	pext   %rbp,%rdi,%rax
    3415:	62 d3 ed 40 3e c0 01 	vpcmpltuw %zmm8,%zmm18,%k0
    341c:	62 c1 ed 40 db d9    	vpandq %zmm9,%zmm18,%zmm19
    3422:	62 d1 65 40 75 ca    	vpcmpeqw %zmm10,%zmm19,%k1
    3428:	c4 e1 f5 45 c0       	kord   %k0,%k1,%k0
    342d:	c5 fb 93 c8          	kmovd  %k0,%ecx
    3431:	85 c1                	test   %eax,%ecx
    3433:	75 66                	jne    349b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ab>
    3435:	c4 e2 b3 f5 c5       	pdep   %rbp,%r9,%rax
    343a:	f3 48 0f b8 c8       	popcnt %rax,%rcx
    343f:	f3 48 0f bd f8       	lzcnt  %rax,%rdi
    3444:	48 c7 c0 ff ff ff ff 	mov    $0xffffffffffffffff,%rax
    344b:	c4 e2 f1 f7 e8       	shlx   %rcx,%rax,%rbp
    3450:	f7 d5                	not    %ebp
    3452:	c5 fb 92 cd          	kmovd  %ebp,%k1
    3456:	62 c1 ff 49 7f 14 24 	vmovdqu16 %zmm18,(%r12){%k1}
    345d:	4d 8d 24 4c          	lea    (%r12,%rcx,2),%r12
    3461:	48 29 fe             	sub    %rdi,%rsi
    3464:	48 83 c6 40          	add    $0x40,%rsi
    3468:	eb 21                	jmp    348b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x49b>
    346a:	c4 e2 e0 f2 f9       	andn   %rcx,%rbx,%rdi
    346f:	75 2a                	jne    349b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ab>
    3471:	48 31 cb             	xor    %rcx,%rbx
    3474:	f3 48 0f bc cb       	tzcnt  %rbx,%rcx
    3479:	c4 e2 f0 f5 c0       	bzhi   %rcx,%rax,%rax
    347e:	f3 48 0f bd c8       	lzcnt  %rax,%rcx
    3483:	b8 3f 00 00 00       	mov    $0x3f,%eax
    3488:	48 29 c8             	sub    %rcx,%rax
    348b:	48 89 f7             	mov    %rsi,%rdi
    348e:	48 89 fe             	mov    %rdi,%rsi
    3491:	48 83 f8 ff          	cmp    $0xffffffffffffffff,%rax
    3495:	0f 84 6f fc ff ff    	je     310a <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x11a>
    349b:	45 31 e4             	xor    %r12d,%r12d
    349e:	4c 89 e0             	mov    %r12,%rax
    34a1:	4c 29 e8             	sub    %r13,%rax
    34a4:	48 d1 f8             	sar    %rax
    34a7:	4d 85 e4             	test   %r12,%r12
    34aa:	49 0f 44 c4          	cmove  %r12,%rax
    34ae:	5b                   	pop    %rbx
    34af:	41 5c                	pop    %r12
    34b1:	41 5d                	pop    %r13
    34b3:	41 5e                	pop    %r14
    34b5:	41 5f                	pop    %r15
    34b7:	5d                   	pop    %rbp
    34b8:	c5 f8 77             	vzeroupper
    34bb:	c3                   	ret
    34bc:	48 c7 c1 ff ff ff ff 	mov    $0xffffffffffffffff,%rcx
    34c3:	62 a3 75 40 25 c9 ff 	vpternlogd $0xff,%zmm17,%zmm17,%zmm17
    34ca:	41 b9 ff ff ff ff    	mov    $0xffffffff,%r9d
    34d0:	41 ba ff ff ff ff    	mov    $0xffffffff,%r10d
    34d6:	4c 89 6c 24 f8       	mov    %r13,-0x8(%rsp)
    34db:	eb 4a                	jmp    3527 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x537>
    34dd:	0f 1f 00             	nopl   (%rax)
    34e0:	62 c1 fe 48 7f 1c 24 	vmovdqu64 %zmm19,(%r12)
    34e7:	62 a3 fd 48 3b d2 01 	vextracti64x4 $0x1,%zmm18,%ymm18
    34ee:	62 a2 7d 48 30 d2    	vpmovzxbw %ymm18,%zmm18
    34f4:	48 8d 43 e0          	lea    -0x20(%rbx),%rax
    34f8:	c4 c2 61 f7 f9       	shlx   %ebx,%r9d,%edi
    34fd:	f7 d7                	not    %edi
    34ff:	c5 fb 92 cf          	kmovd  %edi,%k1
    3503:	62 c1 ff 49 7f 54 24 	vmovdqu16 %zmm18,0x40(%r12){%k1}
    350a:	01
    350b:	49 83 c4 40          	add    $0x40,%r12
    350f:	4d 8d 24 44          	lea    (%r12,%rax,2),%r12
    3513:	48 01 de             	add    %rbx,%rsi
    3516:	48 c7 c0 ff ff ff ff 	mov    $0xffffffffffffffff,%rax
    351d:	48 83 f8 ff          	cmp    $0xffffffffffffffff,%rax
    3521:	0f 85 74 ff ff ff    	jne    349b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ab>
    3527:	48 39 d6             	cmp    %rdx,%rsi
    352a:	0f 83 6e ff ff ff    	jae    349e <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ae>
    3530:	48 89 d3             	mov    %rdx,%rbx
    3533:	48 29 f3             	sub    %rsi,%rbx
    3536:	c4 e2 e1 f7 c1       	shlx   %rbx,%rcx,%rax
    353b:	48 f7 d0             	not    %rax
    353e:	c4 e1 fb 92 c8       	kmovq  %rax,%k1
    3543:	62 e1 7f c9 6f 16    	vmovdqu8 (%rsi),%zmm18{%k1}{z}
    3549:	62 b1 6d 41 64 c1    	vpcmpgtb %zmm17,%zmm18,%k0{%k1}
    354f:	c4 e1 fb 93 f8       	kmovq  %k0,%rdi
    3554:	48 39 c7             	cmp    %rax,%rdi
    3557:	75 27                	jne    3580 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x590>
    3559:	62 a2 7d 48 30 da    	vpmovzxbw %ymm18,%zmm19
    355f:	48 83 fb 20          	cmp    $0x20,%rbx
    3563:	0f 87 77 ff ff ff    	ja     34e0 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4f0>
    3569:	c5 fb 92 c8          	kmovd  %eax,%k1
    356d:	62 c1 ff 49 7f 1c 24 	vmovdqu16 %zmm19,(%r12){%k1}
    3574:	48 89 d8             	mov    %rbx,%rax
    3577:	eb 96                	jmp    350f <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x51f>
    3579:	0f 1f 80 00 00 00 00 	nopl   0x0(%rax)
    3580:	62 e1 ed 40 db da    	vpandq %zmm2,%zmm18,%zmm19
    3586:	62 f1 65 40 74 cb    	vpcmpeqb %zmm3,%zmm19,%k1
    358c:	c4 e1 f8 99 c9       	ktestq %k1,%k1
    3591:	0f 85 04 ff ff ff    	jne    349b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ab>
    3597:	62 f3 6d 40 3e c8 06 	vpcmpnleub %zmm0,%zmm18,%k1
    359e:	c4 61 fb 93 f9       	kmovq  %k1,%r15
    35a3:	62 f3 6d 40 3e d1 06 	vpcmpnleub %zmm1,%zmm18,%k2
    35aa:	c4 e1 f8 99 d2       	ktestq %k2,%k2
    35af:	0f 85 a8 00 00 00    	jne    365d <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x66d>
    35b5:	62 d3 6d 40 3e d7 06 	vpcmpnleub %zmm15,%zmm18,%k2
    35bc:	c4 e1 fc 45 c2       	korq   %k2,%k0,%k0
    35c1:	c4 e1 fb 93 d8       	kmovq  %k0,%rbx
    35c6:	48 21 c3             	and    %rax,%rbx
    35c9:	4b 8d 2c 3f          	lea    (%r15,%r15,1),%rbp
    35cd:	48 89 df             	mov    %rbx,%rdi
    35d0:	48 31 c7             	xor    %rax,%rdi
    35d3:	48 39 fd             	cmp    %rdi,%rbp
    35d6:	0f 85 4d 02 00 00    	jne    3829 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x839>
    35dc:	62 d3 6d 40 3e c7 02 	vpcmpleub %zmm15,%zmm18,%k0
    35e3:	c4 e1 fb 93 f8       	kmovq  %k0,%rdi
    35e8:	48 21 c7             	and    %rax,%rdi
    35eb:	62 a1 6d c1 fc d8    	vpaddb %zmm16,%zmm18,%zmm19{%k1}{z}
    35f1:	c4 e1 fb 92 cb       	kmovq  %rbx,%k1
    35f6:	62 a2 7d c9 63 db    	vpcompressb %zmm19,%zmm19{%k1}{z}
    35fc:	62 a2 7d 48 30 db    	vpmovzxbw %ymm19,%zmm19
    3602:	c4 e2 ab f5 c7       	pdep   %rdi,%r10,%rax
    3607:	c4 e1 fb 92 cf       	kmovq  %rdi,%k1
    360c:	62 a2 7d c9 63 d2    	vpcompressb %zmm18,%zmm18{%k1}{z}
    3612:	62 a2 7d 48 30 d2    	vpmovzxbw %ymm18,%zmm18
    3618:	62 b1 65 40 71 f3 06 	vpsllw $0x6,%zmm19,%zmm19
    361f:	62 a1 65 40 fd d2    	vpaddw %zmm18,%zmm19,%zmm18
    3625:	c4 e2 ab f5 fb       	pdep   %rbx,%r10,%rdi
    362a:	f3 48 0f b8 ff       	popcnt %rdi,%rdi
    362f:	f3 48 0f bd e8       	lzcnt  %rax,%rbp
    3634:	48 c7 c0 ff ff ff ff 	mov    $0xffffffffffffffff,%rax
    363b:	c4 e2 c1 f7 d8       	shlx   %rdi,%rax,%rbx
    3640:	f7 d3                	not    %ebx
    3642:	c5 fb 92 cb          	kmovd  %ebx,%k1
    3646:	62 c1 ff 49 7f 14 24 	vmovdqu16 %zmm18,(%r12){%k1}
    364d:	4d 8d 24 7c          	lea    (%r12,%rdi,2),%r12
    3651:	48 29 ee             	sub    %rbp,%rsi
    3654:	48 83 c6 40          	add    $0x40,%rsi
    3658:	e9 c0 fe ff ff       	jmp    351d <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x52d>
    365d:	c4 61 fb 93 f2       	kmovq  %k2,%r14
    3662:	62 f3 6d 40 3e d4 06 	vpcmpnleub %zmm4,%zmm18,%k2
    3669:	c4 e1 f8 44 d8       	knotq  %k0,%k3
    366e:	c4 61 fb 93 db       	kmovq  %k3,%r11
    3673:	49 21 c3             	and    %rax,%r11
    3676:	4f 8d 04 3f          	lea    (%r15,%r15,1),%r8
    367a:	4a 8d 3c b5 00 00 00 	lea    0x0(,%r14,4),%rdi
    3681:	00
    3682:	c4 e1 f8 98 d2       	kortestq %k2,%k2
    3687:	0f 84 c6 01 00 00    	je     3853 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x863>
    368d:	c4 61 fb 93 ea       	kmovq  %k2,%r13
    3692:	4e 8d 0c ed 00 00 00 	lea    0x0(,%r13,8),%r9
    3699:	00
    369a:	49 09 f8             	or     %rdi,%r8
    369d:	4d 09 c8             	or     %r9,%r8
    36a0:	c4 e1 fc 45 c1       	korq   %k1,%k0,%k0
    36a5:	c4 61 fb 93 d0       	kmovq  %k0,%r10
    36aa:	4c 89 d7             	mov    %r10,%rdi
    36ad:	48 31 c7             	xor    %rax,%rdi
    36b0:	49 39 f8             	cmp    %rdi,%r8
    36b3:	0f 85 93 02 00 00    	jne    394c <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x95c>
    36b9:	4d 09 ca             	or     %r9,%r10
    36bc:	49 d1 ea             	shr    %r10
    36bf:	80 c3 ff             	add    $0xff,%bl
    36c2:	4c 89 cf             	mov    %r9,%rdi
    36c5:	48 0f ab df          	bts    %rbx,%rdi
    36c9:	4c 09 d7             	or     %r10,%rdi
    36cc:	c4 e1 fb 92 cf       	kmovq  %rdi,%k1
    36d1:	62 b2 7d c9 63 f3    	vpcompressb %zmm6,%zmm19{%k1}{z}
    36d7:	62 a2 7d 48 30 db    	vpmovzxbw %ymm19,%zmm19
    36dd:	c4 c1 fb 92 cb       	kmovq  %r11,%k1
    36e2:	62 e1 7f c9 6f 25 00 	vmovdqu8 0x0(%rip),%zmm20{%k1}{z}        # 36ec <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x6fc>
    36e9:	00 00 00
			36e8: R_X86_64_PC32	.rodata+0x37c
    36ec:	62 a1 dd 40 df d2    	vpandnq %zmm18,%zmm20,%zmm18
    36f2:	62 a2 65 40 8d e2    	vpermb %zmm18,%zmm19,%zmm20
    36f8:	62 e1 dd 40 db e5    	vpandq %zmm5,%zmm20,%zmm20
    36fe:	c4 e3 f9 31 c9 01    	kshiftrq $0x1,%k1,%k1
    3704:	62 a1 65 40 fd e9    	vpaddw %zmm17,%zmm19,%zmm21
    370a:	62 a1 7f c9 6f f2    	vmovdqu8 %zmm18,%zmm22{%k1}{z}
    3710:	62 a2 55 40 8d ee    	vpermb %zmm22,%zmm21,%zmm21
    3716:	62 e1 d5 40 db ed    	vpandq %zmm5,%zmm21,%zmm21
    371c:	62 b1 55 40 71 f5 06 	vpsllw $0x6,%zmm21,%zmm21
    3723:	62 a1 55 40 fd e4    	vpaddw %zmm20,%zmm21,%zmm20
    3729:	4c 89 f5             	mov    %r14,%rbp
    372c:	48 b9 ff ff ff ff ff 	movabs $0x3fffffffffffffff,%rcx
    3733:	ff ff 3f
    3736:	48 21 cd             	and    %rcx,%rbp
    3739:	62 e1 65 40 fd df    	vpaddw %zmm7,%zmm19,%zmm19
    373f:	c4 e1 fb 92 cd       	kmovq  %rbp,%k1
    3744:	62 a1 7f c9 6f d2    	vmovdqu8 %zmm18,%zmm18{%k1}{z}
    374a:	62 a2 65 40 8d d2    	vpermb %zmm18,%zmm19,%zmm18
    3750:	62 b1 6d 40 71 f2 0c 	vpsllw $0xc,%zmm18,%zmm18
    3757:	62 a1 5d 40 fd d2    	vpaddw %zmm18,%zmm20,%zmm18
    375d:	c4 e2 b2 f5 ef       	pext   %rdi,%r9,%rbp
    3762:	c5 fb 92 cd          	kmovd  %ebp,%k1
    3766:	48 d1 ed             	shr    %rbp
    3769:	62 e1 ff c9 6f 1d 00 	vmovdqu16 0x0(%rip),%zmm19{%k1}{z}        # 3773 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x783>
    3770:	00 00 00
			376f: R_X86_64_PC32	.rodata+0x4fc
    3773:	62 b1 5d 40 71 d2 04 	vpsrlw $0x4,%zmm18,%zmm20
    377a:	62 a1 e5 40 eb d2    	vporq  %zmm18,%zmm19,%zmm18
    3780:	c5 fb 92 cd          	kmovd  %ebp,%k1
    3784:	62 c1 5d 41 fd d3    	vpaddw %zmm11,%zmm20,%zmm18{%k1}
    378a:	49 31 c5             	xor    %rax,%r13
    378d:	4d 21 f5             	and    %r14,%r13
    3790:	49 c1 e5 02          	shl    $0x2,%r13
    3794:	c4 e2 92 f5 df       	pext   %rdi,%r13,%rbx
    3799:	62 d3 ed 40 3e c4 01 	vpcmpltuw %zmm12,%zmm18,%k0
    37a0:	c5 fb 92 d3          	kmovd  %ebx,%k2
    37a4:	62 c1 6d 40 fd dd    	vpaddw %zmm13,%zmm18,%zmm19
    37aa:	62 d3 e5 40 3e dc 01 	vpcmpltuw %zmm12,%zmm19,%k3
    37b1:	c4 e1 e5 45 c0       	kord   %k0,%k3,%k0
    37b6:	62 d3 e5 41 3e ce 06 	vpcmpnleuw %zmm14,%zmm19,%k1{%k1}
    37bd:	c4 e1 fd 41 c2       	kandd  %k2,%k0,%k0
    37c2:	c4 e1 f9 98 c1       	kortestd %k1,%k0
    37c7:	0f 85 d4 01 00 00    	jne    39a1 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x9b1>
    37cd:	81 e5 00 00 00 80    	and    $0x80000000,%ebp
    37d3:	41 ba ff ff ff ff    	mov    $0xffffffff,%r10d
    37d9:	4c 31 d5             	xor    %r10,%rbp
    37dc:	48 21 c7             	and    %rax,%rdi
    37df:	c4 e2 d3 f5 c7       	pdep   %rdi,%rbp,%rax
    37e4:	f3 48 0f b8 f8       	popcnt %rax,%rdi
    37e9:	f3 48 0f bd e8       	lzcnt  %rax,%rbp
    37ee:	48 c7 c0 ff ff ff ff 	mov    $0xffffffffffffffff,%rax
    37f5:	c4 e2 c1 f7 d8       	shlx   %rdi,%rax,%rbx
    37fa:	f7 d3                	not    %ebx
    37fc:	c5 fb 92 cb          	kmovd  %ebx,%k1
    3800:	62 c1 ff 49 7f 14 24 	vmovdqu16 %zmm18,(%r12){%k1}
    3807:	4d 8d 24 7c          	lea    (%r12,%rdi,2),%r12
    380b:	48 29 ee             	sub    %rbp,%rsi
    380e:	48 83 c6 40          	add    $0x40,%rsi
    3812:	4c 8b 6c 24 f8       	mov    -0x8(%rsp),%r13
    3817:	48 c7 c1 ff ff ff ff 	mov    $0xffffffffffffffff,%rcx
    381e:	41 b9 ff ff ff ff    	mov    $0xffffffff,%r9d
    3824:	e9 f4 fc ff ff       	jmp    351d <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x52d>
    3829:	c4 e2 d0 f2 c7       	andn   %rdi,%rbp,%rax
    382e:	0f 85 67 fc ff ff    	jne    349b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ab>
    3834:	48 31 ef             	xor    %rbp,%rdi
    3837:	f3 48 0f bc c7       	tzcnt  %rdi,%rax
    383c:	c4 c2 f8 f5 c7       	bzhi   %rax,%r15,%rax
    3841:	f3 48 0f bd f8       	lzcnt  %rax,%rdi
    3846:	b8 3f 00 00 00       	mov    $0x3f,%eax
    384b:	48 29 f8             	sub    %rdi,%rax
    384e:	e9 ca fc ff ff       	jmp    351d <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x52d>
    3853:	49 09 f8             	or     %rdi,%r8
    3856:	c4 e1 fc 45 c1       	korq   %k1,%k0,%k0
    385b:	c4 e1 fb 93 e8       	kmovq  %k0,%rbp
    3860:	48 89 ef             	mov    %rbp,%rdi
    3863:	48 31 c7             	xor    %rax,%rdi
    3866:	49 39 f8             	cmp    %rdi,%r8
    3869:	0f 85 1f 01 00 00    	jne    398e <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x99e>
    386f:	48 d1 ed             	shr    %rbp
    3872:	80 c3 ff             	add    $0xff,%bl
    3875:	48 0f ab dd          	bts    %rbx,%rbp
    3879:	c4 e1 fb 92 cd       	kmovq  %rbp,%k1
    387e:	62 b2 7d c9 63 f3    	vpcompressb %zmm6,%zmm19{%k1}{z}
    3884:	62 a2 7d 48 30 db    	vpmovzxbw %ymm19,%zmm19
    388a:	c4 c1 fb 92 cb       	kmovq  %r11,%k1
    388f:	62 e1 7f c9 6f 25 00 	vmovdqu8 0x0(%rip),%zmm20{%k1}{z}        # 3899 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x8a9>
    3896:	00 00 00
			3895: R_X86_64_PC32	.rodata+0x37c
    3899:	62 a1 dd 40 df d2    	vpandnq %zmm18,%zmm20,%zmm18
    389f:	62 a2 65 40 8d e2    	vpermb %zmm18,%zmm19,%zmm20
    38a5:	62 e1 dd 40 db e5    	vpandq %zmm5,%zmm20,%zmm20
    38ab:	c4 e3 f9 31 c9 01    	kshiftrq $0x1,%k1,%k1
    38b1:	62 a1 65 40 fd e9    	vpaddw %zmm17,%zmm19,%zmm21
    38b7:	62 a1 7f c9 6f f2    	vmovdqu8 %zmm18,%zmm22{%k1}{z}
    38bd:	62 a2 55 40 8d ee    	vpermb %zmm22,%zmm21,%zmm21
    38c3:	62 e1 d5 40 db ed    	vpandq %zmm5,%zmm21,%zmm21
    38c9:	62 b1 55 40 71 f5 06 	vpsllw $0x6,%zmm21,%zmm21
    38d0:	62 a1 55 40 fd e4    	vpaddw %zmm20,%zmm21,%zmm20
    38d6:	4c 89 f7             	mov    %r14,%rdi
    38d9:	48 bb ff ff ff ff ff 	movabs $0x3fffffffffffffff,%rbx
    38e0:	ff ff 3f
    38e3:	48 21 df             	and    %rbx,%rdi
    38e6:	62 e1 65 40 fd df    	vpaddw %zmm7,%zmm19,%zmm19
    38ec:	c4 e1 fb 92 cf       	kmovq  %rdi,%k1
    38f1:	62 a1 7f c9 6f d2    	vmovdqu8 %zmm18,%zmm18{%k1}{z}
    38f7:	62 a2 65 40 8d d2    	vpermb %zmm18,%zmm19,%zmm18
    38fd:	62 b1 6d 40 71 f2 0c 	vpsllw $0xc,%zmm18,%zmm18
    3904:	62 a1 5d 40 fd d2    	vpaddw %zmm18,%zmm20,%zmm18
    390a:	49 21 c6             	and    %rax,%r14
    390d:	49 c1 e6 02          	shl    $0x2,%r14
    3911:	c4 e2 8a f5 fd       	pext   %rbp,%r14,%rdi
    3916:	62 d3 ed 40 3e c0 01 	vpcmpltuw %zmm8,%zmm18,%k0
    391d:	62 c1 ed 40 db d9    	vpandq %zmm9,%zmm18,%zmm19
    3923:	62 d1 65 40 75 ca    	vpcmpeqw %zmm10,%zmm19,%k1
    3929:	c4 e1 f5 45 c0       	kord   %k0,%k1,%k0
    392e:	c5 fb 93 d8          	kmovd  %k0,%ebx
    3932:	85 fb                	test   %edi,%ebx
    3934:	0f 85 61 fb ff ff    	jne    349b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ab>
    393a:	48 21 c5             	and    %rax,%rbp
    393d:	c4 e2 ab f5 c5       	pdep   %rbp,%r10,%rax
    3942:	f3 48 0f b8 f8       	popcnt %rax,%rdi
    3947:	e9 e3 fc ff ff       	jmp    362f <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x63f>
    394c:	c4 e2 b8 f2 c7       	andn   %rdi,%r8,%rax
    3951:	4c 8b 6c 24 f8       	mov    -0x8(%rsp),%r13
    3956:	48 c7 c1 ff ff ff ff 	mov    $0xffffffffffffffff,%rcx
    395d:	41 b9 ff ff ff ff    	mov    $0xffffffff,%r9d
    3963:	0f 85 32 fb ff ff    	jne    349b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ab>
    3969:	49 31 f8             	xor    %rdi,%r8
    396c:	f3 49 0f bc c0       	tzcnt  %r8,%rax
    3971:	c4 c2 f8 f5 c7       	bzhi   %rax,%r15,%rax
    3976:	f3 48 0f bd f8       	lzcnt  %rax,%rdi
    397b:	b8 3f 00 00 00       	mov    $0x3f,%eax
    3980:	48 29 f8             	sub    %rdi,%rax
    3983:	41 ba ff ff ff ff    	mov    $0xffffffff,%r10d
    3989:	e9 8f fb ff ff       	jmp    351d <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x52d>
    398e:	c4 e2 b8 f2 c7       	andn   %rdi,%r8,%rax
    3993:	0f 85 02 fb ff ff    	jne    349b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ab>
    3999:	4c 31 c7             	xor    %r8,%rdi
    399c:	e9 96 fe ff ff       	jmp    3837 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x847>
    39a1:	45 31 e4             	xor    %r12d,%r12d
    39a4:	4c 8b 6c 24 f8       	mov    -0x8(%rsp),%r13
    39a9:	e9 f0 fa ff ff       	jmp    349e <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4ae>
    39ae:	66 90                	xchg   %ax,%ax

If you can edit the code to fit a single file, you can upload it to https://gcc.godbolt.org for easier fiddling with compiler options.

If you can edit the code to fit a single file, you can upload it to https://gcc.godbolt.org/ for easier fiddling with compiler options.

We have it as a single file:
https://gist.github.com/lemire/bc6117fa0d9d490e0e172a723f209c17

Ok. So the computation of the location of the error, even if we never trigger it, has a significant overhead (because it impacts code generation). Thankfully, we can disable it through a template parameter. Doing so make this new approach a much clearer win. We are still marginally slower in some cases (3% with wikipedia_mars/czech.utf8.txt and wikipedia_mars/vietnamese.utf8.txt).
With the revised code, our slowest speed in these tests is now 3.8 GB/s vs 3.0 GB/s previously.

For each file, the first numbers are for the new transcoder, and the second one is the existing transcoder.
../unicode_lipsum/wikipedia_mars/arabic.utf8.txt
   4.983 GB/s (1.3 %)    3.965 Gc/s     1.26 byte/char
   4.141 GB/s (0.9 %)    3.295 Gc/s     1.26 byte/char
../unicode_lipsum/wikipedia_mars/chinese.utf8.txt
   4.077 GB/s (0.7 %)    3.085 Gc/s     1.32 byte/char
   4.035 GB/s (1.0 %)    3.053 Gc/s     1.32 byte/char
../unicode_lipsum/wikipedia_mars/czech.utf8.txt
   3.812 GB/s (0.6 %)    3.590 Gc/s     1.06 byte/char
   3.921 GB/s (0.7 %)    3.693 Gc/s     1.06 byte/char
../unicode_lipsum/wikipedia_mars/english.utf8.txt
  13.148 GB/s (2.6 %)   13.052 Gc/s     1.01 byte/char
  13.552 GB/s (2.6 %)   13.452 Gc/s     1.01 byte/char
../unicode_lipsum/wikipedia_mars/esperanto.utf8.txt
   5.945 GB/s (0.9 %)    5.751 Gc/s     1.03 byte/char
   5.957 GB/s (0.9 %)    5.763 Gc/s     1.03 byte/char
../unicode_lipsum/wikipedia_mars/french.utf8.txt
   4.643 GB/s (1.0 %)    4.518 Gc/s     1.03 byte/char
   4.391 GB/s (1.6 %)    4.273 Gc/s     1.03 byte/char
../unicode_lipsum/wikipedia_mars/german.utf8.txt
   6.193 GB/s (0.8 %)    6.055 Gc/s     1.02 byte/char
   6.027 GB/s (0.8 %)    5.893 Gc/s     1.02 byte/char
../unicode_lipsum/wikipedia_mars/greek.utf8.txt
   4.880 GB/s (0.6 %)    3.848 Gc/s     1.27 byte/char
   4.109 GB/s (0.8 %)    3.240 Gc/s     1.27 byte/char
../unicode_lipsum/wikipedia_mars/hebrew.utf8.txt
   4.080 GB/s (0.5 %)    3.141 Gc/s     1.30 byte/char
   3.672 GB/s (0.7 %)    2.827 Gc/s     1.30 byte/char
../unicode_lipsum/wikipedia_mars/hindi.utf8.txt
   5.264 GB/s (1.3 %)    3.636 Gc/s     1.45 byte/char
   4.627 GB/s (0.9 %)    3.196 Gc/s     1.45 byte/char
../unicode_lipsum/wikipedia_mars/japanese.utf8.txt
   4.310 GB/s (0.7 %)    3.118 Gc/s     1.38 byte/char
   4.082 GB/s (0.9 %)    2.953 Gc/s     1.38 byte/char
../unicode_lipsum/wikipedia_mars/korean.utf8.txt
   4.072 GB/s (0.7 %)    3.034 Gc/s     1.34 byte/char
   3.937 GB/s (0.9 %)    2.933 Gc/s     1.34 byte/char
../unicode_lipsum/wikipedia_mars/persan.utf8.txt
   4.484 GB/s (0.6 %)    3.579 Gc/s     1.25 byte/char
   3.976 GB/s (0.8 %)    3.174 Gc/s     1.25 byte/char
../unicode_lipsum/wikipedia_mars/portuguese.utf8.txt
   4.955 GB/s (0.6 %)    4.830 Gc/s     1.03 byte/char
   4.742 GB/s (0.7 %)    4.623 Gc/s     1.03 byte/char
../unicode_lipsum/wikipedia_mars/russian.utf8.txt
   4.624 GB/s (0.7 %)    3.544 Gc/s     1.30 byte/char
   3.828 GB/s (3.0 %)    2.934 Gc/s     1.30 byte/char
../unicode_lipsum/wikipedia_mars/thai.utf8.txt
   5.733 GB/s (1.4 %)    3.909 Gc/s     1.47 byte/char
   4.749 GB/s (1.9 %)    3.239 Gc/s     1.47 byte/char
../unicode_lipsum/wikipedia_mars/turkish.utf8.txt
   4.576 GB/s (0.5 %)    4.350 Gc/s     1.05 byte/char
   4.648 GB/s (0.7 %)    4.419 Gc/s     1.05 byte/char
../unicode_lipsum/wikipedia_mars/vietnamese.utf8.txt
   3.755 GB/s (0.7 %)    3.324 Gc/s     1.13 byte/char
   3.877 GB/s (0.9 %)    3.433 Gc/s     1.13 byte/char
../unicode_lipsum/lipsum/Arabic-Lipsum.utf8.txt
   4.682 GB/s (0.6 %)    2.623 Gc/s     1.78 byte/char
   3.366 GB/s (0.8 %)    1.886 Gc/s     1.78 byte/char
../unicode_lipsum/lipsum/Chinese-Lipsum.utf8.txt
   5.771 GB/s (0.7 %)    1.939 Gc/s     2.98 byte/char
   3.951 GB/s (0.8 %)    1.327 Gc/s     2.98 byte/char
../unicode_lipsum/lipsum/Emoji-Lipsum.utf8.txt
   3.756 GB/s (0.6 %)    0.939 Gc/s     4.00 byte/char
   3.003 GB/s (0.7 %)    0.751 Gc/s     4.00 byte/char
../unicode_lipsum/lipsum/Hebrew-Lipsum.utf8.txt
   4.633 GB/s (0.5 %)    2.599 Gc/s     1.78 byte/char
   3.344 GB/s (0.8 %)    1.876 Gc/s     1.78 byte/char
../unicode_lipsum/lipsum/Hindi-Lipsum.utf8.txt
   4.968 GB/s (0.5 %)    1.850 Gc/s     2.69 byte/char
   3.956 GB/s (0.6 %)    1.473 Gc/s     2.69 byte/char
../unicode_lipsum/lipsum/Japanese-Lipsum.utf8.txt
   5.422 GB/s (0.7 %)    1.869 Gc/s     2.90 byte/char
   3.955 GB/s (0.7 %)    1.363 Gc/s     2.90 byte/char
../unicode_lipsum/lipsum/Korean-Lipsum.utf8.txt
   4.935 GB/s (0.6 %)    2.011 Gc/s     2.45 byte/char
   3.950 GB/s (0.7 %)    1.610 Gc/s     2.45 byte/char
../unicode_lipsum/lipsum/Latin-Lipsum.utf8.txt
  20.859 GB/s (4.7 %)   20.859 Gc/s     1.00 byte/char
  20.944 GB/s (4.5 %)   20.944 Gc/s     1.00 byte/char
../unicode_lipsum/lipsum/Russian-Lipsum.utf8.txt
   4.693 GB/s (0.5 %)    2.597 Gc/s     1.81 byte/char
   3.314 GB/s (0.9 %)    1.834 Gc/s     1.81 byte/char

Ok. So the computation of the location of the error, even if we never trigger it, has a significant overhead (because it impacts code generation). Thankfully, we can disable it through a template parameter.

This sort of stuff is why I don't use intrinsics.  I also suspect (but haven't looked closely) that you instantiating the main loop twice (one for the main body, once for the tail) causes all constants to be reloaded from memory.  Why did you write it that way?  It would have been much simpler to just use a goto statement as I did in the other kernel.

The GCC output corresponding to the good benchmarking results...
0000000000001620 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs>:
    1620:	f3 0f 1e fa          	endbr64
    1624:	55                   	push   %rbp
    1625:	48 89 cf             	mov    %rcx,%rdi
    1628:	48 01 f2             	add    %rsi,%rdx
    162b:	48 89 c8             	mov    %rcx,%rax
    162e:	62 f2 7d 48 78 0d 00 	vpbroadcastb 0x0(%rip),%zmm1        # 1638 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x18>
    1635:	00 00 00
			1634: R_X86_64_PC32	.rodata+0x4f7c
    1638:	62 53 2d 48 25 d2 ff 	vpternlogd $0xff,%zmm10,%zmm10,%zmm10
    163f:	62 f2 7d 48 78 15 00 	vpbroadcastb 0x0(%rip),%zmm2        # 1649 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x29>
    1646:	00 00 00
			1645: R_X86_64_PC32	.LC42-0x4
    1649:	49 b9 ff ff ff ff ff 	movabs $0x3fffffffffffffff,%r9
    1650:	ff ff 3f
    1653:	62 f2 7d 48 78 1d 00 	vpbroadcastb 0x0(%rip),%zmm3        # 165d <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x3d>
    165a:	00 00 00
			1659: R_X86_64_PC32	.LC43-0x4
    165d:	62 f2 7d 48 78 25 00 	vpbroadcastb 0x0(%rip),%zmm4        # 1667 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x47>
    1664:	00 00 00
			1663: R_X86_64_PC32	.LC44-0x4
    1667:	62 f2 7d 48 78 2d 00 	vpbroadcastb 0x0(%rip),%zmm5        # 1671 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x51>
    166e:	00 00 00
			166d: R_X86_64_PC32	.rodata+0x503c
    1671:	48 89 e5             	mov    %rsp,%rbp
    1674:	41 57                	push   %r15
    1676:	62 71 fd 48 6f 1d 00 	vmovdqa64 0x0(%rip),%zmm11        # 1680 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x60>
    167d:	00 00 00
			167c: R_X86_64_PC32	.rodata+0x507c
    1680:	41 56                	push   %r14
    1682:	49 be 55 55 55 55 55 	movabs $0x5555555555555555,%r14
    1689:	55 55 55
    168c:	62 72 7d 48 79 0d 00 	vpbroadcastw 0x0(%rip),%zmm9        # 1696 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x76>
    1693:	00 00 00
			1692: R_X86_64_PC32	.LC46-0x4
    1696:	41 55                	push   %r13
    1698:	62 72 7d 48 79 35 00 	vpbroadcastw 0x0(%rip),%zmm14        # 16a2 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x82>
    169f:	00 00 00
			169e: R_X86_64_PC32	.rodata+0x4ffc
    16a2:	41 54                	push   %r12
    16a4:	41 bc ff ff ff ff    	mov    $0xffffffff,%r12d
    16aa:	62 72 7d 48 79 2d 00 	vpbroadcastw 0x0(%rip),%zmm13        # 16b4 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x94>
    16b1:	00 00 00
			16b0: R_X86_64_PC32	.LC47-0x4
    16b4:	53                   	push   %rbx
    16b5:	62 f2 7d 48 79 3d 00 	vpbroadcastw 0x0(%rip),%zmm7        # 16bf <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x9f>
    16bc:	00 00 00
			16bb: R_X86_64_PC32	.LC48-0x4
    16bf:	62 72 7d 48 79 05 00 	vpbroadcastw 0x0(%rip),%zmm8        # 16c9 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xa9>
    16c6:	00 00 00
			16c5: R_X86_64_PC32	.LC49-0x4
    16c9:	62 72 7d 48 79 25 00 	vpbroadcastw 0x0(%rip),%zmm12        # 16d3 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xb3>
    16d0:	00 00 00
			16cf: R_X86_64_PC32	.LC50-0x4
    16d3:	48 8d 4e 40          	lea    0x40(%rsi),%rcx
    16d7:	48 39 ca             	cmp    %rcx,%rdx
    16da:	0f 82 a0 00 00 00    	jb     1780 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x160>
    16e0:	62 f1 7f 48 6f 06    	vmovdqu8 (%rsi),%zmm0
    16e6:	62 f3 7d 48 3e c1 01 	vpcmpltub %zmm1,%zmm0,%k0
    16ed:	c4 e1 fb 93 d8       	kmovq  %k0,%rbx
    16f2:	48 83 fb ff          	cmp    $0xffffffffffffffff,%rbx
    16f6:	0f 84 64 03 00 00    	je     1a60 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x440>
    16fc:	62 f3 6d 48 3e d0 02 	vpcmpleub %zmm0,%zmm2,%k2
    1703:	62 f3 7d 4a 3e cb 01 	vpcmpltub %zmm3,%zmm0,%k1{%k2}
    170a:	c4 e1 f8 99 c9       	ktestq %k1,%k1
    170f:	75 5a                	jne    176b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x14b>
    1711:	62 f3 5d 48 3e c8 02 	vpcmpleub %zmm0,%zmm4,%k1
    1718:	c4 e1 f8 99 c9       	ktestq %k1,%k1
    171d:	0f 84 15 02 00 00    	je     1938 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x318>
    1723:	c4 e1 fc 45 f2       	korq   %k2,%k0,%k6
    1728:	c4 e1 f8 44 e0       	knotq  %k0,%k4
    172d:	c4 61 fb 93 d6       	kmovq  %k6,%r10
    1732:	c4 e3 f9 33 da 01    	kshiftlq $0x1,%k2,%k3
    1738:	62 f3 7d 48 3e ed 05 	vpcmpnltub %zmm5,%zmm0,%k5
    173f:	49 f7 d2             	not    %r10
    1742:	c4 e3 f9 33 f9 02    	kshiftlq $0x2,%k1,%k7
    1748:	c4 61 fb 93 de       	kmovq  %k6,%r11
    174d:	c4 e1 f8 98 ed       	kortestq %k5,%k5
    1752:	0f 85 68 03 00 00    	jne    1ac0 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x4a0>
    1758:	c4 e1 e4 45 df       	korq   %k7,%k3,%k3
    175d:	c4 e1 fb 93 db       	kmovq  %k3,%rbx
    1762:	4c 39 d3             	cmp    %r10,%rbx
    1765:	0f 84 95 06 00 00    	je     1e00 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x7e0>
    176b:	31 c0                	xor    %eax,%eax
    176d:	c5 f8 77             	vzeroupper
    1770:	5b                   	pop    %rbx
    1771:	41 5c                	pop    %r12
    1773:	41 5d                	pop    %r13
    1775:	41 5e                	pop    %r14
    1777:	41 5f                	pop    %r15
    1779:	5d                   	pop    %rbp
    177a:	c3                   	ret
    177b:	0f 1f 44 00 00       	nopl   0x0(%rax,%rax,1)
    1780:	48 39 f2             	cmp    %rsi,%rdx
    1783:	0f 86 67 07 00 00    	jbe    1ef0 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x8d0>
    1789:	48 89 d1             	mov    %rdx,%rcx
    178c:	41 b8 01 00 00 00    	mov    $0x1,%r8d
    1792:	48 29 f1             	sub    %rsi,%rcx
    1795:	c4 42 f1 f7 d0       	shlx   %rcx,%r8,%r10
    179a:	49 8d 5a ff          	lea    -0x1(%r10),%rbx
    179e:	c4 e1 fb 92 cb       	kmovq  %rbx,%k1
    17a3:	62 f1 7f c9 6f 06    	vmovdqu8 (%rsi),%zmm0{%k1}{z}
    17a9:	62 f3 7d 49 3e c1 01 	vpcmpltub %zmm1,%zmm0,%k0{%k1}
    17b0:	c4 61 fb 93 d8       	kmovq  %k0,%r11
    17b5:	4c 39 db             	cmp    %r11,%rbx
    17b8:	0f 84 d2 02 00 00    	je     1a90 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x470>
    17be:	62 f3 6d 48 3e d8 02 	vpcmpleub %zmm0,%zmm2,%k3
    17c5:	62 f3 7d 4b 3e d3 01 	vpcmpltub %zmm3,%zmm0,%k2{%k3}
    17cc:	c4 e1 f8 99 d2       	ktestq %k2,%k2
    17d1:	75 98                	jne    176b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x14b>
    17d3:	62 f3 5d 48 3e d0 02 	vpcmpleub %zmm0,%zmm4,%k2
    17da:	c4 e1 f8 99 d2       	ktestq %k2,%k2
    17df:	0f 84 db 01 00 00    	je     19c0 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x3a0>
    17e5:	62 f3 7d 48 3e f5 05 	vpcmpnltub %zmm5,%zmm0,%k6
    17ec:	c4 e3 f9 33 eb 01    	kshiftlq $0x1,%k3,%k5
    17f2:	c4 e1 f8 44 f8       	knotq  %k0,%k7
    17f7:	c4 61 fb 93 fd       	kmovq  %k5,%r15
    17fc:	c4 e1 c4 41 f9       	kandq  %k1,%k7,%k7
    1801:	c4 e1 fc 45 e3       	korq   %k3,%k0,%k4
    1806:	c4 61 fb 93 ef       	kmovq  %k7,%r13
    180b:	c4 e1 dc 47 e9       	kxorq  %k1,%k4,%k5
    1810:	c4 e3 f9 33 fa 02    	kshiftlq $0x2,%k2,%k7
    1816:	c4 e1 fb 93 dd       	kmovq  %k5,%rbx
    181b:	c4 e1 f8 98 f6       	kortestq %k6,%k6
    1820:	0f 85 1a 04 00 00    	jne    1c40 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x620>
    1826:	c4 c1 fb 92 f7       	kmovq  %r15,%k6
    182b:	c4 e1 cc 45 ef       	korq   %k7,%k6,%k5
    1830:	c4 61 fb 93 dd       	kmovq  %k5,%r11
    1835:	49 39 db             	cmp    %rbx,%r11
    1838:	0f 85 2d ff ff ff    	jne    176b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x14b>
    183e:	83 e9 01             	sub    $0x1,%ecx
    1841:	c4 e1 fb 93 dc       	kmovq  %k4,%rbx
    1846:	48 d1 eb             	shr    %rbx
    1849:	c4 c1 fb 92 ed       	kmovq  %r13,%k5
    184e:	c4 e1 fb 92 e3       	kmovq  %rbx,%k4
    1853:	c4 c2 f1 f7 c8       	shlx   %rcx,%r8,%rcx
    1858:	c4 e1 fb 92 f1       	kmovq  %rcx,%k6
    185d:	c4 e1 dc 45 e6       	korq   %k6,%k4,%k4
    1862:	c4 e3 f9 31 fd 01    	kshiftrq $0x1,%k5,%k7
    1868:	c4 c1 fb 92 f6       	kmovq  %r14,%k6
    186d:	c4 e1 fc 45 c3       	korq   %k3,%k0,%k0
    1872:	c4 e1 fb 93 dc       	kmovq  %k4,%rbx
    1877:	62 71 7f cd 6f fa    	vmovdqu8 %zmm2,%zmm15{%k5}{z}
    187d:	62 72 7d cc 63 de    	vpcompressb %zmm11,%zmm6{%k4}{z}
    1883:	c4 c1 fb 92 ee       	kmovq  %r14,%k5
    1888:	62 71 05 48 df f8    	vpandnd %zmm0,%zmm15,%zmm15
    188e:	62 f2 7d 48 30 f6    	vpmovzxbw %ymm6,%zmm6
    1894:	62 c1 7f cf 6f cf    	vmovdqu8 %zmm15,%zmm17{%k7}{z}
    189a:	62 c1 4d 48 fd d2    	vpaddw %zmm10,%zmm6,%zmm18
    18a0:	62 c2 4d ce 8d c7    	vpermb %zmm15,%zmm6,%zmm16{%k6}{z}
    18a6:	62 b2 6d c6 8d c1    	vpermb %zmm17,%zmm18,%zmm0{%k6}{z}
    18ac:	62 d1 4d 48 fd f1    	vpaddw %zmm9,%zmm6,%zmm6
    18b2:	c4 c1 fb 92 f1       	kmovq  %r9,%k6
    18b7:	c4 e1 ec 41 de       	kandq  %k6,%k2,%k3
    18bc:	62 c1 7f cb 6f cf    	vmovdqu8 %zmm15,%zmm17{%k3}{z}
    18c2:	62 f1 7d 48 71 f0 06 	vpsllw $0x6,%zmm0,%zmm0
    18c9:	c4 e1 f4 41 d2       	kandq  %k2,%k1,%k2
    18ce:	c4 e1 fb 93 ca       	kmovq  %k2,%rcx
    18d3:	62 32 4d cd 8d f9    	vpermb %zmm17,%zmm6,%zmm15{%k5}{z}
    18d9:	62 b1 7d 48 fd c0    	vpaddw %zmm16,%zmm0,%zmm0
    18df:	48 c1 e1 02          	shl    $0x2,%rcx
    18e3:	62 d1 4d 48 71 f7 0c 	vpsllw $0xc,%zmm15,%zmm6
    18ea:	c4 e2 f2 f5 db       	pext   %rbx,%rcx,%rbx
    18ef:	c4 e1 fb 92 d3       	kmovq  %rbx,%k2
    18f4:	62 f1 7d 48 fd c6    	vpaddw %zmm6,%zmm0,%zmm0
    18fa:	62 d1 7d 48 fd f0    	vpaddw %zmm8,%zmm0,%zmm6
    1900:	62 f3 fd 4a 3e c7 01 	vpcmpltuw %zmm7,%zmm0,%k0{%k2}
    1907:	62 f3 cd 4a 3e d7 01 	vpcmpltuw %zmm7,%zmm6,%k2{%k2}
    190e:	c4 e1 fd 45 c2       	kord   %k2,%k0,%k0
    1913:	c4 e1 f9 98 c0       	kortestd %k0,%k0
    1918:	0f 85 4d fe ff ff    	jne    176b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x14b>
    191e:	c4 e1 dc 41 e1       	kandq  %k1,%k4,%k4
    1923:	c4 e1 fb 93 dc       	kmovq  %k4,%rbx
    1928:	c4 e2 9b f5 cb       	pdep   %rbx,%r12,%rcx
    192d:	e9 75 04 00 00       	jmp    1da7 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x787>
    1932:	66 0f 1f 44 00 00    	nopw   0x0(%rax,%rax,1)
    1938:	c4 e1 fc 45 c2       	korq   %k2,%k0,%k0
    193d:	c4 e1 dc 46 e4       	kxnorq %k4,%k4,%k4
    1942:	c4 e1 fc 41 cc       	kandq  %k4,%k0,%k1
    1947:	c4 e1 fb 93 c9       	kmovq  %k1,%rcx
    194c:	48 f7 d1             	not    %rcx
    194f:	c4 e3 f9 33 ea 01    	kshiftlq $0x1,%k2,%k5
    1955:	c4 61 fb 93 c5       	kmovq  %k5,%r8
    195a:	49 39 c8             	cmp    %rcx,%r8
    195d:	0f 85 08 fe ff ff    	jne    176b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x14b>
    1963:	62 71 7d ca f8 fb    	vpsubb %zmm3,%zmm0,%zmm15{%k2}{z}
    1969:	c4 e1 f8 44 da       	knotq  %k2,%k3
    196e:	c4 e1 fb 93 db       	kmovq  %k3,%rbx
    1973:	c4 e2 9b f5 cb       	pdep   %rbx,%r12,%rcx
    1978:	62 72 7d c9 63 fe    	vpcompressb %zmm15,%zmm6{%k1}{z}
    197e:	f3 48 0f bd c9       	lzcnt  %rcx,%rcx
    1983:	48 29 ce             	sub    %rcx,%rsi
    1986:	48 83 c0 40          	add    $0x40,%rax
    198a:	62 72 7d 48 30 fe    	vpmovzxbw %ymm6,%zmm15
    1990:	62 f2 7d cb 63 c6    	vpcompressb %zmm0,%zmm6{%k3}{z}
    1996:	48 83 c6 40          	add    $0x40,%rsi
    199a:	62 f2 7d 48 30 c6    	vpmovzxbw %ymm6,%zmm0
    19a0:	62 d1 4d 48 71 f7 06 	vpsllw $0x6,%zmm15,%zmm6
    19a7:	62 f1 7d 48 fd c6    	vpaddw %zmm6,%zmm0,%zmm0
    19ad:	62 f1 ff 48 7f 40 ff 	vmovdqu16 %zmm0,-0x40(%rax)
    19b4:	e9 1a fd ff ff       	jmp    16d3 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xb3>
    19b9:	0f 1f 80 00 00 00 00 	nopl   0x0(%rax)
    19c0:	c4 e1 fc 45 c3       	korq   %k3,%k0,%k0
    19c5:	c4 e3 f9 33 f3 01    	kshiftlq $0x1,%k3,%k6
    19cb:	c4 e1 fc 41 d1       	kandq  %k1,%k0,%k2
    19d0:	c4 61 fb 93 d6       	kmovq  %k6,%r10
    19d5:	c4 e1 f4 47 e2       	kxorq  %k2,%k1,%k4
    19da:	c4 e1 fb 93 cc       	kmovq  %k4,%rcx
    19df:	49 39 ca             	cmp    %rcx,%r10
    19e2:	0f 85 83 fd ff ff    	jne    176b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x14b>
    19e8:	62 71 7d cb f8 fb    	vpsubb %zmm3,%zmm0,%zmm15{%k3}{z}
    19ee:	c4 e1 f8 44 c3       	knotq  %k3,%k0
    19f3:	c4 e1 fc 41 c9       	kandq  %k1,%k0,%k1
    19f8:	c4 e1 fb 93 da       	kmovq  %k2,%rbx
    19fd:	62 72 7d ca 63 fe    	vpcompressb %zmm15,%zmm6{%k2}{z}
    1a03:	c4 e2 9b f5 cb       	pdep   %rbx,%r12,%rcx
    1a08:	c4 e1 fb 93 d9       	kmovq  %k1,%rbx
    1a0d:	f3 48 0f b8 c9       	popcnt %rcx,%rcx
    1a12:	62 72 7d 48 30 fe    	vpmovzxbw %ymm6,%zmm15
    1a18:	62 f2 7d c9 63 c6    	vpcompressb %zmm0,%zmm6{%k1}{z}
    1a1e:	c4 62 9b f5 d3       	pdep   %rbx,%r12,%r10
    1a23:	c4 42 f1 f7 c0       	shlx   %rcx,%r8,%r8
    1a28:	62 f2 7d 48 30 c6    	vpmovzxbw %ymm6,%zmm0
    1a2e:	41 83 e8 01          	sub    $0x1,%r8d
    1a32:	f3 4d 0f bd d2       	lzcnt  %r10,%r10
    1a37:	4c 29 d6             	sub    %r10,%rsi
    1a3a:	62 d1 4d 48 71 f7 06 	vpsllw $0x6,%zmm15,%zmm6
    1a41:	c4 c1 7b 92 f0       	kmovd  %r8d,%k6
    1a46:	48 83 c6 40          	add    $0x40,%rsi
    1a4a:	62 f1 7d 48 fd c6    	vpaddw %zmm6,%zmm0,%zmm0
    1a50:	62 f1 ff 4e 7f 00    	vmovdqu16 %zmm0,(%rax){%k6}
    1a56:	48 8d 04 48          	lea    (%rax,%rcx,2),%rax
    1a5a:	e9 74 fc ff ff       	jmp    16d3 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xb3>
    1a5f:	90                   	nop
    1a60:	62 f2 7d 48 30 f0    	vpmovzxbw %ymm0,%zmm6
    1a66:	62 f3 fd 48 3b c0 01 	vextracti64x4 $0x1,%zmm0,%ymm0
    1a6d:	48 83 e8 80          	sub    $0xffffffffffffff80,%rax
    1a71:	48 89 ce             	mov    %rcx,%rsi
    1a74:	62 f2 7d 48 30 c0    	vpmovzxbw %ymm0,%zmm0
    1a7a:	62 f1 fe 48 7f 70 fe 	vmovdqu64 %zmm6,-0x80(%rax)
    1a81:	62 f1 fe 48 7f 40 ff 	vmovdqu64 %zmm0,-0x40(%rax)
    1a88:	e9 46 fc ff ff       	jmp    16d3 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xb3>
    1a8d:	0f 1f 00             	nopl   (%rax)
    1a90:	48 8d 34 48          	lea    (%rax,%rcx,2),%rsi
    1a94:	48 83 f9 20          	cmp    $0x20,%rcx
    1a98:	0f 87 1a 03 00 00    	ja     1db8 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x798>
    1a9e:	62 f2 7d 48 30 c0    	vpmovzxbw %ymm0,%zmm0
    1aa4:	41 83 ea 01          	sub    $0x1,%r10d
    1aa8:	c4 c1 7b 92 f2       	kmovd  %r10d,%k6
    1aad:	62 f1 ff 4e 7f 00    	vmovdqu16 %zmm0,(%rax){%k6}
    1ab3:	48 89 f0             	mov    %rsi,%rax
    1ab6:	48 89 d6             	mov    %rdx,%rsi
    1ab9:	e9 15 fc ff ff       	jmp    16d3 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xb3>
    1abe:	66 90                	xchg   %ax,%ax
    1ac0:	c4 e1 fb 93 df       	kmovq  %k7,%rbx
    1ac5:	c4 61 fb 93 c3       	kmovq  %k3,%r8
    1aca:	49 09 d8             	or     %rbx,%r8
    1acd:	c4 e3 f9 33 f5 03    	kshiftlq $0x3,%k5,%k6
    1ad3:	c4 e1 fb 93 de       	kmovq  %k6,%rbx
    1ad8:	49 09 d8             	or     %rbx,%r8
    1adb:	4d 39 d0             	cmp    %r10,%r8
    1ade:	0f 85 87 fc ff ff    	jne    176b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x14b>
    1ae4:	c4 c1 fb 92 fb       	kmovq  %r11,%k7
    1ae9:	c4 e1 cc 45 ff       	korq   %k7,%k6,%k7
    1aee:	c4 61 fb 93 df       	kmovq  %k7,%r11
    1af3:	49 d1 eb             	shr    %r11
    1af6:	62 71 7f cc 6f fa    	vmovdqu8 %zmm2,%zmm15{%k4}{z}
    1afc:	c4 c1 fb 92 fb       	kmovq  %r11,%k7
    1b01:	c4 e1 c4 45 fe       	korq   %k6,%k7,%k7
    1b06:	62 72 7d cf 63 de    	vpcompressb %zmm11,%zmm6{%k7}{z}
    1b0c:	62 71 05 48 df f8    	vpandnd %zmm0,%zmm15,%zmm15
    1b12:	c4 e3 f9 31 e4 01    	kshiftrq $0x1,%k4,%k4
    1b18:	c4 61 fb 93 df       	kmovq  %k7,%r11
    1b1d:	c4 e1 fc 45 c2       	korq   %k2,%k0,%k0
    1b22:	62 f2 7d 48 30 f6    	vpmovzxbw %ymm6,%zmm6
    1b28:	62 c1 7f cc 6f cf    	vmovdqu8 %zmm15,%zmm17{%k4}{z}
    1b2e:	c4 c1 fb 92 fe       	kmovq  %r14,%k7
    1b33:	c4 c1 fb 92 e6       	kmovq  %r14,%k4
    1b38:	62 c1 4d 48 fd d2    	vpaddw %zmm10,%zmm6,%zmm18
    1b3e:	62 c2 4d cf 8d c7    	vpermb %zmm15,%zmm6,%zmm16{%k7}{z}
    1b44:	c4 c2 e2 f5 cb       	pext   %r11,%rbx,%rcx
    1b49:	62 d1 4d 48 fd f1    	vpaddw %zmm9,%zmm6,%zmm6
    1b4f:	62 b2 6d c7 8d c1    	vpermb %zmm17,%zmm18,%zmm0{%k7}{z}
    1b55:	c4 c1 fb 92 f9       	kmovq  %r9,%k7
    1b5a:	48 89 cb             	mov    %rcx,%rbx
    1b5d:	c5 fb 92 f1          	kmovd  %ecx,%k6
    1b61:	c4 e1 f4 41 d7       	kandq  %k7,%k1,%k2
    1b66:	62 c1 7f ca 6f cf    	vmovdqu8 %zmm15,%zmm17{%k2}{z}
    1b6c:	48 d1 eb             	shr    %rbx
    1b6f:	c4 e1 fb 93 c9       	kmovq  %k1,%rcx
    1b74:	62 32 4d cc 8d f9    	vpermb %zmm17,%zmm6,%zmm15{%k4}{z}
    1b7a:	62 f1 7d 48 71 f0 06 	vpsllw $0x6,%zmm0,%zmm0
    1b81:	c4 e1 fb 92 d3       	kmovq  %rbx,%k2
    1b86:	c4 e1 fb 93 dd       	kmovq  %k5,%rbx
    1b8b:	62 d1 4d 48 71 f7 0c 	vpsllw $0xc,%zmm15,%zmm6
    1b92:	62 b1 7d 48 fd c0    	vpaddw %zmm16,%zmm0,%zmm0
    1b98:	62 51 ff ce 6f fe    	vmovdqu16 %zmm14,%zmm15{%k6}{z}
    1b9e:	c4 e2 e0 f2 c9       	andn   %rcx,%rbx,%rcx
    1ba3:	62 f1 7d 48 fd c6    	vpaddw %zmm6,%zmm0,%zmm0
    1ba9:	48 c1 e1 02          	shl    $0x2,%rcx
    1bad:	62 f1 4d 48 71 d0 04 	vpsrlw $0x4,%zmm0,%zmm6
    1bb4:	62 d1 7d 48 eb c7    	vpord  %zmm15,%zmm0,%zmm0
    1bba:	c4 c2 f2 f5 db       	pext   %r11,%rcx,%rbx
    1bbf:	c4 e1 fb 92 cb       	kmovq  %rbx,%k1
    1bc4:	62 d1 4d 4a fd c5    	vpaddw %zmm13,%zmm6,%zmm0{%k2}
    1bca:	62 d1 7d 48 fd f0    	vpaddw %zmm8,%zmm0,%zmm6
    1bd0:	62 f3 fd 49 3e c7 01 	vpcmpltuw %zmm7,%zmm0,%k0{%k1}
    1bd7:	62 d3 cd 4a 3e dc 05 	vpcmpnltuw %zmm12,%zmm6,%k3{%k2}
    1bde:	62 f3 cd 49 3e cf 01 	vpcmpltuw %zmm7,%zmm6,%k1{%k1}
    1be5:	c4 e1 fd 45 c1       	kord   %k1,%k0,%k0
    1bea:	c4 e1 f9 98 d8       	kortestd %k0,%k3
    1bef:	0f 85 76 fb ff ff    	jne    176b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x14b>
    1bf5:	c5 fb 93 ca          	kmovd  %k2,%ecx
    1bf9:	81 e1 00 00 00 80    	and    $0x80000000,%ecx
    1bff:	45 31 d2             	xor    %r10d,%r10d
    1c02:	41 b8 01 00 00 00    	mov    $0x1,%r8d
    1c08:	f7 d1                	not    %ecx
    1c0a:	c4 c2 f3 f5 cb       	pdep   %r11,%rcx,%rcx
    1c0f:	f3 4c 0f b8 d1       	popcnt %rcx,%r10
    1c14:	c4 42 a9 f7 c0       	shlx   %r10,%r8,%r8
    1c19:	f3 48 0f bd c9       	lzcnt  %rcx,%rcx
    1c1e:	41 83 e8 01          	sub    $0x1,%r8d
    1c22:	48 29 ce             	sub    %rcx,%rsi
    1c25:	c4 c1 7b 92 f0       	kmovd  %r8d,%k6
    1c2a:	48 83 c6 40          	add    $0x40,%rsi
    1c2e:	62 f1 ff 4e 7f 00    	vmovdqu16 %zmm0,(%rax){%k6}
    1c34:	4a 8d 04 50          	lea    (%rax,%r10,2),%rax
    1c38:	e9 96 fa ff ff       	jmp    16d3 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xb3>
    1c3d:	0f 1f 00             	nopl   (%rax)
    1c40:	4d 89 fa             	mov    %r15,%r10
    1c43:	c4 61 fb 93 ff       	kmovq  %k7,%r15
    1c48:	c4 e3 f9 33 ee 03    	kshiftlq $0x3,%k6,%k5
    1c4e:	c4 61 fb 93 dd       	kmovq  %k5,%r11
    1c53:	4d 09 fa             	or     %r15,%r10
    1c56:	4d 09 da             	or     %r11,%r10
    1c59:	49 39 da             	cmp    %rbx,%r10
    1c5c:	0f 85 09 fb ff ff    	jne    176b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x14b>
    1c62:	83 e9 01             	sub    $0x1,%ecx
    1c65:	c4 e1 fc 45 c3       	korq   %k3,%k0,%k0
    1c6a:	c4 e1 d4 45 dc       	korq   %k4,%k5,%k3
    1c6f:	c4 e1 fb 93 db       	kmovq  %k3,%rbx
    1c74:	48 d1 eb             	shr    %rbx
    1c77:	c4 c1 fb 92 e5       	kmovq  %r13,%k4
    1c7c:	c4 c2 f1 f7 c8       	shlx   %rcx,%r8,%rcx
    1c81:	c4 e3 f9 31 fc 01    	kshiftrq $0x1,%k4,%k7
    1c87:	62 71 7f cc 6f fa    	vmovdqu8 %zmm2,%zmm15{%k4}{z}
    1c8d:	c4 e1 fb 92 db       	kmovq  %rbx,%k3
    1c92:	c4 e1 e4 45 dd       	korq   %k5,%k3,%k3
    1c97:	c4 e1 fb 92 e9       	kmovq  %rcx,%k5
    1c9c:	c4 e1 e4 45 dd       	korq   %k5,%k3,%k3
    1ca1:	62 71 05 48 df f8    	vpandnd %zmm0,%zmm15,%zmm15
    1ca7:	c4 c1 fb 92 ee       	kmovq  %r14,%k5
    1cac:	c4 e1 fb 93 db       	kmovq  %k3,%rbx
    1cb1:	62 72 7d cb 63 de    	vpcompressb %zmm11,%zmm6{%k3}{z}
    1cb7:	62 c1 7f cf 6f cf    	vmovdqu8 %zmm15,%zmm17{%k7}{z}
    1cbd:	c4 c1 fb 92 f9       	kmovq  %r9,%k7
    1cc2:	c4 e1 ec 41 e7       	kandq  %k7,%k2,%k4
    1cc7:	62 f2 7d 48 30 f6    	vpmovzxbw %ymm6,%zmm6
    1ccd:	c4 62 a2 f5 db       	pext   %rbx,%r11,%r11
    1cd2:	4c 89 db             	mov    %r11,%rbx
    1cd5:	c4 e1 fb 93 ce       	kmovq  %k6,%rcx
    1cda:	62 c1 4d 48 fd d2    	vpaddw %zmm10,%zmm6,%zmm18
    1ce0:	62 c2 4d cd 8d c7    	vpermb %zmm15,%zmm6,%zmm16{%k5}{z}
    1ce6:	48 d1 eb             	shr    %rbx
    1ce9:	62 d1 4d 48 fd f1    	vpaddw %zmm9,%zmm6,%zmm6
    1cef:	62 b2 6d c5 8d c1    	vpermb %zmm17,%zmm18,%zmm0{%k5}{z}
    1cf5:	62 c1 7f cc 6f cf    	vmovdqu8 %zmm15,%zmm17{%k4}{z}
    1cfb:	c4 e1 fb 92 e3       	kmovq  %rbx,%k4
    1d00:	c4 e1 fb 93 d9       	kmovq  %k1,%rbx
    1d05:	62 32 4d cd 8d f9    	vpermb %zmm17,%zmm6,%zmm15{%k5}{z}
    1d0b:	62 f1 7d 48 71 f0 06 	vpsllw $0x6,%zmm0,%zmm0
    1d12:	c4 c1 7b 92 eb       	kmovd  %r11d,%k5
    1d17:	48 31 d9             	xor    %rbx,%rcx
    1d1a:	62 d1 4d 48 71 f7 0c 	vpsllw $0xc,%zmm15,%zmm6
    1d21:	62 b1 7d 48 fd c0    	vpaddw %zmm16,%zmm0,%zmm0
    1d27:	62 51 ff cd 6f fe    	vmovdqu16 %zmm14,%zmm15{%k5}{z}
    1d2d:	c4 e1 fb 93 da       	kmovq  %k2,%rbx
    1d32:	62 f1 7d 48 fd c6    	vpaddw %zmm6,%zmm0,%zmm0
    1d38:	48 21 d9             	and    %rbx,%rcx
    1d3b:	c4 e1 fb 93 db       	kmovq  %k3,%rbx
    1d40:	62 f1 4d 48 71 d0 04 	vpsrlw $0x4,%zmm0,%zmm6
    1d47:	62 d1 7d 48 eb c7    	vpord  %zmm15,%zmm0,%zmm0
    1d4d:	48 c1 e1 02          	shl    $0x2,%rcx
    1d51:	62 d1 4d 4c fd c5    	vpaddw %zmm13,%zmm6,%zmm0{%k4}
    1d57:	c4 e2 f2 f5 db       	pext   %rbx,%rcx,%rbx
    1d5c:	c4 e1 fb 92 d3       	kmovq  %rbx,%k2
    1d61:	62 d1 7d 48 fd f0    	vpaddw %zmm8,%zmm0,%zmm6
    1d67:	62 f3 fd 4a 3e c7 01 	vpcmpltuw %zmm7,%zmm0,%k0{%k2}
    1d6e:	62 d3 cd 4c 3e ec 05 	vpcmpnltuw %zmm12,%zmm6,%k5{%k4}
    1d75:	62 f3 cd 4a 3e d7 01 	vpcmpltuw %zmm7,%zmm6,%k2{%k2}
    1d7c:	c4 e1 fd 45 c2       	kord   %k2,%k0,%k0
    1d81:	c4 e1 f9 98 e8       	kortestd %k0,%k5
    1d86:	0f 85 df f9 ff ff    	jne    176b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x14b>
    1d8c:	c5 fb 93 cc          	kmovd  %k4,%ecx
    1d90:	81 e1 00 00 00 80    	and    $0x80000000,%ecx
    1d96:	c4 e1 e4 41 d9       	kandq  %k1,%k3,%k3
    1d9b:	c4 e1 fb 93 db       	kmovq  %k3,%rbx
    1da0:	f7 d1                	not    %ecx
    1da2:	c4 e2 f3 f5 cb       	pdep   %rbx,%rcx,%rcx
    1da7:	45 31 d2             	xor    %r10d,%r10d
    1daa:	f3 4c 0f b8 d1       	popcnt %rcx,%r10
    1daf:	e9 60 fe ff ff       	jmp    1c14 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x5f4>
    1db4:	0f 1f 40 00          	nopl   0x0(%rax)
    1db8:	62 f2 7d 48 30 f0    	vpmovzxbw %ymm0,%zmm6
    1dbe:	44 8d 41 e0          	lea    -0x20(%rcx),%r8d
    1dc2:	62 f3 fd 48 3b c0 01 	vextracti64x4 $0x1,%zmm0,%ymm0
    1dc9:	b9 01 00 00 00       	mov    $0x1,%ecx
    1dce:	62 f2 7d 48 30 c0    	vpmovzxbw %ymm0,%zmm0
    1dd4:	c4 e2 39 f7 c9       	shlx   %r8d,%ecx,%ecx
    1dd9:	83 e9 01             	sub    $0x1,%ecx
    1ddc:	62 f1 fe 48 7f 30    	vmovdqu64 %zmm6,(%rax)
    1de2:	c5 fb 92 f1          	kmovd  %ecx,%k6
    1de6:	62 f1 ff 4e 7f 40 01 	vmovdqu16 %zmm0,0x40(%rax){%k6}
    1ded:	48 89 f0             	mov    %rsi,%rax
    1df0:	48 89 d6             	mov    %rdx,%rsi
    1df3:	e9 db f8 ff ff       	jmp    16d3 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xb3>
    1df8:	0f 1f 84 00 00 00 00 	nopl   0x0(%rax,%rax,1)
    1dff:	00
    1e00:	49 d1 eb             	shr    %r11
    1e03:	c4 c1 fb 92 ee       	kmovq  %r14,%k5
    1e08:	c4 e1 fb 93 df       	kmovq  %k7,%rbx
    1e0d:	c4 e1 fc 45 c2       	korq   %k2,%k0,%k0
    1e12:	62 71 7f cc 6f fa    	vmovdqu8 %zmm2,%zmm15{%k4}{z}
    1e18:	c4 c1 fb 92 f3       	kmovq  %r11,%k6
    1e1d:	c4 e3 f9 31 e4 01    	kshiftrq $0x1,%k4,%k4
    1e23:	62 72 7d ce 63 de    	vpcompressb %zmm11,%zmm6{%k6}{z}
    1e29:	62 71 05 48 df f8    	vpandnd %zmm0,%zmm15,%zmm15
    1e2f:	62 f2 7d 48 30 f6    	vpmovzxbw %ymm6,%zmm6
    1e35:	c4 c1 fb 92 f6       	kmovq  %r14,%k6
    1e3a:	c4 c2 e2 f5 db       	pext   %r11,%rbx,%rbx
    1e3f:	62 c1 7f cc 6f cf    	vmovdqu8 %zmm15,%zmm17{%k4}{z}
    1e45:	62 c1 4d 48 fd d2    	vpaddw %zmm10,%zmm6,%zmm18
    1e4b:	62 c2 4d cd 8d c7    	vpermb %zmm15,%zmm6,%zmm16{%k5}{z}
    1e51:	c4 e1 fb 92 fb       	kmovq  %rbx,%k7
    1e56:	62 b2 6d c5 8d c1    	vpermb %zmm17,%zmm18,%zmm0{%k5}{z}
    1e5c:	62 d1 4d 48 fd f1    	vpaddw %zmm9,%zmm6,%zmm6
    1e62:	c4 c1 fb 92 e9       	kmovq  %r9,%k5
    1e67:	c4 e1 f4 41 cd       	kandq  %k5,%k1,%k1
    1e6c:	62 c1 7f c9 6f cf    	vmovdqu8 %zmm15,%zmm17{%k1}{z}
    1e72:	62 f1 7d 48 71 f0 06 	vpsllw $0x6,%zmm0,%zmm0
    1e79:	62 32 4d ce 8d f9    	vpermb %zmm17,%zmm6,%zmm15{%k6}{z}
    1e7f:	62 b1 7d 48 fd c0    	vpaddw %zmm16,%zmm0,%zmm0
    1e85:	62 d1 4d 48 71 f7 0c 	vpsllw $0xc,%zmm15,%zmm6
    1e8c:	62 f1 7d 48 fd c6    	vpaddw %zmm6,%zmm0,%zmm0
    1e92:	62 d1 7d 48 fd f0    	vpaddw %zmm8,%zmm0,%zmm6
    1e98:	62 f3 fd 4f 3e c7 01 	vpcmpltuw %zmm7,%zmm0,%k0{%k7}
    1e9f:	62 f3 cd 4f 3e ff 01 	vpcmpltuw %zmm7,%zmm6,%k7{%k7}
    1ea6:	c4 e1 fd 45 c7       	kord   %k7,%k0,%k0
    1eab:	c4 e1 f9 98 c0       	kortestd %k0,%k0
    1eb0:	0f 85 b5 f8 ff ff    	jne    176b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x14b>
    1eb6:	45 31 c0             	xor    %r8d,%r8d
    1eb9:	b9 01 00 00 00       	mov    $0x1,%ecx
    1ebe:	c4 42 9b f5 db       	pdep   %r11,%r12,%r11
    1ec3:	f3 4d 0f b8 c3       	popcnt %r11,%r8
    1ec8:	f3 4d 0f bd db       	lzcnt  %r11,%r11
    1ecd:	c4 e2 b9 f7 c9       	shlx   %r8,%rcx,%rcx
    1ed2:	4c 29 de             	sub    %r11,%rsi
    1ed5:	83 e9 01             	sub    $0x1,%ecx
    1ed8:	48 83 c6 40          	add    $0x40,%rsi
    1edc:	c5 fb 92 f1          	kmovd  %ecx,%k6
    1ee0:	62 f1 ff 4e 7f 00    	vmovdqu16 %zmm0,(%rax){%k6}
    1ee6:	4a 8d 04 40          	lea    (%rax,%r8,2),%rax
    1eea:	e9 e4 f7 ff ff       	jmp    16d3 <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0xb3>
    1eef:	90                   	nop
    1ef0:	48 85 c0             	test   %rax,%rax
    1ef3:	0f 84 72 f8 ff ff    	je     176b <_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf16EPKcmPDs+0x14b>
    1ef9:	48 29 f8             	sub    %rdi,%rax
    1efc:	48 d1 f8             	sar    %rax
    1eff:	c5 f8 77             	vzeroupper
    1f02:	5b                   	pop    %rbx
    1f03:	41 5c                	pop    %r12
    1f05:	41 5d                	pop    %r13
    1f07:	41 5e                	pop    %r14
    1f09:	41 5f                	pop    %r15
    1f0b:	5d                   	pop    %rbp
    1f0c:	c3                   	ret
    1f0d:	90                   	nop
    1f0e:	66 90                	xchg   %ax,%ax

Comparing LLVM 14 and GCC 11 with the latest code, I get that neither is better, and the speed difference between the two is within 10% (so +/- 10%).

authors: clausecker lemire

repo: simdutf/simdutf