Skip to content

Optimize utf16 decoding - #165027

Open
ywxt wants to merge 1 commit into
rust-lang:mainfrom
ywxt:utf16-opt
Open

ywxt wants to merge 1 commit into
rust-lang:mainfrom
ywxt:utf16-opt

Conversation

@ywxt

@ywxt ywxt commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

This PR classifies UTF-16 code units and accumulates ASCII and BMP characters into blocks that can be processed with SIMD.

1. Overall

Platform Cases Improved Regressed Unchanged Median Mean Change range
x86-64 127 111 16 0 −40.21% −39.26% −98.20% to +43.16%
AArch64 127 105 22 0 −40.92% −39.89% −99.26% to +69.06%

2. Category

By Language/Input Type: x86-64

Category Cases Improved / Regressed Median Mean Change range
ASCII 10 10 / 0 −79.49% −67.31% −98.20% to −12.28%
CJK 10 7 / 3 −41.40% −34.13% −73.06% to +1.72%
CJK + ASCII 24 24 / 0 −51.16% −47.59% −74.54% to −12.40%
CJK + 5% emoji 8 7 / 1 −23.29% −18.67% −35.12% to +0.79%
Cyrillic, repeated character 8 5 / 3 −9.74% −15.21% −44.02% to +7.29%
Russian corpus 10 8 / 2 −21.65% −27.73% −75.97% to +13.34%
Emoji 8 5 / 3 −4.76% −0.95% −20.27% to +43.16%
Latin1, 1% 8 8 / 0 −22.93% −34.60% −75.86% to −4.45%
Latin1, 10% 10 9 / 1 −16.30% −20.80% −66.48% to +26.46%
Random 3% two-byte UTF-8 characters 8 8 / 0 −35.60% −35.67% −57.88% to −8.59%
10% unpaired surrogates 2 2 / 0 −67.08% −67.08% −69.30% to −64.87%
Invalid / ASCII 9 8 / 1 −97.33% −84.84% −97.56% to +12.13%
Invalid / CJK 9 8 / 1 −71.98% −58.82% −73.33% to +7.37%
Invalid / Russian 3 2 / 1 −43.79% −25.29% −44.12% to +12.05%

By Input Length: x86-64

Length Cases Improved / Regressed Median Mean Change range
4 12 7 / 5 −5.01% −10.50% −58.81% to +2.56%
8 12 9 / 3 −15.37% −15.40% −56.24% to +3.57%
16 12 12 / 0 −32.97% −29.38% −59.52% to −3.36%
30 12 11 / 1 −15.62% −21.74% −52.73% to +1.09%
40 12 8 / 4 −17.16% −15.06% −72.75% to +43.16%
100 12 12 / 0 −38.27% −42.02% −86.24% to −8.21%
1,000 12 12 / 0 −49.65% −51.72% −94.49% to −16.13%
100,000 43 40 / 3 −71.98% −64.09% −98.20% to +12.13%

By Language/Input Type: AArch64

Category Cases Improved / Regressed Median Mean Change range
ASCII 10 8 / 2 −76.25% −58.16% −99.26% to +18.31%
CJK 10 8 / 2 −40.71% −36.11% −78.19% to +6.47%
CJK + ASCII 24 24 / 0 −57.22% −49.55% −78.04% to −0.42%
CJK + 5% emoji 8 5 / 3 −20.74% −15.85% −44.90% to +18.93%
Cyrillic, repeated character 8 5 / 3 −17.29% −16.93% −47.64% to +11.44%
Russian corpus 10 7 / 3 −37.65% −35.69% −81.40% to +10.48%
Emoji 8 4 / 4 +0.52% +5.28% −30.10% to +69.06%
Latin1, 1% 8 8 / 0 −22.19% −31.96% −74.48% to −1.78%
Latin1, 10% 10 9 / 1 −27.34% −28.18% −78.72% to +20.58%
Random 3% two-byte UTF-8 characters 8 6 / 2 −19.66% −23.95% −59.65% to +17.90%
10% unpaired surrogates 2 2 / 0 −79.66% −79.66% −82.82% to −76.51%
Invalid / ASCII 9 8 / 1 −97.86% −85.74% −99.00% to +11.94%
Invalid / CJK 9 8 / 1 −71.86% −61.70% −78.19% to +9.06%
Invalid / Russian 3 3 / 0 −60.87% −47.16% −61.01% to −19.60%

By Input Length: AArch64

