From 1d86123fd5ae3bd1e11cae87e3b505ff24a5a2f6 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Wed, 19 Aug 2026 11:21:23 +0800 Subject: [PATCH] refactor(builtin): use a u16be pattern in unsafe_extract_byte REGRESSES - do not merge as-is. Converts the manual (b0 << 8) | b1 in both the ArrayView[Byte] and BytesView copies of unsafe_extract_byte. Measured: native 467ns -> 12.6us (~27x), wasm-gc +84%, js +37%. The pattern needs a fresh slice at the computed byte_index to replace only two byte reads, so the view construction dominates. --- builtin/bitstring.mbt | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/builtin/bitstring.mbt b/builtin/bitstring.mbt index c0f1f5adf7..29b12f6450 100644 --- a/builtin/bitstring.mbt +++ b/builtin/bitstring.mbt @@ -83,9 +83,7 @@ pub fn ArrayView::unsafe_extract_byte( (byte >> shift) & mask } else { // extract 16 bits at [byte_index, byte_index + 1] - let b0 = bs.unsafe_get(byte_index).to_uint() - let b1 = bs.unsafe_get(byte_index + 1).to_uint() - let data = (b0 << 8) | b1 + guard! bs[byte_index:] is [u16be(data), ..] // mask off the top bits let bit_mask = (1U << (16 - (offset & 7))) - 1 let data = data & bit_mask @@ -959,9 +957,7 @@ pub fn BytesView::unsafe_extract_byte( (byte >> shift) & mask } else { // extract 16 bits at [byte_index, byte_index + 1] - let b0 = bs.unsafe_get(byte_index).to_uint() - let b1 = bs.unsafe_get(byte_index + 1).to_uint() - let data = (b0 << 8) | b1 + guard! bs[byte_index:] is [u16be(data), ..] // mask off the top bits let bit_mask = (1U << (16 - (offset & 7))) - 1 let data = data & bit_mask