Length Cases Improved / Regressed Median Mean Change range
4 12 5 / 7 +1.13% −6.12% −65.77% to +3.76%
8 12 6 / 6 +0.40% −3.55% −56.10% to +18.31%
16 12 11 / 1 −18.55% −27.84% −70.00% to +9.89%
30 12 10 / 2 −32.77% −27.85% −61.91% to +18.93%
40 12 8 / 4 −22.00% −15.58% −68.38% to +69.06%
100 12 12 / 0 −39.42% −40.82% −84.12% to −0.74%
1,000 12 12 / 0 −59.24% −54.03% −95.25% to −7.91%
100,000 43 41 / 2 −76.51% −68.75% −99.26% to +11.94%

3. Regression

Additional Reallocation

Compared to main, reserve may trigger an additional reallocation.

All cases below use strict from_utf16. Times are in ns.

Case x86 main → current Change AArch64 main → current Change
emoji_0040 125.40 → 179.52 +43.16% 106.27 → 179.66 +69.06%
latin10pct_0040 123.68 → 156.41 +26.46% 118.88 → 143.35 +20.58%
cyrillic_words_0040 151.92 → 172.19 +13.34% 143.29 → 158.30 +10.48%
cyrillic_0040 161.88 → 173.68 +7.29% 143.57 → 159.99 +11.44%

Small Sequence

On small slices, there are regressions.

Platform Benchmark main → current time (ns) Time change Instruction count change Cycle count change
x86 cyrillic_0008 44.00 → 45.57 +3.57% +3.83% +3.43%
AArch64 ascii_0008 27.42 → 32.44 +18.31% −13.13% +4.01%
AArch64 cyrillic_0008 38.77 → 40.87 +5.42% −1.01% +6.10%

Error at Beginning

There is SIMD loading for long sequences.

Platform Benchmark main time (ns) Current time (ns) Time change
x86 err_ascii_start_100000 30.83 34.57 +12.13%
x86 err_cjk_start_100000 42.36 45.48 +7.37%
x86 err_cyrillic_words_start_100000 29.95 33.56 +12.05%
AArch64 err_ascii_start_100000 37.95 42.48 +11.94%
AArch64 err_cjk_start_100000 37.99 41.43 +9.06%
AArch64 err_cyrillic_words_start_100000 37.96 30.52 −19.60%

r? @Amanieu

Detailed benchmark results
Platform Benchmark API Main (ns) Current (ns) Change (%)
x86 bench_from_utf16_ascii_0004 strict 22.89 20.08 -12.27610310179118
x86 bench_from_utf16_ascii_0008 strict 29.38 22.46 -23.553437712729743
x86 bench_from_utf16_ascii_0016 strict 42.79 25.25 -40.990885720962844
x86 bench_from_utf16_ascii_0030 strict 65.65 32.23 -50.90632140137091
x86 bench_from_utf16_ascii_0040 strict 88.84 24.21 -72.74876181900045
x86 bench_from_utf16_ascii_0100 strict 195.0 26.84 -86.23589743589744
x86 bench_from_utf16_ascii_1000 strict 1706.66 94.11 -94.48572064734628
x86 bench_from_utf16_ascii_100000 strict 169645.73 7504.58 -95.57632249276182
x86 bench_from_utf16_cjk_0004 strict 51.38 51.99 1.1872323861424672
x86 bench_from_utf16_cjk_0008 strict 81.22 82.62 1.7237133710908736
x86 bench_from_utf16_cjk_0016 strict 122.18 69.83 -42.8466197413652
x86 bench_from_utf16_cjk_0030 strict 165.6 167.41 1.0929951690821227
x86 bench_from_utf16_cjk_0040 strict 215.11 175.9 -18.227883408488687
x86 bench_from_utf16_cjk_0100 strict 419.87 252.12 -39.95284254650249
x86 bench_from_utf16_cjk_1000 strict 2937.08 1521.36 -48.20161520966402
x86 bench_from_utf16_cjk_100000 strict 285166.6 138750.76 -51.343965246981924
x86 bench_from_utf16_cjk_ascii_0004 strict 23.07 20.21 -12.397052449068047
x86 bench_from_utf16_cjk_ascii_0008 strict 39.49 33.49 -15.193719929095973
x86 bench_from_utf16_cjk_ascii_0016 strict 112.67 77.95 -30.815656341528353
x86 bench_from_utf16_cjk_ascii_0030 strict 160.0 114.82 -28.237500000000004
x86 bench_from_utf16_cjk_ascii_0040 strict 204.16 171.3 -16.095219435736674
x86 bench_from_utf16_cjk_ascii_0100 strict 429.89 272.6 -36.588429598269315
x86 bench_from_utf16_cjk_ascii_1000 strict 3133.91 1532.61 -51.09591532622188
x86 bench_from_utf16_cjk_ascii_100000 strict 301109.57 146854.7 -51.22881680578932
x86 bench_from_utf16_cjk_emoji5pct_0004 strict 49.46 49.85 0.7885159725030233
x86 bench_from_utf16_cjk_emoji5pct_0008 strict 84.38 82.57 -2.145058070632855
x86 bench_from_utf16_cjk_emoji5pct_0016 strict 118.29 76.75 -35.11708512976583
x86 bench_from_utf16_cjk_emoji5pct_0030 strict 155.23 153.63 -1.0307285962764867
x86 bench_from_utf16_cjk_emoji5pct_0040 strict 202.95 172.16 -15.171224439517117
x86 bench_from_utf16_cjk_emoji5pct_0100 strict 430.91 289.74 -32.76090134830939
x86 bench_from_utf16_cjk_emoji5pct_1000 strict 2896.97 1986.99 -31.411440228928843
x86 bench_from_utf16_cjk_emoji5pct_100000 strict 279072.25 188265.42 -32.53882462337262
x86 bench_from_utf16_cyrillic_0004 strict 39.0 40.0 2.564102564102555
x86 bench_from_utf16_cyrillic_0008 strict 44.0 45.57 3.568181818181815
x86 bench_from_utf16_cyrillic_0016 strict 86.15 74.32 -13.731863029599545
x86 bench_from_utf16_cyrillic_0030 strict 122.28 115.26 -5.7409224730127555
x86 bench_from_utf16_cyrillic_0040 strict 161.88 173.68 7.28935013590315
x86 bench_from_utf16_cyrillic_0100 strict 359.76 249.27 -30.712141427618413
x86 bench_from_utf16_cyrillic_1000 strict 2603.89 1538.52 -40.91455476229794
x86 bench_from_utf16_cyrillic_100000 strict 258654.27 144787.22 -44.022876560282576
x86 bench_from_utf16_cyrillic_words_0004 strict 39.77 40.24 1.1817953231078704
x86 bench_from_utf16_cyrillic_words_0008 strict 43.67 42.85 -1.8777192580719082
x86 bench_from_utf16_cyrillic_words_0016 strict 89.53 71.08 -20.607617558360324
x86 bench_from_utf16_cyrillic_words_0030 strict 120.83 103.83 -14.06935363734172
x86 bench_from_utf16_cyrillic_words_0040 strict 151.92 172.19 13.342548709847302
x86 bench_from_utf16_cyrillic_words_0100 strict 321.66 248.65 -22.697879748803086
x86 bench_from_utf16_cyrillic_words_1000 strict 2568.71 1490.44 -41.97710134659031
x86 bench_from_utf16_cyrillic_words_100000 strict 251792.32 139569.53 -44.56958417159031
x86 bench_from_utf16_emoji_0004 strict 38.28 38.71 1.1233019853709392
x86 bench_from_utf16_emoji_0008 strict 40.12 41.03 2.2681954137587335
x86 bench_from_utf16_emoji_0016 strict 78.04 74.9 -4.02357765248591
x86 bench_from_utf16_emoji_0030 strict 109.8 103.77 -5.491803278688523
x86 bench_from_utf16_emoji_0040 strict 125.4 179.52 43.15789473684211
x86 bench_from_utf16_emoji_0100 strict 287.45 263.84 -8.213602365628814
x86 bench_from_utf16_emoji_1000 strict 2047.54 1717.24 -16.131552985533858
x86 bench_from_utf16_emoji_100000 strict 197878.83 157759.21 -20.274841932307762
x86 bench_from_utf16_err_ascii_end_100000 strict 169889.92 7542.78 -95.56019568435843
x86 bench_from_utf16_err_ascii_middle_100000 strict 84610.11 3802.6 -95.50573802586948
x86 bench_from_utf16_err_ascii_start_100000 strict 30.83 34.57 12.131041193642567
x86 bench_from_utf16_err_cjk_end_100000 strict 282211.07 139594.99 -50.53525363126259
x86 bench_from_utf16_err_cjk_middle_100000 strict 141039.0 70011.8 -50.35997135544069
x86 bench_from_utf16_err_cjk_start_100000 strict 42.36 45.48 7.365439093484416
x86 bench_from_utf16_err_cyrillic_words_end_100000 strict 248742.6 139807.1 -43.79446865957017
x86 bench_from_utf16_err_cyrillic_words_middle_100000 strict 125417.52 70086.22 -44.11767989033749
x86 bench_from_utf16_err_cyrillic_words_start_100000 strict 29.95 33.56 12.053422370617707
x86 bench_from_utf16_latin10pct_0004 strict 36.53 34.98 -4.243087872981121
x86 bench_from_utf16_latin10pct_0008 strict 39.16 32.44 -17.16036772216547
x86 bench_from_utf16_latin10pct_0016 strict 75.91 73.36 -3.3592412066921318
x86 bench_from_utf16_latin10pct_0030 strict 103.98 88.08 -15.291402192729375
x86 bench_from_utf16_latin10pct_0040 strict 123.68 156.41 26.463454075032324
x86 bench_from_utf16_latin10pct_0100 strict 252.62 213.61 -15.442166099279541
x86 bench_from_utf16_latin10pct_1000 strict 1991.03 1527.89 -23.26132705182744
x86 bench_from_utf16_latin10pct_100000 strict 189168.86 139411.84 -26.302965509228105
x86 bench_from_utf16_latin1pct_0004 strict 37.1 34.96 -5.768194070080868
x86 bench_from_utf16_latin1pct_0008 strict 38.14 32.21 -15.547981122181431
x86 bench_from_utf16_latin1pct_0016 strict 73.18 69.92 -4.4547690625854175
x86 bench_from_utf16_latin1pct_0030 strict 100.64 84.59 -15.94793322734499
x86 bench_from_utf16_latin1pct_0040 strict 126.33 88.55 -29.905802263911973
x86 bench_from_utf16_latin1pct_0100 strict 263.09 111.29 -57.69888631266866
x86 bench_from_utf16_latin1pct_1000 strict 1811.77 513.62 -71.6509269940445
x86 bench_from_utf16_latin1pct_100000 strict 178012.64 42976.3 -75.85772560869835
x86 bench_from_utf16_lossy_ascii_100000 lossy 420616.05 7550.3 -98.20494248852368
x86 bench_from_utf16_lossy_cjk_100000 lossy 531900.3 143288.67 -73.06099094134746
x86 bench_from_utf16_lossy_cjk_ascii_0004 lossy 53.68 22.11 -58.81147540983606
x86 bench_from_utf16_lossy_cjk_ascii_0008 lossy 82.67 36.18 -56.235635659852434
x86 bench_from_utf16_lossy_cjk_ascii_0016 lossy 173.36 74.71 -56.90470696815875
x86 bench_from_utf16_lossy_cjk_ascii_0030 lossy 278.52 131.66 -52.72870888984633
x86 bench_from_utf16_lossy_cjk_ascii_0040 lossy 366.95 182.51 -50.26297860743971
x86 bench_from_utf16_lossy_cjk_ascii_0100 lossy 704.29 258.3 -63.324766786409
x86 bench_from_utf16_lossy_cjk_ascii_1000 lossy 5774.76 1566.68 -72.87021451973762
x86 bench_from_utf16_lossy_cjk_ascii_100000 lossy 561768.9 143007.38 -74.54337895885656
x86 bench_from_utf16_lossy_cyrillic_words_100000 lossy 596637.1 143373.82 -75.96967738010257
x86 bench_from_utf16_lossy_err_ascii_end_100000 lossy 429511.85 10482.71 -97.55938980496114
x86 bench_from_utf16_lossy_err_ascii_middle_100000 lossy 427572.6 10518.84 -97.53987042200552
x86 bench_from_utf16_lossy_err_ascii_start_100000 lossy 425811.05 10631.31 -97.50327991723088
x86 bench_from_utf16_lossy_err_cjk_end_100000 lossy 534086.2 142460.87 -73.32624022114783
x86 bench_from_utf16_lossy_err_cjk_middle_100000 lossy 534044.3 142442.49 -73.3275891157344
x86 bench_from_utf16_lossy_err_cjk_start_100000 lossy 534901.6 143291.74 -73.2115701280385
x86 bench_from_utf16_lossy_latin10pct_100000 lossy 427839.85 143402.86 -66.48211708189409
x86 bench_from_utf16_lossy_lone10pct_100000 lossy 440199.4 135124.99 -69.30368601138484
x86 bench_from_utf16_rand3pct_0004 strict 22.13 20.23 -8.58563036601897
x86 bench_from_utf16_rand3pct_0008 strict 28.78 23.42 -18.62404447533009
x86 bench_from_utf16_rand3pct_0016 strict 42.18 25.22 -40.20862968231389
x86 bench_from_utf16_rand3pct_0030 strict 102.23 72.14 -29.433630049887515
x86 bench_from_utf16_rand3pct_0040 strict 123.5 85.23 -30.98785425101215
x86 bench_from_utf16_rand3pct_0100 strict 243.03 115.66 -52.40916759247829
x86 bench_from_utf16_rand3pct_1000 strict 1983.84 835.53 -57.883196225502054
x86 bench_from_utf16_rand3pct_100000 strict 191016.77 100834.84 -47.21152493574255
x86 bench_from_wide_ascii_100000 WTF-8 391478.95 7521.59 -98.07867319558305
x86 bench_from_wide_cjk_100000 WTF-8 490330.8 139026.0 -71.64648845228567
x86 bench_from_wide_cjk_ascii_0004 WTF-8 26.83 18.58 -30.74916138650764
x86 bench_from_wide_cjk_ascii_0008 WTF-8 54.84 31.78 -42.04959883296864
x86 bench_from_wide_cjk_ascii_0016 WTF-8 174.96 70.83 -59.5164609053498
x86 bench_from_wide_cjk_ascii_0030 WTF-8 192.96 109.87 -43.06073797678275
x86 bench_from_wide_cjk_ascii_0040 WTF-8 275.38 171.98 -37.54811533154188
x86 bench_from_wide_cjk_ascii_0100 WTF-8 609.44 254.41 -58.25511945392492
x86 bench_from_wide_cjk_ascii_1000 WTF-8 5196.57 1519.98 -70.75032184691055
x86 bench_from_wide_cjk_ascii_100000 WTF-8 511766.0 138766.2 -72.8848340843276
x86 bench_from_wide_cyrillic_words_100000 WTF-8 466567.1 139809.31 -70.03446878273243
x86 bench_from_wide_err_ascii_end_100000 WTF-8 397366.75 10441.08 -97.37243239400377
x86 bench_from_wide_err_ascii_middle_100000 WTF-8 395711.1 10572.18 -97.32830845533522
x86 bench_from_wide_err_ascii_start_100000 WTF-8 395049.95 10600.49 -97.31667096781052
x86 bench_from_wide_err_cjk_end_100000 WTF-8 495277.55 138785.37 -71.97826350094003
x86 bench_from_wide_err_cjk_middle_100000 WTF-8 495257.15 138765.48 -71.98112536083528
x86 bench_from_wide_err_cjk_start_100000 WTF-8 495513.25 138698.73 -72.0090774565564
x86 bench_from_wide_latin10pct_100000 WTF-8 383188.6 141969.51 -62.95048704476072
x86 bench_from_wide_lone10pct_100000 WTF-8 389640.8 136898.67 -64.86541707131286
aarch64 bench_from_utf16_ascii_0004 strict 22.18 22.43 1.1271415689810604
aarch64 bench_from_utf16_ascii_0008 strict 27.42 32.44 18.307804522246517
aarch64 bench_from_utf16_ascii_0016 strict 38.5 31.76 -17.506493506493502
aarch64 bench_from_utf16_ascii_0030 strict 66.53 38.9 -41.530136780399815
aarch64 bench_from_utf16_ascii_0040 strict 80.36 25.41 -68.37979094076655
aarch64 bench_from_utf16_ascii_0100 strict 163.11 25.91 -84.11501440745509
aarch64 bench_from_utf16_ascii_1000 strict 1405.22 66.75 -95.24985411536984
aarch64 bench_from_utf16_ascii_100000 strict 138086.29 4707.61 -96.59082013138307
aarch64 bench_from_utf16_cjk_0004 strict 44.12 45.07 2.153218495013598
aarch64 bench_from_utf16_cjk_0008 strict 72.78 72.18 -0.8244023083264551
aarch64 bench_from_utf16_cjk_0016 strict 108.82 64.74 -40.507259694909024
aarch64 bench_from_utf16_cjk_0030 strict 164.34 174.97 6.4682974321528475
aarch64 bench_from_utf16_cjk_0040 strict 264.94 168.54 -36.385596738884274
aarch64 bench_from_utf16_cjk_0100 strict 391.91 231.55 -40.917557602510776
aarch64 bench_from_utf16_cjk_1000 strict 2393.2 1228.27 -48.67666722380076
aarch64 bench_from_utf16_cjk_100000 strict 227160.33 108178.67 -52.37783375292684
aarch64 bench_from_utf16_cjk_ascii_0004 strict 23.16 22.78 -1.6407599309153698
aarch64 bench_from_utf16_cjk_ascii_0008 strict 40.19 40.02 -0.42299079372977166
aarch64 bench_from_utf16_cjk_ascii_0016 strict 148.92 64.79 -56.49341928552243
aarch64 bench_from_utf16_cjk_ascii_0030 strict 158.66 121.12 -23.660658010840784
aarch64 bench_from_utf16_cjk_ascii_0040 strict 241.28 174.97 -27.482592838196286
aarch64 bench_from_utf16_cjk_ascii_0100 strict 373.31 231.77 -37.91486967935496
aarch64 bench_from_utf16_cjk_ascii_1000 strict 2763.88 1138.07 -58.82346556290432
aarch64 bench_from_utf16_cjk_ascii_100000 strict 260678.0 109633.75 -57.94284519598892
aarch64 bench_from_utf16_cjk_emoji5pct_0004 strict 44.06 45.26 2.723558783477076
aarch64 bench_from_utf16_cjk_emoji5pct_0008 strict 73.1 74.0 1.2311901504788114
aarch64 bench_from_utf16_cjk_emoji5pct_0016 strict 148.16 81.64 -44.89740820734342
aarch64 bench_from_utf16_cjk_emoji5pct_0030 strict 158.5 188.51 18.933753943217656
aarch64 bench_from_utf16_cjk_emoji5pct_0040 strict 209.84 176.17 -16.045558520777746
aarch64 bench_from_utf16_cjk_emoji5pct_0100 strict 379.72 283.16 -25.429263667965873
aarch64 bench_from_utf16_cjk_emoji5pct_1000 strict 2780.19 1949.52 -29.878173793877394
aarch64 bench_from_utf16_cjk_emoji5pct_100000 strict 267669.33 178137.0 -33.44885646779181
aarch64 bench_from_utf16_cyrillic_0004 strict 36.14 37.5 3.763143331488661
aarch64 bench_from_utf16_cyrillic_0008 strict 38.77 40.87 5.416559195254056
aarch64 bench_from_utf16_cyrillic_0016 strict 72.04 65.6 -8.939478067740158
aarch64 bench_from_utf16_cyrillic_0030 strict 175.13 113.06 -35.44224290527037
aarch64 bench_from_utf16_cyrillic_0040 strict 143.57 159.99 11.436929720693744
aarch64 bench_from_utf16_cyrillic_0100 strict 302.98 225.31 -25.63535546900786
aarch64 bench_from_utf16_cyrillic_1000 strict 2039.13 1255.9 -38.41000818976721
aarch64 bench_from_utf16_cyrillic_100000 strict 194880.4 102032.5 -47.64352905679586
aarch64 bench_from_utf16_cyrillic_words_0004 strict 37.58 38.59 2.6875997871208313
aarch64 bench_from_utf16_cyrillic_words_0008 strict 39.53 40.89 3.4404249936756948
aarch64 bench_from_utf16_cyrillic_words_0016 strict 77.83 63.71 -18.142104586920205
aarch64 bench_from_utf16_cyrillic_words_0030 strict 160.82 96.93 -39.72764581519711
aarch64 bench_from_utf16_cyrillic_words_0040 strict 143.29 158.3 10.475259962314198
aarch64 bench_from_utf16_cyrillic_words_0100 strict 330.81 213.15 -35.56724403736283
aarch64 bench_from_utf16_cyrillic_words_1000 strict 2817.98 1096.93 -61.07388980759267
aarch64 bench_from_utf16_cyrillic_words_100000 strict 274614.67 109513.33 -60.12109258401963
aarch64 bench_from_utf16_emoji_0004 strict 37.49 38.16 1.7871432381968422
aarch64 bench_from_utf16_emoji_0008 strict 37.87 39.88 5.307631370477961
aarch64 bench_from_utf16_emoji_0016 strict 66.02 72.55 9.890942138745839
aarch64 bench_from_utf16_emoji_0030 strict 141.28 98.75 -30.103340883352214
aarch64 bench_from_utf16_emoji_0040 strict 106.27 179.66 69.05994165804084
aarch64 bench_from_utf16_emoji_0100 strict 258.88 256.97 -0.7377935723114848
aarch64 bench_from_utf16_emoji_1000 strict 1615.4 1487.55 -7.91444843382445
aarch64 bench_from_utf16_emoji_100000 strict 152399.67 144694.33 -5.056008323377615
aarch64 bench_from_utf16_err_ascii_end_100000 strict 138076.86 4785.53 -96.53415496267803
aarch64 bench_from_utf16_err_ascii_middle_100000 strict 69083.57 2434.54 -96.47594934656676
aarch64 bench_from_utf16_err_ascii_start_100000 strict 37.95 42.48 11.936758893280608
aarch64 bench_from_utf16_err_cjk_end_100000 strict 227143.75 97600.8 -57.031263241889775
aarch64 bench_from_utf16_err_cjk_middle_100000 strict 114254.5 48879.1 -57.21910296749799
aarch64 bench_from_utf16_err_cjk_start_100000 strict 37.99 41.43 9.055014477494062
aarch64 bench_from_utf16_err_cyrillic_words_end_100000 strict 275997.67 108008.12 -60.866292820515476
aarch64 bench_from_utf16_err_cyrillic_words_middle_100000 strict 137868.86 53757.72 -61.00807680574134
aarch64 bench_from_utf16_err_cyrillic_words_start_100000 strict 37.96 30.52 -19.599578503688097
aarch64 bench_from_utf16_latin10pct_0004 strict 35.59 34.64 -2.6692891261590357
aarch64 bench_from_utf16_latin10pct_0008 strict 36.88 33.65 -8.758134490238623
aarch64 bench_from_utf16_latin10pct_0016 strict 66.03 63.99 -3.0895047705588374
aarch64 bench_from_utf16_latin10pct_0030 strict 156.01 85.42 -45.24709954490096
aarch64 bench_from_utf16_latin10pct_0040 strict 118.88 143.35 20.58378196500672
aarch64 bench_from_utf16_latin10pct_0100 strict 221.92 165.18 -25.567772170151404
aarch64 bench_from_utf16_latin10pct_1000 strict 1521.09 1078.34 -29.10741639219244
aarch64 bench_from_utf16_latin10pct_100000 strict 143320.67 97756.9 -31.79148548496181
aarch64 bench_from_utf16_latin1pct_0004 strict 35.59 34.65 -2.6411913458836866
aarch64 bench_from_utf16_latin1pct_0008 strict 36.78 33.66 -8.482871125611757
aarch64 bench_from_utf16_latin1pct_0016 strict 66.37 65.19 -1.777911707096591
aarch64 bench_from_utf16_latin1pct_0030 strict 104.61 82.91 -20.7437147500239
aarch64 bench_from_utf16_latin1pct_0040 strict 118.62 90.58 -23.638509526218176
aarch64 bench_from_utf16_latin1pct_0100 strict 218.28 104.84 -51.96994685724757
aarch64 bench_from_utf16_latin1pct_1000 strict 1599.92 448.76 -71.95109755487775
aarch64 bench_from_utf16_latin1pct_100000 strict 146190.67 37312.35 -74.4769279735841
aarch64 bench_from_utf16_lossy_ascii_100000 lossy 587893.0 4370.9 -99.2565143657094
aarch64 bench_from_utf16_lossy_cjk_100000 lossy 456071.0 99453.3 -78.19346110583659
aarch64 bench_from_utf16_lossy_cjk_ascii_0004 lossy 68.88 23.58 -65.76655052264809
aarch64 bench_from_utf16_lossy_cjk_ascii_0008 lossy 97.27 42.7 -56.10157294129742
aarch64 bench_from_utf16_lossy_cjk_ascii_0016 lossy 231.87 69.56 -70.00043127614612
aarch64 bench_from_utf16_lossy_cjk_ascii_0030 lossy 333.22 126.92 -61.91104975691735
aarch64 bench_from_utf16_lossy_cjk_ascii_0040 lossy 423.82 159.24 -62.427445613703924
aarch64 bench_from_utf16_lossy_cjk_ascii_0100 lossy 676.18 256.45 -62.0737081842113
aarch64 bench_from_utf16_lossy_cjk_ascii_1000 lossy 5268.82 1255.57 -76.16980652214347
aarch64 bench_from_utf16_lossy_cjk_ascii_100000 lossy 499336.0 109661.33 -78.03856921992406
aarch64 bench_from_utf16_lossy_cyrillic_words_100000 lossy 589271.0 109620.44 -81.39727901084561
aarch64 bench_from_utf16_lossy_err_ascii_end_100000 lossy 589359.0 5883.79 -99.00166282350825
aarch64 bench_from_utf16_lossy_err_ascii_middle_100000 lossy 589389.0 5934.36 -98.99313356713478
aarch64 bench_from_utf16_lossy_err_ascii_start_100000 lossy 589232.0 5907.2 -98.99747467890407
aarch64 bench_from_utf16_lossy_err_cjk_end_100000 lossy 456162.0 99514.0 -78.1845046277419
aarch64 bench_from_utf16_lossy_err_cjk_middle_100000 lossy 456336.5 99515.9 -78.19243036662638
aarch64 bench_from_utf16_lossy_err_cjk_start_100000 lossy 456155.0 99515.7 -78.18379717420613
aarch64 bench_from_utf16_lossy_latin10pct_100000 lossy 470284.5 100078.5 -78.71958357122125
aarch64 bench_from_utf16_lossy_lone10pct_100000 lossy 566964.0 97415.7 -82.8180096090757
aarch64 bench_from_utf16_rand3pct_0004 strict 22.19 22.44 1.126633618747186
aarch64 bench_from_utf16_rand3pct_0008 strict 27.43 32.34 17.900109369303685
aarch64 bench_from_utf16_rand3pct_0016 strict 38.42 31.14 -18.948464341488812
aarch64 bench_from_utf16_rand3pct_0030 strict 109.55 98.93 -9.694203560018245
aarch64 bench_from_utf16_rand3pct_0040 strict 120.89 96.27 -20.36562163950699
aarch64 bench_from_utf16_rand3pct_0100 strict 233.85 127.43 -45.50780414795808
aarch64 bench_from_utf16_rand3pct_1000 strict 1844.72 744.33 -59.650787111323126
aarch64 bench_from_utf16_rand3pct_100000 strict 167858.0 73099.61 -56.45151854543722
aarch64 bench_from_wide_ascii_100000 WTF-8 276051.33 4371.46 -98.41643219034663
aarch64 bench_from_wide_cjk_100000 WTF-8 346784.5 97561.9 -71.86670684531748
aarch64 bench_from_wide_cjk_ascii_0004 WTF-8 28.03 23.51 -16.125579735997142
aarch64 bench_from_wide_cjk_ascii_0008 WTF-8 49.19 39.55 -19.597479162431387
aarch64 bench_from_wide_cjk_ascii_0016 WTF-8 172.57 62.71 -63.661123022541574
aarch64 bench_from_wide_cjk_ascii_0030 WTF-8 234.98 113.81 -51.56609073112606
aarch64 bench_from_wide_cjk_ascii_0040 WTF-8 272.67 153.31 -43.774525983789935
aarch64 bench_from_wide_cjk_ascii_0100 WTF-8 505.24 230.39 -54.39988916158658
aarch64 bench_from_wide_cjk_ascii_1000 WTF-8 3950.33 1127.21 -71.46542187614706
aarch64 bench_from_wide_cjk_ascii_100000 WTF-8 381653.0 108169.78 -71.65755804356313
aarch64 bench_from_wide_cyrillic_words_100000 WTF-8 480036.12 107991.22 -77.50352202663416
aarch64 bench_from_wide_err_ascii_end_100000 WTF-8 277695.67 6003.78 -97.83800013878502
aarch64 bench_from_wide_err_ascii_middle_100000 WTF-8 277706.67 5944.38 -97.85947525135064
aarch64 bench_from_wide_err_ascii_start_100000 WTF-8 277700.0 5909.0 -97.87216420597767
aarch64 bench_from_wide_err_cjk_end_100000 WTF-8 346856.0 97668.0 -71.8419171068109
aarch64 bench_from_wide_err_cjk_middle_100000 WTF-8 346861.0 97608.4 -71.85950568095001
aarch64 bench_from_wide_err_cjk_start_100000 WTF-8 346841.5 97594.6 -71.86190233867632
aarch64 bench_from_wide_latin10pct_100000 WTF-8 440037.0 99273.56 -77.43972438681293
aarch64 bench_from_wide_lone10pct_100000 WTF-8 415860.0 97703.2 -76.50574712643679

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Oct 27, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants